ACPI no longer raises SCI IRQ if the overall SCI enable bit is clear, fixes #3810.
This commit is contained in:
@@ -124,7 +124,7 @@ acpi_update_irq(acpi_t *dev)
|
||||
if (dev->vendor == VEN_SMC)
|
||||
sci_level |= (dev->regs.pmsts & BM_STS);
|
||||
|
||||
if (sci_level) {
|
||||
if ((dev->regs.pmcntrl & 0x01) && sci_level) {
|
||||
if (dev->irq_mode == 1)
|
||||
pci_set_irq(dev->slot, dev->irq_pin, &dev->irq_state);
|
||||
else if (dev->irq_mode == 2)
|
||||
@@ -658,6 +658,7 @@ acpi_reg_write_common_regs(UNUSED(int size), uint16_t addr, uint8_t val, void *p
|
||||
acpi_t *dev = (acpi_t *) priv;
|
||||
int shift16;
|
||||
int sus_typ;
|
||||
uint8_t old;
|
||||
|
||||
addr &= 0x3f;
|
||||
#ifdef ENABLE_ACPI_LOG
|
||||
@@ -684,6 +685,7 @@ acpi_reg_write_common_regs(UNUSED(int size), uint16_t addr, uint8_t val, void *p
|
||||
case 0x04:
|
||||
case 0x05:
|
||||
/* PMCNTRL - Power Management Control Register (IO) */
|
||||
old = dev->regs.pmcntrl & 0xff;
|
||||
if ((addr == 0x05) && (val & 0x20)) {
|
||||
sus_typ = dev->suspend_types[(val >> 2) & 7];
|
||||
acpi_log("ACPI suspend type %d flags %02X\n", (val >> 2) & 7, sus_typ);
|
||||
@@ -726,6 +728,8 @@ acpi_reg_write_common_regs(UNUSED(int size), uint16_t addr, uint8_t val, void *p
|
||||
}
|
||||
}
|
||||
dev->regs.pmcntrl = ((dev->regs.pmcntrl & ~(0xff << shift16)) | (val << shift16)) & 0x3f07 /* 0x3c07 */;
|
||||
if ((addr == 0x04) && ((old ^ val) & 0x01))
|
||||
acpi_update_irq(dev);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -789,7 +793,7 @@ acpi_reg_write_ali(int size, uint16_t addr, uint8_t val, void *priv)
|
||||
dev->regs.gpcntrl = ((dev->regs.gpcntrl & ~(0xff << shift32)) | (val << shift32)) & 0x00000001;
|
||||
break;
|
||||
case 0x30:
|
||||
/* PM2_CNTRL - Power Management 2 Control Register( */
|
||||
/* PM2_CNTRL - Power Management 2 Control Register */
|
||||
dev->regs.pmcntrl = val & 1;
|
||||
break;
|
||||
default:
|
||||
|
Reference in New Issue
Block a user