2004-11-15 08:36:57

by Shaohua Li

[permalink] [raw]
Subject: [PATCH]eepro100 resume failure

Hi,
After resume from S3, eepro100 driver reported some errors and stop working in my Toshiba
laptop. Below patch fixes it.

Thanks,
Shaohua


Signed-off-by: Li Shaohua<[email protected]>
---

2.6-root/drivers/net/eepro100.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletion(-)

diff -puN drivers/net/eepro100.c~eepro100-pm drivers/net/eepro100.c
--- 2.6/drivers/net/eepro100.c~eepro100-pm 2004-11-15 16:06:22.500880880 +0800
+++ 2.6-root/drivers/net/eepro100.c 2004-11-15 16:16:43.057541928 +0800
@@ -2327,7 +2327,7 @@ static int eepro100_suspend(struct pci_d
netif_device_detach(dev);
outl(PortPartialReset, ioaddr + SCBPort);

- /* XXX call pci_set_power_state ()? */
+ pci_set_power_state (pdev, 3);
return 0;
}

@@ -2337,7 +2337,12 @@ static int eepro100_resume(struct pci_de
struct speedo_private *sp = netdev_priv(dev);
long ioaddr = dev->base_addr;

+ pci_set_power_state(pdev, 0);
pci_restore_state(pdev);
+ if (pdev->is_enabled)
+ pci_enable_device(pdev);
+ if (pdev->is_busmaster)
+ pci_set_master(pdev);

if (!netif_running(dev))
return 0;
_


Attachments:
eepro100-pm.patch (905.00 B)

2004-11-15 08:43:59

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH]eepro100 resume failure



>
> @@ -2337,7 +2337,12 @@ static int eepro100_resume(struct pci_de
> struct speedo_private *sp = netdev_priv(dev);
> long ioaddr = dev->base_addr;
>
> + pci_set_power_state(pdev, 0);
> pci_restore_state(pdev);
> + if (pdev->is_enabled)
> + pci_enable_device(pdev);
> + if (pdev->is_busmaster)
> + pci_set_master(pdev);

this is wrong; the driver should KNOW the device is enabled; no reason
to check for is_enabled. Same for is_busmaster...


2004-11-15 08:53:23

by Shaohua Li

[permalink] [raw]
Subject: Re: [PATCH]eepro100 resume failure

On Mon, 2004-11-15 at 16:43, Arjan van de Ven wrote:
> >
> > @@ -2337,7 +2337,12 @@ static int eepro100_resume(struct pci_de
> > struct speedo_private *sp = netdev_priv(dev);
> > long ioaddr = dev->base_addr;
> >
> > + pci_set_power_state(pdev, 0);
> > pci_restore_state(pdev);
> > + if (pdev->is_enabled)
> > + pci_enable_device(pdev);
> > + if (pdev->is_busmaster)
> > + pci_set_master(pdev);
>
> this is wrong; the driver should KNOW the device is enabled; no reason
> to check for is_enabled. Same for is_busmaster...
Oh, yes. The check isn't required. Updated one.

Thanks,
Shaohua

---

2.6-root/drivers/net/eepro100.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletion(-)

diff -puN drivers/net/eepro100.c~eepro100-pm drivers/net/eepro100.c
--- 2.6/drivers/net/eepro100.c~eepro100-pm 2004-11-15 16:06:22.500880880 +0800
+++ 2.6-root/drivers/net/eepro100.c 2004-11-15 16:40:47.211997080 +0800
@@ -2327,7 +2327,8 @@ static int eepro100_suspend(struct pci_d
netif_device_detach(dev);
outl(PortPartialReset, ioaddr + SCBPort);

- /* XXX call pci_set_power_state ()? */
+ pci_disable_device(pdev);
+ pci_set_power_state (pdev, 3);
return 0;
}

@@ -2337,7 +2338,10 @@ static int eepro100_resume(struct pci_de
struct speedo_private *sp = netdev_priv(dev);
long ioaddr = dev->base_addr;

+ pci_set_power_state(pdev, 0);
pci_restore_state(pdev);
+ pci_enable_device(pdev);
+ pci_set_master(pdev);

if (!netif_running(dev))
return 0;
_


Attachments:
eepro100-pm.patch (880.00 B)

2004-11-15 08:58:12

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH]eepro100 resume failure


> + pci_set_power_state(pdev, 0);
> pci_restore_state(pdev);
> + pci_enable_device(pdev);
> + pci_set_master(pdev);
>

one more nitpick; pci_enable_device() already calls
pci_set_power_state()... isn't that double up now ?

2004-11-15 09:02:04

by Shaohua Li

[permalink] [raw]
Subject: Re: [PATCH]eepro100 resume failure

On Mon, 2004-11-15 at 16:58, Arjan van de Ven wrote:
> > + pci_set_power_state(pdev, 0);
> > pci_restore_state(pdev);
> > + pci_enable_device(pdev);
> > + pci_set_master(pdev);
> >
>
> one more nitpick; pci_enable_device() already calls
> pci_set_power_state()... isn't that double up now ?
>
I think 'pci_restore_state' should be called after
'pci_set_power_state'.

Thanks,
Shaohua