hw/hppa/machine: Allow up to 3840 MB total memory
The physical hardware allows DIMMs of 4 MB size and above, allowing up to 3840 MB of memory, but is restricted by setup code to 3 GB. Increase the limit to allow up to the maximum amount of memory. Btw. the memory area from 0xf000.0000 to 0xffff.ffff is reserved by the architecture for firmware and I/O memory and can not be used for standard memory. An upcoming 64-bit SeaBIOS-hppa firmware will allow more than 3.75GB on 64-bit HPPA64. In this case the ram_max for the pa20 case will change. Signed-off-by: Helge Deller <deller@gmx.de> Noticed-by: Nelson H. F. Beebe <beebe@math.utah.edu> Fixes:b7746b1194
("hw/hppa/machine: Restrict the total memory size to 3GB") Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Tested-by: Bruno Haible <bruno@clisp.org> (cherry picked from commit92039f61af
) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
35623388b0
commit
de64580f07
@ -276,6 +276,7 @@ static TranslateFn *machine_HP_common_init_cpus(MachineState *machine)
|
||||
unsigned int smp_cpus = machine->smp.cpus;
|
||||
TranslateFn *translate;
|
||||
MemoryRegion *cpu_region;
|
||||
uint64_t ram_max;
|
||||
|
||||
/* Create CPUs. */
|
||||
for (unsigned int i = 0; i < smp_cpus; i++) {
|
||||
@ -288,8 +289,10 @@ static TranslateFn *machine_HP_common_init_cpus(MachineState *machine)
|
||||
*/
|
||||
if (hppa_is_pa20(&cpu[0]->env)) {
|
||||
translate = translate_pa20;
|
||||
ram_max = 0xf0000000; /* 3.75 GB (limited by 32-bit firmware) */
|
||||
} else {
|
||||
translate = translate_pa10;
|
||||
ram_max = 0xf0000000; /* 3.75 GB (32-bit CPU) */
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < smp_cpus; i++) {
|
||||
@ -311,9 +314,9 @@ static TranslateFn *machine_HP_common_init_cpus(MachineState *machine)
|
||||
cpu_region);
|
||||
|
||||
/* Main memory region. */
|
||||
if (machine->ram_size > 3 * GiB) {
|
||||
error_report("RAM size is currently restricted to 3GB");
|
||||
exit(EXIT_FAILURE);
|
||||
if (machine->ram_size > ram_max) {
|
||||
info_report("Max RAM size limited to %" PRIu64 " MB", ram_max / MiB);
|
||||
machine->ram_size = ram_max;
|
||||
}
|
||||
memory_region_add_subregion_overlap(addr_space, 0, machine->ram, -1);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user