aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Beschow <shentey@gmail.com>2024-01-14 13:39:10 +0100
committerMichael S. Tsirkin <mst@redhat.com>2024-02-14 06:09:32 -0500
commit79a7f53065abea95b33e2212dcfb58e1de4be479 (patch)
treef406f029e4d3d01bbcb284c4bffac2e6bcdeebcb
parent1d1afd9ff7264c7ed35f3ca25cc4bf9dd82a6b06 (diff)
downloadqemu-79a7f53065abea95b33e2212dcfb58e1de4be479.zip
qemu-79a7f53065abea95b33e2212dcfb58e1de4be479.tar.gz
qemu-79a7f53065abea95b33e2212dcfb58e1de4be479.tar.bz2
hw/ppc/pegasos2: Let pegasos2 machine configure SuperI/O functions
This is a preparation for implementing relocation and toggling of SuperI/O functions in the VT8231 device model. Upon reset, all SuperI/O functions will be deactivated, so in case if no -bios is given, let the machine configure those functions the same way Pegasos II firmware would do. Signed-off-by: Bernhard Beschow <shentey@gmail.com> Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu> Message-Id: <20240114123911.4877-11-shentey@gmail.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
-rw-r--r--hw/ppc/pegasos2.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c
index d84f3f9..04d6dec 100644
--- a/hw/ppc/pegasos2.c
+++ b/hw/ppc/pegasos2.c
@@ -285,6 +285,12 @@ static void pegasos2_pci_config_write(Pegasos2MachineState *pm, int bus,
pegasos2_mv_reg_write(pm, pcicfg + 4, len, val);
}
+static void pegasos2_superio_write(uint8_t addr, uint8_t val)
+{
+ cpu_physical_memory_write(PCI1_IO_BASE + 0x3f0, &addr, 1);
+ cpu_physical_memory_write(PCI1_IO_BASE + 0x3f1, &val, 1);
+}
+
static void pegasos2_machine_reset(MachineState *machine, ShutdownCause reason)
{
Pegasos2MachineState *pm = PEGASOS2_MACHINE(machine);
@@ -311,6 +317,12 @@ static void pegasos2_machine_reset(MachineState *machine, ShutdownCause reason)
pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) |
PCI_INTERRUPT_LINE, 2, 0x9);
pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) |
+ 0x50, 1, 0x6);
+ pegasos2_superio_write(0xf4, 0xbe);
+ pegasos2_superio_write(0xf6, 0xef);
+ pegasos2_superio_write(0xf7, 0xfc);
+ pegasos2_superio_write(0xf2, 0x14);
+ pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) |
0x50, 1, 0x2);
pegasos2_pci_config_write(pm, 1, (PCI_DEVFN(12, 0) << 8) |
0x55, 1, 0x90);