diff mbox series

sun4u: update PCI topology to include simba PCI bridges

Message ID 1506494757-7352-2-git-send-email-mark.cave-ayland@ilande.co.uk
State New
Headers show
Series sun4u: update PCI topology to include simba PCI bridges | expand

Commit Message

Mark Cave-Ayland Sept. 27, 2017, 6:45 a.m. UTC
This patch updates the sun4u model to being much closer to a real Ultra 5
by moving devices behind the 2 simba PCI bridges (A and B) as found on real
hardware.

The most noticeable change introduced by this patchset is that in-built devices
are no longer attached to the PCI root bus, but instead behind PCI bridge A.
Along with this the interrupt routing is updated accordingly to match the
official documentation.

Since the existing code currently bypasses the PCI bridge interrupt
swizzling, the interrupt mapping functions are reorganised so that
pci_pbm_map_irq() is used by the PCI bridges and pci_apb_map_irq() is
used by the PCI host bridge.

Behind the sabre PCI host bridge, the PCI IO space now needs to be
split into two separate halves at 0x8000000. Therefore we also setup a new
PCI IO space region of increased size on the PCI host bridge and enable
32-bit PCI IO accesses to allow IO accesses to reach devices behind PCI
bridge B correctly.

As part of this change we also combine the onboard sunhme NIC and the ebus
into a single multi-function device as done on a real Ultra 5. For other
NICs we initialise them and place them into the next free slot on PCI
bus B.

Finally we mark the physically unavailable slots (plus slot 0 in busA) as
reserved to ensure that users can't plug devices into non-existent slots
which will break interrupt routing.

Note: since this commit changes PCI topology and interrupt routing, an
updated openbios-sparc64 binary is included with this commit containing the
associated changes to maintain bisectability.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/pci-host/apb.c        |   47 +++++++++++++++++++++++++++---------
 hw/sparc64/sun4u.c       |   60 +++++++++++++++++++++++++++++++++-------------
 pc-bios/openbios-sparc64 |  Bin 1593408 -> 1593408 bytes
 3 files changed, 79 insertions(+), 28 deletions(-)

