blob: 1fc49d8f5674f8e25cd5aab7d28147ed030984b3 [file] [log] [blame]
*** Settings ***
Library tap_helper.py # used for 'Precofingure Macos' keyword
*** Variables ***
${UART} sysbus.uart0
${PROMPT} \#${SPACE}
${I2C_ECHO_ADDRESS} 0x10
${I2C_SENSOR_ADDRESS} 0x31
${GPIO_NUMBER} 967
${GPIO_DIRECTORY} /sys/class/gpio/gpio${GPIO_NUMBER}
${GPIO_PERIPHERIAL} gpio.led0
${FLASH_MOUNT} /mnt/spi_flash
${SAMPLE_FILENAME} data.bin
${MTD0_DEV} /dev/mtd0
${MTD0_BLOCK_DEV} /dev/mtdblock0
${MTD1_DEV} /dev/mtd1
${MTD1_BLOCK_DEV} /dev/mtdblock1
${CADENCE_XSPI_BIN} @https://dl.antmicro.com/projects/renode/zynq--cadence-xspi-vmlinux-s_14143972-449b7a25d689a4b6e2adc9ae4c3abbf375ccc70c
${CADENCE_XSPI_ROOTFS} @https://dl.antmicro.com/projects/renode/zynq--cadence-xspi-rootfs.ext2-s_16777216-65f5f502eb4a970cb0e24b5382a524a99ed9e360
${CADENCE_XSPI_DTB} @https://dl.antmicro.com/projects/renode/zynq--cadence-xspi.dtb-s_11045-f5e1772bb1d19234ce6f0b8ec77c2f970660c7bb
${CADENCE_XSPI_AUTOCOMMAND_BIN} @https://dl.antmicro.com/projects/renode/zynq--cadence-xspi-vmlinux-s_14386012-ff7f3dfd09804979deca966c66127df7495c5318
${CADENCE_XSPI_AUTOCOMMAND_ROOTFS} @https://dl.antmicro.com/projects/renode/zynq--cadence-xspi-autocommand-rootfs.ext2-s_16777216-e57483f695b8e43f7550aba5185055f675e19101
${CADENCE_XSPI_AUTOCOMMAND_DTB} @https://dl.antmicro.com/projects/renode/zynq--cadence-xspi.dtb-s_11045-f5e1772bb1d19234ce6f0b8ec77c2f970660c7bb
${ZYNQ_UFS_BIN} @https://dl.antmicro.com/projects/renode/zynq--linux-ufs.elf-s_14602408-e730ddd43bc5bd78d3295f4816a80f2a43832388
${ZYNQ_UFS_ROOTFS} @https://dl.antmicro.com/projects/renode/zynq--linux-ufs-rootfs.ext2-s_16777216-d81aa7e35d2b9a00d8ee7dda34143e26a958908f
${ZYNQ_UFS_DTB} @https://dl.antmicro.com/projects/renode/zynq--linux-ufs.dtb-s_12720-0dfc729e7c8db7b51c5eb4dfd990cee186de1442
${ZYNQ_UFS_TEST_DISK_IMG} @https://dl.antmicro.com/projects/renode/test-fs-ext2.img-s_524288-67f5bc210d7be8905b4de4ae5d70a8a142459110
${ZYNQ_WATCHDOG_RESET_DTB} @https://dl.antmicro.com/projects/renode/zynq--linux-watchdog-reset-on-timeout.dtb-s_12898-a3b65664ac84db801b0dad1525207f304e8a7428
${CADENCE_XSPI_PERIPHERAL} SEPARATOR=\n
... """
... xspi: SPI.Cadence_xSPI @ {
... sysbus 0xE0102000;
... sysbus new Bus.BusMultiRegistration {
... address: 0xe0104000; size: 0x100; region: "auxiliary"
... };
... sysbus new Bus.BusMultiRegistration {
... address: 0xe0200000; size: 0x1000; region: "dma"
... }
... }
... ${SPACE*4}IRQ -> gic@63
...
... xspiFlash0: SPI.Micron_MT25Q @ xspi 0 {
... underlyingMemory: xspiFlashMemory0;
... extendedDeviceId: 0x44
... }
...
... xspiFlashMemory0: Memory.MappedMemory {
... size: 0x2000000
... }
... """
${UFS_HOST_TX_REQUEST_SLOTS} 32
${UFS_HOST_RTT_REQUESTS} 16
${UFS_HOST_TASK_MGMT_SLOTS} 8
${UFS_DEVICE_LOGICAL_UNITS} 4
${UFS_DEVICE_LOGICAL_BLOCK_SIZE} 4096
${UFS_DEVICE_BLOCK_COUNT} 65536
${UFS_DEVICE_MANUFACTURER_NAME} "Antmicro"
${UFS_DEVICE_PRODUCT_NAME} "RenodeUFSStorage"
${UFS_DEVICE_SERIAL_NUMBER} "0123456789ABCDEF"
${UFS_DEVICE_OEM_ID} "000011112222"
${UFS_DEVICE_PRODUCT_REV_LEVEL} "0000"
@{UFS_STRING_DESCRIPTORS}= ${UFS_DEVICE_MANUFACTURER_NAME}
... ${UFS_DEVICE_PRODUCT_NAME}
... ${UFS_DEVICE_SERIAL_NUMBER}
... ${UFS_DEVICE_OEM_ID}
... ${UFS_DEVICE_PRODUCT_REV_LEVEL}
${DEVICE_DESCR_TYPE} 0x00
${CONFIG_DESCR_TYPE} 0x01
${UNIT_DESCR_TYPE} 0x02
${INTERCONNECT_DESCR_TYPE} 0x04
${STRING_DESCR_TYPE} 0x05
${GEOMETRY_DESCR_TYPE} 0x07
${POWER_DESCR_TYPE} 0x08
${DEVICE_HEALTH_DESCR_TYPE} 0x09
@{UFS_DESCR_SINGLETON_TYPES}= ${DEVICE_DESCR_TYPE}
... ${CONFIG_DESCR_TYPE}
... ${UNIT_DESCR_TYPE}
... ${INTERCONNECT_DESCR_TYPE}
... ${GEOMETRY_DESCR_TYPE}
... ${DEVICE_HEALTH_DESCR_TYPE}
${UFS_HOST_CONTROLLER_PERIPHERAL} SEPARATOR=\n
... """
... ufs: Storage.UFSHostController @ sysbus 0xe0102000
... ${SPACE*4}IRQ -> gic@29
... ${SPACE*4}transferRequestSlots: ${UFS_HOST_TX_REQUEST_SLOTS}
... ${SPACE*4}readyToTransferRequests: ${UFS_HOST_RTT_REQUESTS}
... ${SPACE*4}taskManagementRequestSlots: ${UFS_HOST_TASK_MGMT_SLOTS}
... """
${UFS_DEVICE_PERIPHERAL} SEPARATOR=\n
... """
... ufsStorage: Storage.UFSDevice @ ufs
... ${SPACE*4}logicalUnits: ${UFS_DEVICE_LOGICAL_UNITS}
... ${SPACE*4}logicalBlockSize: ${UFS_DEVICE_LOGICAL_BLOCK_SIZE}
... ${SPACE*4}blockCount: ${UFS_DEVICE_BLOCK_COUNT}
... ${SPACE*4}manufacturerName: ${UFS_DEVICE_MANUFACTURER_NAME}
... ${SPACE*4}productName: ${UFS_DEVICE_PRODUCT_NAME}
... ${SPACE*4}serialNumber: ${UFS_DEVICE_SERIAL_NUMBER}
... ${SPACE*4}oemID: ${UFS_DEVICE_OEM_ID}
... ${SPACE*4}productRevisionLevel: ${UFS_DEVICE_PRODUCT_REV_LEVEL}
... """
${DEFAULT_IRQ_TEST} SEPARATOR=\n
... """
... led50: Miscellaneous.LED @ sysbus
... led51: Miscellaneous.LED @ sysbus
... led52: Miscellaneous.LED @ sysbus
...
... uart1:
... ${SPACE*4}-> led50@0
... ${SPACE*4}RxFifoEmptyIRQ -> led51@0
... ${SPACE*4}RxFifoFullIRQ -> led52@0
... """
*** Keywords ***
Create Machine
Execute Command include @scripts/single-node/zedboard.resc
Execute Command machine LoadPlatformDescriptionFromString "i2cEcho: Mocks.EchoI2CDevice @ i2c0 ${I2C_ECHO_ADDRESS}"
Execute Command machine LoadPlatformDescriptionFromString "i2cSensor: Sensors.MAX30208 @ i2c0 ${I2C_SENSOR_ADDRESS}"
Execute Command machine LoadPlatformDescriptionFromString "spiFlash0: SPI.Micron_MT25Q @ spi0 0 { underlyingMemory: spi0FlashMemory; extendedDeviceId: 0x44 }; spi0FlashMemory: Memory.MappedMemory { size: 0x2000000 }"
Execute Command machine LoadPlatformDescriptionFromString "spiFlash1: SPI.Cypress_S25H @ spi0 1 { underlyingMemory: spi1FlashMemory }; spi1FlashMemory: Memory.MappedMemory { size: 0x4000000 }"
${tester}= Create Terminal Tester ${UART}
[Return] ${tester}
Boot And Login
[Arguments] ${terminalTester}
Wait For Line On Uart Booting Linux on physical CPU 0x0 testerId=${terminalTester}
Wait For Prompt On Uart buildroot login: timeout=25 testerId=${terminalTester}
Write Line To Uart root testerId=${terminalTester}
Wait For Prompt On Uart ${PROMPT} testerId=${terminalTester}
Check Exit Code
Write Line To Uart echo $?
Wait For Line On Uart 0
Wait For Prompt On Uart ${PROMPT}
Execute Linux Command
[Arguments] ${command} ${timeout}=5
Write Line To Uart ${command}
Wait For Prompt On Uart ${PROMPT} timeout=${timeout}
Check Exit Code
Get Linux Elapsed Seconds
Write Line To Uart date +%s
${date}= Wait For Line On Uart ^([0-9]+)$ treatAsRegex=true
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
${seconds}= Convert To Integer ${date.line}
[return] ${seconds}
Generate Random File
[Arguments] ${filename} ${size_kilobytes}
Execute Linux Command dd if=/dev/urandom of=./${filename} bs=1024 count=${size_kilobytes}
Should Mount Flash Memory And Write File
[Arguments] ${mtd_dev} ${mtd_block_dev} ${mount_path} ${random_filename}
Execute Linux Command flash_erase --jffs2 -N ${mtd_dev} 0 0
Execute Linux Command mkdir ${mount_path}
Execute Linux Command mount -t jffs2 ${mtd_block_dev} ${mount_path}
Execute Linux Command cp ./${random_filename} ${mount_path}
Write Line To Uart ls --color=never -1 ${mount_path}
Wait For Line On Uart ${random_filename}
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
Execute Linux Command umount ${mount_path}
Should Mount Flash Memory And Compare Files
[Arguments] ${mtd_block_dev} ${mount_path} ${random_filename}
Execute Linux Command mount -t jffs2 ${mtd_block_dev} ${mount_path}
Execute Linux Command cmp ${mount_path}/${random_filename} ./${random_filename}
Execute Linux Command umount ${mount_path}
Should Erase Flash Memory
[Arguments] ${mtd_dev} ${mtd_block_dev} ${mount_path}
Execute Linux Command flash_erase --jffs2 -N ${mtd_dev} 0 0
Execute Linux Command mount -t jffs2 ${mtd_block_dev} ${mount_path}
Write Line To Uart ls -1 ${mount_path} | wc -l
Wait For Line On Uart 0
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
Execute Linux Command umount ${mount_path}
Should Access SPI Flash Memory Via Additional Cadence xSPI
${UART}= Create Machine
Execute Command machine LoadPlatformDescriptionFromString ${CADENCE_XSPI_PERIPHERAL}
Start Emulation
Boot And Login ${UART}
# Suppress messages from the kernel space
Execute Linux Command echo 0 > /proc/sys/kernel/printk
Write Line To Uart ls --color=never -1 /dev/
Wait For Line On Uart mtd0
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
Generate Random File ${SAMPLE_FILENAME} 5
Should Mount Flash Memory And Write File ${MTD0_DEV} ${MTD0_BLOCK_DEV} ${FLASH_MOUNT} ${SAMPLE_FILENAME}
Should Mount Flash Memory And Compare Files ${MTD0_BLOCK_DEV} ${FLASH_MOUNT} ${SAMPLE_FILENAME}
Should Erase Flash Memory ${MTD0_DEV} ${MTD0_BLOCK_DEV} ${FLASH_MOUNT}
# String descriptor can be read by `ufs-utils` tool only as a raw byte array, so for the purpose of comparison
# value passed to UFS device constructor is converted to that form using custom keyword.
Get Raw String Descriptor
[Arguments] ${string}
${length}= Evaluate '0x\{:02x\}'.format(len("${string}".encode('utf-16le')) + 2)
${raw}= Evaluate ' '.join(r'0x{:02x}'.format(chr) for chr in bytes("${string}", 'utf-16le'))
${descr}= Catenate ${length} ${STRING_DESCR_TYPE} ${raw}
[return] ${descr}
Map Index To Disk Letter
[Arguments] ${index}
${letter}= Evaluate chr(97 + ${index})
[return] ${letter}
*** Test Cases ***
Should Boot And Login
${UART}= Create Machine
Start Emulation
Boot And Login ${UART}
# Suppress messages from the kernel space
Execute Linux Command echo 0 > /proc/sys/kernel/printk
Provides logged-in
Should List Expected Devices
Requires logged-in
Write Line To Uart ls --color=never -1 /dev/
Wait For Line On Uart i2c-0
Wait For Line On Uart mtd0
Wait For Line On Uart mtd1
Wait For Line On Uart ttyPS0
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
Should Detect I2C Peripherals
Requires logged-in
Write Line To Uart i2cdetect -yar 0
Wait For Line On Uart 10: 10 --
Wait For Line On Uart 30: -- 31 --
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
Write Line To Uart i2cget -y 0 0x41
Wait For Line On Uart No such device
Wait For Prompt On Uart ${PROMPT}
Should Communicate With I2C Echo Peripheral
Requires logged-in
Write Line To Uart i2ctransfer -ya 0 w3@${I2C_ECHO_ADDRESS} 0x01 0x23 0x45 r2
Wait For Line On Uart 0x01 0x23
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
# Very long commands are splited into many lines due to the terminal width (number of columns), which confused waitForEcho feature
Write Line To Uart i2ctransfer -ya 0 w20@${I2C_ECHO_ADDRESS} 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 r21 waitForEcho=false
Wait For Line On Uart 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x00
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
# Check target monitor feature
Execute Linux Command i2ctransfer -ya 0 w0@${I2C_ECHO_ADDRESS}
Should Communicate With MAX30208 Peripheral
Requires logged-in
# Write and read one register
Execute Linux Command i2cset -y 0 ${I2C_SENSOR_ADDRESS} 0x10 0xbe
Write Line To Uart i2cget -y 0 ${I2C_SENSOR_ADDRESS} 0x10
Wait For Line On Uart 0xbe
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
# Read more bytes than I2C peripheral provides
Write Line To Uart i2ctransfer -ya 0 w0@${I2C_SENSOR_ADDRESS} r2
Wait For Line On Uart 0x00 0x00
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
# Read weird number of bytes to check is FinishTransmission calling works properly
Write Line To Uart i2ctransfer -ya 0 w19@${I2C_SENSOR_ADDRESS} 0xff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 r18 waitForEcho=false
Wait For Line On Uart 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30
Wait For Prompt On Uart ${PROMPT}
Check Exit Code
Should Access Micron SPI Flash Memory
Requires logged-in
Generate Random File ${SAMPLE_FILENAME} 5
Should Mount Flash Memory And Write File ${MTD0_DEV} ${MTD0_BLOCK_DEV} ${FLASH_MOUNT} ${SAMPLE_FILENAME}
Should Mount Flash Memory And Compare Files ${MTD0_BLOCK_DEV} ${FLASH_MOUNT} ${SAMPLE_FILENAME}
Should Erase Flash Memory ${MTD0_DEV} ${MTD0_BLOCK_DEV} ${FLASH_MOUNT}
Should Access Cypress SPI Flash Memory
Requires logged-in
Generate Random File ${SAMPLE_FILENAME} 5
Should Mount Flash Memory And Write File ${MTD1_DEV} ${MTD1_BLOCK_DEV} ${FLASH_MOUNT} ${SAMPLE_FILENAME}
Should Mount Flash Memory And Compare Files ${MTD1_BLOCK_DEV} ${FLASH_MOUNT} ${SAMPLE_FILENAME}
Should Erase Flash Memory ${MTD1_DEV} ${MTD1_BLOCK_DEV} ${FLASH_MOUNT}
Time Should Elapse
Requires logged-in
${seconds_before}= Get Linux Elapsed Seconds
Execute Linux Command sleep 2
${seconds}= Get Linux Elapsed Seconds
Should Be True ${seconds_before} < ${seconds}
Watchdog Should Timeout
Requires logged-in
# Restore suppressed messages from the kernel space
Execute Linux Command echo 7 > /proc/sys/kernel/printk
# Watchdog timeout is specified with -T option.
# Watchdog is restarted after period specified with -t option.
Write Line To Uart watchdog -T 2 -t 5 -F /dev/watchdog0
Wait For Line On Uart cdns-wdt f8005000.watchdog: Watchdog timed out. Internal reset not enabled
Watchdog Should Reset On Timeout
# 'reset-on-timeout' property was added to watchdog node in dts to cause internal reset on watchdog timeout.
# https://github.com/Xilinx/linux-xlnx/blob/c8b3583bc86352009c6ac61e2ced0e12118f8ebb/Documentation/devicetree/bindings/watchdog/cdns%2Cwdt-r1p2.yaml#L35-L39
Execute Command $dtb=${ZYNQ_WATCHDOG_RESET_DTB}
${UART}= Create Machine
Boot And Login ${UART}
# Watchdog timeout is specified with -T option.
# Watchdog is restarted after period specified with -t option.
Write Line To Uart watchdog -T 2 -t 5 -F /dev/watchdog0
Boot And Login ${UART}
Should Access SPI Flash Memory Via Additional Cadence xSPI IP
Execute Command $bin=${CADENCE_XSPI_BIN}
Execute Command $rootfs=${CADENCE_XSPI_ROOTFS}
Execute Command $dtb=${CADENCE_XSPI_DTB}
Should Access SPI Flash Memory Via Additional Cadence xSPI
Should Access SPI Flash Memory Via Additional Cadence xSPI IP With The Auto Command Patch
Execute Command $bin=${CADENCE_XSPI_AUTOCOMMAND_BIN}
Execute Command $rootfs=${CADENCE_XSPI_AUTOCOMMAND_ROOTFS}
Execute Command $dtb=${CADENCE_XSPI_AUTOCOMMAND_DTB}
Should Access SPI Flash Memory Via Additional Cadence xSPI
Should Boot And Login With UFS
Execute Command $bin=${ZYNQ_UFS_BIN}
Execute Command $rootfs=${ZYNQ_UFS_ROOTFS}
Execute Command $dtb=${ZYNQ_UFS_DTB}
${UART}= Create Machine
Execute Command machine LoadPlatformDescriptionFromString ${UFS_HOST_CONTROLLER_PERIPHERAL}
Execute Command machine LoadPlatformDescriptionFromString ${UFS_DEVICE_PERIPHERAL}
Boot And Login ${UART}
# Suppress messages from the kernel space
Execute Linux Command echo 0 > /proc/sys/kernel/printk
Provides ufs-logged-in
Should Access UFS Storage
Requires ufs-logged-in
${MOUNT_POINT}= Set Variable /mnt
${OUTPUT_LIST}= Create List
# Create filesystem and write some text to file on it
FOR ${i} IN RANGE 0 ${UFS_DEVICE_LOGICAL_UNITS}
${DISK_LETTER}= Map Index To Disk Letter ${i}
${DISK_DEVICE}= Set Variable /dev/sd${DISK_LETTER}
${FILE_PATH}= Set Variable ${MOUNT_POINT}/file${DISK_LETTER}
Execute Linux Command mke2fs -b ${UFS_DEVICE_LOGICAL_BLOCK_SIZE} ${DISK_DEVICE}
Execute Linux Command mount ${DISK_DEVICE} ${MOUNT_POINT}
${RANDOM_STRING}= Generate Random String 40
Append To List ${OUTPUT_LIST} ${RANDOM_STRING}
Execute Linux Command echo "${RANDOM_STRING}" > ${FILE_PATH}
Execute Linux Command umount ${MOUNT_POINT}
END
# Verify if data persists after umount/mount cycle
FOR ${i} IN RANGE 0 ${UFS_DEVICE_LOGICAL_UNITS}
${DISK_LETTER}= Map Index To Disk Letter ${i}
${DISK_DEVICE}= Set Variable /dev/sd${DISK_LETTER}
${FILE_PATH}= Set Variable ${MOUNT_POINT}/file${DISK_LETTER}
Execute Linux Command mount ${DISK_DEVICE} ${MOUNT_POINT}
Write Line To Uart cat ${FILE_PATH}
Wait For Line On Uart ${OUTPUT_LIST}[${i}]
Execute Linux Command umount ${MOUNT_POINT}
END
Should Load Disk Image For UFS Storage From File
Requires ufs-logged-in
${MOUNT_POINT}= Set Variable /mnt
${LOGICAL_UNIT_INDEX}= Set Variable 0
${DISK_LETTER}= Map Index To Disk Letter ${LOGICAL_UNIT_INDEX}
${DISK_DEVICE}= Set Variable /dev/sd${DISK_LETTER}
Execute Command ufs.ufsStorage LoadFromFile ${LOGICAL_UNIT_INDEX} ${ZYNQ_UFS_TEST_DISK_IMG} False
Execute Linux Command mount ${DISK_DEVICE} ${MOUNT_POINT} # Mounting should be successful as disk image contains valid filesystem
Execute Linux Command umount ${MOUNT_POINT}
# ufs-utils: https://github.com/westerndigitalcorporation/ufs-utils/tree/faf0fe153547f5d02315fa82159f925f0c9daef8
# was added to rootfs through buildroot's BR2_ROOTFS_OVERLAY configuration and is used for testing.
Should Handle Native UFS commands
Requires ufs-logged-in
Write Line To Uart ufs-utils list_bsg
Wait For Line On Uart /dev/bsg/ufs-bsg0
Wait For Prompt On Uart ${PROMPT}
Write Line To Uart ufs-utils spec_version -p /dev/bsg/ufs-bsg0
Wait For Line On Uart 4.0
Wait For Prompt On Uart ${PROMPT}
# Unit Descriptors
FOR ${i} IN RANGE 0 ${UFS_DEVICE_LOGICAL_UNITS}
${DESCR_TYPE_IDN}= Convert To Integer ${UNIT_DESCR_TYPE}
Write Line To Uart ufs-utils desc -t 2 -i ${i} --output_mode json -p /dev/bsg/ufs-bsg0
Wait For Line On Uart "bLength":45,
Wait For Line On Uart "bDescriptorType":${DESCR_TYPE_IDN},
Wait For Line On Uart "bUnitIndex":${i},
Wait For Prompt On Uart ${PROMPT}
END
FOR ${desc_type} IN @{UFS_DESCR_SINGLETON_TYPES}
${DESCR_TYPE_IDN}= Convert To Integer ${desc_type}
Write Line To Uart ufs-utils desc -t ${DESCR_TYPE_IDN} --output_mode json -p /dev/bsg/ufs-bsg0
Wait For Line On Uart "bDescriptorType.*":${DESCR_TYPE_IDN}, treatAsRegex=true
Wait For Prompt On Uart ${PROMPT}
END
# String Descriptors
${cnt}= Get length ${UFS_STRING_DESCRIPTORS}
${DESCR_TYPE_IDN}= Convert To Integer ${STRING_DESCR_TYPE}
FOR ${i} IN RANGE 0 ${cnt}
${DESCRIPTOR}= Get Raw String Descriptor "${UFS_STRING_DESCRIPTORS}[${i}]"
Write Line To Uart ufs-utils desc -t ${DESCR_TYPE_IDN} -i ${i} --output_mode raw -p /dev/bsg/ufs-bsg0
Wait For Line On Uart ${DESCRIPTOR}
Wait For Prompt On Uart ${PROMPT}
END
Should Persist GPIO State
[Documentation] Tests whether the GPIO state persists after a change from userspace.
[Tags] linux uart gpio
Requires logged-in
# Prepare GPIO
Execute Linux Command echo ${GPIO_NUMBER} > /sys/class/gpio/export
Execute Linux Command echo out > ${GPIO_DIRECTORY}/direction
Execute Linux Command echo 1 > ${GPIO_DIRECTORY}/value
Write Line To Uart cat ${GPIO_DIRECTORY}/value
Wait For Line On Uart 1
Execute Linux Command echo 0 > ${GPIO_DIRECTORY}/value
Write Line To Uart cat ${GPIO_DIRECTORY}/value
Wait For Line On Uart 0
Should Expose GPIO State
[Documentation] Tests whether the GPIO seen by the simulator matches Linux's view.
[Tags] linux uart gpio
Requires logged-in
Execute Command emulation CreateLEDTester "led0" ${GPIO_PERIPHERIAL}
# Prepare GPIO
Execute Linux Command echo ${GPIO_NUMBER} > /sys/class/gpio/export
Execute Linux Command echo out > ${GPIO_DIRECTORY}/direction
Execute Linux Command echo 1 > ${GPIO_DIRECTORY}/value
Execute Command led0 AssertState true 0
Execute Linux Command echo 0 > ${GPIO_DIRECTORY}/value
Execute Command led0 AssertState false 0
Should Ping
[Documentation] Tests whether Ethernet works on the Zedboard platform.
[Tags] linux uart ethernet
Execute Command emulation CreateSwitch "switch"
Execute Command $name="Zedboard1"
Execute Command include @scripts/single-node/zedboard.resc
Execute Command connector Connect gem0 switch
${tester1}= Create Terminal Tester ${UART} machine=Zedboard1
Execute Command $name="Zedboard2"
Execute Command include @scripts/single-node/zedboard.resc
Execute Command connector Connect gem0 switch
${tester2}= Create Terminal Tester ${UART} machine=Zedboard2
Boot And Login ${tester1}
Boot And Login ${tester2}
Start Emulation
Write Line To Uart ifconfig eth0 up 192.168.1.1 testerId=${tester1}
Write Line To Uart ifconfig eth0 up 192.168.1.2 testerId=${tester2}
Write Line To Uart ping -c 5 192.168.1.2 testerId=${tester1}
Wait For Line On Uart 5 packets transmitted, 5 packets received, 0% packet loss testerId=${tester1}
Wait For Prompt On Uart ${PROMPT} testerId=${tester1}
Should Ping Over TAP
[Tags] ethernet tap
Requires logged-in
Set Test Variable ${TAP_INTERFACE} tap0
Set Test Variable ${TAP_INTERFACE_IP} 192.0.2.1
Set Test Variable ${SERVER_IP} 192.0.2.2
# Prepare TAP
Execute Command emulation CreateSwitch "switch"
Execute Command emulation CreateTap "${TAP_INTERFACE}" "tap"
Preconfigure Macos tap0 ${TAP_INTERFACE_IP} 255.255.255.0
Network Interface Should Have Address ${TAP_INTERFACE} ${TAP_INTERFACE_IP}
Execute Command connector Connect host.tap switch
Execute Command connector Connect gem0 switch
Execute Linux Command ifconfig eth0 up ${SERVER_IP}
Write Line To Uart ping -c 5 ${TAP_INTERFACE_IP}
Wait For Line On Uart 5 packets transmitted, 5 packets received, 0% packet loss
Should Pass Default Interrupt Test
# This test checks `DefaultInterrupt` behavior with named and unnamed GPIOs
Create Machine
Execute Command machine LoadPlatformDescriptionFromString ${DEFAULT_IRQ_TEST}
${generic_irq_tester}= Create LED Tester sysbus.led50 defaultTimeout=0
${rx_empty_tester}= Create LED Tester sysbus.led51 defaultTimeout=0
${rx_full_tester}= Create LED Tester sysbus.led52 defaultTimeout=0
# Enable UART's RX/TX - so it triggers the IRQ
Execute Command sysbus.uart1 WriteDoubleWord 0x0 0x14
# Enable all interrupts
Execute Command sysbus.uart1 WriteDoubleWord 0x8 0xFFFFFFFF
Assert LED State true testerId=${generic_irq_tester}
Assert LED State true testerId=${rx_empty_tester}
Assert LED State false testerId=${rx_full_tester}