coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
gpio.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <baseboard/gpio.h>
4 #include <baseboard/variants.h>
5 #include <boardid.h>
6 #include <commonlib/helpers.h>
7 #include <soc/gpio.h>
8 
9 /* Pad configuration in ramstage */
10 static const struct pad_config board_id0_overrides[] = {
11  /* R4 : I2S2_SCLK ==> I2S_SPK_BCLK_R */
12  PAD_CFG_NF(GPP_R4, NONE, DEEP, NF2),
13  /* R5 : I2S2_SFRM ==> I2S_SPK_LRCK_R */
14  PAD_CFG_NF(GPP_R5, NONE, DEEP, NF2),
15  /* R6 : I2S2_TXD ==> I2S_SPK_AUDIO_R */
16  PAD_CFG_NF(GPP_R6, NONE, DEEP, NF2),
17  /* R7 : I2S2_RXD ==> NC */
18  PAD_NC(GPP_R7, NONE),
19  /* S0 : NC */
20  PAD_NC(GPP_S0, NONE),
21  /* S1 : NC */
22  PAD_NC(GPP_S1, NONE),
23  /* S2 : DMIC_CKL_A_0 ==> DMIC_UCAM_CLK_R */
24  PAD_CFG_NF(GPP_S2, NONE, DEEP, NF2),
25  /* S3 : DMIC_DATA_0 ==> DMIC_UCAM_DATA */
26  PAD_CFG_NF(GPP_S3, NONE, DEEP, NF2),
27  /* S6 : DMIC_CLK_A_1 ==> DMIC_WCAM_CLK_R */
28  PAD_CFG_NF(GPP_S6, NONE, DEEP, NF2),
29  /* S7 : DMIC_DATA_1 ==> DMIC_WCAM_DATA */
30  PAD_CFG_NF(GPP_S7, NONE, DEEP, NF2),
31 };
32 
33 /* Early pad configuration in bootblock */
34 static const struct pad_config early_gpio_table[] = {
35  /* F12 : GSXDOUT ==> WWAN_RST_L */
36  PAD_CFG_GPO(GPP_F12, 0, DEEP),
37  /* H12 : UART0_RTS# ==> SD_PERST_L */
38  PAD_CFG_GPO(GPP_H12, 0, DEEP),
39  /* A13 : GPP_A13 ==> GSC_SOC_INT_ODL */
40  PAD_CFG_GPI_APIC(GPP_A13, NONE, PLTRST, LEVEL, INVERT),
41  /* D6 : SRCCLKREQ1# ==> WWAN_EN */
42  PAD_CFG_GPO(GPP_D6, 1, DEEP),
43  /* E12 : THC0_SPI1_IO1 ==> SOC_WP_OD */
45  /* F18 : THC1_SPI2_INT# ==> EC_IN_RW_OD */
46  PAD_CFG_GPI(GPP_F18, NONE, DEEP),
47  /* H4 : I2C0_SDA ==> SOC_I2C_GSC_SDA */
48  PAD_CFG_NF(GPP_H4, NONE, DEEP, NF1),
49  /* H5 : I2C0_SCL ==> SOC_I2C_GSC_SCL */
50  PAD_CFG_NF(GPP_H5, NONE, DEEP, NF1),
51  /* H10 : UART0_RXD ==> UART_SOC_RX_DBG_TX */
52  PAD_CFG_NF(GPP_H10, NONE, DEEP, NF2),
53  /* H11 : UART0_TXD ==> UART_SOC_TX_DBG_RX */
54  PAD_CFG_NF(GPP_H11, NONE, DEEP, NF2),
55  /* H13 : UART0_CTS# ==> EN_PP3300_SD_X */
56  PAD_CFG_GPO(GPP_H13, 1, DEEP),
57 };
58 
59 static const struct pad_config romstage_gpio_table[] = {
60  /* H12 : UART0_RTS# ==> SD_PERST_L */
61  PAD_CFG_GPO(GPP_H12, 1, DEEP),
62 };
63 
64 const struct pad_config *variant_gpio_override_table(size_t *num)
65 {
66  const uint32_t id = board_id();
67  if (id == BOARD_ID_UNKNOWN || id == 0) {
69  return board_id0_overrides;
70  }
71 
72  *num = 0;
73  return NULL;
74 }
75 
76 const struct pad_config *variant_early_gpio_table(size_t *num)
77 {
79  return early_gpio_table;
80 }
81 
82 
83 const struct pad_config *variant_romstage_gpio_table(size_t *num)
84 {
86  return romstage_gpio_table;
87 }
#define GPP_F12
#define GPP_R4
#define GPP_R7
#define GPP_S0
#define GPP_H11
#define GPP_D6
#define GPP_H12
#define GPP_R6
#define GPP_H13
#define GPP_S7
#define GPP_S3
#define GPP_S1
#define GPP_S6
#define GPP_H5
#define GPP_R5
#define GPP_A13
#define GPP_S2
#define GPP_F18
#define GPP_H10
#define GPP_E12
#define GPP_H4
#define BOARD_ID_UNKNOWN
Definition: boardid.h:10
#define ARRAY_SIZE(a)
Definition: helpers.h:12
uint32_t board_id(void)
board_id() - Get the board version
Definition: ec_boardid.c:6
const struct pad_config * variant_gpio_override_table(size_t *num)
Definition: gpio.c:198
const struct pad_config * variant_romstage_gpio_table(size_t *num)
Definition: gpio.c:210
const struct pad_config * variant_early_gpio_table(size_t *num)
Definition: gpio.c:204
static const struct pad_config board_id0_overrides[]
Definition: gpio.c:10
static const struct pad_config romstage_gpio_table[]
Definition: gpio.c:59
static const struct pad_config early_gpio_table[]
Definition: gpio.c:34
#define PAD_NC(pin)
Definition: gpio_defs.h:263
#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_GPI_APIC(pad, pull, rst, trig, inv)
Definition: gpio_defs.h:376
#define PAD_CFG_GPO(pad, val, rst)
Definition: gpio_defs.h:247
#define PAD_CFG_GPI_GPIO_DRIVER(pad, pull, rst)
Definition: gpio_defs.h:323
#define NULL
Definition: stddef.h:19
unsigned int uint32_t
Definition: stdint.h:14