diff --git a/src/southbridge/intel/lynxpoint/acpi/serialio.asl b/src/southbridge/intel/lynxpoint/acpi/serialio.asl index 4c0d36bcc6..59228d6cf5 100644 --- a/src/southbridge/intel/lynxpoint/acpi/serialio.asl +++ b/src/southbridge/intel/lynxpoint/acpi/serialio.asl @@ -211,6 +211,28 @@ Device (I2C0) Return (0xF) } } + + // Access to PCI Config in ACPI mode + OperationRegion (KEYS, SystemMemory, \S1B1, 0x100) + Field (KEYS, DWordAcc, NoLock, Preserve) + { + Offset (0x84), + PSAT, 32, + } + + // Put controller in D0 state + Method (_PS0, 0, Serialized) + { + And (^PSAT, 0xfffffffc, ^PSAT) + Store (^PSAT, Local0) + } + + // Put controller in D3Hot state + Method (_PS3, 0, Serialized) + { + Or (^PSAT, 0x00000003, ^PSAT) + Store (^PSAT, Local0) + } } Device (I2C1) @@ -262,6 +284,28 @@ Device (I2C1) Return (0xF) } } + + // Access to PCI Config in ACPI mode + OperationRegion (KEYS, SystemMemory, \S2B1, 0x100) + Field (KEYS, DWordAcc, NoLock, Preserve) + { + Offset (0x84), + PSAT, 32, + } + + // Put controller in D0 state + Method (_PS0, 0, Serialized) + { + And (^PSAT, 0xfffffffc, ^PSAT) + Store (^PSAT, Local0) + } + + // Put controller in D3Hot state + Method (_PS3, 0, Serialized) + { + Or (^PSAT, 0x00000003, ^PSAT) + Store (^PSAT, Local0) + } } Device (SPI0) diff --git a/src/southbridge/intel/lynxpoint/serialio.c b/src/southbridge/intel/lynxpoint/serialio.c index 8257cc2f6f..75edf5c9db 100644 --- a/src/southbridge/intel/lynxpoint/serialio.c +++ b/src/southbridge/intel/lynxpoint/serialio.c @@ -29,14 +29,6 @@ #include "pch.h" #include "nvs.h" -/* Set D3Hot Power State in ACPI mode */ -static void serialio_enable_d3hot(struct device *dev) -{ - u32 reg32 = pci_read_config32(dev, PCH_PCS); - reg32 |= PCH_PCS_PS_D3HOT; - pci_write_config32(dev, PCH_PCS, reg32); -} - /* Enable clock in PCI mode */ static void serialio_enable_clock(struct resource *bar0) { @@ -178,8 +170,6 @@ static void serialio_init(struct device *dev) if (!config->sio_acpi_mode) serialio_enable_clock(bar0); - else if (dev->path.pci.devfn != PCI_DEVFN(21, 0)) - serialio_enable_d3hot(dev); /* all but SDMA */ switch (dev->path.pci.devfn) { case PCI_DEVFN(21, 0): /* SDMA */