coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
bootblock.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <bootblock_common.h>
4 #include <console/console.h>
5 #include <device/pnp_ops.h>
6 #include <gpio.h>
7 #include <soc/gpio.h>
9 #include <types.h>
10 
11 static const struct pad_config gpio_table[] = {
12  PAD_CFG_NF(GPP_B14, DN_20K, PLTRST, NF1), /* SPKR */
13  PAD_CFG_NF(GPP_C20, UP_20K, PLTRST, NF1), /* PCH_UART2_RXD */
14  PAD_CFG_NF(GPP_C21, UP_20K, PLTRST, NF1), /* PCH_UART2_TXD */
16  PAD_CFG_GPI(GPP_C23, NONE, PLTRST), /* TODO: SIO PME# */
17  PAD_CFG_NF(GPP_E8, NONE, DEEP, NF1), /* SATA_LED# */
18  PAD_CFG_NF(GPP_E9, NONE, DEEP, NF1), /* USB_OC_LAN# */
19  PAD_CFG_NF(GPP_E10, NONE, DEEP, NF1), /* USB3.0_OC_BACK# */
20  PAD_CFG_NF(GPP_E11, NONE, DEEP, NF1), /* USB_OC_REAR2# */
21  PAD_CFG_NF(GPP_E12, NONE, DEEP, NF1), /* USB_OC_FRONT1# */
22  PAD_CFG_NF(GPP_F15, NONE, DEEP, NF1), /* USB_OC_FRONT2# */
23  PAD_CFG_GPI(GPP_G1, NONE, PLTRST), /* LPT_DET# */
24  PAD_CFG_GPO(GPP_G2, 0, PLTRST), /* AUD_AMP_ON# */
25  PAD_CFG_GPO(GPP_G3, 0, PLTRST), /* W_DISABLE2# */
26  PAD_CFG_GPI(GPP_G4, NONE, PLTRST), /* CLR_CMOS# */
27  PAD_CFG_GPI(GPP_G5, NONE, PLTRST), /* CLR_PSWD# */
28  PAD_CFG_GPI(GPP_G6, NONE, PLTRST), /* BOOT_BLOCK_EN# */
29  PAD_CFG_GPI(GPP_G9, NONE, PLTRST), /* HOOD_SW_DET# */
30  PAD_CFG_GPI(GPP_G12, NONE, PLTRST), /* FRONT_USB_DET1# */
31  PAD_CFG_GPI(GPP_G13, NONE, PLTRST), /* FRONT_USB_DET2# */
32  PAD_CFG_GPI(GPP_G14, NONE, PLTRST), /* FRONT_USB_DET3# */
33  PAD_CFG_GPI(GPP_G16, NONE, PLTRST), /* F_AUDIO_DET# */
34  PAD_CFG_GPI(GPP_G17, NONE, PLTRST), /* COMM_B_DET# */
35  PAD_CFG_GPI_SCI(GPP_G21, NONE, DEEP, EDGE_SINGLE, INVERT), /* SPI_TPM_PIRQ# */
36  PAD_CFG_GPI(GPP_H10, NONE, PLTRST), /* S_GPI_SKU0 */
37  PAD_CFG_GPI(GPP_H15, NONE, PLTRST), /* BRD_REV0 */
38  PAD_CFG_GPI(GPP_H16, NONE, PLTRST), /* BRD_REV1 */
39  PAD_CFG_GPI(GPP_H17, NONE, PLTRST), /* BRD_REV2 */
40  PAD_CFG_GPI(GPP_H18, NONE, PLTRST), /* S_GPI_SKU1 */
41  PAD_CFG_NF(GPP_I2, NONE, PLTRST, NF1), /* DPD_HPD_R */
42  PAD_CFG_NF(GPP_I3, NONE, PLTRST, NF1), /* DPE_HPD_R */
43  PAD_CFG_NF(GPP_I9, NONE, PLTRST, NF1), /* DDPD_CTRLCLK */
44  PAD_CFG_NF(GPP_I10, DN_20K, PLTRST, NF1), /* DDPD_CTRLDATA */
45 };
46 
48 {
49  const pnp_devfn_t dev = PNP_DEV(0x2e, 7);
50 
53 
54  pnp_write_config(dev, 0x23, 0x59);
55  pnp_write_config(dev, 0x25, 0x10);
56  pnp_write_config(dev, 0x26, 0x04);
57  pnp_write_config(dev, 0x28, 0x08);
58  pnp_write_config(dev, 0x2a, 0x81);
59  pnp_write_config(dev, 0x71, 0x08);
60  pnp_write_config(dev, 0xc0, 0x00);
61  pnp_write_config(dev, 0xc1, 0x04);
62  pnp_write_config(dev, 0xc8, 0x00);
63  pnp_write_config(dev, 0xc9, 0x04);
64  pnp_write_config(dev, 0xcb, 0x08);
65  pnp_write_config(dev, 0xd5, 0x07);
66  pnp_write_config(dev, 0xf8, 0x12);
67  pnp_write_config(dev, 0xf9, 0x01);
68 
70 }
71 
73 {
75 
77 }
78 
80 {
81  const gpio_t rev_gpios[] = {
82  GPP_H15,
83  GPP_H16,
84  GPP_H17,
85  };
86 
87  const char *const rev_table[8] = {
88  [0] = "DB",
89  [1] = "Pre-SI",
90  [2] = "SI",
91  [3] = "PV",
92  [4] = "1.00 (SMVB)",
93  [5] = "1.10 (ECN1)",
94  [6] = "1.20 (ECN1)",
95  [7] = "1.30 (ECN1)",
96  };
97 
98  const char *const brd_str = gpio_get(GPP_H10) ? "Sid" : "Manny";
99 
100  const uint32_t brd_rev = gpio_base2_value(rev_gpios, ARRAY_SIZE(rev_gpios));
101 
102  printk(BIOS_DEBUG, "Mainboard: %s rev %s\n", brd_str, rev_table[brd_rev]);
103 }
#define GPP_H15
#define GPP_H16
#define GPP_H18
#define GPP_H17
#define GPP_C22
#define GPP_C23
#define GPP_E9
#define GPP_E8
#define GPP_C20
#define GPP_F15
#define GPP_C21
#define GPP_B14
Definition: gpio_soc_defs.h:67
#define GPP_E10
#define GPP_E11
#define GPP_H10
#define GPP_E12
#define ARRAY_SIZE(a)
Definition: helpers.h:12
#define GPP_G1
Definition: gpio_soc_defs.h:89
#define GPP_G4
Definition: gpio_soc_defs.h:92
#define GPP_G2
Definition: gpio_soc_defs.h:90
#define GPP_G6
Definition: gpio_soc_defs.h:94
#define GPP_G3
Definition: gpio_soc_defs.h:91
#define GPP_G5
Definition: gpio_soc_defs.h:93
#define printk(level,...)
Definition: stdlib.h:16
static void pnp_enter_conf_state(pnp_devfn_t dev)
Definition: bootblock.c:13
static void pnp_exit_conf_state(pnp_devfn_t dev)
Definition: bootblock.c:19
#define GPP_G21
#define GPP_G16
Definition: gpio_soc_defs.h:98
#define GPP_G12
Definition: gpio_soc_defs.h:94
#define GPP_G17
Definition: gpio_soc_defs.h:99
#define GPP_G13
Definition: gpio_soc_defs.h:95
#define GPP_G14
Definition: gpio_soc_defs.h:96
#define GPP_G9
Definition: gpio_soc_defs.h:91
#define GPP_I10
#define GPP_I3
#define GPP_I9
#define GPP_I2
int gpio_get(gpio_t gpio)
Definition: gpio.c:166
uint32_t gpio_base2_value(const gpio_t gpio[], int num_gpio)
Definition: gpio.c:30
__weak void bootblock_mainboard_init(void)
Definition: bootblock.c:19
__weak void bootblock_mainboard_early_init(void)
Definition: bootblock.c:16
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
Definition: loglevel.h:128
static void mainboard_configure_super_io(void)
Definition: bootblock.c:47
static const struct pad_config gpio_table[]
Definition: bootblock.c:11
void pnp_set_logical_device(struct device *dev)
Definition: pnp_device.c:59
void pnp_write_config(struct device *dev, u8 reg, u8 value)
Definition: pnp_device.c:38
#define PNP_DEV(PORT, FUNC)
Definition: pnp_type.h:10
u32 pnp_devfn_t
Definition: pnp_type.h: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_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_GPO(pad, val, rst)
Definition: gpio_defs.h:247
#define PAD_CFG_GPI_SCI(pad, pull, rst, trig, inv)
Definition: gpio_defs.h:432
unsigned int uint32_t
Definition: stdint.h:14