*** 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 # Default ${UFS_DEVICE_BLOCK_COUNTS} [8192, 16384, 32768] # Last one will come from UFS_DEVICE_BLOCK_COUNT ${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} ... ${SPACE*4}logicalUnitBlockCounts: ${UFS_DEVICE_BLOCK_COUNTS} ... """ ${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 [Tags] basic-tests ${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 [Tags] basic-tests 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 Report Specified UFS Logical Unit Sizes Requires ufs-logged-in ${BLOCK_COUNTS}= Evaluate ast.literal_eval($UFS_DEVICE_BLOCK_COUNTS) ast ${EFFECTIVE_BLOCK_COUNTS}= Evaluate $BLOCK_COUNTS[:${UFS_DEVICE_LOGICAL_UNITS}] + [${UFS_DEVICE_BLOCK_COUNT}] * max(0, ${UFS_DEVICE_LOGICAL_UNITS} - len($BLOCK_COUNTS)) # Check that the fallback/default size logic works ${MODEL_BLOCK_COUNTS}= Execute Command ufs.ufsStorage LogicalUnitBlockCounts ${MODEL_BLOCK_COUNTS}= Evaluate ast.literal_eval($MODEL_BLOCK_COUNTS) ast Should Be Equal ${EFFECTIVE_BLOCK_COUNTS} ${MODEL_BLOCK_COUNTS} # Check that guest software sees the configured sizes ${SECTOR_COUNTS_512B}= Evaluate [math.ceil(bs / 512 * ${UFS_DEVICE_LOGICAL_BLOCK_SIZE}) for bs in $EFFECTIVE_BLOCK_COUNTS] math Write Line To Uart fdisk -l /dev/sd* FOR ${i} ${count} IN ENUMERATE @{SECTOR_COUNTS_512B} Wait For Line On Uart Disk /dev/sd${{chr(ord('a') + $i)}}: .*, ${count} sectors treatAsRegex=true 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 basic-tests 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}