diff --git a/pc-bios/openbios-sparc64 b/pc-bios/openbios-sparc64
index 7bdd6a1f4977eae6693883468cab78ba3ba363cf..955f45d33238dda2f1e99d97be9463fd1fac479d 100644
GIT binary patch
delta 31686
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
E0sUr(c>n+a

delta 31753
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
ZMVKE;wIlUI*~8?Vr|m#Dj?(}6e*jT)>+Apk

Comments

Artyom Tarasenko Sept. 27, 2017, 12:09 p.m. UTC | #1
On Wed, Sep 27, 2017 at 8:45 AM, Mark Cave-Ayland
<mark.cave-ayland@ilande.co.uk> wrote:
> This patch updates the sun4u model to being much closer to a real Ultra 5
> by moving devices behind the 2 simba PCI bridges (A and B) as found on real
> hardware.
>
> The most noticeable change introduced by this patchset is that in-built devices
> are no longer attached to the PCI root bus, but instead behind PCI bridge A.
> Along with this the interrupt routing is updated accordingly to match the
> official documentation.
>
> Since the existing code currently bypasses the PCI bridge interrupt
> swizzling, the interrupt mapping functions are reorganised so that
> pci_pbm_map_irq() is used by the PCI bridges and pci_apb_map_irq() is
> used by the PCI host bridge.
>
> Behind the sabre PCI host bridge, the PCI IO space now needs to be
> split into two separate halves at 0x8000000. Therefore we also setup a new
> PCI IO space region of increased size on the PCI host bridge and enable
> 32-bit PCI IO accesses to allow IO accesses to reach devices behind PCI
> bridge B correctly.
>
> As part of this change we also combine the onboard sunhme NIC and the ebus
> into a single multi-function device as done on a real Ultra 5. For other
> NICs we initialise them and place them into the next free slot on PCI
> bus B.
>
> Finally we mark the physically unavailable slots (plus slot 0 in busA) as
> reserved to ensure that users can't plug devices into non-existent slots
> which will break interrupt routing.
>
> Note: since this commit changes PCI topology and interrupt routing, an
> updated openbios-sparc64 binary is included with this commit containing the
> associated changes to maintain bisectability.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

Reviewed-by: Artyom Tarasenko <atar4qemu@gmail.com>

> ---
>  hw/pci-host/apb.c        |   47 +++++++++++++++++++++++++++---------
>  hw/sparc64/sun4u.c       |   60 +++++++++++++++++++++++++++++++++-------------
>  pc-bios/openbios-sparc64 |  Bin 1593408 -> 1593408 bytes
>  3 files changed, 79 insertions(+), 28 deletions(-)
>
> diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c
> index b709456..bc54366 100644
> --- a/hw/pci-host/apb.c
> +++ b/hw/pci-host/apb.c
> @@ -599,16 +599,35 @@ static uint64_t apb_pci_config_read(void *opaque, hwaddr addr,
>  /* The APB host has an IRQ line for each IRQ line of each slot.  */
>  static int pci_apb_map_irq(PCIDevice *pci_dev, int irq_num)
>  {
> -    return ((pci_dev->devfn & 0x18) >> 1) + irq_num;
> +    /* Return the irq as swizzled by the PBM */
> +    return irq_num;
>  }
>
>  static int pci_pbm_map_irq(PCIDevice *pci_dev, int irq_num)
>  {
> +    PBMPCIBridge *br = PBM_PCI_BRIDGE(pci_bridge_get_device(
> +                           PCI_BUS(qdev_get_parent_bus(DEVICE(pci_dev)))));
> +
>      int bus_offset;
> -    if (pci_dev->devfn & 1)
> -        bus_offset = 16;
> -    else
> -        bus_offset = 0;
> +    if (br->busA) {
> +        bus_offset = 0x0;
> +
> +        /* The on-board devices have fixed (legacy) OBIO intnos */
> +        switch (PCI_SLOT(pci_dev->devfn)) {
> +        case 1:
> +            /* Onboard NIC */
> +            return 0x21;
> +        case 3:
> +            /* Onboard IDE */
> +            return 0x20;
> +
> +        default:
> +            /* Normal intno, fall through */
> +            break;
> +        }
> +    } else {
> +        bus_offset = 0x10;
> +    }
>      return (bus_offset + (PCI_SLOT(pci_dev->devfn) << 2) + irq_num) & 0x1f;
>  }
>
> @@ -669,6 +688,12 @@ static void apb_pci_bridge_realize(PCIDevice *dev, Error **errp)
>                   PCI_STATUS_FAST_BACK | PCI_STATUS_66MHZ |
>                   PCI_STATUS_DEVSEL_MEDIUM);
>
> +    /* Allow 32-bit IO addresses */
> +    pci_set_word(dev->config + PCI_IO_BASE, PCI_IO_RANGE_TYPE_32);
> +    pci_set_word(dev->config + PCI_IO_LIMIT, PCI_IO_RANGE_TYPE_32);
> +    pci_set_word(dev->wmask + PCI_IO_BASE_UPPER16, 0xffff);
> +    pci_set_word(dev->wmask + PCI_IO_LIMIT_UPPER16, 0xffff);
> +
>      pci_bridge_update_mappings(PCI_BRIDGE(br));
>  }
>
> @@ -690,9 +715,9 @@ PCIBus *pci_apb_init(hwaddr special_base,
>      d = APB_DEVICE(dev);
>      phb = PCI_HOST_BRIDGE(dev);
>      phb->bus = pci_register_bus(DEVICE(phb), "pci",
> -                                pci_apb_set_irq, pci_pbm_map_irq, d,
> +                                pci_apb_set_irq, pci_apb_map_irq, d,
>                                  &d->pci_mmio,
> -                                get_system_io(),
> +                                &d->pci_ioport,
>                                  0, 32, TYPE_PCI_BUS);
>      qdev_init_nofail(dev);
>      s = SYS_BUS_DEVICE(dev);
> @@ -725,14 +750,14 @@ PCIBus *pci_apb_init(hwaddr special_base,
>      pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 0), true,
>                                     TYPE_PBM_PCI_BRIDGE);
>      br = PCI_BRIDGE(pci_dev);
> -    pci_bridge_map_irq(br, "pciB", pci_apb_map_irq);
> +    pci_bridge_map_irq(br, "pciB", pci_pbm_map_irq);
>      qdev_init_nofail(&pci_dev->qdev);
>      *busB = pci_bridge_get_sec_bus(br);
>
>      pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 1), true,
>                                     TYPE_PBM_PCI_BRIDGE);
>      br = PCI_BRIDGE(pci_dev);
> -    pci_bridge_map_irq(br, "pciA", pci_apb_map_irq);
> +    pci_bridge_map_irq(br, "pciA", pci_pbm_map_irq);
>      qdev_prop_set_bit(DEVICE(pci_dev), "busA", true);
>      qdev_init_nofail(&pci_dev->qdev);
>      *busA = pci_bridge_get_sec_bus(br);
> @@ -798,8 +823,8 @@ static int pci_pbm_init_device(SysBusDevice *dev)
>      sysbus_init_mmio(dev, &s->pci_config);
>
>      /* pci_ioport */
> -    memory_region_init_alias(&s->pci_ioport, OBJECT(s), "apb-pci-ioport",
> -                             get_system_io(), 0, 0x10000);
> +    memory_region_init(&s->pci_ioport, OBJECT(s), "apb-pci-ioport", 0x1000000);
> +
>      /* at region 2 */
>      sysbus_init_mmio(dev, &s->pci_ioport);
>
> diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
> index c3280aa..2edd1cc 100644
> --- a/hw/sparc64/sun4u.c
> +++ b/hw/sparc64/sun4u.c
> @@ -27,6 +27,7 @@
>  #include "cpu.h"
>  #include "hw/hw.h"
>  #include "hw/pci/pci.h"
> +#include "hw/pci/pci_bus.h"
>  #include "hw/pci-host/apb.h"
>  #include "hw/i386/pc.h"
>  #include "hw/char/serial.h"
> @@ -42,6 +43,7 @@
>  #include "hw/nvram/fw_cfg.h"
>  #include "hw/sysbus.h"
>  #include "hw/ide.h"
> +#include "hw/ide/pci.h"
>  #include "hw/loader.h"
>  #include "elf.h"
>  #include "qemu/cutils.h"
> @@ -436,7 +438,8 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
>      DeviceState *dev;
>      FWCfgState *fw_cfg;
>      NICInfo *nd;
> -    int onboard_nic_idx;
> +    MACAddr macaddr;
> +    bool onboard_nic;
>
>      /* init CPUs */
>      cpu = sparc64_cpu_devinit(machine->cpu_model, hwdef->default_cpu_model,
> @@ -450,10 +453,17 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
>      ivec_irqs = qemu_allocate_irqs(sparc64_cpu_set_ivec_irq, cpu, IVEC_MAX);
>      pci_bus = pci_apb_init(APB_SPECIAL_BASE, APB_MEM_BASE, ivec_irqs, &pci_busA,
>                             &pci_busB, &pbm_irqs);
> -    pci_vga_init(pci_bus);
>
> -    /* XXX Should be pci_busA */
> -    ebus = pci_create_simple(pci_bus, -1, "ebus");
> +    /* Only in-built Simba PBMs can exist on the root bus, slot 0 on busA is
> +       reserved (leaving no slots free after on-board devices) however slots
> +       0-3 are free on busB */
> +    pci_bus->slot_reserved_mask = 0xfffffffc;
> +    pci_busA->slot_reserved_mask = 0xfffffff1;
> +    pci_busB->slot_reserved_mask = 0xfffffff0;
> +
> +    ebus = pci_create_multifunction(pci_busA, PCI_DEVFN(1, 0), true, "ebus");
> +    qdev_init_nofail(DEVICE(ebus));
> +
>      isa_bus = pci_ebus_init(ebus, pbm_irqs);
>
>      i = 0;
> @@ -466,27 +476,43 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
>      serial_hds_isa_init(isa_bus, i, MAX_SERIAL_PORTS);
>      parallel_hds_isa_init(isa_bus, MAX_PARALLEL_PORTS);
>
> -    onboard_nic_idx = -1;
> +    pci_dev = pci_create_simple(pci_busA, PCI_DEVFN(2, 0), "VGA");
> +
> +    memset(&macaddr, 0, sizeof(MACAddr));
> +    onboard_nic = false;
>      for (i = 0; i < nb_nics; i++) {
>          nd = &nd_table[i];
>
> -        if (onboard_nic_idx == -1 &&
> -                (!nd->model || strcmp(nd->model, "sunhme") == 0)) {
> -            pci_dev = pci_create(pci_bus, -1, "sunhme");
> -            dev = &pci_dev->qdev;
> -            qdev_set_nic_properties(dev, nd);
> -            qdev_init_nofail(dev);
> -
> -            onboard_nic_idx = i;
> +        if (!nd->model || strcmp(nd->model, "sunhme") == 0) {
> +            if (!onboard_nic) {
> +                pci_dev = pci_create_multifunction(pci_busA, PCI_DEVFN(1, 1),
> +                                                   true, "sunhme");
> +                memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr));
> +                onboard_nic = true;
> +            } else {
> +                pci_dev = pci_create_simple(pci_busB, -1, "sunhme");
> +            }
>          } else {
> -            pci_nic_init_nofail(nd, pci_bus, "ne2k_pci", NULL);
> +            pci_dev = pci_create_simple(pci_busB, -1, nd->model);
>          }
> +
> +        dev = &pci_dev->qdev;
> +        qdev_set_nic_properties(dev, nd);
> +        qdev_init_nofail(dev);
> +    }
> +
> +    /* If we don't have an onboard NIC, grab a default MAC address so that
> +     * we have a valid machine id */
> +    if (!onboard_nic) {
> +        qemu_macaddr_default_if_unset(&macaddr);
>      }
> -    onboard_nic_idx = MAX(onboard_nic_idx, 0);
>
>      ide_drive_get(hd, ARRAY_SIZE(hd));
>
> -    pci_cmd646_ide_init(pci_bus, hd, 1);
> +    pci_dev = pci_create(pci_busA, PCI_DEVFN(3, 0), "cmd646-ide");
> +    qdev_prop_set_uint32(&pci_dev->qdev, "secondary", 1);
> +    qdev_init_nofail(&pci_dev->qdev);
> +    pci_ide_create_devs(pci_dev, hd);
>
>      isa_create_simple(isa_bus, "i8042");
>
> @@ -527,7 +553,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
>                             /* XXX: need an option to load a NVRAM image */
>                             0,
>                             graphic_width, graphic_height, graphic_depth,
> -                           (uint8_t *)&nd_table[onboard_nic_idx].macaddr);
> +                           (uint8_t *)&macaddr);
>
>      dev = qdev_create(NULL, TYPE_FW_CFG_IO);
>      qdev_prop_set_bit(dev, "dma_enabled", false);
> diff --git a/pc-bios/openbios-sparc64 b/pc-bios/openbios-sparc64
> index 7bdd6a1f4977eae6693883468cab78ba3ba363cf..955f45d33238dda2f1e99d97be9463fd1fac479d 100644
> GIT binary patch
> delta 31686
> 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
> E0sUr(c>n+a
>
> delta 31753
> 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
> ZMVKE;wIlUI*~8?Vr|m#Dj?(}6e*jT)>+Apk
>
> --
> 1.7.10.4
>
diff mbox series

Patch

diff --git a/hw/pci-host/apb.c b/hw/pci-host/apb.c
index b709456..bc54366 100644
--- a/hw/pci-host/apb.c
+++ b/hw/pci-host/apb.c
@@ -599,16 +599,35 @@  static uint64_t apb_pci_config_read(void *opaque, hwaddr addr,
 /* The APB host has an IRQ line for each IRQ line of each slot.  */
 static int pci_apb_map_irq(PCIDevice *pci_dev, int irq_num)
 {
-    return ((pci_dev->devfn & 0x18) >> 1) + irq_num;
+    /* Return the irq as swizzled by the PBM */
+    return irq_num;
 }
 
 static int pci_pbm_map_irq(PCIDevice *pci_dev, int irq_num)
 {
+    PBMPCIBridge *br = PBM_PCI_BRIDGE(pci_bridge_get_device(
+                           PCI_BUS(qdev_get_parent_bus(DEVICE(pci_dev)))));
+
     int bus_offset;
-    if (pci_dev->devfn & 1)
-        bus_offset = 16;
-    else
-        bus_offset = 0;
+    if (br->busA) {
+        bus_offset = 0x0;
+
+        /* The on-board devices have fixed (legacy) OBIO intnos */
+        switch (PCI_SLOT(pci_dev->devfn)) {
+        case 1:
+            /* Onboard NIC */
+            return 0x21;
+        case 3:
+            /* Onboard IDE */
+            return 0x20;
+
+        default:
+            /* Normal intno, fall through */
+            break;
+        }
+    } else {
+        bus_offset = 0x10;
+    }
     return (bus_offset + (PCI_SLOT(pci_dev->devfn) << 2) + irq_num) & 0x1f;
 }
 
@@ -669,6 +688,12 @@  static void apb_pci_bridge_realize(PCIDevice *dev, Error **errp)
                  PCI_STATUS_FAST_BACK | PCI_STATUS_66MHZ |
                  PCI_STATUS_DEVSEL_MEDIUM);
 
+    /* Allow 32-bit IO addresses */
+    pci_set_word(dev->config + PCI_IO_BASE, PCI_IO_RANGE_TYPE_32);
+    pci_set_word(dev->config + PCI_IO_LIMIT, PCI_IO_RANGE_TYPE_32);
+    pci_set_word(dev->wmask + PCI_IO_BASE_UPPER16, 0xffff);
+    pci_set_word(dev->wmask + PCI_IO_LIMIT_UPPER16, 0xffff);
+
     pci_bridge_update_mappings(PCI_BRIDGE(br));
 }
 
