Control: tag -1 upstream patch moreinfo On Sun, 2016-05-01 at 14:58 +0200, CJP wrote: [...] > I searched for the error message on the internet, and found the following > discussion: > https://bugzilla.kernel.org/show_bug.cgi?id=114201 > > I followed the advice of adding the following kernel boot argument to the 4.5 > boot command line: > > modprobe.blacklist=sp5100_tco
Thank you very much for researching this. [...] > While the boot argument solves the problem for me, I think there should be a > solution that lets this package work "out of the box", without requiring such > tweaks by the system maintainer. [...] Of course. It looks like we can do that by reverting the change that caused this regression. Please test whether the attached patch fixes the problem, following the instructions at: https://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official Ben. -- Ben Hutchings Life is what happens to you while you're busy making other plans. - John Lennon
From: Ben Hutchings <b...@decadent.org.uk> Date: Mon, 2 May 2016 21:15:00 +0200 Subject: Revert "sp5100_tco: fix the device check for SB800 and later chipsets" Bug: https://bugzilla.kernel.org/show_bug.cgi?id=114201 Bug-Debian: https://bugs.debian.org/823146 This reverts commit bdecfcdb5461834aab24002bb18d3cbdd907b7fb, which caused log flooding and hung CPUs on some systems. --- drivers/watchdog/sp5100_tco.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/watchdog/sp5100_tco.c b/drivers/watchdog/sp5100_tco.c index 6467b91f2245..0ccadb44b609 100644 --- a/drivers/watchdog/sp5100_tco.c +++ b/drivers/watchdog/sp5100_tco.c @@ -335,24 +335,21 @@ static unsigned char sp5100_tco_setupdevice(void) if (!sp5100_tco_pci) return 0; - pr_info("PCI Vendor ID: 0x%x, Device ID: 0x%x, Revision ID: 0x%x\n", - sp5100_tco_pci->vendor, sp5100_tco_pci->device, - sp5100_tco_pci->revision); + pr_info("PCI Revision ID: 0x%x\n", sp5100_tco_pci->revision); /* * Determine type of southbridge chipset. */ - if (sp5100_tco_pci->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && - sp5100_tco_pci->revision < 0x40) { - dev_name = SP5100_DEVNAME; - index_reg = SP5100_IO_PM_INDEX_REG; - data_reg = SP5100_IO_PM_DATA_REG; - base_addr = SP5100_PM_WATCHDOG_BASE; - } else { + if (sp5100_tco_pci->revision >= 0x40) { dev_name = SB800_DEVNAME; index_reg = SB800_IO_PM_INDEX_REG; data_reg = SB800_IO_PM_DATA_REG; base_addr = SB800_PM_WATCHDOG_BASE; + } else { + dev_name = SP5100_DEVNAME; + index_reg = SP5100_IO_PM_INDEX_REG; + data_reg = SP5100_IO_PM_DATA_REG; + base_addr = SP5100_PM_WATCHDOG_BASE; } /* Request the IO ports used by this driver */ @@ -388,12 +385,7 @@ static unsigned char sp5100_tco_setupdevice(void) * Secondly, Find the watchdog timer MMIO address * from SBResource_MMIO register. */ - if (sp5100_tco_pci->device == PCI_DEVICE_ID_ATI_SBX00_SMBUS && - sp5100_tco_pci->revision < 0x40) { - /* Read SBResource_MMIO from PCI config(PCI_Reg: 9Ch) */ - pci_read_config_dword(sp5100_tco_pci, - SP5100_SB_RESOURCE_MMIO_BASE, &val); - } else { + if (sp5100_tco_pci->revision >= 0x40) { /* Read SBResource_MMIO from AcpiMmioEn(PM_Reg: 24h) */ outb(SB800_PM_ACPI_MMIO_EN+3, SB800_IO_PM_INDEX_REG); val = inb(SB800_IO_PM_DATA_REG); @@ -403,6 +395,10 @@ static unsigned char sp5100_tco_setupdevice(void) val = val << 8 | inb(SB800_IO_PM_DATA_REG); outb(SB800_PM_ACPI_MMIO_EN+0, SB800_IO_PM_INDEX_REG); val = val << 8 | inb(SB800_IO_PM_DATA_REG); + } else { + /* Read SBResource_MMIO from PCI config(PCI_Reg: 9Ch) */ + pci_read_config_dword(sp5100_tco_pci, + SP5100_SB_RESOURCE_MMIO_BASE, &val); } /* The SBResource_MMIO is enabled and mapped memory space? */
signature.asc
Description: This is a digitally signed message part