[PULL 10/11] hw/hppa: Split out machine creation

2023-10-19 Thread deller
From: Helge Deller 

This is a preparation patch to allow the creation of additional
hppa machine.

It splits out the creation of the machine into a
- machine_HP_common_init_cpus(), and a
- machine_HP_common_init_tail()
function.

This will allow to reuse the basic functions which are common to
all parisc machines.

Signed-off-by: Helge Deller 
---
 hw/hppa/machine.c | 171 +++---
 1 file changed, 99 insertions(+), 72 deletions(-)

diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index d459ba631b..2bd02508a9 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -23,6 +23,7 @@
 #include "hw/net/lasi_82596.h"
 #include "hw/nmi.h"
 #include "hw/pci/pci.h"
+#include "hw/pci/pci_device.h"
 #include "hw/pci-host/dino.h"
 #include "hw/misc/lasi.h"
 #include "hppa_hardware.h"
@@ -37,6 +38,7 @@
 
 #define enable_lasi_lan()   0
 
+static DeviceState *lasi_dev;
 
 static void hppa_powerdown_req(Notifier *n, void *opaque)
 {
@@ -250,29 +252,20 @@ static DinoState *dino_init(MemoryRegion *addr_space)
 return DINO_PCI_HOST_BRIDGE(dev);
 }
 
-static void machine_hppa_init(MachineState *machine)
+/*
+ * Step 1: Create CPUs and Memory
+ */
+static void machine_HP_common_init_cpus(MachineState *machine)
 {
-const char *kernel_filename = machine->kernel_filename;
-const char *kernel_cmdline = machine->kernel_cmdline;
-const char *initrd_filename = machine->initrd_filename;
-MachineClass *mc = MACHINE_GET_CLASS(machine);
-DeviceState *dev, *dino_dev, *lasi_dev;
-PCIBus *pci_bus;
-ISABus *isa_bus;
-char *firmware_filename;
-uint64_t firmware_low, firmware_high;
-long size;
-uint64_t kernel_entry = 0, kernel_low, kernel_high;
 MemoryRegion *addr_space = get_system_memory();
-MemoryRegion *rom_region;
 MemoryRegion *cpu_region;
 long i;
 unsigned int smp_cpus = machine->smp.cpus;
-SysBusDevice *s;
+char *name;
 
 /* Create CPUs.  */
 for (i = 0; i < smp_cpus; i++) {
-char *name = g_strdup_printf("cpu%ld-io-eir", i);
+name = g_strdup_printf("cpu%ld-io-eir", i);
 cpu[i] = HPPA_CPU(cpu_create(machine->cpu_type));
 
 cpu_region = g_new(MemoryRegion, 1);
@@ -295,45 +288,27 @@ static void machine_hppa_init(MachineState *machine)
 exit(EXIT_FAILURE);
 }
 memory_region_add_subregion_overlap(addr_space, 0, machine->ram, -1);
+}
 
