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
>
9
#include <
northbridge/intel/i945/i945.h
>
10
#include <
southbridge/intel/i82801gx/i82801gx.h
>
11
#include <
southbridge/intel/common/gpio.h
>
12
#include "
dock.h
"
13
14
/* Override the default lpc decode ranges */
15
void
mainboard_lpc_decode
(
void
)
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 */
32
pnp_set_logical_device
(dev);
33
pnp_set_iobase
(dev,
PNP_IDX_IO0
, 0x3f8);
34
pnp_set_enable
(dev, 1);
35
}
36
37
void
bootblock_mainboard_early_init
(
void
)
38
{
39
/* Set up GPIO's early since it is needed for dock init */
40
i82801gx_setup_bars
();
41
setup_pch_gpios
(&
mainboard_gpio_map
);
42
43
int
dock_err
=
dlpc_init
();
44
45
/* We prefer Legacy I/O module over docking */
46
if
(
legacy_io_present
()) {
47
legacy_io_init
();
48
early_superio_config
();
49
}
else
if
(!
dock_err
&&
dock_present
()) {
50
dock_connect
();
51
early_superio_config
();
52
}
53
}
54
55
void
mainboard_late_rcba_config
(
void
)
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
}
bootblock_common.h
delay.h
i82801gx.h
FD_INTLAN
#define FD_INTLAN
Definition:
i82801gx.h:248
i945.h
pci_ops.h
pci_write_config16
static __always_inline void pci_write_config16(const struct device *dev, u16 reg, u16 val)
Definition:
pci_ops.h:70
bootblock_mainboard_early_init
void bootblock_mainboard_early_init(void)
Definition:
early_init.c:11
mainboard_gpio_map
const struct pch_gpio_map mainboard_gpio_map
Definition:
gpio.c:87
mainboard_late_rcba_config
void mainboard_late_rcba_config(void)
Definition:
early_init.c:6
mainboard_lpc_decode
void mainboard_lpc_decode(void)
Definition:
early_init.c:34
dock_err
static int dock_err
Definition:
bootblock.c:7
early_superio_config
static void early_superio_config(void)
Definition:
early_init.c:21
mainboard_get_spd_map
void mainboard_get_spd_map(u8 spd_map[4])
Definition:
early_init.c:83
PCI_DEV
#define PCI_DEV(SEGBUS, DEV, FN)
Definition:
pci_type.h:14
pnp_def.h
PNP_IDX_IO0
#define PNP_IDX_IO0
Definition:
pnp_def.h:5
pnp_set_logical_device
void pnp_set_logical_device(struct device *dev)
Definition:
pnp_device.c:59
pnp_set_enable
void pnp_set_enable(struct device *dev, int enable)
Definition:
pnp_device.c:64
pnp_read_config
u8 pnp_read_config(struct device *dev, u8 reg)
Definition:
pnp_device.c:44
pnp_set_iobase
void pnp_set_iobase(struct device *dev, u8 index, u16 iobase)
Definition:
pnp_device.c:93
pnp_write_config
void pnp_write_config(struct device *dev, u8 reg, u8 value)
Definition:
pnp_device.c:38
pnp_ops.h
PNP_DEV
#define PNP_DEV(PORT, FUNC)
Definition:
pnp_type.h:10
pnp_devfn_t
u32 pnp_devfn_t
Definition:
pnp_type.h:8
LPC_IO_DEC
#define LPC_IO_DEC
Definition:
lpc.h:35
D31IR
#define D31IR
Definition:
rcba.h:87
D30IR
#define D30IR
Definition:
rcba.h:88
D28IR
#define D28IR
Definition:
rcba.h:90
D31IP
#define D31IP
Definition:
rcba.h:56
D29IP
#define D29IP
Definition:
rcba.h:63
D29IR
#define D29IR
Definition:
rcba.h:89
D27IP
#define D27IP
Definition:
rcba.h:74
FD
#define FD
Definition:
rcba.h:125
D27IR
#define D27IR
Definition:
rcba.h:91
D28IP
#define D28IP
Definition:
rcba.h:65
IOTR0
#define IOTR0
Definition:
pch.h:211
IOTR3
#define IOTR3
Definition:
pch.h:214
setup_pch_gpios
void setup_pch_gpios(const struct pch_gpio_map *gpio)
Definition:
gpio.c:33
gpio.h
RCBA64
#define RCBA64(x)
Definition:
rcba.h:15
RCBA16
#define RCBA16(x)
Definition:
rcba.h:13
RCBA32
#define RCBA32(x)
Definition:
rcba.h:14
i82801gx_setup_bars
void i82801gx_setup_bars(void)
Definition:
early_init.c:47
stdint.h
u8
uint8_t u8
Definition:
stdint.h:45
dock_connect
void dock_connect(void)
Definition:
dock.c:215
dock_present
int dock_present(void)
Definition:
dock.c:36
dlpc_init
int dlpc_init(void)
Definition:
dock.c:72
legacy_io_init
void legacy_io_init(void)
Definition:
dock.c:211
legacy_io_present
int legacy_io_present(void)
Definition:
dock.c:206
udelay
void udelay(uint32_t us)
Definition:
udelay.c:15
dock.h
src
mainboard
lenovo
t60
early_init.c
Generated by
1.9.1