coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mmu.c
Go to the documentation of this file.
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
3
#include <arch/cache.h>
4
#include <soc/soc_services.h>
5
#include <symbols.h>
6
#include "
mmu.h
"
7
8
/* convenient shorthand (in MB) */
9
#define RPM_START ((uintptr_t)_rpm / KiB)
10
#define RPM_END ((uintptr_t)_erpm / KiB)
11
#define RPM_SIZE (RPM_END - RPM_START)
12
#define SRAM_START ((uintptr_t)_sram / KiB)
13
#define SRAM_END ((uintptr_t)_esram / KiB)
14
#define DRAM_START ((uintptr_t)_dram / MiB)
15
#define DRAM_SIZE (CONFIG_DRAM_SIZE_MB)
16
#define DRAM_END (DRAM_START + DRAM_SIZE)
17
18
/* DMA memory for drivers */
19
#define DMA_START ((uintptr_t)_dma_coherent / MiB)
20
#define DMA_SIZE (REGION_SIZE(dma_coherent) / MiB)
21
22
void
setup_dram_mappings
(
enum
dram_state
dram)
23
{
24
if
(dram ==
DRAM_INITIALIZED
) {
25
mmu_config_range
(
DRAM_START
,
DRAM_SIZE
,
DCACHE_WRITEBACK
);
26
/* Map DMA memory */
27
mmu_config_range
(
DMA_START
,
DMA_SIZE
,
DCACHE_OFF
);
28
if
(
ENV_ROMSTAGE
)
29
/* Mark cbmem backing store as ready. */
30
ipq_cbmem_backing_store_ready
();
31
}
else
{
32
mmu_disable_range
(
DRAM_START
,
DRAM_SIZE
);
33
/* Map DMA memory */
34
mmu_disable_range
(
DMA_START
,
DMA_SIZE
);
35
}
36
}
37
38
void
setup_mmu
(
enum
dram_state
dram)
39
{
40
dcache_mmu_disable
();
41
42
/* start with mapping everything as strongly ordered. */
43
mmu_config_range
(0, 4096,
DCACHE_OFF
);
44
45
/* Map Device memory. */
46
mmu_config_range_kb
(
RPM_START
,
RPM_SIZE
,
DCACHE_OFF
);
47
48
mmu_config_range_kb
(
SRAM_START
,
SRAM_END
-
SRAM_START
,
49
DCACHE_WRITEBACK
);
50
51
/* Map DRAM memory */
52
setup_dram_mappings
(dram);
53
54
mmu_disable_range
(
DRAM_END
, 4096 -
DRAM_END
);
55
56
/* disable Page 0 for trapping NULL pointer references. */
57
mmu_disable_range_kb
(0, 1);
58
59
mmu_init
();
60
61
dcache_mmu_enable
();
62
}
dcache_mmu_enable
void dcache_mmu_enable(void)
Definition:
cache.c:53
dcache_mmu_disable
void dcache_mmu_disable(void)
Definition:
cache.c:49
mmu_disable_range_kb
void mmu_disable_range_kb(u32 start_kb, u32 size_kb)
Definition:
mmu.c:198
mmu_config_range
void mmu_config_range(u32 start_mb, u32 size_mb, enum dcache_policy policy)
Definition:
mmu.c:221
mmu_config_range_kb
void mmu_config_range_kb(u32 start_kb, u32 size_kb, enum dcache_policy policy)
Definition:
mmu.c:174
mmu_init
void mmu_init(void)
Definition:
mmu.c:242
mmu_disable_range
void mmu_disable_range(u32 start_mb, u32 size_mb)
Definition:
mmu.c:211
DCACHE_WRITEBACK
@ DCACHE_WRITEBACK
Definition:
cache.h:364
DCACHE_OFF
@ DCACHE_OFF
Definition:
cache.h:363
setup_mmu
void setup_mmu(enum dram_state dram)
Definition:
mmu.c:40
setup_dram_mappings
void setup_dram_mappings(enum dram_state dram)
Definition:
mmu.c:24
dram_state
dram_state
Definition:
mmu.h:12
DRAM_INITIALIZED
@ DRAM_INITIALIZED
Definition:
mmu.h:13
DRAM_END
#define DRAM_END
Definition:
mmu.c:16
DMA_SIZE
#define DMA_SIZE
Definition:
mmu.c:20
RPM_SIZE
#define RPM_SIZE
Definition:
mmu.c:11
DRAM_SIZE
#define DRAM_SIZE
Definition:
mmu.c:15
RPM_START
#define RPM_START
Definition:
mmu.c:9
DRAM_START
#define DRAM_START
Definition:
mmu.c:14
SRAM_START
#define SRAM_START
Definition:
mmu.c:12
SRAM_END
#define SRAM_END
Definition:
mmu.c:13
DMA_START
#define DMA_START
Definition:
mmu.c:19
ENV_ROMSTAGE
#define ENV_ROMSTAGE
Definition:
rules.h:149
ipq_cbmem_backing_store_ready
void ipq_cbmem_backing_store_ready(void)
Definition:
cbmem.c:8
mmu.h
src
mainboard
google
storm
mmu.c
Generated by
1.9.1