@@ -690,9 +715,9 @@  PCIBus *pci_apb_init(hwaddr special_base,
     d = APB_DEVICE(dev);
     phb = PCI_HOST_BRIDGE(dev);
     phb->bus = pci_register_bus(DEVICE(phb), "pci",
-                                pci_apb_set_irq, pci_pbm_map_irq, d,
+                                pci_apb_set_irq, pci_apb_map_irq, d,
                                 &d->pci_mmio,
-                                get_system_io(),
+                                &d->pci_ioport,
                                 0, 32, TYPE_PCI_BUS);
     qdev_init_nofail(dev);
     s = SYS_BUS_DEVICE(dev);
@@ -725,14 +750,14 @@  PCIBus *pci_apb_init(hwaddr special_base,
     pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 0), true,
                                    TYPE_PBM_PCI_BRIDGE);
     br = PCI_BRIDGE(pci_dev);
-    pci_bridge_map_irq(br, "pciB", pci_apb_map_irq);
+    pci_bridge_map_irq(br, "pciB", pci_pbm_map_irq);
     qdev_init_nofail(&pci_dev->qdev);
     *busB = pci_bridge_get_sec_bus(br);
 
     pci_dev = pci_create_multifunction(phb->bus, PCI_DEVFN(1, 1), true,
                                    TYPE_PBM_PCI_BRIDGE);
     br = PCI_BRIDGE(pci_dev);
