Message ID | 1285583091-6738-1-git-send-email-ike.pan@canonical.com |
---|---|
State | Accepted |
Delegated to: | Leann Ogasawara |
Headers | show |
On 09/27/2010 06:24 PM, Ike Panhc wrote: > From: Len Brown <len.brown@intel.com> > > When the Lenovo Ideapad S10-3 is booted with HT enabled, > it hits a boot hang in the intel_idle driver. > > This occurs when entering ATM-C4 for the first time, > unless BM_STS is first cleared. > > acpi_idle doesn't see this because it first checks > and clears BM_STS, but it would hit the same hang > if that check were disabled. > > http://bugs.meego.com/show_bug.cgi?id=7093 > BugLink: http://launchpad.net/bugs/634702 > > Signed-off-by: Len Brown <len.brown@intel.com> > Signed-off-by: Ike Panhc <ike.pan@canonical.com> After cherry-picked 6ce9cd from mainline kernel and let intel_idle built-in. Maverick kernel boot and hang on Lenovo ideapad S10-3. Thanks for Len Brown who has the same report and find the solution. I have tried maverick-22.33 kernel and it boots failed on S10-3. After apply this patch it boots fine. This patch is available in the git repository at: git://kernel.ubuntu.com/ikepanhc/public.git lp634702
On 09/27/2010 04:24 AM, Ike Panhc wrote: > From: Len Brown<len.brown@intel.com> > > When the Lenovo Ideapad S10-3 is booted with HT enabled, > it hits a boot hang in the intel_idle driver. > > This occurs when entering ATM-C4 for the first time, > unless BM_STS is first cleared. > > acpi_idle doesn't see this because it first checks > and clears BM_STS, but it would hit the same hang > if that check were disabled. > > http://bugs.meego.com/show_bug.cgi?id=7093 > BugLink: http://launchpad.net/bugs/634702 > > Signed-off-by: Len Brown<len.brown@intel.com> > Signed-off-by: Ike Panhc<ike.pan@canonical.com> > --- > drivers/pci/quirks.c | 20 ++++++++++++++++++++ > 1 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index e28524e..2a73ceb 100644 > --- a/drivers/pci/quirks.c > +++ b/drivers/pci/quirks.c > @@ -150,6 +150,26 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_2, quirk_isa_d > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_3, quirk_isa_dma_hangs); > > /* > + * Intel NM10 "TigerPoint" LPC PM1a_STS.BM_STS must be clear > + * for some HT machines to use C4 w/o hanging. > + */ > +static void __devinit quirk_tigerpoint_bm_sts(struct pci_dev *dev) > +{ > + u32 pmbase; > + u16 pm1a; > + > + pci_read_config_dword(dev, 0x40,&pmbase); > + pmbase = pmbase& 0xff80; > + pm1a = inw(pmbase); > + > + if (pm1a& 0x10) { > + dev_info(&dev->dev, FW_BUG "TigerPoint LPC.BM_STS cleared\n"); > + outw(0x10, pmbase); > + } > +} > +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TGP_LPC, quirk_tigerpoint_bm_sts); > + > +/* > * Chipsets where PCI->PCI transfers vanish or hang > */ > static void __devinit quirk_nopcipci(struct pci_dev *dev) This looks like it should have had a 'Cc: stable@kernel.org'. I presume Len has sent this to Jesse Barnes as he is the PCI subsystem maintainer. Perhaps you could ask him to update the commit log with that Cc. Acked-by: Tim Gardner <tim.gardner@canonical.com>
On Mon, 2010-09-27 at 18:24 +0800, Ike Panhc wrote: > From: Len Brown <len.brown@intel.com> > > When the Lenovo Ideapad S10-3 is booted with HT enabled, > it hits a boot hang in the intel_idle driver. > > This occurs when entering ATM-C4 for the first time, > unless BM_STS is first cleared. > > acpi_idle doesn't see this because it first checks > and clears BM_STS, but it would hit the same hang > if that check were disabled. > > http://bugs.meego.com/show_bug.cgi?id=7093 > BugLink: http://launchpad.net/bugs/634702 > > Signed-off-by: Len Brown <len.brown@intel.com> > Signed-off-by: Ike Panhc <ike.pan@canonical.com> > --- > drivers/pci/quirks.c | 20 ++++++++++++++++++++ > 1 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index e28524e..2a73ceb 100644 > --- a/drivers/pci/quirks.c > +++ b/drivers/pci/quirks.c > @@ -150,6 +150,26 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_2, quirk_isa_d > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_3, quirk_isa_dma_hangs); > > /* > + * Intel NM10 "TigerPoint" LPC PM1a_STS.BM_STS must be clear > + * for some HT machines to use C4 w/o hanging. > + */ > +static void __devinit quirk_tigerpoint_bm_sts(struct pci_dev *dev) > +{ > + u32 pmbase; > + u16 pm1a; > + > + pci_read_config_dword(dev, 0x40, &pmbase); > + pmbase = pmbase & 0xff80; > + pm1a = inw(pmbase); > + > + if (pm1a & 0x10) { > + dev_info(&dev->dev, FW_BUG "TigerPoint LPC.BM_STS cleared\n"); > + outw(0x10, pmbase); > + } > +} > +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TGP_LPC, quirk_tigerpoint_bm_sts); > + > +/* > * Chipsets where PCI->PCI transfers vanish or hang > */ > static void __devinit quirk_nopcipci(struct pci_dev *dev) > -- > 1.7.1 > > I'm glad that this was tracked down to just having to clear the LPC Bus Master Status bit. Looks sane. Acked-by: Colin King <colin.king@canonical.com>
Applied to Maverick linux master. I intend for this patch to be included in the day 0 kernel upload, See LP Bug 647071. Thanks, Leann On Mon, 2010-09-27 at 18:24 +0800, Ike Panhc wrote: > From: Len Brown <len.brown@intel.com> > > When the Lenovo Ideapad S10-3 is booted with HT enabled, > it hits a boot hang in the intel_idle driver. > > This occurs when entering ATM-C4 for the first time, > unless BM_STS is first cleared. > > acpi_idle doesn't see this because it first checks > and clears BM_STS, but it would hit the same hang > if that check were disabled. > > http://bugs.meego.com/show_bug.cgi?id=7093 > BugLink: http://launchpad.net/bugs/634702 > > Signed-off-by: Len Brown <len.brown@intel.com> > Signed-off-by: Ike Panhc <ike.pan@canonical.com> > --- > drivers/pci/quirks.c | 20 ++++++++++++++++++++ > 1 files changed, 20 insertions(+), 0 deletions(-) > > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c > index e28524e..2a73ceb 100644 > --- a/drivers/pci/quirks.c > +++ b/drivers/pci/quirks.c > @@ -150,6 +150,26 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_2, quirk_isa_d > DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_3, quirk_isa_dma_hangs); > > /* > + * Intel NM10 "TigerPoint" LPC PM1a_STS.BM_STS must be clear > + * for some HT machines to use C4 w/o hanging. > + */ > +static void __devinit quirk_tigerpoint_bm_sts(struct pci_dev *dev) > +{ > + u32 pmbase; > + u16 pm1a; > + > + pci_read_config_dword(dev, 0x40, &pmbase); > + pmbase = pmbase & 0xff80; > + pm1a = inw(pmbase); > + > + if (pm1a & 0x10) { > + dev_info(&dev->dev, FW_BUG "TigerPoint LPC.BM_STS cleared\n"); > + outw(0x10, pmbase); > + } > +} > +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TGP_LPC, quirk_tigerpoint_bm_sts); > + > +/* > * Chipsets where PCI->PCI transfers vanish or hang > */ > static void __devinit quirk_nopcipci(struct pci_dev *dev) > -- > 1.7.1 > >
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index e28524e..2a73ceb 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -150,6 +150,26 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_2, quirk_isa_d DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_CBUS_3, quirk_isa_dma_hangs); /* + * Intel NM10 "TigerPoint" LPC PM1a_STS.BM_STS must be clear + * for some HT machines to use C4 w/o hanging. + */ +static void __devinit quirk_tigerpoint_bm_sts(struct pci_dev *dev) +{ + u32 pmbase; + u16 pm1a; + + pci_read_config_dword(dev, 0x40, &pmbase); + pmbase = pmbase & 0xff80; + pm1a = inw(pmbase); + + if (pm1a & 0x10) { + dev_info(&dev->dev, FW_BUG "TigerPoint LPC.BM_STS cleared\n"); + outw(0x10, pmbase); + } +} +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_TGP_LPC, quirk_tigerpoint_bm_sts); + +/* * Chipsets where PCI->PCI transfers vanish or hang */ static void __devinit quirk_nopcipci(struct pci_dev *dev)