diff mbox series

[5/5] hw/hppa: Wire up Diva GSP card

Message ID 20250128161450.12975-6-deller@kernel.org (mailing list archive)
State New
Headers show
Series hppa 64-bit improvements | expand

Commit Message

Helge Deller Jan. 28, 2025, 4:14 p.m. UTC
From: Helge Deller <deller@gmx.de>

Until now we used a standard serial-pci device to emulate a HP serial
console.  This worked nicely with 32-bit Linux and 32-bit HP-UX, but
64-bit HP-UX crashes with it and expects either a Diva GSP card, or a real
64-bit capable PCI graphic card (which we don't have yet).
In order to continue with 64-bit HP-UX, switch over to the recently
added Diva GSP card emulation.

Signed-off-by: Helge Deller <deller@gmx.de>
---
 hw/hppa/Kconfig   |  1 +
 hw/hppa/machine.c | 24 ++++++------------------
 2 files changed, 7 insertions(+), 18 deletions(-)
diff mbox series

Patch

diff --git a/hw/hppa/Kconfig b/hw/hppa/Kconfig
index 9312c4294a..cab21045de 100644
--- a/hw/hppa/Kconfig
+++ b/hw/hppa/Kconfig
@@ -11,6 +11,7 @@  config HPPA_B160L
     select LASI
     select SERIAL_MM
     select SERIAL_PCI
+    select DIVA_GSP
     select ISA_BUS
     select I8259
     select IDE_CMD646
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index d5de793b62..1155d9aba9 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -383,28 +383,16 @@  static void machine_HP_common_init_tail(MachineState *machine, PCIBus *pci_bus,
 
     pci_init_nic_devices(pci_bus, mc->default_nic);
 
-    /* BMC board: HP Powerbar SP2 Diva (with console only) */
-    pci_dev = pci_new(-1, "pci-serial");
+    /* BMC board: HP Diva GSP */
+    pci_dev = pci_new_multifunction(PCI_DEVFN(2, 0), "diva-serial");
     if (!lasi_dev) {
         /* bind default keyboard/serial to Diva card */
-        qdev_prop_set_chr(DEVICE(pci_dev), "chardev", serial_hd(0));
+        qdev_prop_set_chr(DEVICE(pci_dev), "chardev1", serial_hd(0));
+        qdev_prop_set_chr(DEVICE(pci_dev), "chardev2", serial_hd(1));
+        qdev_prop_set_chr(DEVICE(pci_dev), "chardev3", serial_hd(2));
+        qdev_prop_set_chr(DEVICE(pci_dev), "chardev4", serial_hd(3));
     }
-    qdev_prop_set_uint8(DEVICE(pci_dev), "prog_if", 0);
     pci_realize_and_unref(pci_dev, pci_bus, &error_fatal);
-    pci_config_set_vendor_id(pci_dev->config, PCI_VENDOR_ID_HP);
-    pci_config_set_device_id(pci_dev->config, 0x1048);
-    pci_set_word(&pci_dev->config[PCI_SUBSYSTEM_VENDOR_ID], PCI_VENDOR_ID_HP);
-    pci_set_word(&pci_dev->config[PCI_SUBSYSTEM_ID], 0x1227); /* Powerbar */
-
-    /* create a second serial PCI card when running Astro */
-    if (serial_hd(1) && !lasi_dev) {
-        pci_dev = pci_new(-1, "pci-serial-4x");
-        qdev_prop_set_chr(DEVICE(pci_dev), "chardev1", serial_hd(1));
-        qdev_prop_set_chr(DEVICE(pci_dev), "chardev2", serial_hd(2));
-        qdev_prop_set_chr(DEVICE(pci_dev), "chardev3", serial_hd(3));
-        qdev_prop_set_chr(DEVICE(pci_dev), "chardev4", serial_hd(4));
-        pci_realize_and_unref(pci_dev, pci_bus, &error_fatal);
-    }
 
     /* create USB OHCI controller for USB keyboard & mouse on Astro machines */
     if (!lasi_dev && machine->enable_graphics && defaults_enabled()) {