Page MenuHomeFreeBSD

D24155.id70718.diff
No OneTemporary

D24155.id70718.diff

Index: sys/riscv/riscv/machdep.c
===================================================================
--- sys/riscv/riscv/machdep.c
+++ sys/riscv/riscv/machdep.c
@@ -84,6 +84,7 @@
#include <machine/machdep.h>
#include <machine/metadata.h>
#include <machine/pcb.h>
+#include <machine/pte.h>
#include <machine/reg.h>
#include <machine/riscvreg.h>
#include <machine/sbi.h>
@@ -827,9 +828,19 @@
#ifdef FDT
try_load_dtb(kmdp);
+ /*
+ * Exclude reserved memory specified by the device tree. Typically,
+ * this contains an entry for memory used by the runtime SBI firmware.
+ */
+ if (fdt_get_reserved_mem(mem_regions, &mem_regions_sz) == 0) {
+ physmem_exclude_regions(mem_regions, mem_regions_sz,
+ EXFLAG_NODUMP | EXFLAG_NOALLOC);
+ }
+
/* Grab physical memory regions information from device tree. */
- if (fdt_get_mem_regions(mem_regions, &mem_regions_sz, NULL) != 0)
+ if (fdt_get_mem_regions(mem_regions, &mem_regions_sz, NULL) != 0) {
panic("Cannot get physical memory regions");
+ }
physmem_hardware_regions(mem_regions, mem_regions_sz);
#endif
@@ -844,6 +855,22 @@
physmem_init_kernel_globals();
+#ifdef FDT
+ /*
+ * XXX: Exclude the lowest 2MB of physical memory, if it hasn't been
+ * already, as this area is assumed to contain the SBI firmware. This
+ * is a little fragile, but it is consistent with the platforms we
+ * support so far.
+ *
+ * TODO: remove this when the all regular booting methods properly
+ * report their reserved memory in the device tree.
+ */
+ if (mem_regions[0].mr_start == physmap[0]) {
+ physmem_exclude_region(mem_regions[0].mr_start, L2_SIZE,
+ EXFLAG_NODUMP | EXFLAG_NOALLOC);
+ }
+#endif
+
/* Establish static device mappings */
devmap_bootstrap(0, NULL);

File Metadata

Mime Type
text/plain
Expires
Thu, Dec 25, 8:16 AM (2 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27244310
Default Alt Text
D24155.id70718.diff (1 KB)

Event Timeline