Message ID | 20200629200256.2240-1-f4bug@amsat.org |
---|---|
State | New |
Headers | show |
Series | hw/ppc/ppc4xx: Only accept (combination of) pow2 DDR sizes | expand |
diff --git a/hw/ppc/ppc4xx_devs.c b/hw/ppc/ppc4xx_devs.c index f1651e04d9..c2484a5695 100644 --- a/hw/ppc/ppc4xx_devs.c +++ b/hw/ppc/ppc4xx_devs.c @@ -687,6 +687,15 @@ void ppc4xx_sdram_banks(MemoryRegion *ram, int nr_banks, int i; int j; + if (ctpop64(size_left) > nr_banks) { + if (nr_banks) { + error_report("RAM size must be a power of 2"); + } else { + error_report("RAM size must be the combination of %d powers of 2", + nr_banks); + } + exit(1); + } for (i = 0; i < nr_banks; i++) { for (j = 0; sdram_bank_sizes[j] != 0; j++) { bank_size = sdram_bank_sizes[j];
Use popcount instruction to count the number of bits set in the RAM size. Allow at most 1 bit for each bank. This avoid using invalid hardware configurations. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- hw/ppc/ppc4xx_devs.c | 9 +++++++++ 1 file changed, 9 insertions(+)