Пример #1
0
def test_open_close():
    print("Starting open/close test...")

    # Open aligned base
    mmio = periphery.MMIO(CONTROL_MODULE_BASE, PAGE_SIZE)
    # Check properties
    assert mmio.base == CONTROL_MODULE_BASE
    assert mmio.size == PAGE_SIZE
    # Try to write immutable properties
    with AssertRaises(AttributeError):
        mmio.base = 1000
    with AssertRaises(AttributeError):
        mmio.size = 1000
    mmio.close()

    # Open unaligned base
    mmio = periphery.MMIO(CONTROL_MODULE_BASE + 123, PAGE_SIZE)
    # Check properties
    assert mmio.base == CONTROL_MODULE_BASE + 123
    assert mmio.size == PAGE_SIZE
    # Read out of bounds
    with AssertRaises(ValueError):
        mmio.read32(PAGE_SIZE - 3)
    with AssertRaises(ValueError):
        mmio.read32(PAGE_SIZE - 2)
    with AssertRaises(ValueError):
        mmio.read32(PAGE_SIZE - 1)
    with AssertRaises(ValueError):
        mmio.read32(PAGE_SIZE)
    mmio.close()

    print("Open/close test passed.")
Пример #2
0
def test_open_close():
    ptest()

    # Open aligned base
    mmio = periphery.MMIO(CONTROL_MODULE_BASE, PAGE_SIZE)
    # Check properties
    passert("property base", mmio.base == CONTROL_MODULE_BASE)
    passert("property size", mmio.size == PAGE_SIZE)
    # Try to write immutable properties
    with AssertRaises("write immutable", AttributeError):
        mmio.base = 1000
    with AssertRaises("write immutable", AttributeError):
        mmio.size = 1000
    mmio.close()

    # Open unaligned base
    mmio = periphery.MMIO(CONTROL_MODULE_BASE + 123, PAGE_SIZE)
    # Check properties
    passert("property base", mmio.base == CONTROL_MODULE_BASE + 123)
    passert("property size", mmio.size == PAGE_SIZE)
    # Read out of bounds
    with AssertRaises("read 1 byte over", ValueError):
        mmio.read32(PAGE_SIZE - 3)
    with AssertRaises("read 2 bytes over", ValueError):
        mmio.read32(PAGE_SIZE - 2)
    with AssertRaises("read 3 bytes over", ValueError):
        mmio.read32(PAGE_SIZE - 1)
    with AssertRaises("read 4 bytes over", ValueError):
        mmio.read32(PAGE_SIZE)
    mmio.close()
Пример #3
0
def test_loopback():
    print("Starting loopback test...")

    # Open control module
    mmio = periphery.MMIO(CONTROL_MODULE_BASE, PAGE_SIZE)

    # Read and compare USB VID/PID with read32()
    assert mmio.read32(USB_VID_PID_OFFSET) == USB_VID_PID
    # Read and compare USB VID/PID with bytes read
    data = mmio.read(USB_VID_PID_OFFSET, 4)
    data = bytearray(data)
    assert data[0] == USB_VID_PID & 0xff
    assert data[1] == (USB_VID_PID >> 8) & 0xff
    assert data[2] == (USB_VID_PID >> 16) & 0xff
    assert data[3] == (USB_VID_PID >> 24) & 0xff

    mmio.close()

    # Open RTC subsystem
    mmio = periphery.MMIO(RTCSS_BASE, PAGE_SIZE)

    # Disable write protection
    mmio.write32(RTC_KICK0R_REG_OFFSET, 0x83E70B13)
    mmio.write32(RTC_KICK1R_REG_OFFSET, 0x95A4F1E0)

    # Write/Read RTC Scratch2 Register
    mmio.write32(RTC_SCRATCH2_REG_OFFSET, 0xdeadbeef)
    assert mmio.read32(RTC_SCRATCH2_REG_OFFSET) == 0xdeadbeef

    # Write/Read RTC Scratch2 Register with bytes write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, b"\xaa\xbb\xcc\xdd")
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    assert data == b"\xaa\xbb\xcc\xdd"

    # Write/Read RTC Scratch2 Register with bytearray write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, bytearray(b"\xbb\xcc\xdd\xee"))
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    assert data == b"\xbb\xcc\xdd\xee"

    # Write/Read RTC Scratch2 Register with list write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, [0xcc, 0xdd, 0xee, 0xff])
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    assert data == b"\xcc\xdd\xee\xff"

    # Write/Read RTC Scratch2 Register with 16-bit write
    mmio.write16(RTC_SCRATCH2_REG_OFFSET, 0xaabb)
    assert mmio.read16(RTC_SCRATCH2_REG_OFFSET) == 0xaabb

    # Write/Read RTC Scratch2 Register with 8-bit write
    mmio.write16(RTC_SCRATCH2_REG_OFFSET, 0xab)
    assert mmio.read8(RTC_SCRATCH2_REG_OFFSET) == 0xab

    mmio.close()

    print("Loopback test passed.")
