coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
memmap.c
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
3
#include <
arch/romstage.h
>
4
#include <
cbmem.h
>
5
#include <
assert.h
>
6
#include <
cpu/x86/mtrr.h
>
7
#include <
cpu/x86/smm.h
>
8
#include <
device/device.h
>
9
#include <
device/pci_def.h
>
10
#include <
device/pci_ops.h
>
11
#include <soc/pci_devs.h>
12
#include <soc/systemagent.h>
13
14
/* Returns base of requested region encoded in the system agent. */
15
static
inline
uintptr_t
system_agent_region_base
(
size_t
reg)
16
{
17
#if defined(__SIMPLE_DEVICE__)
18
pci_devfn_t
dev =
SA_DEV_ROOT
;
19
#else
20
struct
device
*dev =
pcidev_path_on_root
(
SA_DEVFN_ROOT
);
21
#endif
22
/* All regions concerned for have 1 MiB alignment. */
23
return
ALIGN_DOWN
(
pci_read_config32
(dev, reg), 1 *
MiB
);
24
}
25
26
static
inline
uintptr_t
smm_region_start
(
void
)
27
{
28
return
system_agent_region_base
(
TSEGMB
);
29
}
30
31
static
inline
size_t
smm_region_size
(
void
)
32
{
33
return
system_agent_region_base
(
TOLUD
) -
smm_region_start
();
34
}
35
36
void
smm_region
(
uintptr_t
*start,
size_t
*size)
37
{
38
*start =
smm_region_start
();
39
*size =
smm_region_size
();
40
}
41
42
void
fill_postcar_frame
(
struct
postcar_frame
*pcf)
43
{
44
uintptr_t
top_of_ram;
45
46
/*
47
* We need to make sure ramstage will be run cached. At this point exact
48
* location of ramstage in cbmem is not known. Instruct postcar to cache
49
* 16 megs under cbmem top which is a safe bet to cover ramstage.
50
*/
51
top_of_ram = (
uintptr_t
)
cbmem_top
();
52
postcar_frame_add_mtrr
(pcf, top_of_ram - 16 *
MiB
, 16 *
MiB
,
53
MTRR_TYPE_WRBACK
);
54
55
/* Cache the TSEG region */
56
postcar_enable_tseg_cache
(pcf);
57
}
romstage.h
postcar_frame_add_mtrr
void postcar_frame_add_mtrr(struct postcar_frame *pcf, uintptr_t addr, size_t size, int type)
Definition:
postcar_loader.c:71
postcar_enable_tseg_cache
void postcar_enable_tseg_cache(struct postcar_frame *pcf)
Definition:
postcar_loader.c:159
assert.h
ALIGN_DOWN
#define ALIGN_DOWN(x, a)
Definition:
helpers.h:18
MiB
#define MiB
Definition:
helpers.h:76
cbmem.h
cbmem_top
void * cbmem_top(void)
Definition:
imd_cbmem.c:18
pcidev_path_on_root
DEVTREE_CONST struct device * pcidev_path_on_root(pci_devfn_t devfn)
Definition:
device_const.c:255
TOLUD
#define TOLUD
Definition:
host_bridge.h:61
smm.h
device.h
pci_ops.h
pci_read_config32
static __always_inline u32 pci_read_config32(const struct device *dev, u16 reg)
Definition:
pci_ops.h:58
fill_postcar_frame
void fill_postcar_frame(struct postcar_frame *pcf)
Definition:
memmap.c:63
smm_region
void smm_region(uintptr_t *start, size_t *size)
Definition:
memmap.c:50
pci_def.h
pci_devfn_t
u32 pci_devfn_t
Definition:
pci_type.h:8
TSEGMB
#define TSEGMB
Definition:
host_bridge.h:48
SA_DEVFN_ROOT
#define SA_DEVFN_ROOT
Definition:
pci_devs.h:23
SA_DEV_ROOT
#define SA_DEV_ROOT
Definition:
pci_devs.h:26
system_agent_region_base
static uintptr_t system_agent_region_base(size_t reg)
Definition:
memmap.c:15
smm_region_start
static uintptr_t smm_region_start(void)
Definition:
memmap.c:26
smm_region_size
static size_t smm_region_size(void)
Definition:
memmap.c:31
uintptr_t
unsigned long uintptr_t
Definition:
stdint.h:21
device
Definition:
device.h:107
postcar_frame
Definition:
romstage.h:18
mtrr.h
MTRR_TYPE_WRBACK
#define MTRR_TYPE_WRBACK
Definition:
mtrr.h:14
src
soc
intel
denverton_ns
memmap.c
Generated by
1.9.1