From 0a0e734193da8e1951bdd6a0d5e2f8ee1759aa7c Mon Sep 17 00:00:00 2001 From: Quy Tran Date: Thu, 24 Jul 2025 06:41:53 +0000 Subject: [PATCH 1/6] manifest: hal: renesas: Update commit ID for hal_renesas Update commit ID for hal_renesas to add HAL RX26T support Signed-off-by: Quy Tran --- west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/west.yml b/west.yml index 60cd188d65129..316eeda0b9495 100644 --- a/west.yml +++ b/west.yml @@ -226,7 +226,7 @@ manifest: - hal - name: hal_renesas path: modules/hal/renesas - revision: 0769fe1520f6c14e6301188588da758a609f181d + revision: pull/121/head groups: - hal - name: hal_rpi_pico From 36eb7f135d0b45d2c6bedfe5cffcc2ede2398487 Mon Sep 17 00:00:00 2001 From: Hau Ho Date: Thu, 27 Feb 2025 17:26:01 +0700 Subject: [PATCH 2/6] soc: renesas: rx: Initial support for RX26T SOC This commit to initial support for RX26T SOC using Renesas RXv3 core. Signed-off-by: Hau Ho --- soc/renesas/rx/rx26t/CMakeLists.txt | 12 +++++++ soc/renesas/rx/rx26t/Kconfig | 10 ++++++ soc/renesas/rx/rx26t/Kconfig.defconfig | 24 ++++++++++++++ soc/renesas/rx/rx26t/Kconfig.soc | 20 +++++++++++ soc/renesas/rx/rx26t/ofsm.c | 41 +++++++++++++++++++++++ soc/renesas/rx/rx26t/ofsm.ld | 28 ++++++++++++++++ soc/renesas/rx/rx26t/soc.c | 46 ++++++++++++++++++++++++++ soc/renesas/rx/rx26t/soc.h | 17 ++++++++++ soc/renesas/rx/soc.yml | 3 ++ 9 files changed, 201 insertions(+) create mode 100644 soc/renesas/rx/rx26t/CMakeLists.txt create mode 100644 soc/renesas/rx/rx26t/Kconfig create mode 100644 soc/renesas/rx/rx26t/Kconfig.defconfig create mode 100644 soc/renesas/rx/rx26t/Kconfig.soc create mode 100644 soc/renesas/rx/rx26t/ofsm.c create mode 100644 soc/renesas/rx/rx26t/ofsm.ld create mode 100644 soc/renesas/rx/rx26t/soc.c create mode 100644 soc/renesas/rx/rx26t/soc.h diff --git a/soc/renesas/rx/rx26t/CMakeLists.txt b/soc/renesas/rx/rx26t/CMakeLists.txt new file mode 100644 index 0000000000000..278090303888b --- /dev/null +++ b/soc/renesas/rx/rx26t/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +zephyr_include_directories(.) + +zephyr_sources( + soc.c +) + +zephyr_linker_sources(SECTIONS ofsm.ld) + +set(SOC_LINKER_SCRIPT ${ZEPHYR_BASE}/include/zephyr/arch/rx/linker.ld CACHE INTERNAL "") diff --git a/soc/renesas/rx/rx26t/Kconfig b/soc/renesas/rx/rx26t/Kconfig new file mode 100644 index 0000000000000..54c68b53159b9 --- /dev/null +++ b/soc/renesas/rx/rx26t/Kconfig @@ -0,0 +1,10 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_RX26T + select RX + select CPU_RXV3 + select XIP + select CLOCK_CONTROL_RENESAS_RX_CGC if CLOCK_CONTROL + select HAS_RENESAS_RX_RDP + select CLOCK_CONTROL diff --git a/soc/renesas/rx/rx26t/Kconfig.defconfig b/soc/renesas/rx/rx26t/Kconfig.defconfig new file mode 100644 index 0000000000000..f237db715f421 --- /dev/null +++ b/soc/renesas/rx/rx26t/Kconfig.defconfig @@ -0,0 +1,24 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +if SOC_SERIES_RX26T + +# Set the PCLKB/8 frequency to SYS_CLOCK_HW_CYCLES_PER_SEC. +# Because the CMT of Systick Timer divides the source clock of PCLKB by 8-divider. +config SYS_CLOCK_HW_CYCLES_PER_SEC + default 7500000 + +# SYS_CLOCK_TICKS_PER_SEC is set to 100 if PCLKB is 48MHz or less. +# (PCLKB = SYS_CLOCK_HW_CYCLES_PER_SEC * 8) +config SYS_CLOCK_TICKS_PER_SEC + #default 100 if SYS_CLOCK_HW_CYCLES_PER_SEC <= 6000000 + default 1000 + +config INITIALIZATION_STACK_SIZE + default 512 + +# Enable hex file generation +config BUILD_OUTPUT_HEX + default y + +endif # SOC_SERIES_RX26T diff --git a/soc/renesas/rx/rx26t/Kconfig.soc b/soc/renesas/rx/rx26t/Kconfig.soc new file mode 100644 index 0000000000000..fcb1de7a1c5cd --- /dev/null +++ b/soc/renesas/rx/rx26t/Kconfig.soc @@ -0,0 +1,20 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +config SOC_SERIES_RX26T + bool + select SOC_FAMILY_RENESAS_RX + help + Renesas RX26T series + +config SOC_R5F526TFDDFP + bool + select SOC_SERIES_RX26T + help + SOC_R5F526TFDDFP + +config SOC_SERIES + default "rx26t" if SOC_SERIES_RX26T + +config SOC + default "r5f526tfddfp" if SOC_R5F526TFDDFP diff --git a/soc/renesas/rx/rx26t/ofsm.c b/soc/renesas/rx/rx26t/ofsm.c new file mode 100644 index 0000000000000..eb81b0a327949 --- /dev/null +++ b/soc/renesas/rx/rx26t/ofsm.c @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 KT-Elektronik, Klaucke und Partner GmbH + * Copyright (c) 2025 Renesas Electronics Corporation + * SPDX-License-Identifier: Apache-2.0 + * + * + * Option-Setting Memory for the RX. This region of memory (located in flash) + * determines the state of the MCU after reset and can not be changed on runtime + * + * All registers are set to 0xffffffff by default, which are "safe" settings. + * Please refer to the Renesas RX Group User's Manual before changing any of + * the values as some changes can be permanent or lock access to the device. + * + * Address range: 0x00120040 to 0x001200ff + */ + +#define __OFS_MDE __attribute__((section(".ofs_mde"))) +#define __OFS0 __attribute__((section(".ofs0"))) +#define __OFS1 __attribute__((section(".ofs1"))) + +/* Endian Select Register (MDE) at 0x00120064 + * + * b2 to b0: endian select between (0 0 0) for big endian and (1 1 1) for little + * endian. Set this according to __BYTE_ORDER__ (cf. include\toolchain\gcc.h) + * + * b6-b4 (Bank Mode Select) indicate whether the flash is operated in + * Dual mode (0 0 0) or Linear mode (1 1 1). + * + * all other bits are reserved and have to be set to 1 + */ +const unsigned long __OFS_MDE __MDEreg = 0xffffffffU; /* little */ + +/* Option function select register 0 (OFS0) at 0x00120068 (Watchdog settings) + */ + +const unsigned long __OFS0 __OFS0reg = 0xffffffffU; + +/* Option Function Select Register 1 (OFS1) at 0x0012006C (Voltage detection and + * HOCO) + */ +const unsigned long __OFS1 __OFS1reg = 0xffffffffU; diff --git a/soc/renesas/rx/rx26t/ofsm.ld b/soc/renesas/rx/rx26t/ofsm.ld new file mode 100644 index 0000000000000..f54ed44eb7ae0 --- /dev/null +++ b/soc/renesas/rx/rx26t/ofsm.ld @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +SECTION_PROLOGUE(.ofsm,,) +{ + __OFSM_START = .; + KEEP(*(.spcc)) + . = __OFSM_START + 0x8; + KEEP(*(.tmef)) + . = __OFSM_START + 0x10; + KEEP(*(.osis)) + . = __OFSM_START + 0x20; + KEEP(*(.tminf)) + . = __OFSM_START + 0x24; + KEEP(*(.mde)) + . = __OFSM_START + 0x28; + KEEP(*(.ofs0)) + . = __OFSM_START + 0x2c; + KEEP(*(.ofs1)) + . = __OFSM_START + 0x50; + KEEP(*(.banksel)) + . = __OFSM_START + 0x60; + KEEP(*(.faw)) + __OFSM_END = .; +} GROUP_LINK_IN(OFSM) = 0xFF diff --git a/soc/renesas/rx/rx26t/soc.c b/soc/renesas/rx/rx26t/soc.c new file mode 100644 index 0000000000000..3691f72d562a6 --- /dev/null +++ b/soc/renesas/rx/rx26t/soc.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @brief System/hardware module for RX SOC family + */ + +#include +#include +#include +#include +#include + +#include "platform.h" +#include "r_bsp_cpu.h" + +/** + * @brief Perform basic hardware initialization at boot. + * + * This needs to be run from the very beginning. + * So the init priority has to be 0 (zero). + * + * @return 0 + */ +void soc_early_init_hook(void) +{ +#ifdef CONFIG_HAS_RENESAS_RX_RDP + bsp_ram_initialize(); + bsp_interrupt_open(); + bsp_register_protect_open(); +#if CONFIG_RENESAS_NONE_USED_PORT_INIT == 1 + /* + * This is the function that initializes the unused port. + * Please see datails on this in the "Handling of Unused Pins" section of PORT chapter + * of RX MCU of User's manual. + * And please MUST set "BSP_PACKAGE_PINS" definition to your device of pin type in + * r_bsp_config.h Otherwise, the port may output without intention. + */ + bsp_non_existent_port_init(); + +#endif /* CONFIG_RENESAS_NONE_USED_PORT_INIT */ +#endif /* CONFIG_HAS_RENESAS_RX_RDP */ +} diff --git a/soc/renesas/rx/rx26t/soc.h b/soc/renesas/rx/rx26t/soc.h new file mode 100644 index 0000000000000..f1653a6c0b745 --- /dev/null +++ b/soc/renesas/rx/rx26t/soc.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * @brief SOC header file for Renesas RX SOC series + */ + +#ifndef _SOC_H_ +#define _SOC_H_ + +#include +#include "reg_protection.h" + +#endif /* _SOC_H_ */ diff --git a/soc/renesas/rx/soc.yml b/soc/renesas/rx/soc.yml index 5d28644afd65f..66aa865ef7fe0 100644 --- a/soc/renesas/rx/soc.yml +++ b/soc/renesas/rx/soc.yml @@ -7,3 +7,6 @@ family: - name: rx62n socs: - name: r5f562n8 + - name: rx26t + socs: + - name: r5f526tfddfp From bf5bc95b251f32d26011b9df8e6e026fca122946 Mon Sep 17 00:00:00 2001 From: Hau Ho Date: Thu, 27 Feb 2025 17:44:36 +0700 Subject: [PATCH 3/6] dts: renesas: rx: Initial support dts SoC layer on RX26T. This commit to initial support dts SoC layer on RX26T Signed-off-by: Hau Ho --- dts/rx/renesas/r5f526tfddfp.dtsi | 181 +++++++ dts/rx/renesas/rx26t-common.dtsi | 552 ++++++++++++++++++++ include/zephyr/dt-bindings/clock/rx_clock.h | 42 ++ 3 files changed, 775 insertions(+) create mode 100644 dts/rx/renesas/r5f526tfddfp.dtsi create mode 100644 dts/rx/renesas/rx26t-common.dtsi diff --git a/dts/rx/renesas/r5f526tfddfp.dtsi b/dts/rx/renesas/r5f526tfddfp.dtsi new file mode 100644 index 0000000000000..2c1b94abaec2c --- /dev/null +++ b/dts/rx/renesas/r5f526tfddfp.dtsi @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +/ { + clocks: clocks { + #address-cells = <1>; + #size-cells = <1>; + + xtal: clock-main-osc { + compatible = "renesas,rx-cgc-root-clock"; + clock-frequency = ; + mosel = <0>; + stabilization-time = <4>; + #clock-cells = <0>; + status = "disabled"; + }; + + hoco: clock-hoco { + compatible = "renesas,rx-cgc-root-clock"; + clock-frequency = ; + #clock-cells = <0>; + status = "okay"; + }; + + loco: clock-loco { + compatible = "renesas,rx-cgc-root-clock"; + clock-frequency = <240000>; + #clock-cells = <0>; + status = "okay"; + }; + + iwdtlsclk: clock-iwdt-low-speed { + compatible = "renesas,rx-cgc-root-clock"; + clock-frequency = <120000>; + #clock-cells = <0>; + status = "disabled"; + }; + + pll: pll { + compatible = "renesas,rx-cgc-pll"; + #clock-cells = <0>; + div = <1>; + clocks = <&xtal>; + mul = ; + status = "disabled"; + }; + + canfdmclk: clock-canfdm { + compatible = "renesas,rx-cgc-root-clock"; + clock-frequency = ; + #clock-cells = <0>; + status = "okay"; + }; + + pclkblock: pclkblock@80010 { + compatible = "renesas,rx-cgc-pclk-block"; + reg = <0x00080010 4>, <0x00080014 4>, <0x00080018 4>, + <0x0008001C 4>; + reg-names = "MSTPA", "MSTPB", "MSTPC", "MSTPD"; + #clock-cells = <0>; + clocks = <&pll>; + status = "okay"; + + iclk: iclk { + compatible = "renesas,rx-cgc-pclk"; + div = <2>; + #clock-cells = <2>; + status = "okay"; + }; + + fclk: fclk { + compatible = "renesas,rx-cgc-pclk"; + div = <4>; + #clock-cells = <2>; + status = "okay"; + }; + + pclka: pclka { + compatible = "renesas,rx-cgc-pclk"; + div = <2>; + #clock-cells = <2>; + status = "okay"; + }; + + pclkb: pclkb { + compatible = "renesas,rx-cgc-pclk"; + div = <4>; + #clock-cells = <2>; + status = "okay"; + }; + + pclkc: pclkc { + compatible = "renesas,rx-cgc-pclk"; + div = <2>; + #clock-cells = <2>; + status = "okay"; + }; + + pclkd: pclkd { + compatible = "renesas,rx-cgc-pclk"; + div = <4>; + #clock-cells = <2>; + status = "okay"; + }; + + canfdclk: clock-canfd { + compatible = "renesas,rx-cgc-pclk"; + div = <2>; + #clock-cells = <2>; + status = "okay"; + }; + }; + + caclclk: caclclk { + compatible = "renesas,rx-cgc-pclk"; + clocks = <&loco>; + #clock-cells = <2>; + status = "disabled"; + }; + + cacmclk: cacmclk { + compatible = "renesas,rx-cgc-pclk"; + clocks = <&xtal>; + #clock-cells = <2>; + status = "disabled"; + }; + + cachclk: cachclk { + compatible = "renesas,rx-cgc-pclk"; + clocks = <&hoco>; + #clock-cells = <2>; + status = "disabled"; + }; + + caciclk: caciclk { + compatible = "renesas,rx-cgc-pclk"; + clocks = <&iwdtlsclk>; + #clock-cells = <2>; + status = "disabled"; + }; + + iwdtclk: iwdtclk { + compatible = "renesas,rx-cgc-pclk"; + clocks = <&iwdtlsclk>; + #clock-cells = <2>; + status = "disabled"; + }; + }; + + soc { + sram0: memory@0 { + device_type = "memory"; + compatible = "mmio-sram"; + reg = <0x0 DT_SIZE_K(64)>; + }; + + flash: flash-controller@7e0000 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "renesas,rx-flash"; + reg = <0x007e0000 0x1000>; + + code_flash: flash@fff80000 { + compatible = "renesas,rx-nv-flash"; + reg = <0xfff80000 DT_SIZE_K(512)>; + }; + + data_flash: flash@100000 { + compatible = "renesas,rx-nv-flash"; + reg = <0x00100000 DT_SIZE_K(16)>; + }; + }; + }; +}; diff --git a/dts/rx/renesas/rx26t-common.dtsi b/dts/rx/renesas/rx26t-common.dtsi new file mode 100644 index 0000000000000..85668d6601c18 --- /dev/null +++ b/dts/rx/renesas/rx26t-common.dtsi @@ -0,0 +1,552 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * common device tree elements of all (currently supported) RX MCUs + */ + +#include +#include +#include + +/ { + #address-cells = <1>; + #size-cells = <1>; + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu0: cpu@0 { + compatible = "renesas,rx"; + device_type = "cpu"; + reg = <0>; + status = "okay"; + }; + }; + + icu: interrupt-controller@87000 { + #interrupt-cells = <2>; + compatible = "renesas,rx-icu"; + interrupt-controller; + reg = <0x0087000 0xff>, + <0x0087200 0x1f>, + <0x0087300 0xff>, + <0x00872f0 0x02>, + <0x0087500 0x0f>, + <0x0087510 0x01>, + <0x0087514 0x01>; + reg-names = "IR", "IER", "IPR", "FIR", "IRQCR", "IRQFLTE", "IRQFLTC0"; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + device_type = "soc"; + compatible = "simple-bus"; + interrupt-parent = <&icu>; + + pinctrl: pin-controller@8c11f { + compatible = "renesas,rx-pinctrl"; + reg = <0x0008C11F 0x3c0>; + status = "okay"; + }; + + pinmux0: pinmux@8c140 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c140 0x8>; + status = "okay"; + }; + + pinmux1: pinmux@8c148 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c148 0x8>; + status = "okay"; + }; + + pinmux2: pinmux@8c150 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c150 0x8>; + status = "okay"; + }; + + pinmux3: pinmux@8c158 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c158 0x8>; + status = "okay"; + }; + + pinmux4: pinmux@8c160 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c160 0x8>; + status = "okay"; + }; + + pinmux5: pinmux@8c168 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c168 0x8>; + status = "okay"; + }; + + pinmux6: pinmux@8c170 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c170 0x8>; + status = "okay"; + }; + + pinmux7: pinmux@8c178 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c178 0x8>; + status = "okay"; + }; + + pinmux8: pinmux@8c180 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c180 0x8>; + status = "okay"; + }; + + pinmux9: pinmux@8c188 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c188 0x8>; + status = "okay"; + }; + + pinmuxa: pinmux@8c190 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c190 0x8>; + status = "okay"; + }; + + pinmuxb: pinmux@8c198 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c198 0x8>; + status = "okay"; + }; + + pinmuxd: pinmux@8c1a8 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c1a8 0x8>; + status = "okay"; + }; + + pinmuxe: pinmux@8c1b0 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c1b0 0x8>; + status = "okay"; + }; + + pinmuxn: pinmux@8c1f7 { + compatible = "renesas,rx-pinmux"; + #pinmux-cells = <2>; + reg = <0x00008c1f7 0x8>; + status = "okay"; + }; + + ioport0: gpio@8c000 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x02>; + ngpios = <2>; + port = <0>; + reg = <0x0008C000 0x01>, + <0x0008C020 0x01>, + <0x0008C040 0x01>, + <0x0008C060 0x01>, + <0x0008C080 0x01>, + <0x0008C0C0 0x01>, + <0x0008C0E0 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "PCR", "DSCR"; + pinmux = <&pinmux0>; + status = "disabled"; + }; + + ioport1: gpio@8c001 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <2>; + port = <1>; + reg = <0x0008C001 0x01>, + <0x0008C021 0x01>, + <0x0008C041 0x01>, + <0x0008C061 0x01>, + <0x0008C082 0x01>, + <0x0008C0C1 0x01>, + <0x0008C0E1 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "PCR", "DSCR"; + pinmux = <&pinmux1>; + status = "disabled"; + }; + + ioport2: gpio@8c002 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <6>; + port = <2>; + reg = <0x0008C002 0x01>, + <0x0008C022 0x01>, + <0x0008C042 0x01>, + <0x0008C062 0x01>, + <0x0008C084 0x01>, + <0x0008C085 0x01>, + <0x0008C0C2 0x01>, + <0x0008C0E2 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR", "DSCR"; + pinmux = <&pinmux2>; + status = "disabled"; + }; + + ioport3: gpio@8c003 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <6>; + port = <3>; + reg = <0x0008C003 0x01>, + <0x0008C023 0x01>, + <0x0008C043 0x01>, + <0x0008C063 0x01>, + <0x0008C086 0x01>, + <0x0008C087 0x01>, + <0x0008C0C3 0x01>, + <0x0008C0E3 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR", "DSCR"; + pinmux = <&pinmux3>; + status = "disabled"; + }; + + ioport4: gpio@8c004 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <8>; + port = <4>; + reg = <0x0008C004 0x01>, + <0x0008C024 0x01>, + <0x0008C044 0x01>, + <0x0008C064 0x01>, + <0x0008C088 0x01>, + <0x0008C089 0x01>, + <0x0008C0C4 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR"; + pinmux = <&pinmux4>; + status = "disabled"; + }; + + ioport5: gpio@8c005 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <6>; + port = <5>; + reg = <0x0008C005 0x01>, + <0x0008C025 0x01>, + <0x0008C045 0x01>, + <0x0008C065 0x01>, + <0x0008C08A 0x01>, + <0x0008C08B 0x01>, + <0x0008C0C5 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR"; + pinmux = <&pinmux5>; + status = "disabled"; + }; + + ioport6: gpio@8c006 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <6>; + port = <6>; + reg = <0x0008C006 0x01>, + <0x0008C026 0x01>, + <0x0008C046 0x01>, + <0x0008C066 0x01>, + <0x0008C08C 0x01>, + <0x0008C08D 0x01>, + <0x0008C0C6 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR"; + pinmux = <&pinmux5>; + status = "disabled"; + }; + + ioport7: gpio@8c007 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <7>; + port = <7>; + reg = <0x0008C007 0x01>, + <0x0008C027 0x01>, + <0x0008C047 0x01>, + <0x0008C067 0x01>, + <0x0008C08E 0x01>, + <0x0008C08F 0x01>, + <0x0008C0C7 0x01>, + <0x0008C0E7 0x01>, + <0x0008C12F 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR", + "DSCR", "DSCR2"; + pinmux = <&pinmux7>; + status = "disabled"; + }; + + ioport8: gpio@8c008 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <3>; + port = <8>; + reg = <0x0008C008 0x01>, + <0x0008C028 0x01>, + <0x0008C048 0x01>, + <0x0008C068 0x01>, + <0x0008C090 0x01>, + <0x0008C0C8 0x01>, + <0x0008C0E8 0x01>, + <0x0008C130 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "PCR", "DSCR", + "DSCR2"; + pinmux = <&pinmux8>; + status = "disabled"; + }; + + ioport9: gpio@8c009 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <7>; + port = <9>; + reg = <0x0008C009 0x01>, + <0x0008C029 0x01>, + <0x0008C049 0x01>, + <0x0008C069 0x01>, + <0x0008C092 0x01>, + <0x0008C093 0x01>, + <0x0008C0C9 0x01>, + <0x0008C0E9 0x01>, + <0x0008C131 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR", + "DSCR", "DSCR2"; + pinmux = <&pinmux9>; + status = "disabled"; + }; + + ioporta: gpio@8c00a { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <6>; + port = <10>; + reg = <0x0008C00A 0x01>, + <0x0008C02A 0x01>, + <0x0008C04A 0x01>, + <0x0008C06A 0x01>, + <0x0008C094 0x01>, + <0x0008C095 0x01>, + <0x0008C0CA 0x01>, + <0x0008C0EA 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", + "PCR", "DSCR"; + pinmux = <&pinmuxa>; + status = "disabled"; + }; + + ioportb: gpio@8c00b { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <8>; + port = <11>; + reg = <0x0008C00B 0x01>, + <0x0008C02B 0x01>, + <0x0008C04B 0x01>, + <0x0008C06B 0x01>, + <0x0008C096 0x01>, + <0x0008C097 0x01>, + <0x0008C0CB 0x01>, + <0x0008C0EB 0x01>, + <0x0008C133 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR", + "DSCR", "DSCR2"; + pinmux = <&pinmuxb>; + status = "disabled"; + }; + + ioportd: gpio@8c00d { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <8>; + port = <13>; + reg = <0x0008C00D 0x01>, + <0x0008C02D 0x01>, + <0x0008C04D 0x01>, + <0x0008C06D 0x01>, + <0x0008C09A 0x01>, + <0x0008C09B 0x01>, + <0x0008C0CD 0x01>, + <0x0008C0ED 0x01>, + <0x0008C135 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR", + "DSCR", "DSCR2"; + pinmux = <&pinmuxd>; + status = "disabled"; + }; + + ioporte: gpio@8c00e { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <6>; + port = <14>; + reg = <0x0008C00E 0x01>, + <0x0008C02E 0x01>, + <0x0008C04E 0x01>, + <0x0008C06E 0x01>, + <0x0008C09C 0x01>, + <0x0008C09D 0x01>, + <0x0008C0CE 0x01>, + <0x0008C0EE 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "ODR0", "ODR1", "PCR", "DSCR"; + pinmux = <&pinmuxe>; + status = "disabled"; + }; + + ioportn: gpio@8c016 { + compatible = "renesas,rx-gpio"; + gpio-controller; + #gpio-cells = <0x2>; + ngpios = <2>; + port = <23>; + reg = <0x0008C016 0x01>, + <0x0008C036 0x01>, + <0x0008C056 0x01>, + <0x0008C076 0x01>, + <0x0008C0D6 0x01>, + <0x0008C0F6 0x01>, + <0x0008C0AD 0x01>; + reg-names = "PDR", "PODR", "PIDR", "PMR", "PCR", "DSCR", "ODR1"; + pinmux = <&pinmuxn>; + status = "disabled"; + }; + + sci1: sci1@8a020 { + compatible = "renesas,rx-sci"; + interrupts = <60 1>, <61 1>; + interrupt-names = "rxi", "txi"; + reg = <0x8A020 0x20>; + clocks = <&pclkb MSTPB 30>; + status = "disabled"; + channel = <1>; + + uart { + compatible = "renesas,rx-uart-sci"; + status = "disabled"; + }; + }; + + sci5: sci5@8a0a0 { + compatible = "renesas,rx-sci"; + interrupts = <84 1>, <85 1>; + interrupt-names = "rxi", "txi"; + reg = <0x8A0A0 0x20>; + clocks = <&pclkb MSTPB 26>; + status = "disabled"; + channel = <5>; + + uart { + compatible = "renesas,rx-uart-sci"; + status = "disabled"; + }; + }; + + sci6: sci6@8a0c0 { + compatible = "renesas,rx-sci"; + interrupts = <86 1>, <87 1>; + interrupt-names = "rxi", "txi"; + reg = <0x8A0C0 0x20>; + clocks = <&pclkb MSTPB 25>; + status = "disabled"; + channel = <6>; + + uart { + compatible = "renesas,rx-uart-sci"; + status = "disabled"; + }; + }; + + sci12: sci12@8b300 { + compatible = "renesas,rx-sci"; + interrupts = <116 1>, <117 1>; + interrupt-names = "rxi", "txi"; + reg = <0x8B300 0x20>; + clocks = <&pclkb MSTPB 4>; + status = "disabled"; + channel = <12>; + + uart { + compatible = "renesas,rx-uart-sci"; + status = "disabled"; + }; + }; + + cmt: timer@88000 { + compatible = "renesas,rx-timer-cmt-start-control"; + #address-cells = <1>; + #size-cells = <1>; + clocks = <&pclkb MSTPA 15>; + reg = <0x00088000 0x02>; + reg-names = "CMSTR0"; + status = "okay"; + + cmt0: timer@88002 { + compatible = "renesas,rx-timer-cmt"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x00088002 0x02>, + <0x00088004 0x02>, + <0x00088006 0x02>; + reg-names = "CMCR", "CMCNT", "CMCOR"; + interrupts = <28 1>; + interrupt-names = "cmi"; + status = "okay"; + }; + + cmt1: timer@88008 { + compatible = "renesas,rx-timer-cmt"; + reg = <0x00088008 0x02>, + <0x0008800A 0x02>, + <0x0008800C 0x02>; + reg-names = "CMCR", "CMCNT", "CMCOR"; + interrupts = <29 1>; + interrupt-names = "cmi"; + status = "okay"; + }; + }; + + ofsm: ofsm@120040 { + compatible = "zephyr,memory-region"; + reg = <0x00120040 0xBF>; + zephyr,memory-region = "OFSM"; + status = "okay"; + }; + }; +}; diff --git a/include/zephyr/dt-bindings/clock/rx_clock.h b/include/zephyr/dt-bindings/clock/rx_clock.h index cab40d575fd57..e2b01f442a130 100644 --- a/include/zephyr/dt-bindings/clock/rx_clock.h +++ b/include/zephyr/dt-bindings/clock/rx_clock.h @@ -24,6 +24,48 @@ #define RX_PLL_MUL_7_5 14 #define RX_PLL_MUL_8 15 +#define RX_PLL_MUL_10 19 +#define RX_PLL_MUL_10_5 20 +#define RX_PLL_MUL_11 21 +#define RX_PLL_MUL_11_5 22 +#define RX_PLL_MUL_12 23 +#define RX_PLL_MUL_12_5 24 +#define RX_PLL_MUL_13 25 +#define RX_PLL_MUL_13_5 26 +#define RX_PLL_MUL_14 27 +#define RX_PLL_MUL_14_5 28 +#define RX_PLL_MUL_15 29 +#define RX_PLL_MUL_15_5 30 +#define RX_PLL_MUL_16 31 +#define RX_PLL_MUL_16_5 32 +#define RX_PLL_MUL_17 33 +#define RX_PLL_MUL_17_5 34 +#define RX_PLL_MUL_18 35 +#define RX_PLL_MUL_18_5 36 +#define RX_PLL_MUL_19 37 +#define RX_PLL_MUL_19_5 38 +#define RX_PLL_MUL_20 39 +#define RX_PLL_MUL_20_5 40 +#define RX_PLL_MUL_21 41 +#define RX_PLL_MUL_21_5 42 +#define RX_PLL_MUL_22 43 +#define RX_PLL_MUL_22_5 44 +#define RX_PLL_MUL_23 45 +#define RX_PLL_MUL_23_5 46 +#define RX_PLL_MUL_24 47 +#define RX_PLL_MUL_24_5 48 +#define RX_PLL_MUL_25 49 +#define RX_PLL_MUL_25_5 50 +#define RX_PLL_MUL_26 51 +#define RX_PLL_MUL_26_5 52 +#define RX_PLL_MUL_27 53 +#define RX_PLL_MUL_27_5 54 +#define RX_PLL_MUL_28 55 +#define RX_PLL_MUL_28_5 56 +#define RX_PLL_MUL_29 57 +#define RX_PLL_MUL_29_5 58 +#define RX_PLL_MUL_30 59 + #define MSTPA 0 #define MSTPB 1 #define MSTPC 2 From a427284f76f9451f17898e95436c8e26c91a40ff Mon Sep 17 00:00:00 2001 From: Hau Ho Date: Thu, 27 Feb 2025 17:47:33 +0700 Subject: [PATCH 4/6] boards: renesas: Initial support for MCB-RX26T board Initial commit to support for MCB-RX26T board Signed-off-by: Hau Ho --- boards/renesas/mcb_rx26t/Kconfig.mcb_rx26t | 5 + boards/renesas/mcb_rx26t/board.cmake | 9 + boards/renesas/mcb_rx26t/board.yml | 5 + boards/renesas/mcb_rx26t/doc/index.rst | 156 ++++++++++++++++++ boards/renesas/mcb_rx26t/doc/mcb_rx26t.webp | Bin 0 -> 94476 bytes .../renesas/mcb_rx26t/mcb_rx26t-pinctrl.dtsi | 14 ++ boards/renesas/mcb_rx26t/mcb_rx26t.dts | 91 ++++++++++ boards/renesas/mcb_rx26t/mcb_rx26t.yaml | 15 ++ boards/renesas/mcb_rx26t/mcb_rx26t_defconfig | 13 ++ 9 files changed, 308 insertions(+) create mode 100644 boards/renesas/mcb_rx26t/Kconfig.mcb_rx26t create mode 100644 boards/renesas/mcb_rx26t/board.cmake create mode 100644 boards/renesas/mcb_rx26t/board.yml create mode 100644 boards/renesas/mcb_rx26t/doc/index.rst create mode 100644 boards/renesas/mcb_rx26t/doc/mcb_rx26t.webp create mode 100644 boards/renesas/mcb_rx26t/mcb_rx26t-pinctrl.dtsi create mode 100644 boards/renesas/mcb_rx26t/mcb_rx26t.dts create mode 100644 boards/renesas/mcb_rx26t/mcb_rx26t.yaml create mode 100644 boards/renesas/mcb_rx26t/mcb_rx26t_defconfig diff --git a/boards/renesas/mcb_rx26t/Kconfig.mcb_rx26t b/boards/renesas/mcb_rx26t/Kconfig.mcb_rx26t new file mode 100644 index 0000000000000..ecd0a6a52737c --- /dev/null +++ b/boards/renesas/mcb_rx26t/Kconfig.mcb_rx26t @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_MCB_RX26T + select SOC_R5F526TFDDFP diff --git a/boards/renesas/mcb_rx26t/board.cmake b/boards/renesas/mcb_rx26t/board.cmake new file mode 100644 index 0000000000000..81690b2021ac8 --- /dev/null +++ b/boards/renesas/mcb_rx26t/board.cmake @@ -0,0 +1,9 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +# options after "--tool-opt=" are directly passed to the tool. So instead of "--iface=JTAG" you could also write "--tool-opt=-if JTAG" +board_runner_args(jlink "--device=R5F526TF" "--iface=FINE" "--speed=1000" "--tool-opt=-jtagconf -1,-1 -autoconnect 1") +board_runner_args(rfp "--device=RX200" "--tool=e2l" "--interface=fine" "--erase") + +include(${ZEPHYR_BASE}/boards/common/rfp.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/renesas/mcb_rx26t/board.yml b/boards/renesas/mcb_rx26t/board.yml new file mode 100644 index 0000000000000..0348f1ff931d8 --- /dev/null +++ b/boards/renesas/mcb_rx26t/board.yml @@ -0,0 +1,5 @@ +board: + name: mcb_rx26t + vendor: renesas + socs: + - name: r5f526tfddfp diff --git a/boards/renesas/mcb_rx26t/doc/index.rst b/boards/renesas/mcb_rx26t/doc/index.rst new file mode 100644 index 0000000000000..b4b98c98ca864 --- /dev/null +++ b/boards/renesas/mcb_rx26t/doc/index.rst @@ -0,0 +1,156 @@ +.. zephyr:board:: mcb_rx26t + +Overview +******** + +MCB-RX26T Type B is a CPU board for motor control evaluation. By using this product in combination with +an inverter board, motor control using RX26T can be easily performed. + +**MCU Native Pin Access** + +The MCB-RX26T Type B includes: + +- CPU maximum operating frequency 120MHz, 32-bit RXv3 Core +- Package/Pin count: LFQFP/100 pin +- ROM/RAM: 512KB/48KB +- MCU input clock: 10MHz (Generate with external crystal oscillator) + +**System Control and Debugging** + +- Power supply: DC 5V,3.3V (selectable with jumper switch) Select one way automatically from the below + + - USB-powered (debug port) + - External power supply via standard input + +- Debugging support: + + - Via E2lite debugger with E2OB (Onboard debugger circuit) + +- Connector: + + - Inverter board connector + - USB connector for E2 OB + - SCI connector for Renesas Motor Workbench communication + - Through hole for CAN communication + - Through hole for SPI communication + - PMOD connectors + +- User LEDs and buttons: + + - Four User LEDs + - Power LED indicating availability of regulated power + - One Reset button + +Hardware +******** +Detailed hardware features can be found at: + +- RX26T MCU: `RX26T Group User's Manual Hardware`_ +- MCB-RX26T Type B: `MCB-RX26T Type B - User's Manual`_ + +Note: +The CPU used in the RX26T is based on the RXv3 core. However, the current version of the Zephyr kernel +only supports the RXv1 core. Since the RXv3 core is backward-compatible with RXv1, it works with this version. +But the following limitations apply: + +- FPU context saving is not supported. Do not use the FPU. +- Register bank save function is not supported. Do not use instructions for register bank save function. +- Accumulator register saving is not supported. Do not use DSP instructions or any libraries that include DSP instructions. + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Programming and Debugging +************************* + +.. zephyr:board-supported-runners:: + +Applications for the ``mcb_rx26t`` board target configuration can be +built, flashed, and debugged as below. + +Currently, the Zephyr SDK hasn't added support for RX builds yet, so the GCC for RX toolchain is required and build system +need to be set to use "cross-compile". + + - Download and install GCC for RX v8.3.0.202405 toolchain: + + https://llvm-gcc-renesas.com/rx-download-toolchains/ + + - Set env variable: + + .. code-block:: console + + export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile + export CROSS_COMPILE=/bin/rx-elf- + + - Build the Blinky Sample for MCB-RX26T Type B: + + .. code-block:: console + + cd ~/zephyrproject/zephyr + west build -p always -b mcb_rx26t samples/basic/blinky + +Flashing +======== + +Program can be flashed to MCB-RX26T via e2lite E2OB (Onboard debugger circuit). + +To flash the program to board + + 1. Connect from board's debug connector port to host PC using USB connector for E2 OB. + + 2. Execute west command + + .. code-block:: console + + west flash + +Debugging +========= + +You can use `Renesas Debug extension`_ on Visual Studio code for a visual debug interface. +The configuration for launch.json is as below. + +.. code-block:: json + + { + "version": "0.2.0", + "configurations": [ + { + "type": "renesas-hardware", + "request": "launch", + "name": "Renesas GDB Hardware Debugging", + "target": { + "deviceFamily": "RX", + "device": "R5F526TF", + "debuggerType": "E2LITE", + "serverParameters": [ + "-uUseFine=", "1", + "-w=", "1", + ], + } + } + ] + } + + +References +********** + +- `MCB-RX26T Type B Website`_ +- `RX26T MCU group Website`_ + +.. _MCB-RX26T Type B Website: + https://www.renesas.com/en/design-resources/boards-kits/mcb-rx26t-type-b + +.. _RX26T MCU group Website: + https://www.renesas.com/en/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rx26t-32-bit-microcontroller-optimized-dual-motor-and-pfc-control +.. _MCB-RX26T Type B - User's Manual: + https://www.renesas.com/en/document/mat/mcb-rx26t-type-b-users-manual + +.. _RX26T Group User's Manual Hardware: + https://www.renesas.com/en/document/mah/rx26t-group-users-manual-hardware + +.. _Renesas Debug extension: + https://marketplace.visualstudio.com/items?itemName=RenesasElectronicsCorporation.renesas-debug diff --git a/boards/renesas/mcb_rx26t/doc/mcb_rx26t.webp b/boards/renesas/mcb_rx26t/doc/mcb_rx26t.webp new file mode 100644 index 0000000000000000000000000000000000000000..371a3e82adf508b0e58bf660e10a727cf0bb6e1e GIT binary patch literal 94476 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àkk)cv;XMTv!0R*PP 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ⅅ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 Vh0CwpKTamWq)+=*bGGk~{|Cj|>)HSS literal 0 HcmV?d00001 diff --git a/boards/renesas/mcb_rx26t/mcb_rx26t-pinctrl.dtsi b/boards/renesas/mcb_rx26t/mcb_rx26t-pinctrl.dtsi new file mode 100644 index 0000000000000..a8d911f3663b8 --- /dev/null +++ b/boards/renesas/mcb_rx26t/mcb_rx26t-pinctrl.dtsi @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + sci12_default: sci12_default { + group1 { + psels = , /* TX - PB5 */ + ; /* RX - PB6 */ + }; + }; +}; diff --git a/boards/renesas/mcb_rx26t/mcb_rx26t.dts b/boards/renesas/mcb_rx26t/mcb_rx26t.dts new file mode 100644 index 0000000000000..4f4b4423be7b6 --- /dev/null +++ b/boards/renesas/mcb_rx26t/mcb_rx26t.dts @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2025 Renesas Electronics Corporation + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include "mcb_rx26t-pinctrl.dtsi" + +/ { + model = "Renesas MCB-RX26T KIT"; + compatible = "renesas,mcb_rx26t","renesas,rxv3"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &code_flash; + zephyr,console = &uart12; + zephyr,shell-uart = &uart12; + }; + + leds { + compatible = "gpio-leds"; + + led1: led1 { + gpios = <&ioport2 1 GPIO_ACTIVE_LOW>; + label = "LED1"; + }; + + led2: led2 { + gpios = <&ioport2 0 GPIO_ACTIVE_LOW>; + label = "LED2"; + }; + + led3: led3 { + gpios = <&ioport6 5 GPIO_ACTIVE_LOW>; + label = "LED3"; + }; + + led4: led4 { + gpios = <&ioport6 4 GPIO_ACTIVE_LOW>; + label = "LED3"; + }; + }; + + aliases { + led0 = &led1; + led1 = &led2; + led2 = &led3; + led3 = &led4; + }; +}; + +&xtal { + clock-frequency = ; + mosel = <0>; + #clock-cells = <0>; + status = "okay"; +}; + +&pll { + div = <1>; + mul = ; + status = "okay"; +}; + +&cmt { + clock-frequency = <60000000>; + status = "okay"; +}; + +&ioport2 { + status = "okay"; +}; + +&ioport6 { + status = "okay"; +}; + +&sci12 { + pinctrl-0 = <&sci12_default>; + pinctrl-names = "default"; + status = "okay"; + + uart12: uart { + current-speed = <115200>; + status = "okay"; + }; +}; diff --git a/boards/renesas/mcb_rx26t/mcb_rx26t.yaml b/boards/renesas/mcb_rx26t/mcb_rx26t.yaml new file mode 100644 index 0000000000000..94b2674f11c02 --- /dev/null +++ b/boards/renesas/mcb_rx26t/mcb_rx26t.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +identifier: mcb_rx26t +name: Renesas MCB-RX26T +type: mcu +arch: rx +toolchain: + - rxgcc +supported: + - gpio + - serial + - timer +ram: 64 +flash: 512 diff --git a/boards/renesas/mcb_rx26t/mcb_rx26t_defconfig b/boards/renesas/mcb_rx26t/mcb_rx26t_defconfig new file mode 100644 index 0000000000000..c23cdd58f2a0c --- /dev/null +++ b/boards/renesas/mcb_rx26t/mcb_rx26t_defconfig @@ -0,0 +1,13 @@ +# Copyright (c) 2025 Renesas Electronics Corporation +# SPDX-License-Identifier: Apache-2.0 + +# Enable GPIO +CONFIG_GPIO=y + +# Enable UART driver +CONFIG_SERIAL=y +CONFIG_UART_INTERRUPT_DRIVEN=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y From 133b7aa41cec5d12cc9bc2cb28cd689f838ece32 Mon Sep 17 00:00:00 2001 From: Hau Ho Date: Wed, 4 Jun 2025 11:03:20 +0700 Subject: [PATCH 5/6] drivers: serial: Update serial driver to support RX26T - Update serial driver for RX26T support. This MCU using grp interrupt feature (not supported yet), so need to add some marcos to enable support. - Change the struct st_sci0 to use a common sci iodefine struct as st_sci Signed-off-by: Hau Ho Signed-off-by: Phi Tran --- drivers/serial/uart_renesas_rx_sci.c | 60 +++++++++++++++++++--------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/drivers/serial/uart_renesas_rx_sci.c b/drivers/serial/uart_renesas_rx_sci.c index d8ac3b926ee13..8e66051bafbeb 100644 --- a/drivers/serial/uart_renesas_rx_sci.c +++ b/drivers/serial/uart_renesas_rx_sci.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Renesas Electronics Corporation + * Copyright (c) 2024-2025 Renesas Electronics Corporation * * SPDX-License-Identifier: Apache-2.0 */ @@ -14,9 +14,12 @@ #include #include "r_sci_rx_if.h" +#include "iodefine_sci.h" #if CONFIG_SOC_SERIES_RX130 #include "r_sci_rx130_private.h" +#elif CONFIG_SOC_SERIES_RX26T +#include "r_sci_rx26t_private.h" #else #error Unknown SOC, not (yet) supported. #endif @@ -68,7 +71,7 @@ struct uart_rx_sci_data { static int uart_rx_sci_poll_in(const struct device *dev, unsigned char *c) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); if (IS_ENABLED(CONFIG_UART_ASYNC_API) && sci->SCR.BIT.RIE) { return -EBUSY; @@ -86,7 +89,7 @@ static int uart_rx_sci_poll_in(const struct device *dev, unsigned char *c) static void uart_rx_sci_poll_out(const struct device *dev, unsigned char c) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); while (sci->SSR.BIT.TEND == 0U) { } @@ -96,7 +99,7 @@ static void uart_rx_sci_poll_out(const struct device *dev, unsigned char c) static int uart_rx_err_check(const struct device *dev) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); const uint32_t status = sci->SSR.BYTE; int errors = 0; @@ -227,7 +230,7 @@ static int uart_rx_config_get(const struct device *dev, struct uart_config *cfg) static int uart_rx_fifo_fill(const struct device *dev, const uint8_t *tx_data, int size) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); uint8_t num_tx = 0U; if (size > 0 && sci->SSR.BIT.TDRE) { @@ -240,7 +243,7 @@ static int uart_rx_fifo_fill(const struct device *dev, const uint8_t *tx_data, i static int uart_rx_fifo_read(const struct device *dev, uint8_t *rx_data, const int size) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); uint8_t num_rx = 0U; if (size > 0 && sci->SSR.BIT.RDRF) { @@ -254,7 +257,7 @@ static int uart_rx_fifo_read(const struct device *dev, uint8_t *rx_data, const i static void uart_rx_irq_tx_enable(const struct device *dev) { struct uart_rx_sci_data *data = dev->data; - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); sci->SCR.BYTE |= (BIT(R_SCI_SCR_TIE_Pos) | BIT(R_SCI_SCR_TEIE_Pos)); irq_enable(data->tei_irq); @@ -274,7 +277,7 @@ static void uart_rx_irq_tx_enable(const struct device *dev) static void uart_rx_irq_tx_disable(const struct device *dev) { struct uart_rx_sci_data *data = dev->data; - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); sci->SCR.BYTE &= ~(BIT(R_SCI_SCR_TIE_Pos) | BIT(R_SCI_SCR_TEIE_Pos)); irq_disable(data->tei_irq); @@ -282,7 +285,7 @@ static void uart_rx_irq_tx_disable(const struct device *dev) static int uart_rx_irq_tx_ready(const struct device *dev) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); return (sci->SCR.BIT.TIE == 1U) && (sci->SSR.BYTE & (BIT(R_SCI_SSR_TDRE_Pos) | BIT(R_SCI_SSR_TEND_Pos))); @@ -290,28 +293,28 @@ static int uart_rx_irq_tx_ready(const struct device *dev) static int uart_rx_irq_tx_complete(const struct device *dev) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); return (sci->SCR.BIT.TEIE == 1U) && (sci->SSR.BYTE & BIT(R_SCI_SSR_TEND_Pos)); } static void uart_rx_irq_rx_enable(const struct device *dev) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); sci->SCR.BIT.RIE = 1U; } static void uart_rx_irq_rx_disable(const struct device *dev) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); sci->SCR.BIT.RIE = 0U; } static int uart_rx_irq_rx_ready(const struct device *dev) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); return (sci->SCR.BIT.RIE == 1U) && ((sci->SSR.BYTE & BIT(R_SCI_SSR_RDRF_Pos))); } @@ -332,7 +335,7 @@ static void uart_rx_irq_err_disable(const struct device *dev) static int uart_rx_irq_is_pending(const struct device *dev) { - volatile struct st_sci0 *sci = (struct st_sci0 *)DEV_BASE(dev); + volatile struct st_sci *sci = (struct st_sci *)DEV_BASE(dev); bool tx_pending = false; bool rx_pending = false; @@ -439,7 +442,9 @@ static void uart_rx_sci_txi_isr(const struct device *dev) data->user_cb(dev, data->user_cb_data); } } +#endif +#ifndef CONFIG_SOC_SERIES_RX26T static void uart_rx_sci_tei_isr(const struct device *dev) { struct uart_rx_sci_data *data = dev->data; @@ -459,7 +464,16 @@ static void uart_rx_sci_eri_isr(const struct device *dev) } #endif +#if defined(CONFIG_SOC_SERIES_RX26T) +#define UART_RX_SCI_CONFIG_INIT(index) +#else +#define UART_RX_SCI_CONFIG_INIT(index) \ + .tei_irq = DT_IRQ_BY_NAME(DT_INST_PARENT(index), tei, irq), \ + .eri_irq = DT_IRQ_BY_NAME(DT_INST_PARENT(index), eri, irq), +#endif + #if CONFIG_UART_INTERRUPT_DRIVEN || CONFIG_UART_ASYNC_API +#ifndef CONFIG_SOC_SERIES_RX26T #define UART_RX_SCI_IRQ_INIT(index) \ do { \ IRQ_CONNECT(DT_IRQ_BY_NAME(DT_INST_PARENT(index), rxi, irq), \ @@ -480,9 +494,19 @@ static void uart_rx_sci_eri_isr(const struct device *dev) irq_enable(DT_IRQ_BY_NAME(DT_INST_PARENT(index), eri, irq)); \ } while (0) #else -#define UART_RX_SCI_IRQ_INIT(index) +#define UART_RX_SCI_IRQ_INIT(index) \ + do { \ + IRQ_CONNECT(DT_IRQ_BY_NAME(DT_INST_PARENT(index), rxi, irq), \ + DT_IRQ_BY_NAME(DT_INST_PARENT(index), rxi, priority), \ + uart_rx_sci_rxi_isr, DEVICE_DT_INST_GET(index), 0); \ + IRQ_CONNECT(DT_IRQ_BY_NAME(DT_INST_PARENT(index), txi, irq), \ + DT_IRQ_BY_NAME(DT_INST_PARENT(index), txi, priority), \ + uart_rx_sci_txi_isr, DEVICE_DT_INST_GET(index), 0); \ + irq_enable(DT_IRQ_BY_NAME(DT_INST_PARENT(index), rxi, irq)); \ + irq_enable(DT_IRQ_BY_NAME(DT_INST_PARENT(index), txi, irq)); \ + } while (0) +#endif #endif - #define UART_RX_INIT(index) \ PINCTRL_DT_DEFINE(DT_INST_PARENT(index)); \ @@ -506,9 +530,7 @@ static void uart_rx_sci_eri_isr(const struct device *dev) }, \ .rxi_irq = DT_IRQ_BY_NAME(DT_INST_PARENT(index), rxi, irq), \ .txi_irq = DT_IRQ_BY_NAME(DT_INST_PARENT(index), txi, irq), \ - .tei_irq = DT_IRQ_BY_NAME(DT_INST_PARENT(index), tei, irq), \ - .eri_irq = DT_IRQ_BY_NAME(DT_INST_PARENT(index), eri, irq), \ - }; \ + UART_RX_SCI_CONFIG_INIT(index)}; \ \ static int uart_rx_init_##index(const struct device *dev) \ { \ From 27790988efb925b9dc5f640edfaa497731abcb61 Mon Sep 17 00:00:00 2001 From: Quy Tran Date: Wed, 23 Jul 2025 10:47:13 +0000 Subject: [PATCH 6/6] include: clock_control: Add define configurations for RX26T MCU RX26T MCU uses a clock source marcos with different value compared to the previous, this commit add new one Signed-off-by: Quy Tran --- include/zephyr/drivers/clock_control/renesas_rx_cgc.h | 5 +++++ include/zephyr/dt-bindings/clock/rx_clock.h | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/include/zephyr/drivers/clock_control/renesas_rx_cgc.h b/include/zephyr/drivers/clock_control/renesas_rx_cgc.h index 19f196b6d65d9..4b44151776f7d 100644 --- a/include/zephyr/drivers/clock_control/renesas_rx_cgc.h +++ b/include/zephyr/drivers/clock_control/renesas_rx_cgc.h @@ -17,6 +17,11 @@ (UTIL_CAT(RX_CLOCKS_SOURCE_, DT_NODE_FULL_NAME_UPPER_TOKEN(node_id))), \ (RX_CLOCKS_CLOCK_DISABLED)) +#define RX_CGC_PLL_CLK_SRC(node_id) \ + COND_CODE_1(DT_NODE_HAS_STATUS(node_id, okay), \ + (UTIL_CAT(RX_PLL_CLOCKS_SOURCE_, DT_NODE_FULL_NAME_UPPER_TOKEN(node_id))), \ + (RX_CLOCKS_CLOCK_DISABLED)) + struct clock_control_rx_pclk_cfg { const struct device *clock_src_dev; uint32_t clk_div; diff --git a/include/zephyr/dt-bindings/clock/rx_clock.h b/include/zephyr/dt-bindings/clock/rx_clock.h index e2b01f442a130..ee022ae803a0c 100644 --- a/include/zephyr/dt-bindings/clock/rx_clock.h +++ b/include/zephyr/dt-bindings/clock/rx_clock.h @@ -14,6 +14,11 @@ #define RX_CLOCKS_SOURCE_PLL 4 #define RX_CLOCKS_SOURCE_CLOCK_DISABLE 0xff +#ifdef CONFIG_SOC_SERIES_RX26T +#define RX_PLL_CLOCKS_SOURCE_CLOCK_MAIN_OSC 0 +#define RX_PLL_CLOCKS_SOURCE_CLOCK_HOCO 1 +#endif /* CONFIG_SOC_SERIES_RX26T */ + #define RX_PLL_MUL_4 7 #define RX_PLL_MUL_4_5 8 #define RX_PLL_MUL_5 9