diff mbox series

[v3,19/46] hw/sparc64/sun4u: use pci_init_nic_devices()

Message ID 20240108204909.564514-20-dwmw2@infradead.org
State New
Headers show
Series Rework matching of network devices to -nic options | expand

Commit Message

David Woodhouse Jan. 8, 2024, 8:26 p.m. UTC
From: David Woodhouse <dwmw@amazon.co.uk>

The first sunhme NIC gets placed a function 1 on slot 1 of PCI bus A,
and the rest are dynamically assigned on PCI bus B.

Previously, any PCI NIC would get the special treatment purely by
virtue of being first in the list.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
---
 hw/sparc64/sun4u.c | 27 ++++++++-------------------
 1 file changed, 8 insertions(+), 19 deletions(-)

Comments

Thomas Huth Jan. 26, 2024, 2:21 p.m. UTC | #1
On 08/01/2024 21.26, David Woodhouse wrote:
> From: David Woodhouse <dwmw@amazon.co.uk>
> 
> The first sunhme NIC gets placed a function 1 on slot 1 of PCI bus A,
> and the rest are dynamically assigned on PCI bus B.
> 
> Previously, any PCI NIC would get the special treatment purely by
> virtue of being first in the list.
> 
> Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
> ---
>   hw/sparc64/sun4u.c | 27 ++++++++-------------------
>   1 file changed, 8 insertions(+), 19 deletions(-)
> 
> diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
> index 24d53bf5fd..eda9b58a21 100644
> --- a/hw/sparc64/sun4u.c
> +++ b/hw/sparc64/sun4u.c
> @@ -639,29 +639,18 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
>   
>       memset(&macaddr, 0, sizeof(MACAddr));
>       onboard_nic = false;
> -    for (i = 0; i < nb_nics; i++) {
> -        PCIBus *bus;
> -        nd = &nd_table[i];
> -
> -        if (!nd->model || strcmp(nd->model, mc->default_nic) == 0) {
> -            if (!onboard_nic) {
> -                pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic);
> -                bus = pci_busA;
> -                memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr));
> -                onboard_nic = true;
> -            } else {
> -                pci_dev = pci_new(-1, mc->default_nic);
> -                bus = pci_busB;
> -            }
> -        } else {
> -            pci_dev = pci_new(-1, nd->model);
> -            bus = pci_busB;
> -        }
>   
> +    nd = qemu_find_nic_info(mc->default_nic, true, NULL);
> +    if (nd) {
> +        pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic);
>           dev = &pci_dev->qdev;
>           qdev_set_nic_properties(dev, nd);
> -        pci_realize_and_unref(pci_dev, bus, &error_fatal);
> +        pci_realize_and_unref(pci_dev, pci_busA, &error_fatal);
> +
> +        memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr));
> +        onboard_nic = true;
>       }
> +    pci_init_nic_devices(pci_busB, mc->default_nic);
>   
>       /* If we don't have an onboard NIC, grab a default MAC address so that
>        * we have a valid machine id */

Reviewed-by: Thomas Huth <thuth@redhat.com>
diff mbox series

Patch

diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index 24d53bf5fd..eda9b58a21 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -639,29 +639,18 @@  static void sun4uv_init(MemoryRegion *address_space_mem,
 
     memset(&macaddr, 0, sizeof(MACAddr));
     onboard_nic = false;
-    for (i = 0; i < nb_nics; i++) {
-        PCIBus *bus;
-        nd = &nd_table[i];
-
-        if (!nd->model || strcmp(nd->model, mc->default_nic) == 0) {
-            if (!onboard_nic) {
-                pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic);
-                bus = pci_busA;
-                memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr));
-                onboard_nic = true;
-            } else {
-                pci_dev = pci_new(-1, mc->default_nic);
-                bus = pci_busB;
-            }
-        } else {
-            pci_dev = pci_new(-1, nd->model);
-            bus = pci_busB;
-        }
 
+    nd = qemu_find_nic_info(mc->default_nic, true, NULL);
+    if (nd) {
+        pci_dev = pci_new_multifunction(PCI_DEVFN(1, 1), mc->default_nic);
         dev = &pci_dev->qdev;
         qdev_set_nic_properties(dev, nd);
-        pci_realize_and_unref(pci_dev, bus, &error_fatal);
+        pci_realize_and_unref(pci_dev, pci_busA, &error_fatal);
+
+        memcpy(&macaddr, &nd->macaddr.a, sizeof(MACAddr));
+        onboard_nic = true;
     }
+    pci_init_nic_devices(pci_busB, mc->default_nic);
 
     /* If we don't have an onboard NIC, grab a default MAC address so that
      * we have a valid machine id */