driver: pinctrl: Add support for Renesas RZ/G2L

Add pinctrl support for Renesas RZ/G2L

Signed-off-by: Tien Nguyen <tien.nguyen.zg@renesas.com>
Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
This commit is contained in:
Tien Nguyen 2025-03-24 09:42:53 +00:00 committed by Benjamin Cabé
commit 1d736d36ab
5 changed files with 188 additions and 8 deletions

View file

@ -0,0 +1,23 @@
/*
* Copyright (c) 2025 Renesas Electronics Corporation
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/dt-bindings/gpio/gpio.h>
#include <zephyr/dt-bindings/pinctrl/renesas/pinctrl-rzg2-common.h>
&pinctrl {
/omit-if-no-ref/ scif0_pins: scif0 {
scif0-pinmux {
pinmux = <RZG_PINMUX(PORT_38, 0, 1)>, /* TXD */
<RZG_PINMUX(PORT_38, 1, 1)>; /* RXD */
};
};
/omit-if-no-ref/ scif2_pins: scif2 {
scif2-pinmux {
pinmux = <RZG_PINMUX(PORT_48, 0, 1)>, /* TXD */
<RZG_PINMUX(PORT_48, 1, 1)>; /* RXD */
};
};
};

View file

@ -32,6 +32,12 @@
}; };
soc { soc {
pinctrl: pin-controller@41030000 {
compatible = "renesas,rzg-pinctrl";
reg = <0x41030000 DT_SIZE_K(64)>;
reg-names = "pinctrl";
};
scif0: serial@4004b800 { scif0: serial@4004b800 {
compatible = "renesas,rz-scif-uart"; compatible = "renesas,rz-scif-uart";
channel = <0>; channel = <0>;

View file

@ -1,11 +1,18 @@
# Copyright (c) 2024 Epam Systems # Copyright (c) 2024 Epam Systems
# Copyright (c) 2024 Renesas Electronics Corporation # Copyright (c) 2024-2025 Renesas Electronics Corporation
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
description: | description: |
Below generic example shows of supported pinctrl definitions: Renesas RZ/G pin controller
#include <zephyr/dt-bindings/pinctrl/renesas/pinctrl_rzg3s.h> The Renesas RZ/G pin controller is a node responsible for controlling
pin function selection and pin properties.
The pre-defined combinations for the RZ/G variants are defined in the below headers
- pinctrl-rzg-common.h for RZ/G3S
- pinctrl-rzg2-common.h for RZ/G2L, RZ/G2LC
#include <zephyr/dt-bindings/pinctrl/renesas/pinctrl-rzg(2)-common.h>
example_pins: device_pin { example_pins: device_pin {
device-pinmux { device-pinmux {
pinmux = <RZG_PINMUX(PORT_08, 1, 5)>, pinmux = <RZG_PINMUX(PORT_08, 1, 5)>,
@ -65,13 +72,13 @@ child-binding:
Pinmux configuration node. Pinmux configuration node.
Values are constructed from GPIO port number, pin number, and Values are constructed from GPIO port number, pin number, and
alternate function configuration number using the RZG_PINMUX() alternate function configuration number using the RZG_PINMUX()
helper macro in pinctrl_rzg.h helper macro in pinctrl-rzg(2)-common.h.
pins: pins:
type: array type: array
description: | description: |
Special Purpose pins configuration node. Special Purpose pins configuration node.
Values are define in pinctrl_rzg.h. Values are define in pinctrl-rzg(2)-common.h.
Ex: BSP_IO_XSPI_IO0,BSP_IO_I3C_SCL,... Ex: BSP_IO_XSPI_IO0,BSP_IO_I3C_SCL,...
drive-strength: drive-strength:

View file

@ -0,0 +1,138 @@
/*
* Copyright (c) 2025 Renesas Electronics Corporation
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RZG2_COMMON_H_
#define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RZG2_COMMON_H_
/* Superset list of all possible IO ports. */
#define PORT_00 0x0000 /* IO port 0 */
#define PORT_01 0x0100 /* IO port 1 */
#define PORT_02 0x0200 /* IO port 2 */
#define PORT_03 0x0300 /* IO port 3 */
#define PORT_04 0x0400 /* IO port 4 */
#define PORT_05 0x0500 /* IO port 5 */
#define PORT_06 0x0600 /* IO port 6 */
#define PORT_07 0x0700 /* IO port 7 */
#define PORT_08 0x0800 /* IO port 8 */
#define PORT_09 0x0900 /* IO port 9 */
#define PORT_10 0x0A00 /* IO port 10 */
#define PORT_11 0x0B00 /* IO port 11 */
#define PORT_12 0x0C00 /* IO port 12 */
#define PORT_13 0x0D00 /* IO port 13 */
#define PORT_14 0x0E00 /* IO port 14 */
#define PORT_15 0x0F00 /* IO port 15 */
#define PORT_16 0x1000 /* IO port 16 */
#define PORT_17 0x1100 /* IO port 17 */
#define PORT_18 0x1200 /* IO port 18 */
#define PORT_19 0x1300 /* IO port 19 */
#define PORT_20 0x1400 /* IO port 20 */
#define PORT_21 0x1500 /* IO port 21 */
#define PORT_22 0x1600 /* IO port 22 */
#define PORT_23 0x1700 /* IO port 23 */
#define PORT_24 0x1800 /* IO port 24 */
#define PORT_25 0x1900 /* IO port 25 */
#define PORT_26 0x1A00 /* IO port 26 */
#define PORT_27 0x1B00 /* IO port 27 */
#define PORT_28 0x1C00 /* IO port 28 */
#define PORT_29 0x1D00 /* IO port 29 */
#define PORT_30 0x1E00 /* IO port 30 */
#define PORT_31 0x1F00 /* IO port 31 */
#define PORT_32 0x2000 /* IO port 32 */
#define PORT_33 0x2100 /* IO port 33 */
#define PORT_34 0x2200 /* IO port 34 */
#define PORT_35 0x2300 /* IO port 35 */
#define PORT_36 0x2400 /* IO port 36 */
#define PORT_37 0x2500 /* IO port 37 */
#define PORT_38 0x2600 /* IO port 38 */
#define PORT_39 0x2700 /* IO port 39 */
#define PORT_40 0x2800 /* IO port 40 */
#define PORT_41 0x2900 /* IO port 41 */
#define PORT_42 0x2A00 /* IO port 42 */
#define PORT_43 0x2B00 /* IO port 43 */
#define PORT_44 0x2C00 /* IO port 44 */
#define PORT_45 0x2D00 /* IO port 45 */
#define PORT_46 0x2E00 /* IO port 46 */
#define PORT_47 0x2F00 /* IO port 47 */
#define PORT_48 0x3000 /* IO port 48 */
/*
* Create the value contain port/pin/function information
*
* port: port number BSP_IO_PORT_00..BSP_IO_PORT_48
* pin: pin number
* func: pin function
*/
#define RZG_PINMUX(port, pin, func) (port | pin | (func << 4))
/* Special purpose port */
#define BSP_IO_NMI 0xFFFF0100 /* NMI */
#define BSP_IO_TMS_SWDIO 0xFFFF0200 /* TMS_SWDIO */
#define BSP_IO_TDO 0xFFFF0300 /* TDO */
#define BSP_IO_AUDIO_CLK1 0xFFFF0400 /* AUDIO_CLK1 */
#define BSP_IO_AUDIO_CLK2 0xFFFF0401 /* AUDIO_CLK2 */
#define BSP_IO_SD0_CLK 0xFFFF0600 /* SD0_CLK */
#define BSP_IO_SD0_CMD 0xFFFF0601 /* SD0_CMD */
#define BSP_IO_SD0_RST_N 0xFFFF0602 /* SD0_RST_N */
#define BSP_IO_SD0_DATA0 0xFFFF0700 /* SD0_DATA0 */
#define BSP_IO_SD0_DATA1 0xFFFF0701 /* SD0_DATA1 */
#define BSP_IO_SD0_DATA2 0xFFFF0702 /* SD0_DATA2 */
#define BSP_IO_SD0_DATA3 0xFFFF0703 /* SD0_DATA3 */
#define BSP_IO_SD0_DATA4 0xFFFF0704 /* SD0_DATA4 */
#define BSP_IO_SD0_DATA5 0xFFFF0705 /* SD0_DATA5 */
#define BSP_IO_SD0_DATA6 0xFFFF0706 /* SD0_DATA6 */
#define BSP_IO_SD0_DATA7 0xFFFF0707 /* SD0_DATA7 */
#define BSP_IO_SD1_CLK 0xFFFF0800 /* SD1_CLK */
#define BSP_IO_SD1_CMD 0xFFFF0801 /* SD1_CMD */
#define BSP_IO_SD1_DATA0 0xFFFF0900 /* SD1_DATA0 */
#define BSP_IO_SD1_DATA1 0xFFFF0901 /* SD1_DATA1 */
#define BSP_IO_SD1_DATA2 0xFFFF0902 /* SD1_DATA2 */
#define BSP_IO_SD1_DATA3 0xFFFF0903 /* SD1_DATA3 */
#define BSP_IO_QSPI0_SPCLK 0xFFFF0A00 /* QSPI0_SPCLK */
#define BSP_IO_QSPI0_IO0 0xFFFF0A01 /* QSPI0_IO0 */
#define BSP_IO_QSPI0_IO1 0xFFFF0A02 /* QSPI0_IO1 */
#define BSP_IO_QSPI0_IO2 0xFFFF0A03 /* QSPI0_IO2 */
#define BSP_IO_QSPI0_IO3 0xFFFF0A04 /* QSPI0_IO3 */
#define BSP_IO_QSPI0_SSL 0xFFFF0A05 /* QSPI0_SSL */
#define BSP_IO_QSPI1_SPCLK 0xFFFF0B00 /* QSPI1_SPCLK */
#define BSP_IO_QSPI1_IO0 0xFFFF0B01 /* QSPI1_IO0 */
#define BSP_IO_QSPI1_IO1 0xFFFF0B02 /* QSPI1_IO1 */
#define BSP_IO_QSPI1_IO2 0xFFFF0B03 /* QSPI1_IO2 */
#define BSP_IO_QSPI1_IO3 0xFFFF0B04 /* QSPI1_IO3 */
#define BSP_IO_QSPI1_SSL 0xFFFF0B05 /* QSPI1_SSL */
#define BSP_IO_QSPI_RESET_N 0xFFFF0C00 /* QSPI_RESET_N */
#define BSP_IO_QSPI_WP_N 0xFFFF0C01 /* QSPI_WP_N */
#define BSP_IO_QSPI_INT_N 0xFFFF0C02 /* QSPI_INT_N */
#define BSP_IO_WDTOVF_PERROUT_N 0xFFFF0D00 /* WDTOVF_PERROUT_N */
#define BSP_IO_RIIC0_SDA 0xFFFF0E00 /* RIIC0_SDA */
#define BSP_IO_RIIC0_SCL 0xFFFF0E01 /* RIIC0_SCL */
#define BSP_IO_RIIC1_SDA 0xFFFF0E02 /* RIIC1_SDA */
#define BSP_IO_RIIC1_SCL 0xFFFF0E03 /* RIIC1_SCL */
/* FILNUM */
#define RZG_FILNUM_4_STAGE 0
#define RZG_FILNUM_8_STAGE 1
#define RZG_FILNUM_12_STAGE 2
#define RZG_FILNUM_16_STAGE 3
/* FILCLKSEL */
#define RZG_FILCLKSEL_NOT_DIV 0
#define RZG_FILCLKSEL_DIV_9000 1
#define RZG_FILCLKSEL_DIV_18000 2
#define RZG_FILCLKSEL_DIV_36000 3
#define RZG_FILTER_SET(filnum, filclksel) (((filnum) & 0x3) << 0x2) | (filclksel & 0x3)
#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_RENESAS_PINCTRL_RZG2_COMMON_H_ */

View file

@ -61,6 +61,14 @@ typedef struct pinctrl_soc_pin_t {
#define RZG_FILTER_ON_OFF(node_id) COND_CODE_0(DT_PROP(node_id, renesas_filter), (0), (1)) #define RZG_FILTER_ON_OFF(node_id) COND_CODE_0(DT_PROP(node_id, renesas_filter), (0), (1))
#if defined(CONFIG_SOC_SERIES_RZG3S)
#define RZG_GET_PFC(node_id, state_prop, idx) \
(RZG_GET_FUNC(DT_PROP_BY_IDX(node_id, state_prop, idx)) - 1)
#else
#define RZG_GET_PFC(node_id, state_prop, idx) \
(RZG_GET_FUNC(DT_PROP_BY_IDX(node_id, state_prop, idx)))
#endif
/* Process pinmux cfg */ /* Process pinmux cfg */
#define Z_PINCTRL_PINMUX_INIT(node_id, state_prop, idx) \ #define Z_PINCTRL_PINMUX_INIT(node_id, state_prop, idx) \
{ \ { \
@ -75,9 +83,7 @@ typedef struct pinctrl_soc_pin_t {
.filonoff_reg = RZG_FILTER_ON_OFF(node_id), \ .filonoff_reg = RZG_FILTER_ON_OFF(node_id), \
.filnum_reg = RZG_GET_FILNUM(node_id), \ .filnum_reg = RZG_GET_FILNUM(node_id), \
.filclksel_reg = RZG_GET_FILCLKSEL(node_id), \ .filclksel_reg = RZG_GET_FILCLKSEL(node_id), \
.pfc_reg = \ .pfc_reg = RZG_GET_PFC(node_id, state_prop, idx), \
(RZG_GET_FUNC(DT_PROP_BY_IDX(node_id, state_prop, idx)) - \
1), \
}, \ }, \
}, },