coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
early_gpio.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <baseboard/gpio.h>
4 #include <baseboard/variants.h>
5 #include <soc/gpio.h>
6 
7 /* Early pad configuration in bootblock */
8 static const struct pad_config early_gpio_table[] = {
9  /* WWAN_RST# */
10  PAD_CFG_GPO(GPP_F14, 0, PLTRST),
11  /* WWAN_PWR_EN */
12  PAD_CFG_GPO(GPP_F21, 1, DEEP),
13  /* SMB_CLK */
14  PAD_CFG_NF(GPP_C0, NONE, DEEP, NF1),
15  /* SMB_DATA */
16  PAD_CFG_NF(GPP_C1, NONE, DEEP, NF1),
17 
18  /* EC_IN_RW */
19  PAD_CFG_GPI(GPP_E7, NONE, DEEP),
20 
21  /* CPU PCIe VGPIO for RP0 */
22  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_0, NONE, PLTRST, NF1),
23  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_1, NONE, PLTRST, NF1),
24  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_3, NONE, PLTRST, NF1),
25  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_2, NONE, PLTRST, NF1),
26  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_4, NONE, PLTRST, NF1),
27  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_5, NONE, PLTRST, NF1),
28  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_6, NONE, PLTRST, NF1),
29  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_7, NONE, PLTRST, NF1),
30  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_8, NONE, PLTRST, NF1),
31  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_9, NONE, PLTRST, NF1),
32  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_10, NONE, PLTRST, NF1),
33  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_11, NONE, PLTRST, NF1),
34  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_12, NONE, PLTRST, NF1),
35  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_13, NONE, PLTRST, NF1),
36  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_14, NONE, PLTRST, NF1),
37  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_15, NONE, PLTRST, NF1),
38  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_64, NONE, PLTRST, NF1),
39  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_65, NONE, PLTRST, NF1),
40  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_66, NONE, PLTRST, NF1),
41  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_67, NONE, PLTRST, NF1),
42 
43  /* CPU PCIe vGPIO for RP1 */
44  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_16, NONE, PLTRST, NF1),
45  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_17, NONE, PLTRST, NF1),
46  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_18, NONE, PLTRST, NF1),
47  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_19, NONE, PLTRST, NF1),
48  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_20, NONE, PLTRST, NF1),
49  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_21, NONE, PLTRST, NF1),
50  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_22, NONE, PLTRST, NF1),
51  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_23, NONE, PLTRST, NF1),
52  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_24, NONE, PLTRST, NF1),
53  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_25, NONE, PLTRST, NF1),
54  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_26, NONE, PLTRST, NF1),
55  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_27, NONE, PLTRST, NF1),
56  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_28, NONE, PLTRST, NF1),
57  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_29, NONE, PLTRST, NF1),
58  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_30, NONE, PLTRST, NF1),
59  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_31, NONE, PLTRST, NF1),
60  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_68, NONE, PLTRST, NF1),
61  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_69, NONE, PLTRST, NF1),
62  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_70, NONE, PLTRST, NF1),
63  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_71, NONE, PLTRST, NF1),
64 
65  /* CPU PCIe vGPIO for RP2 */
66  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_32, NONE, PLTRST, NF1),
67  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_33, NONE, PLTRST, NF1),
68  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_34, NONE, PLTRST, NF1),
69  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_35, NONE, PLTRST, NF1),
70  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_36, NONE, PLTRST, NF1),
71  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_37, NONE, PLTRST, NF1),
72  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_38, NONE, PLTRST, NF1),
73  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_39, NONE, PLTRST, NF1),
74  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_40, NONE, PLTRST, NF1),
75  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_41, NONE, PLTRST, NF1),
76  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_42, NONE, PLTRST, NF1),
77  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_43, NONE, PLTRST, NF1),
78  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_44, NONE, PLTRST, NF1),
79  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_45, NONE, PLTRST, NF1),
80  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_46, NONE, PLTRST, NF1),
81  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_47, NONE, PLTRST, NF1),
82  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_72, NONE, PLTRST, NF1),
83  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_73, NONE, PLTRST, NF1),
84  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_74, NONE, PLTRST, NF1),
85  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_75, NONE, PLTRST, NF1),
86 
87  /* CPU PCIe vGPIO for RP3 */
88  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_48, NONE, PLTRST, NF1),
89  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_49, NONE, PLTRST, NF1),
90  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_50, NONE, PLTRST, NF1),
91  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_51, NONE, PLTRST, NF1),
92  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_52, NONE, PLTRST, NF1),
93  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_53, NONE, PLTRST, NF1),
94  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_54, NONE, PLTRST, NF1),
95  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_55, NONE, PLTRST, NF1),
96  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_56, NONE, PLTRST, NF1),
97  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_57, NONE, PLTRST, NF1),
98  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_58, NONE, PLTRST, NF1),
99  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_59, NONE, PLTRST, NF1),
100  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_60, NONE, PLTRST, NF1),
101  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_61, NONE, PLTRST, NF1),
102  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_62, NONE, PLTRST, NF1),
103  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_63, NONE, PLTRST, NF1),
104  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_76, NONE, PLTRST, NF1),
105  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_77, NONE, PLTRST, NF1),
106  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_78, NONE, PLTRST, NF1),
107  PAD_CFG_NF_VWEN(GPP_vGPIO_PCIE_79, NONE, PLTRST, NF1),
108 };
109 
110 static const struct pad_config early_uart_gpio_table[] = {
111  /* UART0 RX */
112  PAD_CFG_NF(GPP_H10, NONE, DEEP, NF2),
113  /* UART0 TX */
114  PAD_CFG_NF(GPP_H11, NONE, DEEP, NF2),
115 };
116 
118 {
119  if (CONFIG(INTEL_LPSS_UART_FOR_CONSOLE))
121 
123 }
#define GPP_vGPIO_PCIE_57
#define GPP_vGPIO_PCIE_9
#define GPP_vGPIO_PCIE_2
#define GPP_vGPIO_PCIE_38
#define GPP_F21
#define GPP_vGPIO_PCIE_48
#define GPP_vGPIO_PCIE_55
#define GPP_vGPIO_PCIE_39
#define GPP_vGPIO_PCIE_78
#define GPP_vGPIO_PCIE_68
#define GPP_vGPIO_PCIE_3
#define GPP_vGPIO_PCIE_45
#define GPP_vGPIO_PCIE_76
#define GPP_vGPIO_PCIE_25
#define GPP_vGPIO_PCIE_10
#define GPP_H11
#define GPP_vGPIO_PCIE_70
#define GPP_vGPIO_PCIE_53
#define GPP_vGPIO_PCIE_62
#define GPP_vGPIO_PCIE_19
#define GPP_vGPIO_PCIE_32
#define GPP_vGPIO_PCIE_49
#define GPP_vGPIO_PCIE_50
#define GPP_vGPIO_PCIE_77
#define GPP_vGPIO_PCIE_64
#define GPP_vGPIO_PCIE_26
#define GPP_vGPIO_PCIE_47
#define GPP_vGPIO_PCIE_31
#define GPP_vGPIO_PCIE_23
#define GPP_vGPIO_PCIE_4
#define GPP_vGPIO_PCIE_13
#define GPP_vGPIO_PCIE_73
#define GPP_vGPIO_PCIE_11
#define GPP_vGPIO_PCIE_6
#define GPP_vGPIO_PCIE_20
#define GPP_vGPIO_PCIE_36
#define GPP_vGPIO_PCIE_24
#define GPP_vGPIO_PCIE_67
#define GPP_vGPIO_PCIE_66
#define GPP_vGPIO_PCIE_22
#define GPP_vGPIO_PCIE_35
#define GPP_vGPIO_PCIE_60
#define GPP_vGPIO_PCIE_29
#define GPP_vGPIO_PCIE_54
#define GPP_vGPIO_PCIE_37
#define GPP_vGPIO_PCIE_33
#define GPP_vGPIO_PCIE_43
#define GPP_vGPIO_PCIE_30
#define GPP_vGPIO_PCIE_46
#define GPP_E7
#define GPP_vGPIO_PCIE_40
#define GPP_vGPIO_PCIE_8
#define GPP_vGPIO_PCIE_15
#define GPP_vGPIO_PCIE_1
#define GPP_vGPIO_PCIE_7
#define GPP_vGPIO_PCIE_71
#define GPP_vGPIO_PCIE_41
#define GPP_F14
#define GPP_vGPIO_PCIE_65
#define GPP_vGPIO_PCIE_75
#define GPP_vGPIO_PCIE_16
#define GPP_vGPIO_PCIE_18
#define GPP_vGPIO_PCIE_5
#define GPP_vGPIO_PCIE_52
#define GPP_vGPIO_PCIE_69
#define GPP_vGPIO_PCIE_21
#define GPP_vGPIO_PCIE_27
#define GPP_vGPIO_PCIE_0
#define GPP_vGPIO_PCIE_44
#define GPP_vGPIO_PCIE_59
#define GPP_vGPIO_PCIE_61
#define GPP_vGPIO_PCIE_12
#define GPP_vGPIO_PCIE_63
#define GPP_C1
#define GPP_vGPIO_PCIE_14
#define GPP_vGPIO_PCIE_58
#define GPP_vGPIO_PCIE_42
#define GPP_vGPIO_PCIE_72
#define GPP_vGPIO_PCIE_51
#define GPP_vGPIO_PCIE_79
#define GPP_vGPIO_PCIE_74
#define GPP_H10
#define GPP_vGPIO_PCIE_34
#define GPP_vGPIO_PCIE_56
#define GPP_vGPIO_PCIE_17
#define GPP_C0
#define GPP_vGPIO_PCIE_28
#define ARRAY_SIZE(a)
Definition: helpers.h:12
@ CONFIG
Definition: dsi_common.h:201
void variant_configure_early_gpio_pads(void)
Definition: early_gpio.c:117
static const struct pad_config early_uart_gpio_table[]
Definition: early_gpio.c:110
static const struct pad_config early_gpio_table[]
Definition: early_gpio.c:8
void gpio_configure_pads(const struct soc_amd_gpio *gpio_list_ptr, size_t size)
program a particular set of GPIO
Definition: gpio.c:307
#define PAD_CFG_GPI(pad, pull, rst)
Definition: gpio_defs.h:284
#define PAD_CFG_NF(pad, pull, rst, func)
Definition: gpio_defs.h:197
#define PAD_CFG_NF_VWEN(pad, pull, rst, func)
Definition: gpio_defs.h:241
#define PAD_CFG_GPO(pad, val, rst)
Definition: gpio_defs.h:247