1*6a339a49SYann Gautier /* 2*6a339a49SYann Gautier * Copyright (c) 2015-2018, STMicroelectronics - All Rights Reserved 3*6a339a49SYann Gautier * 4*6a339a49SYann Gautier * SPDX-License-Identifier: BSD-3-Clause 5*6a339a49SYann Gautier */ 6*6a339a49SYann Gautier 7*6a339a49SYann Gautier #ifndef __PLAT_GPIO_H__ 8*6a339a49SYann Gautier #define __PLAT_GPIO_H__ 9*6a339a49SYann Gautier 10*6a339a49SYann Gautier #include <utils_def.h> 11*6a339a49SYann Gautier 12*6a339a49SYann Gautier #define STM32_GPIOA_BANK U(0x50002000) 13*6a339a49SYann Gautier #define STM32_GPIOZ_BANK U(0x54004000) 14*6a339a49SYann Gautier #define STM32_GPIO_BANK_OFFSET U(0x1000) 15*6a339a49SYann Gautier 16*6a339a49SYann Gautier #define GPIO_MODE_OFFSET U(0x00) 17*6a339a49SYann Gautier #define GPIO_TYPE_OFFSET U(0x04) 18*6a339a49SYann Gautier #define GPIO_SPEED_OFFSET U(0x08) 19*6a339a49SYann Gautier #define GPIO_PUPD_OFFSET U(0x0C) 20*6a339a49SYann Gautier #define GPIO_BSRR_OFFSET U(0x18) 21*6a339a49SYann Gautier #define GPIO_AFRL_OFFSET U(0x20) 22*6a339a49SYann Gautier #define GPIO_AFRH_OFFSET U(0x24) 23*6a339a49SYann Gautier 24*6a339a49SYann Gautier #define GPIO_ALT_LOWER_LIMIT U(0x08) 25*6a339a49SYann Gautier 26*6a339a49SYann Gautier #define GPIO_BANK_A U(0x00) 27*6a339a49SYann Gautier #define GPIO_BANK_B U(0x01) 28*6a339a49SYann Gautier #define GPIO_BANK_C U(0x02) 29*6a339a49SYann Gautier #define GPIO_BANK_D U(0x03) 30*6a339a49SYann Gautier #define GPIO_BANK_E U(0x04) 31*6a339a49SYann Gautier #define GPIO_BANK_F U(0x05) 32*6a339a49SYann Gautier #define GPIO_BANK_G U(0x06) 33*6a339a49SYann Gautier #define GPIO_BANK_H U(0x07) 34*6a339a49SYann Gautier #define GPIO_BANK_I U(0x08) 35*6a339a49SYann Gautier #define GPIO_BANK_J U(0x09) 36*6a339a49SYann Gautier #define GPIO_BANK_K U(0x0A) 37*6a339a49SYann Gautier #define GPIO_BANK_Z U(0x19) 38*6a339a49SYann Gautier 39*6a339a49SYann Gautier #define GPIO_PIN_0 U(0x00) 40*6a339a49SYann Gautier #define GPIO_PIN_1 U(0x01) 41*6a339a49SYann Gautier #define GPIO_PIN_2 U(0x02) 42*6a339a49SYann Gautier #define GPIO_PIN_3 U(0x03) 43*6a339a49SYann Gautier #define GPIO_PIN_4 U(0x04) 44*6a339a49SYann Gautier #define GPIO_PIN_5 U(0x05) 45*6a339a49SYann Gautier #define GPIO_PIN_6 U(0x06) 46*6a339a49SYann Gautier #define GPIO_PIN_7 U(0x07) 47*6a339a49SYann Gautier #define GPIO_PIN_8 U(0x08) 48*6a339a49SYann Gautier #define GPIO_PIN_9 U(0x09) 49*6a339a49SYann Gautier #define GPIO_PIN_10 U(0x0A) 50*6a339a49SYann Gautier #define GPIO_PIN_11 U(0x0B) 51*6a339a49SYann Gautier #define GPIO_PIN_12 U(0x0C) 52*6a339a49SYann Gautier #define GPIO_PIN_13 U(0x0D) 53*6a339a49SYann Gautier #define GPIO_PIN_14 U(0x0E) 54*6a339a49SYann Gautier #define GPIO_PIN_15 U(0x0F) 55*6a339a49SYann Gautier #define GPIO_PIN_MAX GPIO_PIN_15 56*6a339a49SYann Gautier 57*6a339a49SYann Gautier #define GPIO_ALTERNATE_0 0x00 58*6a339a49SYann Gautier #define GPIO_ALTERNATE_1 0x01 59*6a339a49SYann Gautier #define GPIO_ALTERNATE_2 0x02 60*6a339a49SYann Gautier #define GPIO_ALTERNATE_3 0x03 61*6a339a49SYann Gautier #define GPIO_ALTERNATE_4 0x04 62*6a339a49SYann Gautier #define GPIO_ALTERNATE_5 0x05 63*6a339a49SYann Gautier #define GPIO_ALTERNATE_6 0x06 64*6a339a49SYann Gautier #define GPIO_ALTERNATE_7 0x07 65*6a339a49SYann Gautier #define GPIO_ALTERNATE_8 0x08 66*6a339a49SYann Gautier #define GPIO_ALTERNATE_9 0x09 67*6a339a49SYann Gautier #define GPIO_ALTERNATE_10 0x0A 68*6a339a49SYann Gautier #define GPIO_ALTERNATE_11 0x0B 69*6a339a49SYann Gautier #define GPIO_ALTERNATE_12 0x0C 70*6a339a49SYann Gautier #define GPIO_ALTERNATE_13 0x0D 71*6a339a49SYann Gautier #define GPIO_ALTERNATE_14 0x0E 72*6a339a49SYann Gautier #define GPIO_ALTERNATE_15 0x0F 73*6a339a49SYann Gautier #define GPIO_ALTERNATE_MASK U(0x0F) 74*6a339a49SYann Gautier 75*6a339a49SYann Gautier #define GPIO_MODE_INPUT 0x00 76*6a339a49SYann Gautier #define GPIO_MODE_OUTPUT 0x01 77*6a339a49SYann Gautier #define GPIO_MODE_ALTERNATE 0x02 78*6a339a49SYann Gautier #define GPIO_MODE_ANALOG 0x03 79*6a339a49SYann Gautier #define GPIO_MODE_MASK U(0x03) 80*6a339a49SYann Gautier 81*6a339a49SYann Gautier #define GPIO_OPEN_DRAIN U(0x10) 82*6a339a49SYann Gautier 83*6a339a49SYann Gautier #define GPIO_SPEED_LOW 0x00 84*6a339a49SYann Gautier #define GPIO_SPEED_MEDIUM 0x01 85*6a339a49SYann Gautier #define GPIO_SPEED_FAST 0x02 86*6a339a49SYann Gautier #define GPIO_SPEED_HIGH 0x03 87*6a339a49SYann Gautier #define GPIO_SPEED_MASK U(0x03) 88*6a339a49SYann Gautier 89*6a339a49SYann Gautier #define GPIO_NO_PULL 0x00 90*6a339a49SYann Gautier #define GPIO_PULL_UP 0x01 91*6a339a49SYann Gautier #define GPIO_PULL_DOWN 0x02 92*6a339a49SYann Gautier #define GPIO_PULL_MASK U(0x03) 93*6a339a49SYann Gautier 94*6a339a49SYann Gautier #ifndef __ASSEMBLY__ 95*6a339a49SYann Gautier #include <stdint.h> 96*6a339a49SYann Gautier 97*6a339a49SYann Gautier void set_gpio(uint32_t bank, uint32_t pin, uint32_t mode, uint32_t speed, 98*6a339a49SYann Gautier uint32_t pull, uint32_t alternate); 99*6a339a49SYann Gautier #endif /*__ASSEMBLY__*/ 100*6a339a49SYann Gautier 101*6a339a49SYann Gautier #endif /*__PLAT_GPIO_H__*/ 102