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-only */
2
3
#include <
arch/romstage.h
>
4
#include <
device/pci_ops.h
>
5
#include <
cbmem.h
>
6
#include <
commonlib/helpers.h
>
7
#include <
cpu/x86/mtrr.h
>
8
#include <
program_loading.h
>
9
#include "
i440bx.h
"
10
11
void
*
cbmem_top_chipset
(
void
)
12
{
13
/* Base of TSEG is top of usable DRAM */
14
/*
15
* SMRAM - System Management RAM Control Register
16
* 0x72
17
* [7:4] Not relevant to this function.
18
* [3:3] Global SMRAM Enable (G_SMRAME)
19
* [2:0] Hardwired to 010.
20
*
21
* ESMRAMC - Extended System Management RAM Control
22
* 0x73
23
* [7:7] H_SMRAM_EN
24
* 1 = When G_SMRAME=1, High SMRAM space is enabled at
25
* 0x100A0000-0x100FFFFF and forwarded to DRAM address
26
* 0x000A0000-0x000FFFFF.
27
* 0 = When G_SMRAME=1, Compatible SMRAM space is enabled at
28
* 0x000A0000-0x000BFFFF.
29
* [6:3] Not relevant to this function.
30
* [2:1] TSEG Size (T_SZ)
31
* Selects the size of the TSEG memory block, if enabled.
32
* 00 = 128KiB
33
* 01 = 256KiB
34
* 10 = 512KiB
35
* 11 = 1MiB
36
* [0:0] TSEG_EN
37
* When SMRAM[G_SMRAME] and this bit are 1, TSEG is enabled to
38
* appear between DRAM address (TOM-<TSEG Size>) to TOM.
39
*
40
* Source: 440BX datasheet, pages 3-28 thru 3-29.
41
*/
42
unsigned
long
tom =
pci_read_config8
(
NB
,
DRB7
) * 8 *
MiB
;
43
44
int
gsmrame =
pci_read_config8
(
NB
,
SMRAM
) & 0x8;
45
/* T_SZ and TSEG_EN */
46
int
tseg =
pci_read_config8
(
NB
,
ESMRAMC
) & 0x7;
47
if
((tseg & 0x1) && gsmrame) {
48
int
tseg_size = 128 *
KiB
* (1 << (tseg >> 1));
49
tom -= tseg_size;
50
}
51
return
(
void
*)tom;
52
}
53
54
void
fill_postcar_frame
(
struct
postcar_frame
*pcf)
55
{
56
uintptr_t
top_of_ram;
57
58
/* Cache CBMEM region as WB. */
59
top_of_ram = (
uintptr_t
)
cbmem_top
();
60
postcar_frame_add_mtrr
(pcf, top_of_ram - 8*
MiB
, 8*
MiB
,
61
MTRR_TYPE_WRBACK
);
62
63
}
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
MiB
#define MiB
Definition:
helpers.h:76
KiB
#define KiB
Definition:
helpers.h:75
cbmem.h
cbmem_top
void * cbmem_top(void)
Definition:
imd_cbmem.c:18
SMRAM
#define SMRAM
Definition:
host_bridge.h:47
i440bx.h
DRB7
#define DRB7
Definition:
i440bx.h:40
NB
#define NB
Definition:
i440bx.h:75
helpers.h
pci_ops.h
pci_read_config8
static __always_inline u8 pci_read_config8(const struct device *dev, u16 reg)
Definition:
pci_ops.h:46
cbmem_top_chipset
void * cbmem_top_chipset(void)
Definition:
memmap.c:44
fill_postcar_frame
void fill_postcar_frame(struct postcar_frame *pcf)
Definition:
memmap.c:63
ESMRAMC
#define ESMRAMC
Definition:
memmap.c:45
program_loading.h
uintptr_t
unsigned long uintptr_t
Definition:
stdint.h:21
postcar_frame
Definition:
romstage.h:18
mtrr.h
MTRR_TYPE_WRBACK
#define MTRR_TYPE_WRBACK
Definition:
mtrr.h:14
src
northbridge
intel
i440bx
memmap.c
Generated by
1.9.1