xref: /arm-trusted-firmware/include/drivers/nxp/gpio/nxp_gpio.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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