-    pci_bridge_map_irq(br, "pciA", pci_apb_map_irq);
+    pci_bridge_map_irq(br, "pciA", pci_pbm_map_irq);
     qdev_prop_set_bit(DEVICE(pci_dev), "busA", true);
     qdev_init_nofail(&pci_dev->qdev);
     *busA = pci_bridge_get_sec_bus(br);
@@ -798,8 +823,8 @@  static int pci_pbm_init_device(SysBusDevice *dev)
     sysbus_init_mmio(dev, &s->pci_config);
 
     /* pci_ioport */
-    memory_region_init_alias(&s->pci_ioport, OBJECT(s), "apb-pci-ioport",
-                             get_system_io(), 0, 0x10000);
+    memory_region_init(&s->pci_ioport, OBJECT(s), "apb-pci-ioport", 0x1000000);
+
     /* at region 2 */
     sysbus_init_mmio(dev, &s->pci_ioport);
 
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index c3280aa..2edd1cc 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -27,6 +27,7 @@ 
 #include "cpu.h"
 #include "hw/hw.h"
 #include "hw/pci/pci.h"
+#include "hw/pci/pci_bus.h"
 #include "hw/pci-host/apb.h"
 #include "hw/i386/pc.h"
 #include "hw/char/serial.h"
@@ -42,6 +43,7 @@ 
 #include "hw/nvram/fw_cfg.h"
 #include "hw/sysbus.h"
 #include "hw/ide.h"
