coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
gpio.h
Go to the documentation of this file.
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;
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 
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
pte_t value
Definition: mmu.c:91
struct soc_gpio_map __packed
int get_gpio(int community_base, int pad0_offset)
Definition: gpio_support.c:148
void setup_pch_gpios(const struct pch_gpio_map *gpio)
Definition: gpio.c:33
const struct pch_gpio_map mainboard_gpio_map
Definition: gpio.c:87
void clear_gpio(int gpio_num)
unsigned int get_gpios(const int *gpio_num_array)
Definition: gpio.c:107
int gpio_is_native(int gpio_num)
Definition: gpio.c:147
void set_gpio(int gpio_num, int value)
Definition: gpio.c:125
uint32_t u32
Definition: stdint.h:51
Definition: pinmux.c:36
struct pch_gpio_map::@1670 set2
const struct pch_gpio_set3 * level
Definition: gpio.h:146
const struct pch_gpio_set2 * mode
Definition: gpio.h:138
const struct pch_gpio_set2 * direction
Definition: gpio.h:139
const struct pch_gpio_set1 * level
Definition: gpio.h:132
const struct pch_gpio_set1 * direction
Definition: gpio.h:131
const struct pch_gpio_set1 * invert
Definition: gpio.h:134
struct pch_gpio_map::@1671 set3
const struct pch_gpio_set1 * mode
Definition: gpio.h:130
const struct pch_gpio_set1 * blink
Definition: gpio.h:135
struct pch_gpio_map::@1669 set1
const struct pch_gpio_set2 * reset
Definition: gpio.h:141
const struct pch_gpio_set3 * mode
Definition: gpio.h:144
const struct pch_gpio_set1 * reset
Definition: gpio.h:133
const struct pch_gpio_set3 * direction
Definition: gpio.h:145
const struct pch_gpio_set3 * reset
Definition: gpio.h:147
const struct pch_gpio_set2 * level
Definition: gpio.h:140
u32 gpio19
Definition: gpio.h:63
u32 gpio10
Definition: gpio.h:54
u32 gpio15
Definition: gpio.h:59
u32 gpio22
Definition: gpio.h:66
u32 gpio29
Definition: gpio.h:73
u32 gpio26
Definition: gpio.h:70
u32 gpio27
Definition: gpio.h:71
u32 gpio4
Definition: gpio.h:48
u32 gpio0
Definition: gpio.h:44
u32 gpio20
Definition: gpio.h:64
u32 gpio7
Definition: gpio.h:51
u32 gpio25
Definition: gpio.h:69
u32 gpio17
Definition: gpio.h:61
u32 gpio2
Definition: gpio.h:46
u32 gpio24
Definition: gpio.h:68
u32 gpio8
Definition: gpio.h:52
u32 gpio18
Definition: gpio.h:62
u32 gpio31
Definition: gpio.h:75
u32 gpio13
Definition: gpio.h:57
u32 gpio1
Definition: gpio.h:45
u32 gpio11
Definition: gpio.h:55
u32 gpio14
Definition: gpio.h:58
u32 gpio6
Definition: gpio.h:50
u32 gpio12
Definition: gpio.h:56
u32 gpio28
Definition: gpio.h:72
u32 gpio23
Definition: gpio.h:67
u32 gpio16
Definition: gpio.h:60
u32 gpio21
Definition: gpio.h:65
u32 gpio3
Definition: gpio.h:47
u32 gpio5
Definition: gpio.h:49
u32 gpio9
Definition: gpio.h:53
u32 gpio30
Definition: gpio.h:74
u32 gpio39
Definition: gpio.h:86
u32 gpio40
Definition: gpio.h:87
u32 gpio63
Definition: gpio.h:110
u32 gpio57
Definition: gpio.h:104
u32 gpio38
Definition: gpio.h:85
u32 gpio53
Definition: gpio.h:100
u32 gpio47
Definition: gpio.h:94
u32 gpio48
Definition: gpio.h:95
u32 gpio55
Definition: gpio.h:102
u32 gpio61
Definition: gpio.h:108
u32 gpio49
Definition: gpio.h:96
u32 gpio46
Definition: gpio.h:93
u32 gpio36
Definition: gpio.h:83
u32 gpio42
Definition: gpio.h:89
u32 gpio51
Definition: gpio.h:98
u32 gpio44
Definition: gpio.h:91
u32 gpio33
Definition: gpio.h:80
u32 gpio43
Definition: gpio.h:90
u32 gpio37
Definition: gpio.h:84
u32 gpio45
Definition: gpio.h:92
u32 gpio50
Definition: gpio.h:97
u32 gpio54
Definition: gpio.h:101
u32 gpio35
Definition: gpio.h:82
u32 gpio56
Definition: gpio.h:103
u32 gpio52
Definition: gpio.h:99
u32 gpio34
Definition: gpio.h:81
u32 gpio58
Definition: gpio.h:105
u32 gpio59
Definition: gpio.h:106
u32 gpio62
Definition: gpio.h:109
u32 gpio41
Definition: gpio.h:88
u32 gpio32
Definition: gpio.h:79
u32 gpio60
Definition: gpio.h:107
u32 gpio74
Definition: gpio.h:124
u32 gpio65
Definition: gpio.h:115
u32 gpio64
Definition: gpio.h:114
u32 gpio70
Definition: gpio.h:120
u32 gpio73
Definition: gpio.h:123
u32 gpio68
Definition: gpio.h:118
u32 gpio72
Definition: gpio.h:122
u32 gpio71
Definition: gpio.h:121
u32 gpio69
Definition: gpio.h:119
u32 gpio67
Definition: gpio.h:117
u32 gpio75
Definition: gpio.h:125
u32 gpio66
Definition: gpio.h:116