]> git.proxmox.com Git - mirror_qemu.git/commitdiff
sun4u: switch m48t59 NVRAM to MMIO access
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Mon, 2 Mar 2015 22:23:27 +0000 (22:23 +0000)
committerMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Tue, 10 Mar 2015 09:36:19 +0000 (09:36 +0000)
Real sun4u systems memory-map the NVRAM on the (ISA) ebus, so switch over to
MMIO from ioport access whilst setting the base year to 1968 as used by Sun
systems. This allows all SPARC64 OSs included in my tests to correctly detect
the NVRAM IC and read the hardware clock correctly upon boot.

Note that this also requires a corresponding OpenBIOS update to r1330 in order
to switch the SPARC64 NVRAM accessors over from ioport to MMIO.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
hw/sparc64/sun4u.c
pc-bios/openbios-ppc
pc-bios/openbios-sparc32
pc-bios/openbios-sparc64
roms/openbios

index 53aec80102a55260fc2e34ff877fa50b05c7efd3..f027caf909c7adcedbbaed62b2350e5276465140 100644 (file)
@@ -612,7 +612,7 @@ pci_ebus_init1(PCIDevice *pci_dev)
                              0, 0x1000000);
     pci_register_bar(pci_dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->bar0);
     memory_region_init_alias(&s->bar1, OBJECT(s), "bar1", get_system_io(),
-                             0, 0x1000);
+                             0, 0x4000);
     pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->bar1);
     return 0;
 }
@@ -825,6 +825,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
     uint64_t initrd_addr, initrd_size, kernel_addr, kernel_size, kernel_entry;
     PCIBus *pci_bus, *pci_bus2, *pci_bus3;
     ISABus *isa_bus;
+    SysBusDevice *s;
     qemu_irq *ivec_irqs, *pbm_irqs;
     DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
     DriveInfo *fd[MAX_FD];
@@ -868,8 +869,13 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
         fd[i] = drive_get(IF_FLOPPY, 0, i);
     }
     fdctrl_init_isa(isa_bus, fd);
-    nvram = m48t59_init_isa(isa_bus, 0x0074, NVRAM_SIZE, 2000, 59);
 
+    /* Map NVRAM into I/O (ebus) space */
+    nvram = m48t59_init(NULL, 0, 0, NVRAM_SIZE, 1968, 59);
+    s = SYS_BUS_DEVICE(nvram);
+    memory_region_add_subregion(get_system_io(), 0x2000,
+                                sysbus_mmio_get_region(s, 0));
     initrd_size = 0;
     initrd_addr = 0;
     kernel_size = sun4u_load_kernel(machine->kernel_filename,
index 994052f14d60856e34206fb9302ec453f85967b8..91e4193c2d21de3ed177d474ffc5d4446a9379ea 100644 (file)
Binary files a/pc-bios/openbios-ppc and b/pc-bios/openbios-ppc differ
index 6d5a381a7f1e9da9527a4b0fcc5040775d352588..d693865c324f042ebfc2bae79e4c3f67ba29a717 100644 (file)
Binary files a/pc-bios/openbios-sparc32 and b/pc-bios/openbios-sparc32 differ
index 61bd46bf440ce9b6e2b4245d967312a08e4563a9..e5d9e5a7b158efa1f34903645feaddb44076a218 100644 (file)
Binary files a/pc-bios/openbios-sparc64 and b/pc-bios/openbios-sparc64 differ
index 038aa78d3c331731733378a73e778ee620a5b9da..b8dea39718916f4d7d391cd1664314d52a45b872 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 038aa78d3c331731733378a73e778ee620a5b9da
+Subproject commit b8dea39718916f4d7d391cd1664314d52a45b872