:name: Renesas RZ/G2L OpenAMP
:description: This script runs Linux on Renesas RZ/G2L. It's showcasing two way communication between Linux running on Cortex-A55 and OpenAMP demo running on Cortex-M33.

using sysbus
using sysbus.cluster

$name?="Renesas-RZ/G2l"
mach create $name

machine LoadPlatformDescription @platforms/cpus/renesas_rz_g2l.repl

$atf_elf?=   @https://dl.antmicro.com/projects/renode/renesas_rzg2l-bl31.elf-s_60936-06cc2a2879b3573f5bb928bbf0d7b74e6fda8010
$linux?=     @https://dl.antmicro.com/projects/renode/renesas_rzg2l-openamp-Image-s_24375808-9b309c976b8f5de7403877ac7119a8d632edaf6c
$rootfs?=    @https://dl.antmicro.com/projects/renode/renesas_rzg2l-openamp-rootfs.ext4-s_78290944-232d4e897c90f98a690bdf73ae855e3c8977937a
$dtb?=       @https://dl.antmicro.com/projects/renode/renesas_rzg2l-openamp-dtb-s_33268-cd683bda7a260d86de73cea5cab33677a98035c7
$linux_elf?= @https://dl.antmicro.com/projects/renode/renesas_rzg2l-openamp-vmlinux-s_108671944-1358b975d3bbe82c56a89707db54be65d87c1966
$uboot?=     @https://dl.antmicro.com/projects/renode/renesas_rzg2l-u-boot.bin-s_704424-93d5b042761f5371ff774c6ef594df63624b7ff3
$uboot_elf?= @https://dl.antmicro.com/projects/renode/renesas_rzg2l-u-boot.elf-s_4944568-b8c532412cf6234bf74745439d48305687d1ac1a

showAnalyzer scif0

macro reset
"""
    cpu_m33 IsHalted true
    cpu0 RNDRSupported true
    cpu1 IsHalted true
    machine SetSerialExecution true

    sysbus LoadELF    $atf_elf cpu=cluster
    sysbus LoadBinary $uboot  0x50000000 cpu=cpu0
    sysbus LoadFdt    $dtb    0x40000000 "earlycon retain_initrd console=ttySC0,115200n8 root=/dev/ram0 rw initrd=0x60000000,512M" false context=cpu0
    sysbus LoadBinary $linux  0x51000000 cpu=cpu0
    sysbus LoadBinary $rootfs 0x60000000 cpu=cpu0

    sysbus LoadSymbolsFrom $uboot_elf context=cpu0
    sysbus LoadSymbolsFrom $linux_elf context=cpu0

    # Set address for structure passed from BL2
    # https://github.com/renesas-rz/rzg_trusted-firmware-a/blob/c18f5c36980717d9805036a7ad5705bef8806c8f/plat/renesas/rz/common/include/rz_private.h#L25
    cpu0 SetRegister 0 0x20000000
    # Type
    sysbus WriteByte 0x20000058 0x1 cpu0
    # Version
    sysbus WriteByte 0x20000059 0x1 cpu0
    # Size
    sysbus WriteWord 0x2000005A 0x0 cpu0
    # Attr
    sysbus WriteDoubleWord 0x2000005C 0x1 cpu0
    # PC
    sysbus WriteDoubleWord 0x20000060 0x50000000 cpu0
    # SPSR
    sysbus WriteDoubleWord 0x20000068 0x3c9 cpu0
    sysbus WriteDoubleWord 0x2000007C 0x10000 cpu0
"""

runMacro $reset