Пример #4
0
def test_loopback():
    ptest()

    # Open control module
    mmio = periphery.MMIO(CONTROL_MODULE_BASE, PAGE_SIZE)

    # Read and compare USB VID/PID with read32()
    passert("compare USB VID/PID", mmio.read32(USB_VID_PID_OFFSET) == USB_VID_PID)
    # Read and compare USB VID/PID with bytes read
    data = mmio.read(USB_VID_PID_OFFSET, 4)
    data = bytearray(data)
    passert("compare byte 1", data[0] == USB_VID_PID & 0xff)
    passert("compare byte 2", data[1] == (USB_VID_PID >> 8) & 0xff)
    passert("compare byte 3", data[2] == (USB_VID_PID >> 16) & 0xff)
    passert("compare byte 4", data[3] == (USB_VID_PID >> 24) & 0xff)

    mmio.close()

    # Open RTC subsystem
    mmio = periphery.MMIO(RTCSS_BASE, PAGE_SIZE)

    # Disable write protection
    mmio.write32(RTC_KICK0R_REG_OFFSET, 0x83E70B13)
    mmio.write32(RTC_KICK1R_REG_OFFSET, 0x95A4F1E0)

    # Write/Read RTC Scratch2 Register
    mmio.write32(RTC_SCRATCH2_REG_OFFSET, 0xdeadbeef)
    passert("compare write 32-bit uint and readback", mmio.read32(RTC_SCRATCH2_REG_OFFSET) == 0xdeadbeef)

    # Write/Read RTC Scratch2 Register with bytes write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, b"\xaa\xbb\xcc\xdd")
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    passert("compare write 4-byte bytes and readback", data == b"\xaa\xbb\xcc\xdd")

    # Write/Read RTC Scratch2 Register with bytearray write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, bytearray(b"\xbb\xcc\xdd\xee"))
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    passert("compare write 4-byte bytearray and readback", data == b"\xbb\xcc\xdd\xee")

    # Write/Read RTC Scratch2 Register with list write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, [0xcc, 0xdd, 0xee, 0xff])
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    passert("compare write 4-byte list and readback", data == b"\xcc\xdd\xee\xff")

    # Write/Read RTC Scratch2 Register with 16-bit write
    mmio.write16(RTC_SCRATCH2_REG_OFFSET, 0xaabb)
    passert("compare write 16-bit uint and readback", mmio.read16(RTC_SCRATCH2_REG_OFFSET) == 0xaabb)

    # Write/Read RTC Scratch2 Register with 8-bit write
    mmio.write8(RTC_SCRATCH2_REG_OFFSET, 0xab)
    passert("compare write 8-bit uint and readback", mmio.read8(RTC_SCRATCH2_REG_OFFSET) == 0xab)

    mmio.close()
Пример #5
0
def test_loopback():
    print("Starting loopback test...")

    # Open control module
    mmio = periphery.MMIO(CONTROL_MODULE_BASE, PAGE_SIZE)

    # Read and compare USB VID/PID with read32()
    assert mmio.read32(USB_VID_PID_OFFSET) == USB_VID_PID
    # Read and compare USB VID/PID with bytes read
    data = mmio.read(USB_VID_PID_OFFSET, 4)
    data = bytearray(data)
    assert data[0] == USB_VID_PID & 0xff
    assert data[1] == (USB_VID_PID >> 8) & 0xff
    assert data[2] == (USB_VID_PID >> 16) & 0xff
    assert data[3] == (USB_VID_PID >> 24) & 0xff

    mmio.close()

    # Open RTC subsystem
    mmio = periphery.MMIO(RTCSS_BASE, PAGE_SIZE)

    # Write/Read RTC Scratch2 Register
    mmio.write32(RTC_SCRATCH2_REG_OFFSET, 0xdeadbeef)
    assert mmio.read32(RTC_SCRATCH2_REG_OFFSET) == 0xdeadbeef

    # Write/Read RTC Scratch2 Register with bytes write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, b"\xaa\xbb\xcc\xdd")
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    assert data == b"\xaa\xbb\xcc\xdd"

    # Write/Read RTC Scratch2 Register with bytearray write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, bytearray(b"\xaa\xbb\xcc\xdd"))
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    assert data == b"\xaa\xbb\xcc\xdd"

    # Write/Read RTC Scratch2 Register with list write
    mmio.write(RTC_SCRATCH2_REG_OFFSET, [0xaa, 0xbb, 0xcc, 0xdd])
    data = mmio.read(RTC_SCRATCH2_REG_OFFSET, 4)
    assert data == b"\xaa\xbb\xcc\xdd"

    mmio.close()

    print("Loopback test passed.")
