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 */