diff --git a/sys/powerpc/pseries/platform_chrp.c b/sys/powerpc/pseries/platform_chrp.c index 202ee059c528..16303f3af139 100644 --- a/sys/powerpc/pseries/platform_chrp.c +++ b/sys/powerpc/pseries/platform_chrp.c @@ -269,6 +269,15 @@ parse_drconf_memory(struct mem_region *ofmem, int *msz, ofmem[lmsz].mr_size = (vm_size_t)lmb_size[1]; ofavail[lasz].mr_start = base; ofavail[lasz].mr_size = (vm_size_t)lmb_size[1]; + /* Collapse as we go along. */ + if (lmsz > 1 && lasz > 1 && + ofmem[lmsz].mr_start == ofmem[lmsz-1].mr_start + ofmem[lmsz-1].mr_size && + ofavail[lasz].mr_start == ofavail[lmsz-1].mr_start + ofavail[lasz].mr_size) { + ofmem[lmsz-1].mr_size += ofmem[lmsz].mr_size; + ofavail[lasz-1].mr_size += ofavail[lasz].mr_size; + lmsz--; + lasz--; + } lmsz++; lasz++; }