add test_bist with mila
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Tue, 23 Dec 2014 19:41:35 +0000 (20:41 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Tue, 23 Dec 2014 19:41:35 +0000 (20:41 +0100)
test/test_bist.py [new file with mode: 0644]

diff --git a/test/test_bist.py b/test/test_bist.py
new file mode 100644 (file)
index 0000000..00b3810
--- /dev/null
@@ -0,0 +1,77 @@
+import time
+import argparse
+from config import *
+
+sector_size = 512
+
+class SATABISTDriver:
+       def __init__(self, regs):
+               self.regs = regs
+               self.last_sector = 0
+               self.last_time = time.time()
+               self.last_errors = 0
+               self.mode = "rw"
+
+       def set_mode(self, mode):
+               self.mode = mode
+               self.regs.bist_write_only.write(0)
+               self.regs.bist_read_only.write(0)
+               if mode == "wr":
+                       self.regs.bist_write_only.write(1)
+               if mode == "rd":
+                       self.regs.bist_read_only.write(1)
+
+       def start(self, sector, count, mode):
+               self.set_mode(mode)
+               self.regs.bist_start_sector.write(sector)
+               self.regs.bist_count.write(count)
+               self.regs.bist_stop.write(0)
+               self.regs.bist_start.write(1)
+
+       def stop(self):
+               self.regs.bist_stop.write(1)
+
+       def show_status(self):
+               errors = self.regs.bist_errors.read() - self.last_errors
+               self.last_errors += errors
+
+               sector = self.regs.bist_sector.read()
+               n = sector - self.last_sector
+               self.last_sector = sector
+
+               t = self.last_time - time.time()
+               self.last_time = time.time()
+
+               if self.mode in ["wr", "rd"]:
+                       speed_mult = 1
+               else:
+                       speed_mult = 2
+               print("%4.2f MB/sec errors=%d sector=%d" %(n*sector_size*speed_mult/(1024*1024), errors, sector))
+
+
+def _get_args():
+       parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
+               description="""\
+SATA BIST utility.
+""")
+       parser.add_argument("-s", "--sector", default=0, help="BIST start sector")
+       parser.add_argument("-c", "--count", default=4, help="BIST count (number of sectors per transaction)")
+       parser.add_argument("-m", "--mode", default="rw", help="BIST mode (rw, wr, rd")
+
+       return parser.parse_args()
+
+if __name__ == "__main__":
+       args = _get_args()
+       wb.open()
+       ###
+       bist = SATABISTDriver(wb.regs)
+       try:
+               bist.start(int(args.sector), int(args.count), args.mode)
+               while True:
+                       bist.show_status()
+                       time.sleep(1)
+       except KeyboardInterrupt:
+               pass
+       bist.stop()
+       ###
+       wb.close()