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 <device/pci_def.h>
5 #include <device/pci_ops.h>
6 #include <intelblocks/lpc_lib.h>
7 #include <intelblocks/pcr.h>
9 #include <soc/pci_devs.h>
10 #include <soc/pcr_ids.h>
13 #include <cpxsp_dl_gpio.h>
14 
15 #define ASPEED_SIO_PORT 0x2E
16 #define PCR_DMI_LPCIOD 0x2770
17 #define PCR_DMI_LPCIOE 0x2774
18 
19 static void enable_espi_lpc_io_windows(void)
20 {
21  /*
22  * Set up decoding windows on PCH over PCR. The CPUs use two of AST2500 SIO ports,
23  * one is connected to debug header (SUART1) and another is used as SOL (SUART2).
24  * For that end it is wired into BMC virtual port.
25  */
28 
29  /* Open IO windows: 0x3f8 for com1 and 02e8 for com2 */
31  /* LPC I/O enable: com1 and com2 */
33 
34  /* Enable com1 (0x3f8), com2 (02f8) and superio (0x2e) */
37 }
38 
40 {
41  switch (com) {
42  case 0:
43  return AST2400_SUART1;
44  case 1:
45  return AST2400_SUART2;
46  case 2:
47  return AST2400_SUART3;
48  case 4:
49  return AST2400_SUART4;
50  default:
51  return AST2400_SUART1;
52  }
53 }
54 
56 {
57  /* pre-configure Lewisburg PCH GPIO pads */
59 
60  /* Open IO windows */
62 
63  /* Configure appropriate physical port of SuperIO chip off BMC */
64  const pnp_devfn_t serial_dev = PNP_DEV(ASPEED_SIO_PORT,
65  com_to_ast_sio(CONFIG_UART_FOR_CONSOLE));
66  aspeed_enable_serial(serial_dev, CONFIG_TTYS0_BASE);
67 }
static const struct pad_config early_gpio_table[]
Definition: gpio_early.c:7
#define PID_DMI
Definition: pcr_ids.h:23
void aspeed_enable_serial(pnp_devfn_t dev, uint16_t iobase)
Definition: early_serial.c:45
#define AST2400_SUART3
Definition: ast2400.h:11
#define AST2400_SUART1
Definition: ast2400.h:6
#define AST2400_SUART4
Definition: ast2400.h:12
#define AST2400_SUART2
Definition: ast2400.h:7
#define ARRAY_SIZE(a)
Definition: helpers.h:12
void pcr_or32(uint8_t pid, uint16_t offset, uint32_t ordata)
Definition: pcr.c:184
static __always_inline void pci_write_config16(const struct device *dev, u16 reg, u16 val)
Definition: pci_ops.h:70
__weak void bootblock_mainboard_early_init(void)
Definition: bootblock.c:16
#define LPC_IOD_COMA_RANGE
Definition: lpc_def.h:12
#define LPC_IO_ENABLES
Definition: lpc_def.h:16
#define LPC_IOD_COMB_RANGE
Definition: lpc_def.h:13
#define LPC_IO_DECODE
Definition: lpc_def.h:9
#define LPC_IOE_COMB_EN
Definition: lpc_lib.h:24
#define LPC_IOE_SUPERIO_2E_2F
Definition: lpc_lib.h:17
#define LPC_IOE_COMA_EN
Definition: lpc_lib.h:25
static void enable_espi_lpc_io_windows(void)
Definition: bootblock.c:19
#define PCR_DMI_LPCIOD
Definition: bootblock.c:16
#define PCR_DMI_LPCIOE
Definition: bootblock.c:17
static uint8_t com_to_ast_sio(uint8_t com)
Definition: bootblock.c:39
#define ASPEED_SIO_PORT
Definition: bootblock.c:15
#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 PCH_DEV_LPC
Definition: pci_devs.h:224
unsigned short uint16_t
Definition: stdint.h:11
unsigned char uint8_t
Definition: stdint.h:8