1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2021 NXP 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef PLAT_GPIO_H 9*91f16700Schasinglulu #define PLAT_GPIO_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <endian.h> 12*91f16700Schasinglulu #include <lib/mmio.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* GPIO Register offset */ 15*91f16700Schasinglulu #define GPIO_SEL_MASK 0x7F 16*91f16700Schasinglulu #define GPIO_BIT_MASK 0x1F 17*91f16700Schasinglulu #define GPDIR_REG_OFFSET 0x0 18*91f16700Schasinglulu #define GPDAT_REG_OFFSET 0x8 19*91f16700Schasinglulu 20*91f16700Schasinglulu #define GPIO_ID_BASE_ADDR_SHIFT 5U 21*91f16700Schasinglulu #define GPIO_BITS_PER_BASE_REG 32U 22*91f16700Schasinglulu 23*91f16700Schasinglulu #define GPIO_0 0 24*91f16700Schasinglulu #define GPIO_1 1 25*91f16700Schasinglulu #define GPIO_2 2 26*91f16700Schasinglulu #define GPIO_3 3 27*91f16700Schasinglulu 28*91f16700Schasinglulu #define GPIO_SUCCESS 0x0 29*91f16700Schasinglulu #define GPIO_FAILURE 0x1 30*91f16700Schasinglulu 31*91f16700Schasinglulu #ifdef NXP_GPIO_BE 32*91f16700Schasinglulu #define gpio_read32(a) bswap32(mmio_read_32((uintptr_t)(a))) 33*91f16700Schasinglulu #define gpio_write32(a, v) mmio_write_32((uintptr_t)(a), bswap32(v)) 34*91f16700Schasinglulu #elif defined(NXP_GPIO_LE) 35*91f16700Schasinglulu #define gpio_read32(a) mmio_read_32((uintptr_t)(a)) 36*91f16700Schasinglulu #define gpio_write32(a, v) mmio_write_32((uintptr_t)(a), (v)) 37*91f16700Schasinglulu #else 38*91f16700Schasinglulu #error Please define GPIO register endianness 39*91f16700Schasinglulu #endif 40*91f16700Schasinglulu 41*91f16700Schasinglulu typedef struct { 42*91f16700Schasinglulu uintptr_t gpio1_base_addr; 43*91f16700Schasinglulu uintptr_t gpio2_base_addr; 44*91f16700Schasinglulu uintptr_t gpio3_base_addr; 45*91f16700Schasinglulu uintptr_t gpio4_base_addr; 46*91f16700Schasinglulu } gpio_init_info_t; 47*91f16700Schasinglulu 48*91f16700Schasinglulu void gpio_init(gpio_init_info_t *gpio_init_data); 49*91f16700Schasinglulu uint32_t *select_gpio_n_bitnum(uint32_t povdd_gpio, uint32_t *bit_num); 50*91f16700Schasinglulu int clr_gpio_bit(uint32_t *gpio_base_addr, uint32_t bit_num); 51*91f16700Schasinglulu int set_gpio_bit(uint32_t *gpio_base_addr, uint32_t bit_num); 52*91f16700Schasinglulu 53*91f16700Schasinglulu #endif /* PLAT_GPIO_H */ 54