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