On Thu, Mar 09, 2017 at 10:38:20PM +0100, Mark Kettenis wrote: > For some reason u-boot on the exynos platform decides to split up the > memory in banks with a maximum size of 256MB. Since my Odroid XU4 has > 2GB of memory, I end up with more memory segments than the two > supported by our kernel. The diff below increases the number of > segments to 32, which is what we use on sparc64 and macppc. > > However, increasing the number of segments didn't actually make more > memory available. Turns out the code that is supposed to add > additonal memory segments isn't working. The reason is that we > reinitialize the fdt to use the virtual mapping. This makes the old > pointer to the /memory node invalid. Doing another lookup fixes > things. And the lookup really shouldn't fail at this point since we > already established that the /memory node exists. > > ok?
ok jsg@ The only other armv7 machine I can remember that needed more than one segment was the utilite. With atags it reported atag mem start 0x10000000 size 0x40000000 atag mem start 0x80000000 size 0x40000000 http://marc.info/?l=openbsd-misc&m=142125974324412&w=2 > > P.S. arm64 currently lacks code to load additional memory segments. > That needs to be fixed. > > Index: arch/armv7/include/vmparam.h > =================================================================== > RCS file: /cvs/src/sys/arch/armv7/include/vmparam.h,v > retrieving revision 1.5 > diff -u -p -r1.5 vmparam.h > --- arch/armv7/include/vmparam.h 24 Jan 2017 13:33:06 -0000 1.5 > +++ arch/armv7/include/vmparam.h 9 Mar 2017 21:27:45 -0000 > @@ -83,8 +83,8 @@ > * max number of non-contig chunks of physical RAM you can have > */ > > -#define VM_PHYSSEG_MAX 2 > -#define VM_PHYSSEG_STRAT VM_PSTRAT_RANDOM > +#define VM_PHYSSEG_MAX 32 > +#define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH > > /* > * this indicates that we can't add RAM to the VM system after the > Index: arch/armv7/armv7/armv7_machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/armv7/armv7/armv7_machdep.c,v > retrieving revision 1.45 > diff -u -p -r1.45 armv7_machdep.c > --- arch/armv7/armv7/armv7_machdep.c 25 Oct 2016 00:04:59 -0000 1.45 > +++ arch/armv7/armv7/armv7_machdep.c 9 Mar 2017 21:27:45 -0000 > @@ -754,6 +754,7 @@ initarm(void *arg0, void *arg1, void *ar > physsegs--; > } > > + node = fdt_find_node("/memory"); > for (i = 1; i < physsegs; i++) { > if (fdt_get_reg(node, i, ®)) > break; >