coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
early_init.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <bootblock_common.h>
4 #include <delay.h>
5 #include <stdint.h>
6 #include <device/pnp_ops.h>
7 #include <device/pci_ops.h>
8 #include <device/pnp_def.h>
12 #include "dock.h"
13 
14 /* Override the default lpc decode ranges */
16 {
17  // decode range
18  pci_write_config16(PCI_DEV(0, 0x1f, 0), LPC_IO_DEC, 0x0210);
19 }
20 
21 static void early_superio_config(void)
22 {
23  int timeout = 100000;
24  const pnp_devfn_t dev = PNP_DEV(0x2e, 3);
25 
26  pnp_write_config(dev, 0x29, 0xa0);
27 
28  while (!(pnp_read_config(dev, 0x29) & 0x10) && timeout--)
29  udelay(1000);
30 
31  /* Enable COM1 */
33  pnp_set_iobase(dev, PNP_IDX_IO0, 0x3f8);
34  pnp_set_enable(dev, 1);
35 }
36 
38 {
39  /* Set up GPIO's early since it is needed for dock init */
42 
43  int dock_err = dlpc_init();
44 
45  /* We prefer Legacy I/O module over docking */
46  if (legacy_io_present()) {
49  } else if (!dock_err && dock_present()) {
50  dock_connect();
52  }
53 }
54 
56 {
57  /* Device 1f interrupt pin register */
58  RCBA32(D31IP) = 0x00001230;
59  RCBA32(D29IP) = 0x40004321;
60 
61  /* PCIe Interrupts */
62  RCBA32(D28IP) = 0x00004321;
63  /* HD Audio Interrupt */
64  RCBA32(D27IP) = 0x00000002;
65 
66  /* dev irq route register */
67  RCBA16(D31IR) = 0x1007;
68  RCBA16(D30IR) = 0x0076;
69  RCBA16(D29IR) = 0x3210;
70  RCBA16(D28IR) = 0x7654;
71  RCBA16(D27IR) = 0x0010;
72 
73  /* Disable unused devices */
74  RCBA32(FD) |= FD_INTLAN;
75 
76  /* Set up I/O Trap #0 for 0xfe00 (SMIC) */
77  RCBA64(IOTR0) = 0x000200010000fe01ULL;
78 
79  /* Set up I/O Trap #3 for 0x800-0x80c (Trap) */
80  RCBA64(IOTR3) = 0x000200f0000c0801ULL;
81 }
82 
83 void mainboard_get_spd_map(u8 spd_map[4])
84 {
85  spd_map[0] = 0x50;
86  spd_map[2] = 0x51;
87 }
#define FD_INTLAN
Definition: i82801gx.h:248
static __always_inline void pci_write_config16(const struct device *dev, u16 reg, u16 val)
Definition: pci_ops.h:70
void bootblock_mainboard_early_init(void)
Definition: early_init.c:11
const struct pch_gpio_map mainboard_gpio_map
Definition: gpio.c:87
void mainboard_late_rcba_config(void)
Definition: early_init.c:6
void mainboard_lpc_decode(void)
Definition: early_init.c:34
static int dock_err
Definition: bootblock.c:7
static void early_superio_config(void)
Definition: early_init.c:21
void mainboard_get_spd_map(u8 spd_map[4])
Definition: early_init.c:83
#define PCI_DEV(SEGBUS, DEV, FN)
Definition: pci_type.h:14
#define PNP_IDX_IO0
Definition: pnp_def.h:5
void pnp_set_logical_device(struct device *dev)
Definition: pnp_device.c:59
void pnp_set_enable(struct device *dev, int enable)
Definition: pnp_device.c:64
u8 pnp_read_config(struct device *dev, u8 reg)
Definition: pnp_device.c:44
void pnp_set_iobase(struct device *dev, u8 index, u16 iobase)
Definition: pnp_device.c:93
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
#define LPC_IO_DEC
Definition: lpc.h:35
#define D31IR
Definition: rcba.h:87
#define D30IR
Definition: rcba.h:88
#define D28IR
Definition: rcba.h:90
#define D31IP
Definition: rcba.h:56
#define D29IP
Definition: rcba.h:63
#define D29IR
Definition: rcba.h:89
#define D27IP
Definition: rcba.h:74
#define FD
Definition: rcba.h:125
#define D27IR
Definition: rcba.h:91
#define D28IP
Definition: rcba.h:65
#define IOTR0
Definition: pch.h:211
#define IOTR3
Definition: pch.h:214
void setup_pch_gpios(const struct pch_gpio_map *gpio)
Definition: gpio.c:33
#define RCBA64(x)
Definition: rcba.h:15
#define RCBA16(x)
Definition: rcba.h:13
#define RCBA32(x)
Definition: rcba.h:14
void i82801gx_setup_bars(void)
Definition: early_init.c:47
uint8_t u8
Definition: stdint.h:45
void dock_connect(void)
Definition: dock.c:215
int dock_present(void)
Definition: dock.c:36
int dlpc_init(void)
Definition: dock.c:72
void legacy_io_init(void)
Definition: dock.c:211
int legacy_io_present(void)
Definition: dock.c:206
void udelay(uint32_t us)
Definition: udelay.c:15