1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 #ifndef INTEL_COMMON_GPIO_H 4 #define INTEL_COMMON_GPIO_H 5 6 #include <stdint.h> 7 8 /* ICH7 GPIOBASE */ 9 #define GPIO_USE_SEL 0x00 10 #define GP_IO_SEL 0x04 11 #define GP_LVL 0x0c 12 #define GPO_BLINK 0x18 13 #define GPI_INV 0x2c 14 #define GPIO_USE_SEL2 0x30 15 #define GP_IO_SEL2 0x34 16 #define GP_LVL2 0x38 17 #define GPIO_USE_SEL3 0x40 18 #define GP_IO_SEL3 0x44 19 #define GP_LVL3 0x48 20 #define GP_RST_SEL1 0x60 21 #define GP_RST_SEL2 0x64 22 #define GP_RST_SEL3 0x68 23 24 #define GPIO_MODE_NATIVE 0 25 #define GPIO_MODE_GPIO 1 26 #define GPIO_MODE_NONE 1 27 28 #define GPIO_DIR_OUTPUT 0 29 #define GPIO_DIR_INPUT 1 30 31 #define GPIO_NO_INVERT 0 32 #define GPIO_INVERT 1 33 34 #define GPIO_LEVEL_LOW 0 35 #define GPIO_LEVEL_HIGH 1 36 37 #define GPIO_NO_BLINK 0 38 #define GPIO_BLINK 1 39 40 #define GPIO_RESET_PWROK 0 41 #define GPIO_RESET_RSMRST 1 42 43 struct pch_gpio_set1 { 44 u32 gpio0 : 1; 45 u32 gpio1 : 1; 46 u32 gpio2 : 1; 47 u32 gpio3 : 1; 48 u32 gpio4 : 1; 49 u32 gpio5 : 1; 50 u32 gpio6 : 1; 51 u32 gpio7 : 1; 52 u32 gpio8 : 1; 53 u32 gpio9 : 1; 54 u32 gpio10 : 1; 55 u32 gpio11 : 1; 56 u32 gpio12 : 1; 57 u32 gpio13 : 1; 58 u32 gpio14 : 1; 59 u32 gpio15 : 1; 60 u32 gpio16 : 1; 61 u32 gpio17 : 1; 62 u32 gpio18 : 1; 63 u32 gpio19 : 1; 64 u32 gpio20 : 1; 65 u32 gpio21 : 1; 66 u32 gpio22 : 1; 67 u32 gpio23 : 1; 68 u32 gpio24 : 1; 69 u32 gpio25 : 1; 70 u32 gpio26 : 1; 71 u32 gpio27 : 1; 72 u32 gpio28 : 1; 73 u32 gpio29 : 1; 74 u32 gpio30 : 1; 75 u32 gpio31 : 1; 76 } __packed; 77 78 struct pch_gpio_set2 { 79 u32 gpio32 : 1; 80 u32 gpio33 : 1; 81 u32 gpio34 : 1; 82 u32 gpio35 : 1; 83 u32 gpio36 : 1; 84 u32 gpio37 : 1; 85 u32 gpio38 : 1; 86 u32 gpio39 : 1; 87 u32 gpio40 : 1; 88 u32 gpio41 : 1; 89 u32 gpio42 : 1; 90 u32 gpio43 : 1; 91 u32 gpio44 : 1; 92 u32 gpio45 : 1; 93 u32 gpio46 : 1; 94 u32 gpio47 : 1; 95 u32 gpio48 : 1; 96 u32 gpio49 : 1; 97 u32 gpio50 : 1; 98 u32 gpio51 : 1; 99 u32 gpio52 : 1; 100 u32 gpio53 : 1; 101 u32 gpio54 : 1; 102 u32 gpio55 : 1; 103 u32 gpio56 : 1; 104 u32 gpio57 : 1; 105 u32 gpio58 : 1; 106 u32 gpio59 : 1; 107 u32 gpio60 : 1; 108 u32 gpio61 : 1; 109 u32 gpio62 : 1; 110 u32 gpio63 : 1; 111 } __packed; 112 113 struct pch_gpio_set3 { 114 u32 gpio64 : 1; 115 u32 gpio65 : 1; 116 u32 gpio66 : 1; 117 u32 gpio67 : 1; 118 u32 gpio68 : 1; 119 u32 gpio69 : 1; 120 u32 gpio70 : 1; 121 u32 gpio71 : 1; 122 u32 gpio72 : 1; 123 u32 gpio73 : 1; 124 u32 gpio74 : 1; 125 u32 gpio75 : 1; 126 } __packed; 127 128 struct pch_gpio_map { 129 struct { 130 const struct pch_gpio_set1 *mode; 131 const struct pch_gpio_set1 *direction; 132 const struct pch_gpio_set1 *level; 133 const struct pch_gpio_set1 *reset; 134 const struct pch_gpio_set1 *invert; 135 const struct pch_gpio_set1 *blink; 136 } set1; 137 struct { 138 const struct pch_gpio_set2 *mode; 139 const struct pch_gpio_set2 *direction; 140 const struct pch_gpio_set2 *level; 141 const struct pch_gpio_set2 *reset; 142 } set2; 143 struct { 144 const struct pch_gpio_set3 *mode; 145 const struct pch_gpio_set3 *direction; 146 const struct pch_gpio_set3 *level; 147 const struct pch_gpio_set3 *reset; 148 } set3; 149 }; 150 151 extern const struct pch_gpio_map mainboard_gpio_map; 152 153 /* Configure GPIOs with mainboard provided settings */ 154 void setup_pch_gpios(const struct pch_gpio_map *gpio); 155 156 /* get GPIO pin value */ 157 int get_gpio(int gpio_num); 158 /* 159 * get a number comprised of multiple GPIO values. gpio_num_array points to 160 * the array of gpio pin numbers to scan, terminated by -1. 161 */ 162 unsigned int get_gpios(const int *gpio_num_array); 163 164 void set_gpio(int gpio_num, int value); 165 166 void clear_gpio(int gpio_num); 167 168 int gpio_is_native(int gpio_num); 169 170 #endif 171