Hi,
i think something equivalent to this diff got lost in the past,
in some diff i haven't seen myself, and don't care to go digging
cvs history, if there's any explanation for why not. comments?
boot tested cubie2&wandb, too busy to make 'em dump right now.
-Artturi
diff --git a/sys/arch/armv7/armv7/armv7_machdep.c
b/sys/arch/armv7/armv7/armv7_machdep.c
index aa1c549b29b..2f636441cb2 100644
--- a/sys/arch/armv7/armv7/armv7_machdep.c
+++ b/sys/arch/armv7/armv7/armv7_machdep.c
@@ -197,6 +197,7 @@ extern struct user *proc0paddr;
int safepri = 0;
/* Prototypes */
+static inline void _bs_add_dramblk(paddr_t, paddr_t);
char bootargs[MAX_BOOT_STRING];
int bootstrap_bs_map(void *, uint64_t, bus_size_t, int,
@@ -356,6 +357,15 @@ copy_io_area_map(pd_entry_t *new_pd)
}
}
+void
+_bs_add_dramblk(paddr_t pms, paddr_t pme)
+{
+ uvm_page_physload(atop(pms), atop(pme), atop(pms), atop(pme), 0);
+ bootconfig.dram[bootconfig.dramblocks].address = pms;
+ bootconfig.dram[bootconfig.dramblocks].pages = atop(pme - pms);
+ bootconfig.dramblocks++;
+}
+
/*
* u_int initarm(...)
*
@@ -740,12 +750,11 @@ initarm(void *arg0, void *arg1, void *arg2, paddr_t
loadaddr)
printf("page ");
#endif
uvm_setpagesize(); /* initialize PAGE_SIZE-dependent variables */
- uvm_page_physload(atop(physical_freestart), atop(physical_freeend),
- atop(physical_freestart), atop(physical_freeend), 0);
+ bootconfig.dramblocks = 0;
+ _bs_add_dramblk(physical_freestart, physical_freeend);
if (physical_start < loadaddr) {
- uvm_page_physload(atop(physical_start), atop(loadaddr),
- atop(physical_start), atop(loadaddr), 0);
+ _bs_add_dramblk(physical_start, loadaddr);
physsegs--;
}
@@ -759,8 +768,7 @@ initarm(void *arg0, void *arg1, void *arg2, paddr_t
loadaddr)
memstart = reg.addr;
memend = MIN(reg.addr + reg.size, (paddr_t)-PAGE_SIZE);
physmem += (memend - memstart) / PAGE_SIZE;
- uvm_page_physload(atop(memstart), atop(memend),
- atop(memstart), atop(memend), 0);
+ _bs_add_dramblk(memstart, memend);
}
/* Boot strap pmap telling it where the kernel page table is */