qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v3 43/86] hppa: allow max ram size upto 4Gb


From: Igor Mammedov
Subject: [PATCH v3 43/86] hppa: allow max ram size upto 4Gb
Date: Tue, 7 Jan 2020 16:34:38 +0100

Real hardware allows to plug in up to 4Gb RAM into memory slots.
So allow user specify up to 4Gb and map all of it into guest
address space.

PS:
  * guest will still see 3840m being reported in
    cpu[0]->env.gr[26] and won't be avare of remaining
    ~248Mb, as it doesn't have other means to discover
    RAM above firmware ROM.
  * use local ram_size to avoid changing global one
    which shouldn't be changed boards and will be removed
    in the future

Requested-by: Helge Deller <address@hidden>
Signed-off-by: Igor Mammedov <address@hidden>
---
v2:
  - make main ram -1 prio, so it wouldn't conflict with other regions
    starting from 0xf9000000
    (Philippe Mathieu-Daudé <address@hidden>)
  - avoid type size comparision error on migw32 host with ram_addr_t
  - simplify code a bit using local ram_size var.
  - rewrite commit message
v3:
  - drop "hppa: drop RAM size fixup"
  - rewrite commit message
  - use 64-bit local ram_size to workaround always false
    condition "if (ram_size > 4 * GiB)" when building on
    32-bit host (mingw-32) as it's preffered over ifdefs.
---
 hw/hppa/machine.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 5d0de26..d63b61e 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -73,10 +73,9 @@ static void machine_hppa_init(MachineState *machine)
     MemoryRegion *ram_region;
     MemoryRegion *cpu_region;
     long i;
+    uint64_t ram_size = machine->ram_size;
     unsigned int smp_cpus = machine->smp.cpus;
 
-    ram_size = machine->ram_size;
-
     /* Create CPUs.  */
     for (i = 0; i < smp_cpus; i++) {
         char *name = g_strdup_printf("cpu%ld-io-eir", i);
@@ -91,15 +90,17 @@ static void machine_hppa_init(MachineState *machine)
     }
 
     /* Limit main memory. */
-    if (ram_size > FIRMWARE_START) {
-        machine->ram_size = ram_size = FIRMWARE_START;
+    if (ram_size > 4 * GiB) {
+        error_report("RAM size more than 4Gb is not supported");
+        exit(EXIT_FAILURE);
     }
+    ram_size = ram_size > FIRMWARE_START ? FIRMWARE_START : ram_size;
 
     /* Main memory region. */
     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);
@@ -246,6 +247,8 @@ static void machine_hppa_init(MachineState *machine)
 static void hppa_machine_reset(MachineState *ms)
 {
     unsigned int smp_cpus = ms->smp.cpus;
+    uint64_t ram_size = ms->ram_size > FIRMWARE_START ? FIRMWARE_START :
+                                                        ms->ram_size;
     int i;
 
     qemu_devices_reset();
-- 
2.7.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]