On Wed, 8 Jan 2020 19:14:24 +0100 Philippe Mathieu-Daudé <f4...@amsat.org> 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é <f4...@amsat.org> 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) that's why I've worked around it using local uint64_t in the last version "[PATCH v3 43/86] hppa: allow max ram size upto 4Gb" coincidentally that would get rid of global ram_size usage and leave only machine->ram_size on this board. > + 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);