Пример #6
0
def test_interactive():
    print("Starting interactive test...")

    mmio = periphery.MMIO(RTCSS_BASE, PAGE_SIZE)

    # Check tostring
    print("MMIO description: {}".format(str(mmio)))
    assert raw_input("MMIO description looks ok? y/n ") == "y"

    print("Waiting for seconds ones digit to reset to 0...\n")

    # Wait until seconds low go to 0, so we don't have to deal with
    # overflows in comparing times
    tic = time.time()
    while mmio.read32(0x00) & 0xf != 0:
        periphery.sleep(1)
        assert (time.time() - tic) < 12

    # Compare passage of OS time with RTC time

    tic = time.time()
    rtc_tic = mmio.read32(0x00) & 0xf

    bcd2dec = lambda x: 10 * ((x >> 4) & 0xf) + (x & 0xf)

    print("Date: {:04d}-{:02d}-{:02d}".format(
        2000 + bcd2dec(mmio.read32(0x14)), bcd2dec(mmio.read32(0x10)),
        bcd2dec(mmio.read32(0x0c))))
    print("Time: {:02d}:{:02d}:{:02d}".format(
        bcd2dec(mmio.read32(0x08) & 0x7f), bcd2dec(mmio.read32(0x04)),
        bcd2dec(mmio.read32(0x00))))

    periphery.sleep(3)

    print("Date: {:04d}-{:02d}-{:02d}".format(
        2000 + bcd2dec(mmio.read32(0x14)), bcd2dec(mmio.read32(0x10)),
        bcd2dec(mmio.read32(0x0c))))
    print("Time: {:02d}:{:02d}:{:02d}".format(
        bcd2dec(mmio.read32(0x08) & 0x7f), bcd2dec(mmio.read32(0x04)),
        bcd2dec(mmio.read32(0x00))))

    toc = time.time()
    rtc_toc = mmio.read32(0x00) & 0xf

    assert (toc - tic) > 2
    assert (rtc_toc - rtc_tic) > 2

    mmio.close()

    print("Interactive test passed.")
Пример #7
0
def test_interactive():
    print("Starting interactive test...")

    mmio = periphery.MMIO(RTCSS_BASE, PAGE_SIZE)
    print("Waiting for seconds ones digit to reset to 0...\n")

    # Wait until seconds low go to 0, so we don't have to deal with
    # overflows in comparing times
    tic = time.time()
    while mmio.read32(0x00) & 0xf != 0:
        periphery.sleep(1)
        assert (time.time() - tic) < 12

    # Compare passage of OS time with RTC time

    tic = time.time()
    rtc_tic = mmio.read32(0x00) & 0xf

    bcd2dec = lambda x: 10 * ((x >> 4) & 0xf) + (x & 0xf)

    print("Data: %04d-%02d-%02d" %
          (2000 + bcd2dec(mmio.read32(0x14)), bcd2dec(
              mmio.read32(0x10)), bcd2dec(mmio.read32(0x0c))))
    print("Time: %02d:%02d:%02d" %
          (bcd2dec(mmio.read32(0x08) & 0x7f), bcd2dec(
              mmio.read32(0x04)), bcd2dec(mmio.read32(0x00))))

    periphery.sleep(3)

    print("Data: %04d-%02d-%02d" %
          (2000 + bcd2dec(mmio.read32(0x14)), bcd2dec(
              mmio.read32(0x10)), bcd2dec(mmio.read32(0x0c))))
    print("Time: %02d:%02d:%02d" %
          (bcd2dec(mmio.read32(0x08) & 0x7f), bcd2dec(
              mmio.read32(0x04)), bcd2dec(mmio.read32(0x00))))

    toc = time.time()
    rtc_toc = mmio.read32(0x00) & 0xf

    assert (toc - tic) > 2
    assert (rtc_toc - rtc_tic) > 2

    mmio.close()

    print("Interactive test passed.")