static bool i440fx;
 
+static void enable_pm_piix(void)
+{
+       u8 en;
+       u16 cmd;
+
+       /* Set the PM I/O base */
+       x86_pci_write_config32(PIIX_PM, PMBA, CONFIG_ACPI_PM1_BASE | 1);
+
+       /* Enable access to the PM I/O space */
+       cmd = x86_pci_read_config16(PIIX_PM, PCI_COMMAND);
+       cmd |= PCI_COMMAND_IO;
+       x86_pci_write_config16(PIIX_PM, PCI_COMMAND, cmd);
+
+       /* PM I/O Space Enable (PMIOSE) */
+       en = x86_pci_read_config8(PIIX_PM, PMREGMISC);
+       en |= PMIOSE;
+       x86_pci_write_config8(PIIX_PM, PMREGMISC, en);
+}
+
+static void enable_pm_ich9(void)
+{
+       /* Set the PM I/O base */
+       x86_pci_write_config32(ICH9_PM, PMBA, CONFIG_ACPI_PM1_BASE | 1);
+}
+
 static void qemu_chipset_init(void)
 {
        u16 device, xbcs;
                xbcs = x86_pci_read_config16(PIIX_ISA, XBCS);
                xbcs |= APIC_EN;
                x86_pci_write_config16(PIIX_ISA, XBCS, xbcs);
+
+               enable_pm_piix();
        } else {
                /* Configure PCIe ECAM base address */
                x86_pci_write_config32(PCI_BDF(0, 0, 0), PCIEX_BAR,
                                       CONFIG_PCIE_ECAM_BASE | BAR_EN);
+
+               enable_pm_ich9();
        }
 
        qemu_fwcfg_init();
 
 #define PIIX_ISA       PCI_BDF(0, 1, 0)
 #define PIIX_IDE       PCI_BDF(0, 1, 1)
 #define PIIX_USB       PCI_BDF(0, 1, 2)
+#define PIIX_PM        PCI_BDF(0, 1, 3)
+#define ICH9_PM        PCI_BDF(0, 0x1f, 0)
 #define I440FX_VGA     PCI_BDF(0, 2, 0)
 
 #define QEMU_Q35       PCI_BDF(0, 0, 0)