+#include "hw/ide/pci.h"
 #include "hw/loader.h"
 #include "elf.h"
 #include "qemu/cutils.h"
@@ -436,7 +438,8 @@  static void sun4uv_init(MemoryRegion *address_space_mem,
     DeviceState *dev;
     FWCfgState *fw_cfg;
     NICInfo *nd;
-    int onboard_nic_idx;
+    MACAddr macaddr;
+    bool onboard_nic;
 
     /* init CPUs */
     cpu = sparc64_cpu_devinit(machine->cpu_model, hwdef->default_cpu_model,
@@ -450,10 +453,17 @@  static void sun4uv_init(MemoryRegion *address_space_mem,
     ivec_irqs = qemu_allocate_irqs(sparc64_cpu_set_ivec_irq, cpu, IVEC_MAX);
     pci_bus = pci_apb_init(APB_SPECIAL_BASE, APB_MEM_BASE, ivec_irqs, &pci_busA,
                            &pci_busB, &pbm_irqs);
-    pci_vga_init(pci_bus);
 
-    /* XXX Should be pci_busA */
-    ebus = pci_create_simple(pci_bus, -1, "ebus");
+    /* Only in-built Simba PBMs can exist on the root bus, slot 0 on busA is
+       reserved (leaving no slots free after on-board devices) however slots
+       0-3 are free on busB */
+    pci_bus->slot_reserved_mask = 0xfffffffc;
+    pci_busA->slot_reserved_mask = 0xfffffff1;
+    pci_busB->slot_reserved_mask = 0xfffffff0;
+
+    ebus = pci_create_multifunction(pci_busA, PCI_DEVFN(1, 0), true, "ebus");
+    qdev_init_nofail(DEVICE(ebus));
+
     isa_bus = pci_ebus_init(ebus, pbm_irqs);
 
     i = 0;
@@ -466,27 +476,43 @@  static void sun4uv_init(MemoryRegion *address_space_mem,
     serial_hds_isa_init(isa_bus, i, MAX_SERIAL_PORTS);
     parallel_hds_isa_init(isa_bus, MAX_PARALLEL_PORTS);
 
-    onboard_nic_idx = -1;
+    pci_dev = pci_create_simple(pci_busA, PCI_DEVFN(2, 0), "VGA");
+
+    memset(&macaddr, 0, sizeof(MACAddr));
+    onboard_nic = false;
     for (i = 0; i < nb_nics; i++) {
         nd = &nd_table[i];
 
-        if (onboard_nic_idx == -1 &&
-                (!nd->model || strcmp(nd->model, "sunhme") == 0)) {
-            pci_dev = pci_create(pci_bus, -1, "sunhme");
-            dev = &pci_dev->qdev;
-            qdev_set_nic_properties(dev, nd);
-            qdev_init_nofail(dev);
-
-            onboard_nic_idx = i;
+        if (!nd->model || strcmp(nd->model, "sunhme") == 0) {
+            if (!onboard_nic) {
+                pci_dev = pci_create_multifunction(pci_busA, PCI_DEVFN(1, 1),
+                                                   true, "sunhme");
+                memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr));
+                onboard_nic = true;
+            } else {
+                pci_dev = pci_create_simple(pci_busB, -1, "sunhme");
+            }
         } else {
-            pci_nic_init_nofail(nd, pci_bus, "ne2k_pci", NULL);
+            pci_dev = pci_create_simple(pci_busB, -1, nd->model);
         }
+
+        dev = &pci_dev->qdev;
+        qdev_set_nic_properties(dev, nd);
+        qdev_init_nofail(dev);
+    }
+
+    /* If we don't have an onboard NIC, grab a default MAC address so that
+     * we have a valid machine id */
+    if (!onboard_nic) {
+        qemu_macaddr_default_if_unset(&macaddr);
     }
-    onboard_nic_idx = MAX(onboard_nic_idx, 0);
 
     ide_drive_get(hd, ARRAY_SIZE(hd));
 
-    pci_cmd646_ide_init(pci_bus, hd, 1);
+    pci_dev = pci_create(pci_busA, PCI_DEVFN(3, 0), "cmd646-ide");
+    qdev_prop_set_uint32(&pci_dev->qdev, "secondary", 1);
+    qdev_init_nofail(&pci_dev->qdev);
+    pci_ide_create_devs(pci_dev, hd);
 
     isa_create_simple(isa_bus, "i8042");
 
@@ -527,7 +553,7 @@  static void sun4uv_init(MemoryRegion *address_space_mem,
                            /* XXX: need an option to load a NVRAM image */
                            0,
                            graphic_width, graphic_height, graphic_depth,
-                           (uint8_t *)&nd_table[onboard_nic_idx].macaddr);
+                           (uint8_t *)&macaddr);
 
     dev = qdev_create(NULL, TYPE_FW_CFG_IO);
     qdev_prop_set_bit(dev, "dma_enabled", false);