blob: 6a373d162532b35243f8ec7d03b221c4ebcfe611 [file] [log] [blame]
*** Settings ***
Library String
*** Variables ***
${URL} https://dl.antmicro.com/projects/renode
${GPT_ELF} ${URL}/renesas-rzg2l_evk--fsp-gpt_rzg2l_evk_ep.elf-s_450148-fec1da811a52fa94d39db555d0dccc28e246d28e
${GTM_ELF} ${URL}/renesas-rzg2l_evk--fsp-gtm_rzg2l_evk_ep.elf-s_415532-a907c69248cf6f695c717ee7dd83cc29d6fff3b4
${SCIF_UART_ELF} ${URL}/renesas-rzg2l_evk--fsp-scif_uart_rzg2l_evk_ep.elf-s_494948-c7ab4fdc0f2f8e62b8d99f194aab234ab1a50a32
${RSPI_ELF} ${URL}/renesas-rzg2l_evk--fsp-rspi_rzg2l_evk_ep.elf-s_431540-f07dc0ce78537eda672af3a028c50dcb3f21f3a5
${FREERTOS_BLINKY_ELF} ${URL}/renesas-rz_g2l--fsp-blinky_freertos.elf-s_612428-2a79e42c3efdbc19207a7c1b2b3b3824e450b2ef
${IIC_MASTER_ELF} ${URL}/renesas-rzg2l_evk--fsp-riic_master_rzg2l_evk_ep.elf-s_522620-d57490521dd2e4dfcd4ca4a6cade57ce58228375
${UBOOT_ELF} ${URL}/uboot.elf-s_4151104-c5de311d27f0823c3d888309795fdc0a5b31473b
${MHU_ELF} ${URL}/renesas-rz_g2l--fsp-mhu_sample.elf-s_381944-3550734db5aa723c25c77142de4b7ebdeca0f1ba
${INTC_IRQ_ELF} ${URL}/renesas-rzg2l_evk--fsp-intc_irq_rzg2l_evk_ep.elf-s_413044-05d74d1def85e983f80165ae13f125cf302507d0
${LED_REPL} SEPARATOR=\n
... """
... led: Miscellaneous.LED @ gpio 0
...
... gpio:
... ${SPACE*4}100 -> led@0
... """
${BUTTON_REPL} SEPARATOR=\n
... """
... button: Miscellaneous.Button @ gpio 1
... ${SPACE*4}-> gpio@7
... """
*** Keywords ***
Prepare Machine
[Arguments] ${elf}
Execute Command mach create "Renesas RZ/G2L"
Execute Command machine LoadPlatformDescription @platforms/cpus/renesas_rz_g2l.repl
Execute Command macro reset "cpu0 IsHalted true; cpu1 IsHalted true; sysbus LoadELF @${elf} cpu=cpu_m33"
Execute Command runMacro $reset
Prepare Segger RTT
[Arguments] ${pauseEmulation}=true
Execute Command machine CreateVirtualConsole "segger_rtt"
Execute Command include @scripts/single-node/renesas-segger-rtt.py
Execute Command setup_segger_rtt sysbus.segger_rtt
Create Terminal Tester sysbus.segger_rtt defaultPauseEmulation=${pauseEmulation}
Elapsed Time Equals
[Arguments] ${start} ${end} ${value} ${margin}=0.8
${diff}= Evaluate ${end} - ${start}
Should Be True ${diff} >= ${value} - ${margin}
Should Be True ${diff} <= ${value} + ${margin}
Prepare LED Tester
Execute Command machine LoadPlatformDescriptionFromString ${LED_REPL}
Create Led Tester sysbus.gpio.led
*** Test Cases ***
Should Run The Timer In One Shot Mode
Prepare Machine ${GPT_ELF}
Prepare Segger RTT
Wait For Prompt On Uart User Input:
Write Line To Uart 3 waitForEcho=false
Wait For Line On Uart Opened Timer in ONE-SHOT Mode
Wait For Line On Uart Started Timer in ONE-SHOT Mode
Wait For Line On Uart Timer Expired in One-Shot Mode
Should Run GTM Sample
Prepare Machine ${GTM_ELF}
Prepare Segger RTT
Prepare LED Tester
Wait For Prompt On Uart One-shot mode:
Write Line To Uart 10 waitForEcho=false
Wait For Prompt On Uart Periodic mode:
Write Line To Uart 5 waitForEcho=false
Wait For Prompt On Uart Enter any key to start or stop the timers
${one_shot_start}= Write Line To Uart waitForEcho=false
${one_shot_end}= Wait For Line On Uart One-shot mode GTM timer elapsed
Elapsed Time Equals ${one_shot_start.timestamp} ${one_shot_end.timestamp} 10
Wait For Line On Uart GTM1 is Enabled in Periodic mode
FOR ${i} IN RANGE 0 3
${periodic_start}= Wait For Line On Uart Leds are: Off
Assert Led State False timeout=0.01
${periodic_end}= Wait For Line On Uart Leds are: On
Assert Led State True timeout=0.01
Elapsed Time Equals ${periodic_start.timestamp} ${periodic_end.timestamp} 5 0.3
END
Should Run SCIF UART Sample
Prepare Machine ${SCIF_UART_ELF}
Create Terminal Tester sysbus.scif2
Execute Command showAnalyzer sysbus.scif2
# Let software initialize SCIF before we write to it
Execute Command emulation RunFor "0.01s"
Start Emulation
Write Line To Uart 10 waitForEcho=false
Wait For Line On Uart Accepted value, the led is blinking with that value
Wait For Line On Uart Please set the next value
Write Line To Uart -1 waitForEcho=false
Wait For Line On Uart Invalid input. Input range is from 1 - 2000
Write Line To Uart 2001 waitForEcho=false
Wait For Line On Uart Invalid input. Input range is from 1 - 2000
Should Run SPI WriteRead Sample
Prepare Machine ${RSPI_ELF}
Execute Command spi0 Register spi1 0
Prepare Segger RTT
Wait For Line On Uart ** RSPI INIT SUCCESSFUL **
Wait For Line On Uart Press 1 for Write() and Read()
Wait For Line On Uart Press 2 for WriteRead()
Wait For Line On Uart Press 3 to Exit
Write Line To Uart 2
Wait For Line On Uart Enter text input for Master buffer. Data size should not exceed 64 bytes.
Write Line To Uart 0123456789
Wait For Line On Uart Enter text input for Slave buffer. Data size should not exceed 64 bytes.
Write Line To Uart abcdefghij
Wait For Line On Uart Master received data: abcdefghij
Wait For Line On Uart Slave received data: 0123456789
Wait For Line On Uart ** RSPI WRITE_READ Demo Successful**
Should Run FreeRTOS Blinky Sample
Prepare Machine ${FREERTOS_BLINKY_ELF}
Prepare LED Tester
Assert LED Is Blinking testDuration=5 onDuration=1 offDuration=1 pauseEmulation=true
Should Communicate Over IIC
Prepare Machine ${IIC_MASTER_ELF}
Execute Command machine LoadPlatformDescriptionFromString "adxl345: Sensors.ADXL345 @ riic3 0x1D"
Prepare Segger RTT
# Sample displays raw data from the sensor, so printed values are different from loaded samples
Execute Command riic3.adxl345 FeedSample 1000 1000 1000
Wait For Line On Uart X-axis = 250.00, Y-axis = 250.00, Z-axis = 250.00
Execute Command riic3.adxl345 FeedSample 2000 3000 4000
Wait For Line On Uart X-axis = 500.00, Y-axis = 750.00, Z-axis = 1000.00
Execute Command riic3.adxl345 FeedSample 1468 745 8921
Wait For Line On Uart X-axis = 367.00, Y-axis = 186.00, Z-axis = 2230.00
Execute Command riic3.adxl345 FeedSample 3912 8888 5456
Wait For Line On Uart X-axis = 978.00, Y-axis = 2222.00, Z-axis = 1364.00
Execute Command riic3.adxl345 FeedSample 0 5000 0
Wait For Line On Uart X-axis = 0.00, Y-axis = 1250.00, Z-axis = 0.00
Wait For Line On Uart X-axis = 0.00, Y-axis = 0.00, Z-axis = 0.00
Should Copy Memory With DMA
${source}= Set Variable 0x60000100
${destination}= Set Variable 0x60000200
${expected_value}= Set Variable 0xAABBCCDD
${channel_base}= Set Variable 0x41800000
${channel_status}= Evaluate ${channel_base} + 0x24
${prog}= Catenate SEPARATOR=\n
... str r1, [r0, #0xC] # N1SA register offset
... str r2, [r0, #0x10] # N1DA register offset
... str r3, [r0, #0x14] # N1TB register offset
... str r4, [r0, #0x2C] # CHCFG register offset
... str r5, [r0, #0x28] # CHCTRL register offset
... str r6, [r0, #0x28] # CHCTRL register offset
Execute Command mach create "Renesas RZ/G2L"
Execute Command machine LoadPlatformDescription @platforms/cpus/renesas_rz_g2l.repl
Execute Command cluster IsHalted true
Execute Command sysbus WriteDoubleWord ${source} ${expected_value} cpu_m33
Execute Command cpu_m33 SetRegister 0 ${channel_base} # DMA Channel address
Execute Command cpu_m33 SetRegister 1 ${source} # Source address
Execute Command cpu_m33 SetRegister 2 ${destination} # Destination address
Execute Command cpu_m33 SetRegister 3 0x4 # Transfer 4 bytes
Execute Command cpu_m33 SetRegister 4 0x10403000 # Read access: double word, full transfer, select register bank 1
Execute Command cpu_m33 SetRegister 5 0x8 # Reset DMA
Execute Command cpu_m33 SetRegister 6 0x5 # Perform transaction
Execute Command cpu_m33 AssembleBlock 0x60000000 "${prog}"
Execute Command cpu_m33 PC 0x60000000
Execute Command cpu_m33 Step 6
${flags}= Execute Command sysbus ReadDoubleWord ${channel_status} cpu_m33
Should Be Equal As Integers ${flags} 0xE0 # Terminal count, DMA interrupt and register select are set
${result}= Execute Command sysbus ReadDoubleWord ${destination} cpu_m33
Should Be Equal As Integers ${expected_value} ${result}
Should Run U-Boot
Execute Command set bin @${UBOOT_ELF}
Execute Command include @scripts/single-node/rzg2l_uboot.resc
Create Terminal Tester sysbus.scif0 5 defaultPauseEmulation=true
Wait For Prompt On Uart Hit any key to stop autoboot
Send Key To Uart 0x10
Wait For Prompt On Uart >
Write Line To Uart version
Wait For Line On Uart U-Boot
Wait For Prompt On Uart >
Should Communicate Between Cores Using MHU
Prepare Machine ${MHU_ELF}
Prepare Segger RTT
${mhu_channel}= Set Variable 1
${expected_data}= Set Variable 0xAABBCCDD
${shared_mem_base}= Execute Command sysbus GetSymbolAddress "__mhu_shmem_start" cpu_m33
${shared_mem_base}= Strip String ${shared_mem_base}
${receive_data}= Evaluate ${shared_mem_base} + ${mhu_channel} * 0x8 + 0x4 # Each channel has 8 bytes available 4 for transmission and 4 for reception
${irq_trigger_register}= Evaluate 0x010400000 + ${mhu_channel} * 0x20 + 0x4 # MSG_INT_SETn register visible from Cortex-A55
Wait For Line On Uart MHU initialized correctly
Execute Command sysbus WriteDoubleWord ${receive_data} ${expected_data} cpu_m33
Execute Command sysbus WriteDoubleWord ${irq_trigger_register} 0x1 cpu0 # Trigger MHU interrupt
Wait For Line On Uart MHU message received! (Channel: ${mhu_channel}, Data: ${expected_data})
Should Detect External Interrupt
Prepare Machine ${INTC_IRQ_ELF}
Execute Command machine LoadPlatformDescriptionFromString ${BUTTON_REPL}
Prepare LED Tester
Prepare Segger RTT
Wait For Line On Uart On pressing the user push button, an external IRQ is triggered, which toggles on-board LED.
Execute Command sysbus.gpio.button PressAndRelease
Wait For Line On Uart LED State: High{ON}
Assert Led State True timeout=0.01
Execute Command sysbus.gpio.button PressAndRelease
Wait For Line On Uart LED State: Low{OFF}
Assert Led State False timeout=0.01