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 <symbols.h>
5 #include <soc/soc_services.h>
6 #include "mmu.h"
7 
8 #define WIFI_IMEM_0_START ((uintptr_t)_wifi_imem_0 / KiB)
9 #define WIFI_IMEM_0_END ((uintptr_t)_ewifi_imem_0 / KiB)
10 #define WIFI_IMEM_1_START ((uintptr_t)_wifi_imem_1 / KiB)
11 #define WIFI_IMEM_1_END ((uintptr_t)_ewifi_imem_1 / KiB)
12 
13 #define OC_IMEM_START ((uintptr_t)_oc_imem / KiB)
14 #define OC_IMEM_END ((uintptr_t)_eoc_imem / KiB)
15 
16 #define DRAM_START ((uintptr_t)_dram / MiB)
17 #define DRAM_SIZE (CONFIG_DRAM_SIZE_MB)
18 #define DRAM_END (DRAM_START + DRAM_SIZE)
19 
20 /* DMA memory for drivers */
21 #define DMA_START ((uintptr_t)_dma_coherent / MiB)
22 #define DMA_SIZE (REGION_SIZE(dma_coherent) / MiB)
23 
25 {
26  if (dram == DRAM_INITIALIZED) {
28  /* Map DMA memory */
30  /* Mark cbmem backing store as ready. */
31  if (ENV_ROMSTAGE)
33  } else {
35  /* Map DMA memory */
37  }
38 }
39 
40 void setup_mmu(enum dram_state dram)
41 {
43 
44  mmu_init();
45 
46  /* start with mapping everything as strongly ordered. */
47  mmu_config_range(0, 4096, DCACHE_OFF);
48 
49  /* Map Device memory. */
53 
57 
61 
62  /* Map DRAM memory */
63  setup_dram_mappings(dram);
64 
66 
67  /* disable Page 0 for trapping NULL pointer references. */
69 
71 }
void dcache_mmu_enable(void)
Definition: cache.c:53
void dcache_mmu_disable(void)
Definition: cache.c:49
void mmu_disable_range_kb(u32 start_kb, u32 size_kb)
Definition: mmu.c:198
void mmu_config_range(u32 start_mb, u32 size_mb, enum dcache_policy policy)
Definition: mmu.c:221
void mmu_config_range_kb(u32 start_kb, u32 size_kb, enum dcache_policy policy)
Definition: mmu.c:174
void mmu_init(void)
Definition: mmu.c:242
void mmu_disable_range(u32 start_mb, u32 size_mb)
Definition: mmu.c:211
@ DCACHE_WRITEBACK
Definition: cache.h:364
@ DCACHE_OFF
Definition: cache.h:363
#define DRAM_END
Definition: mmu.c:18
#define DMA_SIZE
Definition: mmu.c:22
void setup_mmu(enum dram_state dram)
Definition: mmu.c:40
#define WIFI_IMEM_0_END
Definition: mmu.c:9
#define OC_IMEM_START
Definition: mmu.c:13
#define DRAM_SIZE
Definition: mmu.c:17
void setup_dram_mappings(enum dram_state dram)
Definition: mmu.c:24
#define WIFI_IMEM_1_END
Definition: mmu.c:11
#define DRAM_START
Definition: mmu.c:16
#define WIFI_IMEM_0_START
Definition: mmu.c:8
#define WIFI_IMEM_1_START
Definition: mmu.c:10
#define OC_IMEM_END
Definition: mmu.c:14
#define DMA_START
Definition: mmu.c:21
dram_state
Definition: mmu.h:12
@ DRAM_INITIALIZED
Definition: mmu.h:13
#define ENV_ROMSTAGE
Definition: rules.h:149
void ipq_cbmem_backing_store_ready(void)
Definition: cbmem.c:8