8 def __init__(self
, regs
):
11 self
.last_time
= time
.time()
15 def set_mode(self
, mode
):
17 self
.regs
.bist_write_only
.write(0)
18 self
.regs
.bist_read_only
.write(0)
20 self
.regs
.bist_write_only
.write(1)
22 self
.regs
.bist_read_only
.write(1)
24 def start(self
, sector
, count
, mode
):
26 self
.regs
.bist_start_sector
.write(sector
)
27 self
.regs
.bist_count
.write(count
)
28 self
.regs
.bist_stop
.write(0)
29 self
.regs
.bist_start
.write(1)
32 self
.regs
.bist_stop
.write(1)
34 def show_status(self
):
35 errors
= self
.regs
.bist_errors
.read() - self
.last_errors
36 self
.last_errors
+= errors
38 sector
= self
.regs
.bist_sector
.read()
39 n
= sector
- self
.last_sector
40 self
.last_sector
= sector
42 t
= self
.last_time
- time
.time()
43 self
.last_time
= time
.time()
45 if self
.mode
in ["wr", "rd"]:
49 print("%4.2f MB/sec errors=%d sector=%d" %(n
*sector_size
*speed_mult
/(1024*1024), errors
, sector
))
53 parser
= argparse
.ArgumentParser(formatter_class
=argparse
.RawDescriptionHelpFormatter
,
57 parser
.add_argument("-s", "--sector", default
=0, help="BIST start sector")
58 parser
.add_argument("-c", "--count", default
=4, help="BIST count (number of sectors per transaction)")
59 parser
.add_argument("-m", "--mode", default
="rw", help="BIST mode (rw, wr, rd")
61 return parser
.parse_args()
63 if __name__
== "__main__":
67 bist
= SATABISTDriver(wb
.regs
)
69 bist
.start(int(args
.sector
), int(args
.count
), args
.mode
)
73 except KeyboardInterrupt: