diff mbox

[linux-pm] "i8042: Can't reactivate AUX port" after s2ram on 3.4-rc2

Message ID 201204161817.21800.rjw@sisk.pl
State Superseded, archived
Headers show

Commit Message

Rafael J. Wysocki April 16, 2012, 4:17 p.m. UTC
On Monday, April 16, 2012, Mikko Vinni wrote:
> From: Rafael J. Wysocki
> 
> >>  OK, I know.  There simply are fewer BARs for bridges (and PCIe ports)
> >>  and here we're attempting to overwrite the secondary status register.  
> > Sigh.
> >> 
> >>  Well, I guess we should only retry the writes to BARs for Type 0 headers.
> > 
> > Which is done by the appended updated patch.  Can you please give it a try?
> 
> 
> Ok, I tested v4 and also v3, which is in 3.4-rc3. On this laptop both versions
> work equally: touchpad works after resume (no help for the card reader
> problem, though).

[...]

> Difference from v3:
> --- /tmp/v3-uniq        2012-04-16 09:57:42.880521878 +0300
> +++ /tmp/v4-uniq        2012-04-16 09:58:03.880545386 +0300
> @@ -1019,11 +1018,11 @@
>        1 Booting Node 0 Processor 1 APIC 0x1
>        1 CPU1 is up
>        1 ACPI: Waking up from system sleep state S3
> -     11 pcieport 0000:00:02.0: restoring config space at offset 0x1c (was 0x20005151, writing 0x5151)
> +      1 pcieport 0000:00:02.0: restoring config space at offset 0x1c (was 0x20005151, writing 0x5151)

OK, so clearly we need to prevent the writes into the secondary status register
of the PCIe port from being repreated pointlessly.

Can you please test the appended patch from completness on top of 3.4-rc3?

Rafael


---
 drivers/pci/pci.c |   18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

--
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

Comments

Mikko Vinni April 16, 2012, 6:57 p.m. UTC | #1
From: Rafael J. Wysocki:

>>  Ok, I tested v4 and also v3, which is in 3.4-rc3. On this laptop both 
> versions
>>  work equally: touchpad works after resume (no help for the card reader
>>  problem, though).
> 
> [...]
> 
>>  Difference from v3:
>>  --- /tmp/v3-uniq        2012-04-16 09:57:42.880521878 +0300
>>  +++ /tmp/v4-uniq        2012-04-16 09:58:03.880545386 +0300
>>  @@ -1019,11 +1018,11 @@
>>         1 Booting Node 0 Processor 1 APIC 0x1
>>         1 CPU1 is up
>>         1 ACPI: Waking up from system sleep state S3
>>  -     11 pcieport 0000:00:02.0: restoring config space at offset 0x1c (was 
> 0x20005151, writing 0x5151)
>>  +      1 pcieport 0000:00:02.0: restoring config space at offset 0x1c (was 
> 0x20005151, writing 0x5151)
> 
> OK, so clearly we need to prevent the writes into the secondary status register
> of the PCIe port from being repreated pointlessly.
> 
> Can you please test the appended patch from completness on top of 3.4-rc3?

I think that's what I did already :)

git pull to 3.4-rc3
(test, result as v3 output/diff in the previous email)
Revert "PCI: Fix regression in pci_restore_state(), v3"
apply v4 of the patch
(test, result as v4 output in the previous email)
git diff v3.4-rc3 -- drivers/pci/pci.c --> matches the patch below


Mikko


> 
> Rafael
> 
> 
> ---
> drivers/pci/pci.c |   18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
> 
> Index: linux/drivers/pci/pci.c
> ===================================================================
> --- linux.orig/drivers/pci/pci.c
> +++ linux/drivers/pci/pci.c
> @@ -1015,13 +1015,17 @@ void pci_restore_state(struct pci_dev *d
>     pci_restore_pcie_state(dev);
>     pci_restore_ats_state(dev);
> 
> -    pci_restore_config_space(dev, 10, 15, 0);
> -    /*
> -     * The Base Address register should be programmed before the command
> -     * register(s)
> -     */
> -    pci_restore_config_space(dev, 4, 9, 10);
> -    pci_restore_config_space(dev, 0, 3, 0);
> +    if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) {
> +        pci_restore_config_space(dev, 10, 15, 0);
> +        /*
> +         * The Base Address register should be programmed before the
> +         * command register(s)
> +         */
> +        pci_restore_config_space(dev, 4, 9, 10);
> +        pci_restore_config_space(dev, 0, 3, 0);
> +    } else {
> +        pci_restore_config_space(dev, 0, 15, 0);
> +    }
> 
>     pci_restore_pcix_state(dev);
>     pci_restore_msi_state(dev);
> 
--
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
Rafael J. Wysocki April 16, 2012, 7:59 p.m. UTC | #2
On Monday, April 16, 2012, Mikko Vinni wrote:
> From: Rafael J. Wysocki:
> 
> >>  Ok, I tested v4 and also v3, which is in 3.4-rc3. On this laptop both 
> > versions
> >>  work equally: touchpad works after resume (no help for the card reader
> >>  problem, though).
> > 
> > [...]
> > 
> >>  Difference from v3:
> >>  --- /tmp/v3-uniq        2012-04-16 09:57:42.880521878 +0300
> >>  +++ /tmp/v4-uniq        2012-04-16 09:58:03.880545386 +0300
> >>  @@ -1019,11 +1018,11 @@
> >>         1 Booting Node 0 Processor 1 APIC 0x1
> >>         1 CPU1 is up
> >>         1 ACPI: Waking up from system sleep state S3
> >>  -     11 pcieport 0000:00:02.0: restoring config space at offset 0x1c (was 
> > 0x20005151, writing 0x5151)
> >>  +      1 pcieport 0000:00:02.0: restoring config space at offset 0x1c (was 
> > 0x20005151, writing 0x5151)
> > 
> > OK, so clearly we need to prevent the writes into the secondary status register
> > of the PCIe port from being repreated pointlessly.
> > 
> > Can you please test the appended patch from completness on top of 3.4-rc3?
> 
> I think that's what I did already :)
> 
> git pull to 3.4-rc3
> (test, result as v3 output/diff in the previous email)
> Revert "PCI: Fix regression in pci_restore_state(), v3"
> apply v4 of the patch
> (test, result as v4 output in the previous email)
> git diff v3.4-rc3 -- drivers/pci/pci.c --> matches the patch below

Well, that's correct. :-)

Thanks a lot anyway,
Rafael
--
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
diff mbox

Patch

Index: linux/drivers/pci/pci.c
===================================================================
--- linux.orig/drivers/pci/pci.c
+++ linux/drivers/pci/pci.c
@@ -1015,13 +1015,17 @@  void pci_restore_state(struct pci_dev *d
 	pci_restore_pcie_state(dev);
 	pci_restore_ats_state(dev);
 
-	pci_restore_config_space(dev, 10, 15, 0);
-	/*
-	 * The Base Address register should be programmed before the command
-	 * register(s)
-	 */
-	pci_restore_config_space(dev, 4, 9, 10);
-	pci_restore_config_space(dev, 0, 3, 0);
+	if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) {
+		pci_restore_config_space(dev, 10, 15, 0);
+		/*
+		 * The Base Address register should be programmed before the
+		 * command register(s)
+		 */
+		pci_restore_config_space(dev, 4, 9, 10);
+		pci_restore_config_space(dev, 0, 3, 0);
+	} else {
+		pci_restore_config_space(dev, 0, 15, 0);
+	}
 
 	pci_restore_pcix_state(dev);
 	pci_restore_msi_state(dev);