1 /* 2 * Copyright (c) 2024-2025 Renesas Electronics Corporation 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_DRIVERS_GPIO_RENESAS_RZ_H_ 8 #define ZEPHYR_DRIVERS_GPIO_RENESAS_RZ_H_ 9 10 #include "r_ioport.h" 11 12 #define GPIO_RZ_INT_UNSUPPORTED 0xF 13 14 #if defined(CONFIG_SOC_SERIES_RZG3S) 15 #include <zephyr/dt-bindings/gpio/renesas-rz-gpio.h> 16 17 #define GPIO_RZ_IOPORT_P_REG_BASE_GET (&R_GPIO->P_20) 18 #define GPIO_RZ_IOPORT_PM_REG_BASE_GET (&R_GPIO->PM_20) 19 #define GPIO_RZ_IOPORT_PFC_REG_BASE_GET (&R_GPIO->PFC_20) 20 21 #define GPIO_RZ_IOPORT_P_REG_GET(port, pin) (&GPIO_RZ_IOPORT_P_REG_BASE_GET[port + (pin / 4)]) 22 #define GPIO_RZ_IOPORT_PM_REG_GET(port, pin) (&GPIO_RZ_IOPORT_PM_REG_BASE_GET[port + (pin / 4)]) 23 #define GPIO_RZ_IOPORT_PFC_REG_GET(port, pin) (&GPIO_RZ_IOPORT_PFC_REG_BASE_GET[port + (pin / 4)]) 24 25 #define GPIO_RZ_P_VALUE_GET(value, pin) ((value >> pin) & 1U) 26 #define GPIO_RZ_PM_VALUE_GET(value, pin) ((value >> (pin * 2)) & 3U) 27 #define GPIO_RZ_PFC_VALUE_GET(value, pin) ((value >> (pin * 4)) & 0xF) 28 29 #define GPIO_RZ_IOPORT_PFC_SET(value) (value << 24) 30 31 #define GPIO_RZ_PIN_DISCONNECT(port, pin) /* do nothing */ 32 33 #define GPIO_RZ_MAX_PORT_NUM 19 34 #define GPIO_RZ_MAX_INT_NUM 32 35 36 #define GPIO_RZ_TINT_IRQ_OFFSET 429 37 #define GPIO_RZ_TINT_IRQ_GET(tint_num) (tint_num + GPIO_RZ_TINT_IRQ_OFFSET) 38 39 #define GPIO_RZ_INT_EDGE_RISING 0x0 40 #define GPIO_RZ_INT_EDGE_FALLING 0x1 41 #define GPIO_RZ_INT_LEVEL_HIGH 0x2 42 #define GPIO_RZ_INT_LEVEL_LOW 0x3 43 #define GPIO_RZ_INT_BOTH_EDGE GPIO_RZ_INT_UNSUPPORTED 44 45 #define GPIO_RZ_TSSR_VAL(port, pin) (0x80 | (gpio_rz_int[port] + pin)) 46 #define GPIO_RZ_TSSR_OFFSET(irq) ((irq % 4) * 8) 47 #define GPIO_RZ_TITSR_OFFSET(irq) ((irq % 16) * 2) 48 49 #define GPIO_RZ_PIN_CONFIGURE_GET_FILTER(flag) (((flags >> RZG3S_GPIO_FILTER_SHIFT) & 0x1F) << 19U) 50 #define GPIO_RZ_PIN_CONFIGURE_GET(flag) (((flag >> RZG3S_GPIO_IOLH_SHIFT) & 0x3) << 10U) 51 52 #define GPIO_RZ_PIN_CONFIGURE_INT_ENABLE IOPORT_CFG_TINT_ENABLE 53 #define GPIO_RZ_PIN_CONFIGURE_INT_DISABLE (~(IOPORT_CFG_TINT_ENABLE)) 54 #define GPIO_RZ_PIN_CONFIGURE_INPUT_OUTPUT_RESET (~(0x3 << 2)) 55 #define GPIO_RZ_PIN_SPECIAL_FLAG_GET(flag) GPIO_RZ_PIN_CONFIGURE_GET_FILTER(flag) 56 57 static const uint8_t gpio_rz_int[GPIO_RZ_MAX_PORT_NUM] = {0, 4, 9, 13, 17, 23, 28, 33, 38, 43, 58 47, 52, 56, 58, 63, 66, 70, 72, 76}; 59 60 #elif defined(CONFIG_SOC_SERIES_RZN2L) || defined(CONFIG_SOC_SERIES_RZT2L) 61 #include <zephyr/dt-bindings/gpio/renesas-rztn-gpio.h> 62 #define GPIO_RZ_IOPORT_REG_REGION_GET(p) (R_BSP_IoRegionGet(p) == BSP_IO_REGION_NOT_SAFE ? 1 : 0) 63 64 #define GPIO_RZ_IOPORT_P_REG_BASE_GET(port, pin) \ 65 (GPIO_RZ_IOPORT_REG_REGION_GET((port << 8U) | pin) == 1 ? &R_PORT_NSR->P[port] \ 66 : &R_PORT_SR->P[port]) 67 68 #define GPIO_RZ_IOPORT_PM_REG_BASE_GET(port, pin) \ 69 (GPIO_RZ_IOPORT_REG_REGION_GET((port << 8U) | pin) == 1 ? &R_PORT_NSR->PM[port] \ 70 : &R_PORT_SR->PM[port]) 71 72 #define GPIO_RZ_IOPORT_PFC_REG_BASE_GET(port, pin) \ 73 (GPIO_RZ_IOPORT_REG_REGION_GET((port << 8U) | pin) == 1 ? &R_PORT_NSR->PFC[port] \ 74 : &R_PORT_SR->PFC[port]) 75 76 #define GPIO_RZ_IOPORT_P_REG_GET(port, pin) (GPIO_RZ_IOPORT_P_REG_BASE_GET(port, pin)) 77 #define GPIO_RZ_IOPORT_PM_REG_GET(port, pin) (GPIO_RZ_IOPORT_PM_REG_BASE_GET(port, pin)) 78 #define GPIO_RZ_IOPORT_PFC_REG_GET(port, pin) (GPIO_RZ_IOPORT_PFC_REG_BASE_GET(port, pin)) 79 80 #define GPIO_RZ_P_VALUE_GET(value, pin) ((value >> pin) & 1U) 81 #define GPIO_RZ_PM_VALUE_GET(value, pin) ((value >> (pin * 2)) & 3U) 82 #define GPIO_RZ_PFC_VALUE_GET(value, pin) ((value >> (pin * 4)) & 0xF) 83 84 #define GPIO_RZ_IOPORT_PFC_SET(value) (value << 4) 85 86 #define GPIO_RZ_PIN_DISCONNECT(port, pin) \ 87 *GPIO_RZ_IOPORT_PM_REG_GET((port >> 8U), pin) &= ~(3U << (pin * 2)) 88 89 #define GPIO_RZ_MAX_INT_NUM 16 90 91 #define GPIO_RZ_INT_EDGE_FALLING 0x0 92 #define GPIO_RZ_INT_EDGE_RISING 0x1 93 #define GPIO_RZ_INT_BOTH_EDGE 0x2 94 #define GPIO_RZ_INT_LEVEL_LOW 0x3 95 #define GPIO_RZ_INT_LEVEL_HIGH GPIO_RZ_INT_UNSUPPORTED 96 97 #define GPIO_RZ_PIN_CONFIGURE_GET(flag) (((flag >> RZTN_GPIO_DRCTL_SHIFT) & 0x33) << 8U) 98 99 #define GPIO_RZ_PIN_CONFIGURE_INT_ENABLE (1U << 3) 100 #define GPIO_RZ_PIN_CONFIGURE_INT_DISABLE (~(1U << 3)) 101 #define GPIO_RZ_PIN_CONFIGURE_INPUT_OUTPUT_RESET (~(0x3 << 2)) 102 #define GPIO_RZ_PIN_SPECIAL_FLAG_GET(flag) IOPORT_CFG_REGION_NSAFETY 103 104 #endif /* CONFIG_SOC_* */ 105 106 #endif /* ZEPHYR_DRIVERS_GPIO_RENESAS_RZ_H_ */ 107