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