From 899eb7daf064556a2336bacf0955cb1bcf77bf87 Mon Sep 17 00:00:00 2001 From: Nhut Nguyen Date: Thu, 27 Mar 2025 09:44:08 +0700 Subject: [PATCH 1/6] soc: renesas: Add support for Renesas RZ/A3M Add support for Renesas RZ/A3M Signed-off-by: Nhut Nguyen --- soc/renesas/rz/rza3m/CMakeLists.txt | 11 +++++++++ soc/renesas/rz/rza3m/Kconfig | 9 ++++++++ soc/renesas/rz/rza3m/Kconfig.defconfig | 31 ++++++++++++++++++++++++++ soc/renesas/rz/rza3m/Kconfig.soc | 20 +++++++++++++++++ soc/renesas/rz/rza3m/mmu_regions.c | 18 +++++++++++++++ soc/renesas/rz/rza3m/pinctrl_soc.h | 11 +++++++++ soc/renesas/rz/rza3m/sections.ld | 23 +++++++++++++++++++ soc/renesas/rz/rza3m/soc.c | 24 ++++++++++++++++++++ soc/renesas/rz/rza3m/soc.h | 12 ++++++++++ soc/renesas/rz/soc.yml | 3 +++ 10 files changed, 162 insertions(+) create mode 100644 soc/renesas/rz/rza3m/CMakeLists.txt create mode 100644 soc/renesas/rz/rza3m/Kconfig create mode 100644 soc/renesas/rz/rza3m/Kconfig.defconfig create mode 100644 soc/renesas/rz/rza3m/Kconfig.soc create mode 100644 soc/renesas/rz/rza3m/mmu_regions.c create mode 100644 soc/renesas/rz/rza3m/pinctrl_soc.h create mode 100644 soc/renesas/rz/rza3m/sections.ld create mode 100644 soc/renesas/rz/rza3m/soc.c create mode 100644 soc/renesas/rz/rza3m/soc.h diff --git a/soc/renesas/rz/rza3m/CMakeLists.txt b/soc/renesas/rz/rza3m/CMakeLists.txt new file mode 100644 index 000000000000..b7bb7ee2f2a6 --- /dev/null +++ b/soc/renesas/rz/rza3m/CMakeLists.txt @@ -0,0 +1,11 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +zephyr_sources(soc.c) +zephyr_library_sources_ifdef(CONFIG_ARM_MMU mmu_regions.c) + +zephyr_include_directories(.) + +zephyr_linker_sources(SECTIONS sections.ld) + +set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/arm64/scripts/linker.ld CACHE INTERNAL "") diff --git a/soc/renesas/rz/rza3m/Kconfig b/soc/renesas/rz/rza3m/Kconfig new file mode 100644 index 000000000000..8f2f4472080c --- /dev/null +++ b/soc/renesas/rz/rza3m/Kconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_RZA3M + select ARM64 + select CPU_CORTEX_A55 + select ARM_ARCH_TIMER + select HAS_RENESAS_RZ_FSP + select SOC_EARLY_INIT_HOOK diff --git a/soc/renesas/rz/rza3m/Kconfig.defconfig b/soc/renesas/rz/rza3m/Kconfig.defconfig new file mode 100644 index 000000000000..2db397ea309e --- /dev/null +++ b/soc/renesas/rz/rza3m/Kconfig.defconfig @@ -0,0 +1,31 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +if SOC_SERIES_RZA3M + +config SYS_CLOCK_EXISTS + default y + +config NUM_IRQS + default 512 + +config SYS_CLOCK_HW_CYCLES_PER_SEC + default $(dt_node_int_prop_int,/osc,clock-frequency) + +config FLASH_SIZE + default $(dt_chosen_reg_size_int,$(DT_CHOSEN_Z_FLASH),0,K) + +config FLASH_BASE_ADDRESS + default $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_Z_FLASH)) + +DT_CHOSEN_IMAGE_ZEPHYR = zephyr,code-partition +DT_CHOSEN_SRAM_ZEPHYR = zephyr,sram + +config BUILD_OUTPUT_ADJUST_LMA + default "$(dt_chosen_partition_addr_hex,$(DT_CHOSEN_IMAGE_ZEPHYR)) - \ + $(dt_chosen_reg_addr_hex,$(DT_CHOSEN_SRAM_ZEPHYR))" + +config BUILD_OUTPUT_ADJUST_LMA_SECTIONS + default "*;!.header" + +endif # SOC_SERIES_RZA3M diff --git a/soc/renesas/rz/rza3m/Kconfig.soc b/soc/renesas/rz/rza3m/Kconfig.soc new file mode 100644 index 000000000000..b199157a0f95 --- /dev/null +++ b/soc/renesas/rz/rza3m/Kconfig.soc @@ -0,0 +1,20 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_RZA3M + bool + select SOC_FAMILY_RENESAS_RZ + help + Renesas RZ/A3M series + +config SOC_SERIES + default "rza3m" if SOC_SERIES_RZA3M + +config SOC_R9A07G066M04GBG + bool + select SOC_SERIES_RZA3M + help + R9A07G066M04GBG + +config SOC + default "r9a07g066m04gbg" if SOC_R9A07G066M04GBG diff --git a/soc/renesas/rz/rza3m/mmu_regions.c b/soc/renesas/rz/rza3m/mmu_regions.c new file mode 100644 index 000000000000..3f07572e5804 --- /dev/null +++ b/soc/renesas/rz/rza3m/mmu_regions.c @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +static const struct arm_mmu_region mmu_regions[] = { + MMU_REGION_FLAT_ENTRY("IO_REG", 0x10000000, 0x10000000, + MT_DEVICE_nGnRnE | MT_RW | MT_DEFAULT_SECURE_STATE), +}; + +const struct arm_mmu_config mmu_config = { + .num_regions = ARRAY_SIZE(mmu_regions), + .mmu_regions = mmu_regions, +}; diff --git a/soc/renesas/rz/rza3m/pinctrl_soc.h b/soc/renesas/rz/rza3m/pinctrl_soc.h new file mode 100644 index 000000000000..d3bfddf31073 --- /dev/null +++ b/soc/renesas/rz/rza3m/pinctrl_soc.h @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_SOC_RENESAS_RZ_RZA3M_PINCTRL_SOC_H_ +#define ZEPHYR_SOC_RENESAS_RZ_RZA3M_PINCTRL_SOC_H_ + +#include + +#endif /* ZEPHYR_SOC_RENESAS_RZ_RZA3M_PINCTRL_SOC_H_ */ diff --git a/soc/renesas/rz/rza3m/sections.ld b/soc/renesas/rz/rza3m/sections.ld new file mode 100644 index 000000000000..bdc29c67e39d --- /dev/null +++ b/soc/renesas/rz/rza3m/sections.ld @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +SECTION_PROLOGUE(.header, CONFIG_FLASH_BASE_ADDRESS,) +{ + QUAD(__start) + QUAD(0xFFFFFFFFFFFFFFFF-__start) + QUAD(CONFIG_SRAM_BASE_ADDRESS) + QUAD(0xFFFFFFFFFFFFFFFF-CONFIG_SRAM_BASE_ADDRESS) + QUAD(z_mapped_size) + QUAD(0xFFFFFFFFFFFFFFFF-z_mapped_size) + FILL(0x00) + . += 0x1B0; + QUAD(0x4120505346205a52) + QUAD(0x69746163696c7070) + QUAD(0x0000000000006e6f) + QUAD(0x0000000000000000) +} > FLASH + +z_mapped_size = z_mapped_end - z_mapped_start; diff --git a/soc/renesas/rz/rza3m/soc.c b/soc/renesas/rz/rza3m/soc.c new file mode 100644 index 000000000000..b989a4c42957 --- /dev/null +++ b/soc/renesas/rz/rza3m/soc.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @file + * @brief System/hardware module for Renesas RZ/A3UL Group + */ + +#include +#include "soc.h" + +uint32_t SystemCoreClock; + +void soc_early_init_hook(void) +{ + /* Configure system clocks. */ + bsp_clock_init(); + + /* Initialize SystemCoreClock variable. */ + SystemCoreClockUpdate(); +} diff --git a/soc/renesas/rz/rza3m/soc.h b/soc/renesas/rz/rza3m/soc.h new file mode 100644 index 000000000000..3769172507ed --- /dev/null +++ b/soc/renesas/rz/rza3m/soc.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_SOC_RENESAS_RZA3M_SOC_H_ +#define ZEPHYR_SOC_RENESAS_RZA3M_SOC_H_ + +#include + +#endif /* ZEPHYR_SOC_RENESAS_RZA3M_SOC_H_ */ diff --git a/soc/renesas/rz/soc.yml b/soc/renesas/rz/soc.yml index 929a3140b758..58cf25438348 100644 --- a/soc/renesas/rz/soc.yml +++ b/soc/renesas/rz/soc.yml @@ -4,6 +4,9 @@ family: - name: rza2m socs: - name: r7s921053vcbg + - name: rza3m + socs: + - name: r9a07g066m04gbg - name: rza3ul socs: - name: r9a07g063u02gbg From e3834f0ab9d27d3ef008111b9c228a0e816019cf Mon Sep 17 00:00:00 2001 From: Nhut Nguyen Date: Thu, 27 Mar 2025 10:15:12 +0700 Subject: [PATCH 2/6] dts: arm: renesas: Add support for Renesas RZ/A3M Add devicetree to support for Renesas RZ/A3M Signed-off-by: Nhut Nguyen --- dts/arm64/renesas/rz/rza/r9a07g066.dtsi | 128 ++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 dts/arm64/renesas/rz/rza/r9a07g066.dtsi diff --git a/dts/arm64/renesas/rz/rza/r9a07g066.dtsi b/dts/arm64/renesas/rz/rza/r9a07g066.dtsi new file mode 100644 index 000000000000..516b338f36d6 --- /dev/null +++ b/dts/arm64/renesas/rz/rza/r9a07g066.dtsi @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include + +/ { + compatible = "renesas,r9a07g066"; + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,cortex-a55"; + clock-frequency = ; + reg = <0>; + }; + }; + + arch_timer: timer { + compatible = "arm,armv8-timer"; + interrupts = , + , + , + ; + interrupt-parent = <&gic>; + }; + + osc: osc { + compatible = "fixed-clock"; + clock-frequency = ; + #clock-cells = <0>; + }; + + soc { + interrupt-parent = <&gic>; + + gic: interrupt-controller@11900000 { + compatible = "arm,gic-v3", "arm,gic"; + reg = <0x11900000 0x10000>, /* GICD */ + <0x11940000 0x20000>; /* GICR */ + interrupt-controller; + #interrupt-cells = <4>; + status = "okay"; + }; + + pinctrl: pin-controller@11030000 { + compatible = "renesas,rza-pinctrl"; + reg = <0x11030000 DT_SIZE_K(64)>; + reg-names = "pinctrl"; + }; + + scif0: serial@1004b800 { + compatible = "renesas,rz-scif-uart"; + channel = <0>; + reg = <0x1004b800 0x400>; + interrupts = , + , + , + , + ; + interrupt-names = "eri", "bri", "rxi", "txi", "tei"; + status = "disabled"; + }; + + scif1: serial@1004bc00 { + compatible = "renesas,rz-scif-uart"; + channel = <1>; + reg = <0x1004bc00 0x400>; + interrupts = , + , + , + , + ; + interrupt-names = "eri", "bri", "rxi", "txi", "tei"; + status = "disabled"; + }; + + scif2: serial@1004c000 { + compatible = "renesas,rz-scif-uart"; + channel = <2>; + reg = <0x1004c000 0x400>; + interrupts = , + , + , + , + ; + interrupt-names = "eri", "bri", "rxi", "txi", "tei"; + status = "disabled"; + }; + + scif3: serial@1004c400 { + compatible = "renesas,rz-scif-uart"; + channel = <3>; + reg = <0x1004c400 0x400>; + interrupts = , + , + , + , + ; + interrupt-names = "eri", "bri", "rxi", "txi", "tei"; + status = "disabled"; + }; + + scif4: serial@1004c800 { + compatible = "renesas,rz-scif-uart"; + channel = <4>; + reg = <0x1004c800 0x400>; + interrupts = , + , + , + , + ; + interrupt-names = "eri", "bri", "rxi", "txi", "tei"; + status = "disabled"; + }; + }; +}; From f9f70a15a8ce84ce86535711fc37a38da0d3ec05 Mon Sep 17 00:00:00 2001 From: Nhut Nguyen Date: Thu, 27 Mar 2025 16:32:52 +0700 Subject: [PATCH 3/6] boards: renesas: Add minimal support for board RZ/A3M-EK This adds minimal support for board RZ/A3M-EK Signed-off-by: Nhut Nguyen --- boards/renesas/rza3m_ek/Kconfig.rza3m_ek | 5 + boards/renesas/rza3m_ek/board.cmake | 10 ++ boards/renesas/rza3m_ek/board.yml | 6 + boards/renesas/rza3m_ek/doc/index.rst | 162 ++++++++++++++++++ .../rza3m_ek/doc/rza3m_block_diagram.webp | Bin 0 -> 15736 bytes boards/renesas/rza3m_ek/doc/rza3m_ek.webp | Bin 0 -> 43328 bytes boards/renesas/rza3m_ek/rza3m_ek.dts | 124 ++++++++++++++ boards/renesas/rza3m_ek/rza3m_ek.yaml | 13 ++ boards/renesas/rza3m_ek/rza3m_ek_defconfig | 19 ++ modules/Kconfig.renesas | 15 ++ 10 files changed, 354 insertions(+) create mode 100644 boards/renesas/rza3m_ek/Kconfig.rza3m_ek create mode 100644 boards/renesas/rza3m_ek/board.cmake create mode 100644 boards/renesas/rza3m_ek/board.yml create mode 100644 boards/renesas/rza3m_ek/doc/index.rst create mode 100644 boards/renesas/rza3m_ek/doc/rza3m_block_diagram.webp create mode 100644 boards/renesas/rza3m_ek/doc/rza3m_ek.webp create mode 100644 boards/renesas/rza3m_ek/rza3m_ek.dts create mode 100644 boards/renesas/rza3m_ek/rza3m_ek.yaml create mode 100644 boards/renesas/rza3m_ek/rza3m_ek_defconfig diff --git a/boards/renesas/rza3m_ek/Kconfig.rza3m_ek b/boards/renesas/rza3m_ek/Kconfig.rza3m_ek new file mode 100644 index 000000000000..8675734db1ca --- /dev/null +++ b/boards/renesas/rza3m_ek/Kconfig.rza3m_ek @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_RZA3M_EK + select SOC_R9A07G066M04GBG diff --git a/boards/renesas/rza3m_ek/board.cmake b/boards/renesas/rza3m_ek/board.cmake new file mode 100644 index 000000000000..5622192b6c5e --- /dev/null +++ b/boards/renesas/rza3m_ek/board.cmake @@ -0,0 +1,10 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=R9A07G066M04") +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) + +if(CONFIG_BUILD_WITH_RZA_IPL) + set(RZA_PLAT a3m) + set(RZA_BOARD a3m_ek_nor) +endif() diff --git a/boards/renesas/rza3m_ek/board.yml b/boards/renesas/rza3m_ek/board.yml new file mode 100644 index 000000000000..1329537f95b5 --- /dev/null +++ b/boards/renesas/rza3m_ek/board.yml @@ -0,0 +1,6 @@ +board: + name: rza3m_ek + full_name: RZ/A3M Evaluation Kit + vendor: renesas + socs: + - name: r9a07g066m04gbg diff --git a/boards/renesas/rza3m_ek/doc/index.rst b/boards/renesas/rza3m_ek/doc/index.rst new file mode 100644 index 000000000000..7291e148453c --- /dev/null +++ b/boards/renesas/rza3m_ek/doc/index.rst @@ -0,0 +1,162 @@ +.. zephyr:board:: rza3m_ek + +Overview +******** + +The EK-RZ/A3M evaluation kit enables users to easily evaluate the features of the RZ/A3M MPU. +This kit includes an EK-RZ/A3M board, 5-inch 720x1280 pixel LCD MIPI graphics expansion board, and +USB cables, allowing the seamless evaluation of high-definition human machine interface (HMI), camera +input through USB, and more features. Equipped with an on-board J-Link debugger, users can +conveniently start debugging without additional debuggers. +Additionally, it also has several expansion connectors such as SDIO, PMOD,and Arduino to connect +sensors, Wi-Fi, and Bluetooth® Low Energy (LE), allowing users to add more features without +expanding the board space. + +* Special Feature Access + + * MIPI DSI 4 lanes & parallel graphics expansion ports + * 5-inch MIPI LCD panel (720x1280 pixels) + * USB High-Speed Host & Device + * 32MB External QSPI NOR Flash + * 128MB External QSPI NAND Flash + * External sound codec + * External RTC + +* MPU Native Pin Access + + * R9A07G066M04GBG MPU + * 1GHz, Arm Cortex®-A55 core w/NEON extension + * Built-in 128MB DDR3L DRAM + * 128KB SRAM w/ECC + * 244 pins, BGA package + * Native pin access + * MPU & USB current measurement + +* Ecosystem & System Control Access + + * USB High-Speed Host & Device + * 5V input through USB (Debug, HS, USB-PD) or external power supply + * Debug on-board (Segger J-Link®) + * Debug external (SWD & JTAG) + * SCIF download (SWD) + * 3 user LEDs & 2 user buttons + * 2 SeeedGrove® system (I2C & analog) + * 2 Digilent Pmod™ (I2C, SPI or UART selectable) + * Arduino™ (Uno R3) + * MikroElektronika™ mikroBUS + * SparkFun® Qwiic® (I2C) + * MPU boot configuration switch + * Audio In/Out 4-pole + * MicroSD card slot + +* Kit Contents + + * EK-RZ/A3M board + * MIPI graphics expansion board + * USB cable (USB C to USB C) + * USB cable (USB A female to USB C) + * USB cable (USB A male to USB C) + * Screw and spacer for fixing the sub board + +Hardware +******** +The Renesas RZ/A3M MPU documentation can be found at `RZ/A3M Group Website`_ + +.. figure:: rza3m_block_diagram.webp + :width: 600px + :align: center + :alt: RZ/A3M group feature + + RZ/A3M block diagram (Credit: Renesas Electronics Corporation) + +Detailed hardware features for the board can be found at `EK-RZ/A3M Website`_ + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Programming and Debugging +************************* + +EK-RZ/A3M uses Initial Program Loader (IPL) to perform initial settings and copy the Zephyr image from flash to DDR SRAM for execution. +It only needs to be written to flash at lease once before running Zephyr. + +1. For the board setup and connections, follow "3.2 Board Setup" of `Getting Started with RZ/A Flexible Software Package`_. + +2. Enable the IPL build with ``-DCONFIG_BUILD_WITH_RZA_IPL=y``. + The IPL image ``rza3m_ek_nor_ipl.bin`` is generated under zephyrproject/zephyr/build/rza_ipl/a3m/release + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: rza3m_ek + :goals: build + :gen-args: -DCONFIG_BUILD_WITH_RZA_IPL=y + +.. note:: + Currently, the IPL source code can built on Linux environment only. + For Windows, please follow `Initial Program Loader Application Note`_ + +3. Flash it onto the board at address 0x20000000 by Jlink command `Segger JLink Renesas R9A07G066`_ + +.. code-block:: console + + $ JLinkExe + J-Link> connect + Device> R9A07G066M04 + TIF> s + Speed> [Enter] + J-Link> h + J-Link> loadfile 0x20000000 + +Where ```` is the path to the ``rza3m_ek_nor_ipl.bin`` in the output directory. + +Applications for the ``rza3m_ek`` board can be built in the usual way as +documented in :ref:`build_an_application`. + +Console +======= +The UART port is accessed by USB Debug connector (J10). + +Debugging +========= + +It is possible to load and execute a Zephyr application binary on this board on the Cortex-A55 System Core +from the DDR SDRAM, using ``JLink`` debugger (:ref:`jlink-debug-host-tools`). + +Here is an example for building and debugging with the :zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: rza3m_ek + :goals: build debug + +Flashing +======== + +Zephyr application can be flashed to Quad-SPI storage and then loaded by Initial Program Loader. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: rza3m_ek + :goals: build flash + +References +********** + +.. target-notes:: + +.. _RZ/A3M Group Website: + https://www.renesas.com/en/products/microcontrollers-microprocessors/rz-mpus/rza3m-powerful-1ghz-mpus-built-ddr3l-sdram-high-definition-hmi + +.. _EK-RZ/A3M Website: + https://www.renesas.com/en/products/microcontrollers-microprocessors/rz-mpus/ek-rza3m-evaluation-kit-rza3m-mpu + +.. _Initial Program Loader Application Note: + https://github.com/renesas/rza-initial-program-loader/tree/main/application_note + +.. _Getting Started with RZ/A Flexible Software Package: + https://www.renesas.com/en/document/apn/rza-getting-started-flexible-software-package + +.. _Segger JLink Renesas R9A07G066: + https://kb.segger.com/Renesas_R9A07G066 diff --git a/boards/renesas/rza3m_ek/doc/rza3m_block_diagram.webp b/boards/renesas/rza3m_ek/doc/rza3m_block_diagram.webp new file mode 100644 index 0000000000000000000000000000000000000000..b3ca900ac02e6c268975aecc1f2764cd2caa65a9 GIT binary patch literal 15736 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�Dx^c;Pg0RQ2wgpEjFK}mGR5B?kFMCQ5jC4t?$Iq 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 +#include +#include +#include +#include +#include "rza3m_ek-pinctrl.dtsi" + +/ { + model = "Renesas RZ/A3M EK"; + compatible = "renesas,rza3m-ek"; + + chosen { + zephyr,sram = &ddr; + zephyr,flash = &spi_flash; + zephyr,console = &scif0; + zephyr,shell-uart = &scif0; + zephyr,code-partition= &slot0_partition; + }; + + ddr: memory@40200000 { + compatible ="zephyr,memory-region", "mmio-sram"; + reg = <0x40200000 (DT_SIZE_M(128) - 0x200000)>; + zephyr,memory-region = "DDR"; + }; + + sram: memory@1e000 { + compatible ="zephyr,memory-region", "mmio-sram"; + reg = <0x1e000 DT_SIZE_K(72)>; + zephyr,memory-region = "SRAM"; + }; + + spi_flash: memory@20020000 { + compatible = "mmio-sram"; + reg = <0x20020000 (DT_SIZE_M(16) - 0x20000)>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + header: partition@0 { + label = "header"; + reg = <0x00000000 0x200>; + read-only; + }; + + slot0_partition: partition@200 { + label = "image-0"; + reg = <0x00000200 (DT_SIZE_M(16) - 0x20200)>; + read-only; + }; + }; + }; + + aliases { + led0 = &led1; + sw0 = &sw1; + }; + + leds { + compatible = "gpio-leds"; + + led1: led1 { + gpios = <&gpio10 1 GPIO_ACTIVE_HIGH>; + label = "led1"; + }; + + led2: led2 { + gpios = <&gpio20 3 GPIO_ACTIVE_HIGH>; + label = "led2"; + }; + + led3: led3 { + gpios = <&gpio20 4 GPIO_ACTIVE_HIGH>; + label = "led3"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + + sw1: sw1 { + label = "sw1"; + gpios = <&gpio10 3 GPIO_ACTIVE_HIGH>; + zephyr,code = ; + }; + + sw2: sw2 { + label = "sw2"; + gpios = <&gpio11 1 GPIO_ACTIVE_HIGH>; + zephyr,code = ; + }; + }; +}; + +&scif0 { + current-speed = <115200>; + pinctrl-0 = <&scif0_pins>; + pinctrl-names = "default"; + status = "okay"; +}; + +&gpio { + status = "okay"; +}; + +&gpio10 { + status = "okay"; +}; + +&gpio11 { + status = "okay"; +}; + +&gpio20 { + status = "okay"; +}; diff --git a/boards/renesas/rza3m_ek/rza3m_ek.yaml b/boards/renesas/rza3m_ek/rza3m_ek.yaml new file mode 100644 index 000000000000..a723d7ee3c18 --- /dev/null +++ b/boards/renesas/rza3m_ek/rza3m_ek.yaml @@ -0,0 +1,13 @@ +identifier: rza3m_ek +name: Renesas RZ/A3M Evaluation Kit +type: mcu +arch: arm64 +toolchain: + - zephyr + - cross-compile +supported: + - uart + - gpio +testing: + ignore_tags: + - bluetooth diff --git a/boards/renesas/rza3m_ek/rza3m_ek_defconfig b/boards/renesas/rza3m_ek/rza3m_ek_defconfig new file mode 100644 index 000000000000..dd2f33248dd5 --- /dev/null +++ b/boards/renesas/rza3m_ek/rza3m_ek_defconfig @@ -0,0 +1,19 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_XIP=n + +# MMU Options +CONFIG_MAX_XLAT_TABLES=24 + +# Cache Options +CONFIG_CACHE_MANAGEMENT=y +CONFIG_DCACHE_LINE_SIZE_DETECT=y +CONFIG_ICACHE_LINE_SIZE_DETECT=y + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y diff --git a/modules/Kconfig.renesas b/modules/Kconfig.renesas index 479d96f56e1b..8e647c6d1b5d 100644 --- a/modules/Kconfig.renesas +++ b/modules/Kconfig.renesas @@ -265,6 +265,21 @@ config USE_RZ_FSP_SCI_UART help Enable RZ FSP SCI UART driver +menuconfig BUILD_WITH_RZA_IPL + bool "Build with RZ/A Initial Program Loader (IPL)" + help + When enabled, this option instructs the Zephyr build process to + additionally generate IPL image for Renesas RZ/A series. + +if BUILD_WITH_RZA_IPL + +config RZA_IPL_BUILD_DEBUG + bool "Debug build" + help + When enabled, the build type of IPL would be debug. + +endif # BUILD_WITH_RZA_IPL + endif config HAS_RENESAS_RX_RDP From 3f737f5fe705812a978fcda0881b28595c012851 Mon Sep 17 00:00:00 2001 From: Nhut Nguyen Date: Tue, 27 May 2025 08:01:18 +0000 Subject: [PATCH 4/6] driver: pinctrl: Add support for Renesas RZ/A3M Add pinctrl support for Renesas RZ/A3M Signed-off-by: Nhut Nguyen --- boards/renesas/rza3m_ek/rza3m_ek-pinctrl.dtsi | 18 +++++ .../pinctrl/renesas/pinctrl-rza3m.h | 68 +++++++++++++++++++ soc/renesas/rz/common/pinctrl_rza.h | 10 ++- 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 boards/renesas/rza3m_ek/rza3m_ek-pinctrl.dtsi create mode 100644 include/zephyr/dt-bindings/pinctrl/renesas/pinctrl-rza3m.h diff --git a/boards/renesas/rza3m_ek/rza3m_ek-pinctrl.dtsi b/boards/renesas/rza3m_ek/rza3m_ek-pinctrl.dtsi new file mode 100644 index 000000000000..fa21bc8f910e --- /dev/null +++ b/boards/renesas/rza3m_ek/rza3m_ek-pinctrl.dtsi @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +&pinctrl { + /omit-if-no-ref/ scif0_pins: scif0 { + scif0-pinmux { + pinmux = , /* RXD */ + ; /* TXD */ + drive-strength = <1>; + slew-rate = "fast"; + }; + }; +}; diff --git a/include/zephyr/dt-bindings/pinctrl/renesas/pinctrl-rza3m.h b/include/zephyr/dt-bindings/pinctrl/renesas/pinctrl-rza3m.h new file mode 100644 index 000000000000..cc7dee10c741 --- /dev/null +++ b/include/zephyr/dt-bindings/pinctrl/renesas/pinctrl-rza3m.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RZA3M_H_ +#define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RZA3M_H_ + +/* Superset list of all possible IO ports. */ +#define PORT_00 0x0F00 /* IO port 0 */ +#define PORT_01 0x1000 /* IO port 1 */ +#define PORT_02 0x1100 /* IO port 2 */ +#define PORT_03 0x1200 /* IO port 3 */ +#define PORT_04 0x1300 /* IO port 4 */ +#define PORT_05 0x1400 /* IO port 5 */ +#define PORT_06 0x1500 /* IO port 6 */ +#define PORT_07 0x1600 /* IO port 7 */ +#define PORT_08 0x1700 /* IO port 8 */ +#define PORT_09 0x1800 /* IO port 9 */ +#define PORT_10 0x1900 /* IO port 10 */ +#define PORT_11 0x1A00 /* IO port 11 */ +#define PORT_12 0x1B00 /* IO port 12 */ +#define PORT_20 0x0000 /* IO port 20 */ +#define PORT_21 0x0100 /* IO port 21 */ +#define PORT_22 0x0300 /* IO port 22 */ +#define PORT_23 0x0400 /* IO port 23 */ + +/* + * Create the value contain port/pin/function information + * + * port: port number BSP_IO_PORT_00..BSP_IO_PORT_18 + * pin: pin number + * func: pin function + */ +#define RZA_PINMUX(port, pin, func) (port | pin | (func << 4)) + +/* Special purpose port */ +#define BSP_IO_NMI 0xFFFF0001 /* NMI */ + +#define BSP_IO_TMS_SWDIO 0xFFFF0200 /* TMS_SWDIO */ + +#define BSP_IO_SD0_CLK 0xFFFF0400 /* SD0_CLK */ + +#define BSP_IO_QSPI0_SPCLK 0xFFFF0500 /* QSPI0_SPCLK */ +#define BSP_IO_QSPI0_IO0 0xFFFF0501 /* QSPI0_IO0 */ +#define BSP_IO_QSPI0_IO1 0xFFFF0502 /* QSPI0_IO1 */ +#define BSP_IO_QSPI0_SSL 0xFFFF0505 /* QSPI0_SSL */ + +#define BSP_IO_WDTOVF_PERROUT 0xFFFF0600 /* WDTOVF_PERROUT */ + +#define BSP_IO_RIIC0_SDA 0xFFFF0700 /* RIIC0_SDA */ +#define BSP_IO_RIIC0_SCL 0xFFFF0701 /* RIIC0_SCL */ + +/* FILNUM */ +#define RZA_FILNUM_4_STAGE 0 +#define RZA_FILNUM_8_STAGE 1 +#define RZA_FILNUM_12_STAGE 2 +#define RZA_FILNUM_16_STAGE 3 + +/* FILCLKSEL */ +#define RZA_FILCLKSEL_NOT_DIV 0 +#define RZA_FILCLKSEL_DIV_9000 1 +#define RZA_FILCLKSEL_DIV_18000 2 +#define RZA_FILCLKSEL_DIV_36000 3 + +#define RZA_FILTER_SET(filnum, filclksel) (((filnum) & 0x3) << 0x2) | (filclksel & 0x3) + +#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RZA3M_H_ */ diff --git a/soc/renesas/rz/common/pinctrl_rza.h b/soc/renesas/rz/common/pinctrl_rza.h index 5471a358699f..1d7d76bd2377 100644 --- a/soc/renesas/rz/common/pinctrl_rza.h +++ b/soc/renesas/rz/common/pinctrl_rza.h @@ -62,6 +62,14 @@ typedef struct pinctrl_soc_pin_t { #define RZA_FILTER_ON_OFF(node_id) COND_CODE_0(DT_PROP(node_id, renesas_filter), (0), (1)) +#if defined(CONFIG_SOC_SERIES_RZA3M) +#define RZA_GET_PFC(node_id, state_prop, idx) \ + (RZA_GET_FUNC(DT_PROP_BY_IDX(node_id, state_prop, idx)) - 1) +#else +#define RZA_GET_PFC(node_id, state_prop, idx) \ + (RZA_GET_FUNC(DT_PROP_BY_IDX(node_id, state_prop, idx))) +#endif + /* Process pinmux cfg */ #define Z_PINCTRL_PINMUX_INIT(node_id, state_prop, idx) \ { \ @@ -77,7 +85,7 @@ typedef struct pinctrl_soc_pin_t { .filonoff_reg = RZA_FILTER_ON_OFF(node_id), \ .filnum_reg = RZA_GET_FILNUM(node_id), \ .filclksel_reg = RZA_GET_FILCLKSEL(node_id), \ - .pfc_reg = RZA_GET_FUNC(DT_PROP_BY_IDX(node_id, state_prop, idx)), \ + .pfc_reg = RZA_GET_PFC(node_id, state_prop, idx), \ }, \ }, From 7cca64ee59fbc8f34d64dd1506337ab0f4349582 Mon Sep 17 00:00:00 2001 From: Nhut Nguyen Date: Tue, 27 May 2025 08:06:42 +0000 Subject: [PATCH 5/6] drivers: gpio: Add support for RZ/A3M Add GPIO driver support for RZ/A3M Signed-off-by: Nhut Nguyen --- drivers/gpio/gpio_renesas_rz.h | 14 +- dts/arm64/renesas/rz/rza/r9a07g066.dtsi | 256 ++++++++++++++++++ .../gpio/gpio_basic_api/boards/rza3m_ek.conf | 1 + .../gpio_basic_api/boards/rza3m_ek.overlay | 20 ++ 4 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.conf create mode 100644 tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.overlay diff --git a/drivers/gpio/gpio_renesas_rz.h b/drivers/gpio/gpio_renesas_rz.h index 3258ca8bd06b..04ef2c062c9f 100644 --- a/drivers/gpio/gpio_renesas_rz.h +++ b/drivers/gpio/gpio_renesas_rz.h @@ -15,7 +15,7 @@ #if defined(CONFIG_SOC_SERIES_RZG3S) || defined(CONFIG_SOC_SERIES_RZA3UL) || \ defined(CONFIG_SOC_SERIES_RZV2L) || defined(CONFIG_SOC_SERIES_RZG2L) || \ defined(CONFIG_SOC_SERIES_RZV2H) || defined(CONFIG_SOC_SERIES_RZG2UL) || \ - defined(CONFIG_SOC_SERIES_RZV2N) + defined(CONFIG_SOC_SERIES_RZV2N) || defined(CONFIG_SOC_SERIES_RZA3M) #include #if defined(CONFIG_SOC_SERIES_RZG3S) @@ -40,6 +40,18 @@ static const uint8_t gpio_rz_int[GPIO_RZ_MAX_PORT_NUM] = {0, 4, 9, 13, 17, 23 static const uint8_t gpio_rz_int[GPIO_RZ_MAX_PORT_NUM] = {0, 4, 9, 13, 17, 23, 28, 33, 38, 43, 47, 52, 56, 58, 63, 66, 70, 72, 76}; +#elif defined(CONFIG_SOC_SERIES_RZA3M) +#define GPIO_RZ_P_REG_BASE_GET (&R_GPIO->P01) +#define GPIO_RZ_PM_REG_BASE_GET (&R_GPIO->PM01) +#define GPIO_RZ_PFC_REG_BASE_GET (&R_GPIO->PFC01) +#define GPIO_RZ_MAX_PORT_NUM 24 +#define GPIO_RZ_TINT_IRQ_OFFSET 476 +#define R_INTC R_INTC_IA55 +#define GPIO_RZ_TINT_STATUS_REG_CLEAR(tint_num) (R_INTC_IA55->TSCR &= ~BIT(tint_num)) +static const uint8_t gpio_rz_int[GPIO_RZ_MAX_PORT_NUM] = {0, 4, 9, 13, 17, 23, 28, 33, 38, 42, + 47, 52, 56, 0, 0, 0, 0, 0, 0, 0, + 58, 64, 67, 72}; + #elif defined(CONFIG_SOC_SERIES_RZV2H) || defined(CONFIG_SOC_SERIES_RZV2N) #define GPIO_RZ_P_REG_BASE_GET (&R_GPIO->P20) #define GPIO_RZ_PM_REG_BASE_GET (&R_GPIO->PM20) diff --git a/dts/arm64/renesas/rz/rza/r9a07g066.dtsi b/dts/arm64/renesas/rz/rza/r9a07g066.dtsi index 516b338f36d6..89194ac329fd 100644 --- a/dts/arm64/renesas/rz/rza/r9a07g066.dtsi +++ b/dts/arm64/renesas/rz/rza/r9a07g066.dtsi @@ -58,6 +58,262 @@ compatible = "renesas,rza-pinctrl"; reg = <0x11030000 DT_SIZE_K(64)>; reg-names = "pinctrl"; + + gpio: gpio-common { + compatible = "renesas,rz-gpio-int"; + interrupts = + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + , + ; + #address-cells = <1>; + #size-cells = <0>; + status = "disabled"; + + gpio0: gpio@f00 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <4>; + reg = <0xf00>; + status = "disabled"; + }; + + gpio1: gpio@1000 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <5>; + reg = <0x1000>; + status = "disabled"; + }; + + gpio2: gpio@1100 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <4>; + reg = <0x1100>; + status = "disabled"; + }; + + gpio3: gpio@1200 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <4>; + reg = <0x1200>; + status = "disabled"; + }; + + gpio4: gpio@1300 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <6>; + reg = <0x1300>; + status = "disabled"; + }; + + gpio5: gpio@1400 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <5>; + reg = <0x1400>; + status = "disabled"; + }; + + gpio6: gpio@1500 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <5>; + reg = <0x1500>; + status = "disabled"; + }; + + gpio7: gpio@1600 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <2>; + reg = <0x1600>; + status = "disabled"; + }; + + gpio8: gpio@1700 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <4>; + reg = <0x1700>; + status = "disabled"; + }; + + gpio9: gpio@1800 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <5>; + reg = <0x1800>; + status = "disabled"; + }; + + gpio10: gpio@1900 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <4>; + reg = <0x1900>; + status = "disabled"; + }; + + gpio11: gpio@1a00 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <4>; + reg = <0x1a00>; + status = "disabled"; + }; + + gpio12: gpio@1b00 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <2>; + reg = <0x1b00>; + status = "disabled"; + }; + + gpio13: gpio@1c00 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <0>; + reg = <0x1c00>; + status = "disabled"; + }; + + gpio14: gpio@1d00 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <0>; + reg = <0x1d00>; + status = "disabled"; + }; + + gpio15: gpio@1e00 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <0>; + reg = <0x1e00>; + status = "disabled"; + }; + + gpio16: gpio@1f00 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <0>; + reg = <0x1f00>; + status = "disabled"; + }; + + gpio17: gpio@2000 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <0>; + reg = <0x2000>; + status = "disabled"; + }; + + gpio18: gpio@2100 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <0>; + reg = <0x2100>; + status = "disabled"; + }; + + gpio19: gpio@2200 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <0>; + reg = <0x2200>; + status = "disabled"; + }; + + gpio20: gpio@0 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <6>; + reg = <0x0>; + status = "disabled"; + }; + + gpio21: gpio@100 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <3>; + reg = <0x100>; + status = "disabled"; + }; + + gpio22: gpio@300 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <5>; + reg = <0x300>; + status = "disabled"; + }; + + gpio23: gpio@400 { + compatible = "renesas,rz-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <2>; + reg = <0x400>; + status = "disabled"; + }; + }; }; scif0: serial@1004b800 { diff --git a/tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.conf b/tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.conf new file mode 100644 index 000000000000..b9d02cf11d5d --- /dev/null +++ b/tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.conf @@ -0,0 +1 @@ +CONFIG_SKIP_PULL_TEST=y diff --git a/tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.overlay b/tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.overlay new file mode 100644 index 000000000000..bde8907a1fc1 --- /dev/null +++ b/tests/drivers/gpio/gpio_basic_api/boards/rza3m_ek.overlay @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + resources { + compatible = "test-gpio-basic-api"; + out-gpios = <&gpio5 3 GPIO_ACTIVE_HIGH>; + in-gpios = <&gpio8 0 GPIO_ACTIVE_HIGH>; + }; +}; + +&gpio5 { + status = "okay"; +}; + +&gpio8 { + status = "okay"; +}; From b2cfb69ad2fff242a970fd2f27c8eec74392cdba Mon Sep 17 00:00:00 2001 From: Nhut Nguyen Date: Wed, 4 Jun 2025 09:34:28 +0700 Subject: [PATCH 6/6] tests: arch: arm64: arm64_high_address: Exclude Renesas EK-RZ/A3M Exclude EK-RZ/A3M board as the redefined CONFIG_SRAM_BASE_ADDRESS degrades the BUILD_OUTPUT_ADJUST_LMA option that will generate a bin file >10GB Signed-off-by: Nhut Nguyen --- tests/arch/arm64/arm64_high_addresses/testcase.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/arch/arm64/arm64_high_addresses/testcase.yaml b/tests/arch/arm64/arm64_high_addresses/testcase.yaml index 9b09f9745a61..238ff45ee29d 100644 --- a/tests/arch/arm64/arm64_high_addresses/testcase.yaml +++ b/tests/arch/arm64/arm64_high_addresses/testcase.yaml @@ -2,6 +2,7 @@ common: arch_allow: arm64 platform_exclude: - rza3ul_smarc + - rza3m_ek tags: - arm - userspace