Message ID | 1438047747.1856.12.camel@rzhang1-mobl4 (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWmhhbmcsIFJ1aQ0KPiBT ZW50OiBUdWVzZGF5LCBKdWx5IDI4LCAyMDE1IDk6NDIgQU0NCj4gVG86IGxpbnV4LXBjaTsgQmpv cm4gSGVsZ2Fhcw0KPiBDYzogTGl1LCBDaHVhbnNoZW5nOyBUZWp1biBIZW87IEFsYW4gU3Rlcm47 IEx1LCBBYXJvbjsNCj4gTXlNYWlsQ2xvbmVAdC1vbmxpbmUuZGU7IG1pc3Rlci5mcmVlbWFuQGxh cG9zdGUubmV0OyBaaGFuZywgUnVpOyBSYWZhZWwgSi4NCj4gV3lzb2NraQ0KPiBTdWJqZWN0OiBb UEFUQ0hdIFBDSTogRGlzYWJsZSBhc3luYyBzdXNwZW5kL3Jlc3VtZSBmb3IgSm1pY3JvbiBjaGlw DQo+IA0KPiBGcm9tIDU3ZWRiYTljNjc3ZTQ3MzU0ODQ2ZGI5NTEwMTRkYzRkNWIxM2NlNTQgTW9u IFNlcCAxNyAwMDowMDowMA0KPiAyMDAxDQo+IEZyb206IFpoYW5nIFJ1aSA8cnVpLnpoYW5nQGlu dGVsLmNvbT4NCj4gRGF0ZTogU3VuLCAyNiBKdWwgMjAxNSAxNDoxNTozNiArMDgwMA0KPiBTdWJq ZWN0OiBbUEFUQ0hdIFBDSTogRGlzYWJsZSBhc3luYyBzdXNwZW5kL3Jlc3VtZSBmb3IgSm1pY3Jv biBjaGlwDQo+IA0KPiBJbiBodHRwczovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dp P2lkPTgxNTUxLA0KPiB3ZSBmb3VuZCB0aGF0IEptaWNyb24gY2hpcCAzNjEvMzYzIGlzIGJyb2tl biBhZnRlciByZXN1bWUgaWYgYXN5bmMgbm9pcnENCj4gKDc2NTY5ZmFhNjIgKFBNIC8gc2xlZXA6 IEFzeW5jaHJvbm91cyB0aHJlYWRzIGZvciByZXN1bWVfbm9pcnEpKSBpcw0KPiBzdXBwb3J0ZWQs DQo+IHRodXMgY29tbWl0IGU2YjdlNDFjZGQgKGF0YTogRGlzYWJsaW5nIHRoZSBhc3luYyBQTSBm b3IgSk1pY3JvbiBjaGlwDQo+IDM2My8zNjEpDQo+IGlzIGludHJvZHVjZWQgdG8gZml4IHRoaXMg cHJvYmxlbS4NCj4gQnV0IHRoZW4sIHdlIGZvdW5kIHRoYXQgSm1pY3JvbiBjaGlwIDM2OCBhbHNv IGhhcyB0aGlzIHByb2JsZW0sIGFuZCBpdCBpcw0KPiBkZWNpZGVkDQo+IHRvIGRpc2FibGUgdGhl IHBtIGFzeW5jIGZlYXR1cmUgZm9yIGFsbCB0aGUgSm1pY3JvbiBjaGlwcy4NCj4gDQo+IEJ1dCBo b3cgdG8gZml4IHRoaXMgd2FzIGRpc2N1c3NlZCBpbiB0aGUgbWFpbGluZyBsaXN0IGZvciBzb21l IHRpbWUuDQo+IEFmdGVyIHNvbWUgaW52ZXN0aWdhdGlvbiwgd2UgYmVsaWV2ZSB0aGF0IGEgcHJv cGVyIGZpeCBpcyB0byBkaXNhYmxlDQo+IHRoZSBhc3luYyBQTSBpbiBQQ0kgaW5zdGVhZCBvZiBh dGEgZHJpdmVyLCBiZWNhdXNlLCBvbiB0aGlzIHBsYXRmb3JtLA0KPiBwY2lfcmVzdW1lX25vaXJx KCkgb2YgSURFIGNvbnRyb2xsZXIgbXVzdCBoYXBwZW4gYWZ0ZXIgcGNpX3Jlc3VtZV9ub2lycSgp DQo+IG9mIEFIQ0kgY29udHJvbGxlci4gQnV0IGFzIC5yZXN1bWVfbm9pcnEoKSBvZiB0aGUgcGF0 YV9qbWljcm9uIGRyaXZlciBpcw0KPiBuby1vcCwgdGhpcyBzdWdnZXN0cyB0aGF0IGl0IGlzIHRo ZSBQQ0kgY29tbW9uIGFjdGlvbnMsIGFrYSwNCj4gcGNpX3BtX2RlZmF1bHRfcmVzdW1lX2Vhcmx5 KCksIGhhdmUgdGhlIGRlcGVuZGVuY3kuDQo+IFRvIGZpeCB0aGlzLCB1c2luZyBkZXZpY2VfcG1f d2FpdF9mb3JfZGV2KCkgaW4gcGF0YV9qbWljcm9uIGRyaXZlciBjYW4gbm90DQo+IHNvbHZlIHRo ZSBkZXBlbmRlbmN5IGJlY2F1c2UgcGNpX3BtX2RlZmF1bHRfcmVzdW1lX2Vhcmx5KCkgaXMgaW52 b2tlZA0KPiBiZWZvcmUNCj4gZHJpdmVyIGNhbGxiYWNrIGJlaW5nIGludm9rZWQsIHBsdXMsIGFz IGl0IGlzIHRoZSBQQ0kgY29tbW9uIGFjdGlvbnMgdGhhdA0KPiBoYXZlIHRoZSBkZXBlbmRlbmN5 LCBpdCBpcyByZWFzb25hYmxlIHRvIGZpeCBpdCBpbiBQQ0kgYnVzIGNvZGUsDQo+IHJhdGhlciB0 aGFuIGRyaXZlciBjb2RlLg0KPiANCj4gVGhpcyBwYXRjaCBpcyBtYWRlIGJhc2VkIG9uIHRoZSBw YXRjaCBmcm9tIExpdSBDaHVhbnNoZW5nIGF0DQo+IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDE0 LzEyLzUvNzQNCj4gaXQgcmV2ZXJ0cyBjb21taXQgZTZiN2U0MWNkZCAoImF0YTogRGlzYWJsaW5n IHRoZSBhc3luYyBQTSBmb3IgSk1pY3Jvbg0KPiBjaGlwIDM2My8zNjEiKSwgYW5kIGludHJvZHVj ZXMgYSBQQ0kgcXVpcmsgdG8gZGlzYWJsZSBhc3luYyBQTSBmb3IgSm1pY3Jvbg0KPiBjaGlwcy4N Cj4gDQo+IFJlZmVyZW5jZTogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNn aT9pZD04MTU1MQ0KPiBUZXN0ZWQtYnk6IEpheSA8TXlNYWlsQ2xvbmVAdC1vbmxpbmUuZGU+DQo+ IFRlc3RlZC1ieTogQmFydG8gPG1pc3Rlci5mcmVlbWFuQGxhcG9zdGUubmV0Pg0KPiBTaWduZWQt b2ZmLWJ5OiBaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+DQo+IC0tLQ0KDQpUaGFua3Mg UnVpLg0KDQpBY2tlZC1ieTogQ2h1YW5zaGVuZyBMaXUgPGNodWFuc2hlbmcubGl1QGludGVsLmNv bT4NCg0KDQoNCg0K -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 07/28/2015 09:42 AM, Zhang Rui wrote: > From 57edba9c677e47354846db951014dc4d5b13ce54 Mon Sep 17 00:00:00 2001 > From: Zhang Rui <rui.zhang@intel.com> > Date: Sun, 26 Jul 2015 14:15:36 +0800 > Subject: [PATCH] PCI: Disable async suspend/resume for Jmicron chip > > In https://bugzilla.kernel.org/show_bug.cgi?id=81551, > we found that Jmicron chip 361/363 is broken after resume if async noirq > (76569faa62 (PM / sleep: Asynchronous threads for resume_noirq)) is supported, > thus commit e6b7e41cdd (ata: Disabling the async PM for JMicron chip 363/361) > is introduced to fix this problem. > But then, we found that Jmicron chip 368 also has this problem, and it is decided > to disable the pm async feature for all the Jmicron chips. > > But how to fix this was discussed in the mailing list for some time. > After some investigation, we believe that a proper fix is to disable > the async PM in PCI instead of ata driver, because, on this platform, > pci_resume_noirq() of IDE controller must happen after pci_resume_noirq() > of AHCI controller. But as .resume_noirq() of the pata_jmicron driver is > no-op, this suggests that it is the PCI common actions, aka, > pci_pm_default_resume_early(), have the dependency. > To fix this, using device_pm_wait_for_dev() in pata_jmicron driver can not > solve the dependency because pci_pm_default_resume_early() is invoked before > driver callback being invoked, plus, as it is the PCI common actions that > have the dependency, it is reasonable to fix it in PCI bus code, > rather than driver code. > > This patch is made based on the patch from Liu Chuansheng at > https://lkml.org/lkml/2014/12/5/74 > it reverts commit e6b7e41cdd ("ata: Disabling the async PM for JMicron > chip 363/361"), and introduces a PCI quirk to disable async PM for Jmicron > chips. > > Reference: https://bugzilla.kernel.org/show_bug.cgi?id=81551 > Tested-by: Jay <MyMailClone@t-online.de> > Tested-by: Barto <mister.freeman@laposte.net> > Signed-off-by: Zhang Rui <rui.zhang@intel.com> Reviewed-by: Aaron Lu <aaron.lu@intel.com> -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jul 28, 2015 at 09:42:27AM +0800, Zhang Rui wrote: > From 57edba9c677e47354846db951014dc4d5b13ce54 Mon Sep 17 00:00:00 2001 > From: Zhang Rui <rui.zhang@intel.com> > Date: Sun, 26 Jul 2015 14:15:36 +0800 > Subject: [PATCH] PCI: Disable async suspend/resume for Jmicron chip > > In https://bugzilla.kernel.org/show_bug.cgi?id=81551, > we found that Jmicron chip 361/363 is broken after resume if async noirq > (76569faa62 (PM / sleep: Asynchronous threads for resume_noirq)) is supported, > thus commit e6b7e41cdd (ata: Disabling the async PM for JMicron chip 363/361) > is introduced to fix this problem. > But then, we found that Jmicron chip 368 also has this problem, and it is decided > to disable the pm async feature for all the Jmicron chips. > > But how to fix this was discussed in the mailing list for some time. > After some investigation, we believe that a proper fix is to disable > the async PM in PCI instead of ata driver, because, on this platform, > pci_resume_noirq() of IDE controller must happen after pci_resume_noirq() > of AHCI controller. But as .resume_noirq() of the pata_jmicron driver is > no-op, this suggests that it is the PCI common actions, aka, > pci_pm_default_resume_early(), have the dependency. > To fix this, using device_pm_wait_for_dev() in pata_jmicron driver can not > solve the dependency because pci_pm_default_resume_early() is invoked before > driver callback being invoked, plus, as it is the PCI common actions that > have the dependency, it is reasonable to fix it in PCI bus code, > rather than driver code. > > This patch is made based on the patch from Liu Chuansheng at > https://lkml.org/lkml/2014/12/5/74 > it reverts commit e6b7e41cdd ("ata: Disabling the async PM for JMicron > chip 363/361"), and introduces a PCI quirk to disable async PM for Jmicron > chips. > > Reference: https://bugzilla.kernel.org/show_bug.cgi?id=81551 > Tested-by: Jay <MyMailClone@t-online.de> > Tested-by: Barto <mister.freeman@laposte.net> > Signed-off-by: Zhang Rui <rui.zhang@intel.com> Acked-by: Tejun Heo <tj@kernel.org> > /* > + * For JMicron chips, we need to disable the async_suspend method, otherwise > + * they will hit the power-on issue when doing device resume, add one quick > + * solution to disable the async_suspend method. > + */ Maybe add a link to the bug report and/or discussion thread? Thanks.
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 7e62751..26bb40d 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c @@ -1451,18 +1451,6 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) else if (pdev->vendor == 0x177d && pdev->device == 0xa01c) ahci_pci_bar = AHCI_PCI_BAR_CAVIUM; - /* - * The JMicron chip 361/363 contains one SATA controller and one - * PATA controller,for powering on these both controllers, we must - * follow the sequence one by one, otherwise one of them can not be - * powered on successfully, so here we disable the async suspend - * method for these chips. - */ - if (pdev->vendor == PCI_VENDOR_ID_JMICRON && - (pdev->device == PCI_DEVICE_ID_JMICRON_JMB363 || - pdev->device == PCI_DEVICE_ID_JMICRON_JMB361)) - device_disable_async_suspend(&pdev->dev); - /* acquire resources */ rc = pcim_enable_device(pdev); if (rc) diff --git a/drivers/ata/pata_jmicron.c b/drivers/ata/pata_jmicron.c index 47e418b..4d1a5d2 100644 --- a/drivers/ata/pata_jmicron.c +++ b/drivers/ata/pata_jmicron.c @@ -143,18 +143,6 @@ static int jmicron_init_one (struct pci_dev *pdev, const struct pci_device_id *i }; const struct ata_port_info *ppi[] = { &info, NULL }; - /* - * The JMicron chip 361/363 contains one SATA controller and one - * PATA controller,for powering on these both controllers, we must - * follow the sequence one by one, otherwise one of them can not be - * powered on successfully, so here we disable the async suspend - * method for these chips. - */ - if (pdev->vendor == PCI_VENDOR_ID_JMICRON && - (pdev->device == PCI_DEVICE_ID_JMICRON_JMB363 || - pdev->device == PCI_DEVICE_ID_JMICRON_JMB361)) - device_disable_async_suspend(&pdev->dev); - return ata_pci_bmdma_init_one(pdev, ppi, &jmicron_sht, NULL, 0); } diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index e9fd0e9..7a348de 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -29,6 +29,21 @@ #include "pci.h" /* + * For JMicron chips, we need to disable the async_suspend method, otherwise + * they will hit the power-on issue when doing device resume, add one quick + * solution to disable the async_suspend method. + */ +static void pci_async_suspend_fixup(struct pci_dev *pdev) +{ + /* + * disabling the async_suspend method for JMicron chips to + * avoid device resuming issue. + */ + device_disable_async_suspend(&pdev->dev); +} +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, pci_async_suspend_fixup); + +/* * Decoding should be disabled for a PCI device during BAR sizing to avoid * conflict. But doing so may cause problems on host bridge and perhaps other * key system devices. For devices that need to have mmio decoding always-on,