-
-/* Init Lasi chip */
-lasi_dev = DEVICE(lasi_init());
-memory_region_add_subregion(addr_space, LASI_HPA,
-sysbus_mmio_get_region(
-SYS_BUS_DEVICE(lasi_dev), 0));
-
-/* Init Dino (PCI host bus chip).  */
-dino_dev = DEVICE(dino_init(addr_space));
-memory_region_add_subregion(addr_space, DINO_HPA,
-sysbus_mmio_get_region(
-SYS_BUS_DEVICE(dino_dev), 0));
-pci_bus = PCI_BUS(qdev_get_child_bus(dino_dev, "pci"));
-assert(pci_bus);
-
-/* Create ISA bus. */
-isa_bus = hppa_isa_bus();
-assert(isa_bus);
-
-/* Realtime clock, used by firmware for PDC_TOD call. */
-mc146818_rtc_init(isa_bus, 2000, NULL);
-
-/* Serial ports: Lasi and Dino use a 7.272727 MHz clock. */
-serial_mm_init(addr_space, LASI_UART_HPA + 0x800, 0,
-qdev_get_gpio_in(lasi_dev, LASI_IRQ_UART_HPA), 7272727 / 16,
-serial_hd(0), DEVICE_BIG_ENDIAN);
-
-serial_mm_init(addr_space, DINO_UART_HPA + 0x800, 0,
-qdev_get_gpio_in(dino_dev, DINO_IRQ_RS232INT), 7272727 / 16,
-serial_hd(1), DEVICE_BIG_ENDIAN);
-
-/* Parallel port */
-parallel_mm_init(addr_space, LASI_LPT_HPA + 0x800, 0,
- qdev_get_gpio_in(lasi_dev, LASI_IRQ_LAN_HPA),
- parallel_hds[0]);
-
-/* fw_cfg configuration interface */
-create_fw_cfg(machine, pci_bus);
+/*
+ * Last creation step: Add SCSI discs, NICs, graphics & load firmware
+ */
+static void machine_HP_common_init_tail(MachineState *machine, PCIBus *pci_bus)
+{
+const char *kernel_filename = machine->kernel_filename;
+const char *kernel_cmdline = machine->kernel_cmdline;
+const char *initrd_filename = machine->initrd_filename;
+MachineClass *mc = MACHINE_GET_CLASS(machine);
+DeviceState *dev;
+char *firmware_filename;
+uint64_t firmware_low, firmware_high;
+long size;
+uint64_t kernel_entry = 0, kernel_low, kernel_high;
+MemoryRegion *addr_space = get_system_memory();
+MemoryRegion *rom_region;
+long i;
+unsigned int smp_cpus = machine->smp.cpus;
+SysBusDevice *s;
 
 /* SCSI disk setup. */
 dev = DEVICE(pci_create_simple(pci_bus, -1, "lsi53c895a"));
@@ -361,21 +336,12 @@ static void machine_hppa_init(MachineState *machine)
 }
 }
 
-/* PS/2 Keyboard/Mouse */
-dev = qdev_new(TYPE_LASIPS2);
-sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), _fatal);
-sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
-

[PULL 10/11] hw/hppa: Split out machine creation

2023-10-18 Thread deller
From: Helge Deller 

This is a preparation patch to allow the creation of additional
hppa machine.

It splits out the creation of the machine into a
- machine_HP_common_init_cpus(), and a
- machine_HP_common_init_tail()
function.

This will allow to reuse the basic functions which are common to
all parisc machines.

Signed-off-by: Helge Deller 
---
 hw/hppa/machine.c | 171 +++---
 1 file changed, 99 insertions(+), 72 deletions(-)

diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index d459ba631b..2bd02508a9 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -23,6 +23,7 @@
 #include "hw/net/lasi_82596.h"
 #include "hw/nmi.h"
 #include "hw/pci/pci.h"
+#include "hw/pci/pci_device.h"
 #include "hw/pci-host/dino.h"
 #include "hw/misc/lasi.h"
 #include "hppa_hardware.h"
@@ -37,6 +38,7 @@
 
 #define enable_lasi_lan()   0
 
+static DeviceState *lasi_dev;
 
 static void hppa_powerdown_req(Notifier *n, void *opaque)
 {
@@ -250,29 +252,20 @@ static DinoState *dino_init(MemoryRegion *addr_space)
 return DINO_PCI_HOST_BRIDGE(dev);
 }
 
