On Wed, 8 Jan 2020 19:14:24 +0100
Philippe Mathieu-Daudé <address@hidden> wrote:
The hardware expects DIMM slots of 1 or 2 GB, allowing up to
4 GB of memory. Accept the same amount of memory the hardware
can deal with.
The CPU doesn't have access to the RAM mapped in the
[0xf0000000 - 0xf1000000] range because this is the PDC area
(Processor Dependent Code) where the firmware is loaded.
To keep this region with higher priority than the RAM, lower
the RAM priority. The PDC will overlap it.
Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
Looks good to me (since board doesn't fix up ram_size and uses
whatever user specified, proper support for 4Gb could be done on top later).
---
hw/hppa/machine.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 6775d879f8..d10c967d06 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -90,16 +90,15 @@ static void machine_hppa_init(MachineState *machine)
g_free(name);
}
- /* Limit main memory. */
- if (ram_size > FIRMWARE_START) {
- machine->ram_size = ram_size = FIRMWARE_START;
- }
-
/* Main memory region. */
+ if (machine->ram_size > 4 * GiB) {
Could it break a build on 32-bit mingw host?
(machine->ram_size is 32-bit on that host and condition would be
always false, tripping -Werror)
+ error_report("RAM size of 4GB or more is not supported");
+ exit(EXIT_FAILURE);
+ }
ram_region = g_new(MemoryRegion, 1);
memory_region_allocate_system_memory(ram_region, OBJECT(machine),
"ram", ram_size);
- memory_region_add_subregion(addr_space, 0, ram_region);
+ memory_region_add_subregion_overlap(addr_space, 0, ram_region, -1);
/* Init Dino (PCI host bus chip). */
pci_bus = dino_init(addr_space, &rtc_irq, &serial_irq);