@ -15,6 +15,31 @@
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 ;
@ -53,10 +78,14 @@ static void qemu_chipset_init(void)
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 ( ) ;