-static void machine_hppa_init(MachineState *machine)
+/*
+ * Step 1: Create CPUs and Memory
+ */
+static void machine_HP_common_init_cpus(MachineState *machine)
 {
-const char *kernel_filename = machine->kernel_filename;
-const char *kernel_cmdline = machine->kernel_cmdline;
-const char *initrd_filename = machine->initrd_filename;
-MachineClass *mc = MACHINE_GET_CLASS(machine);
-DeviceState *dev, *dino_dev, *lasi_dev;
-PCIBus *pci_bus;
-ISABus *isa_bus;
-char *firmware_filename;
-uint64_t firmware_low, firmware_high;
-long size;
-uint64_t kernel_entry = 0, kernel_low, kernel_high;
 MemoryRegion *addr_space = get_system_memory();
-MemoryRegion *rom_region;
 MemoryRegion *cpu_region;
 long i;
 unsigned int smp_cpus = machine->smp.cpus;
-SysBusDevice *s;
+char *name;
 
 /* Create CPUs.  */
 for (i = 0; i < smp_cpus; i++) {
-char *name = g_strdup_printf("cpu%ld-io-eir", i);
+name = g_strdup_printf("cpu%ld-io-eir", i);
 cpu[i] = HPPA_CPU(cpu_create(machine->cpu_type));
 
 cpu_region = g_new(MemoryRegion, 1);
@@ -295,45 +288,27 @@ static void machine_hppa_init(MachineState *machine)
 exit(EXIT_FAILURE);
 }
 memory_region_add_subregion_overlap(addr_space, 0, machine->ram, -1);
+}
 
-
-/* Init Lasi chip */
-lasi_dev = DEVICE(lasi_init());
-memory_region_add_subregion(addr_space, LASI_HPA,
-sysbus_mmio_get_region(
-SYS_BUS_DEVICE(lasi_dev), 0));
-
-/* Init Dino (PCI host bus chip).  */
-dino_dev = DEVICE(dino_init(addr_space));
-memory_region_add_subregion(addr_space, DINO_HPA,
-sysbus_mmio_get_region(
-SYS_BUS_DEVICE(dino_dev), 0));
-pci_bus = PCI_BUS(qdev_get_child_bus(dino_dev, "pci"));
-assert(pci_bus);
-
-/* Create ISA bus. */
-isa_bus = hppa_isa_bus();
-assert(isa_bus);
-
-/* Realtime clock, used by firmware for PDC_TOD call. */
-mc146818_rtc_init(isa_bus, 2000, NULL);
-
-/* Serial ports: Lasi and Dino use a 7.272727 MHz clock. */
-serial_mm_init(addr_space, LASI_UART_HPA + 0x800, 0,
-qdev_get_gpio_in(lasi_dev, LASI_IRQ_UART_HPA), 7272727 / 16,
-serial_hd(0), DEVICE_BIG_ENDIAN);
-
-serial_mm_init(addr_space, DINO_UART_HPA + 0x800, 0,
-qdev_get_gpio_in(dino_dev, DINO_IRQ_RS232INT), 7272727 / 16,
-serial_hd(1), DEVICE_BIG_ENDIAN);
-
-/* Parallel port */
-parallel_mm_init(addr_space, LASI_LPT_HPA + 0x800, 0,
- qdev_get_gpio_in(lasi_dev, LASI_IRQ_LAN_HPA),
- parallel_hds[0]);
-
-/* fw_cfg configuration interface */
-create_fw_cfg(machine, pci_bus);
+/*
+ * Last creation step: Add SCSI discs, NICs, graphics & load firmware
+ */
+static void machine_HP_common_init_tail(MachineState *machine, PCIBus *pci_bus)
+{
+const char *kernel_filename = machine->kernel_filename;
+const char *kernel_cmdline = machine->kernel_cmdline;
+const char *initrd_filename = machine->initrd_filename;
+MachineClass *mc = MACHINE_GET_CLASS(machine);
+DeviceState *dev;
+char *firmware_filename;
+uint64_t firmware_low, firmware_high;
+long size;
+uint64_t kernel_entry = 0, kernel_low, kernel_high;
+MemoryRegion *addr_space = get_system_memory();
+MemoryRegion *rom_region;
+long i;
+unsigned int smp_cpus = machine->smp.cpus;
+SysBusDevice *s;
 
 /* SCSI disk setup. */
 dev = DEVICE(pci_create_simple(pci_bus, -1, "lsi53c895a"));
@@ -361,21 +336,12 @@ static void machine_hppa_init(MachineState *machine)
 }
 }
 
-/* PS/2 Keyboard/Mouse */
-dev = qdev_new(TYPE_LASIPS2);
-sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), _fatal);
-sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0,
-