2006-01-19 09:30:39

by David Luyer

[permalink] [raw]
Subject: SKY2 driver - version 0.13 - buggy but working

Your new SKY2 driver in the latest 2.6.16-rc1 snapshots does millions
of printk()s (approximately 230,000 per second) ... but works!

Motherboard: A7V-E SE (onboard Marvel GE)
OS: Linux current snapshot (2.6.16-rc1-g0f36b018), 32-bit on AMD64
PCI options: ACPI, PCI, PCI Express, MSI enabled

dmesg|egrep 'sky2|messages suppressed':

sky2 v0.13 addr 0xdc000000 irq 66 Yukon-EC (0xb6) rev 2
sky2 eth0: addr 00:13:d4:f6:be:52
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
sky2 0000:05:00.0: pci express error (0x0)
printk: 1144326 messages suppressed.
sky2 0000:05:00.0: pci express error (0x0)
printk: 1141162 messages suppressed.
sky2 0000:05:00.0: pci express error (0x0)
printk: 1122566 messages suppressed.
sky2 0000:05:00.0: pci express error (0x0)
printk: 1125246 messages suppressed.
sky2 0000:05:00.0: pci express error (0x0)
printk: 1124271 messages suppressed.
sky2 0000:05:00.0: pci express error (0x0)
printk: 1130645 messages suppressed.

David.
--
Pacific Internet (Australia) Pty Ltd
Business card: http://www.luyer.net/bc.html
Important notice: http://www.pacific.net.au/disclaimer/


2006-01-19 11:07:13

by Daniel Drake

[permalink] [raw]
Subject: Re: SKY2 driver - version 0.13 - buggy but working

David Luyer wrote:
> Your new SKY2 driver in the latest 2.6.16-rc1 snapshots does millions
> of printk()s (approximately 230,000 per second) ... but works!
>
> Motherboard: A7V-E SE (onboard Marvel GE)
> OS: Linux current snapshot (2.6.16-rc1-g0f36b018), 32-bit on AMD64
> PCI options: ACPI, PCI, PCI Express, MSI enabled
>
> dmesg|egrep 'sky2|messages suppressed':
>
> sky2 v0.13 addr 0xdc000000 irq 66 Yukon-EC (0xb6) rev 2
> sky2 eth0: addr 00:13:d4:f6:be:52
> sky2 0000:05:00.0: pci express error (0x0)

Can you see if this patch makes any difference?

Thanks.


Attachments:
sky2-error-reporting.patch (6.50 kB)

2006-01-25 06:02:32

by Stephen Hemminger

[permalink] [raw]
Subject: [RFT] sky2: pci express error fix

For all those people suffering with pci express errors
on the sky2 driver. The problem is the PCI subsystem sometimes
won't let the sky2 driver write to PCI express registers. It depends
on the phase of the moon (actually ACPI) and number of devices.

Anyway, this should fix it. Please tell me if it solves it for you.


--- sky2-2.6.orig/drivers/net/sky2.c
+++ sky2-2.6/drivers/net/sky2.c
@@ -2003,19 +2003,16 @@ static void sky2_hw_intr(struct sky2_hw

if (status & Y2_IS_PCI_EXP) {
/* PCI-Express uncorrectable Error occurred */
- u32 pex_err;
-
- pci_read_config_dword(hw->pdev, PEX_UNC_ERR_STAT, &pex_err);
+ u32 pex_err = sky2_read32(hw, PCI_C(PEX_UNC_ERR_STAT));

if (net_ratelimit())
printk(KERN_ERR PFX "%s: pci express error (0x%x)\n",
pci_name(hw->pdev), pex_err);

/* clear the interrupt */
- sky2_write32(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
- pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
- 0xffffffffUL);
- sky2_write32(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+ sky2_write32(hw, PCI_CI(PEX_UNC_ERR_STAT), 0xffffffffUL);
+ sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);

if (pex_err & PEX_FATAL_ERRORS) {
u32 hwmsk = sky2_read32(hw, B0_HWE_IMSK);
@@ -2181,12 +2178,8 @@ static int sky2_reset(struct sky2_hw *hw
sky2_write8(hw, B0_CTST, CS_MRST_CLR);

/* clear any PEX errors */
- if (is_pciex(hw)) {
- u16 lstat;
- pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
- 0xffffffffUL);
- pci_read_config_word(hw->pdev, PEX_LNK_STAT, &lstat);
- }
+ if (pci_find_capability(hw->pdev, PCI_CAP_ID_EXP))
+ sky2_write32(hw, PCI_C(PEX_UNC_ERR_STAT), 0xffffffffUL);

pmd_type = sky2_read8(hw, B2_PMD_TYP);
hw->copper = !(pmd_type == 'L' || pmd_type == 'S');
--- sky2-2.6.orig/drivers/net/sky2.h
+++ sky2-2.6/drivers/net/sky2.h
@@ -183,6 +183,12 @@ enum csr_regs {
Y2_CFG_SPC = 0x1c00,
};

+/* Workaround for ACPI limitations in pci support.
+ * Sometimes it is impossible to access registers > 256 with
+ * pci_{read/write}_config_dword
+ */
+#define PCI_C(reg) (Y2_CFG_SPC + reg)
+
/* B0_CTST 16 bit Control/Status register */
enum {
Y2_VMAIN_AVAIL = 1<<17,/* VMAIN available (YUKON-2 only) */

2006-01-26 16:13:00

by Kalin KOZHUHAROV

[permalink] [raw]
Subject: Re: [RFT] sky2: pci express error fix

Stephen Hemminger wrote:
> For all those people suffering with pci express errors
> on the sky2 driver. The problem is the PCI subsystem sometimes
> won't let the sky2 driver write to PCI express registers. It depends
> on the phase of the moon (actually ACPI) and number of devices.
>
> Anyway, this should fix it. Please tell me if it solves it for you.

Can you describe the bug a bit more? What happens?

I had a few times something like this:

[ 24.145040] sky2 eth0: phy interrupt status 0x1c40 0xbc0c

[ 3647.341757] sky2 eth0: phy interrupt status 0x1c40 0xbc4c

after which all network was dead. (and it wasn't a module so had to
restart). As you can see from the above two logs, sometimes it failed on
boot, sometimes after an hour. Sourry, I didn't remember the phase of the
moon, but I can check :-)

I have two Asus P5GDC-V Deluxe boards, with these chips. One of them is
happily working with sk98lin (the binary one), the other is dying miserably,
so now I use r8169 card to be able to isolate the problem (separate mail).

Kalin.

>
>
> --- sky2-2.6.orig/drivers/net/sky2.c
> +++ sky2-2.6/drivers/net/sky2.c
> @@ -2003,19 +2003,16 @@ static void sky2_hw_intr(struct sky2_hw
>
> if (status & Y2_IS_PCI_EXP) {
> /* PCI-Express uncorrectable Error occurred */
> - u32 pex_err;
> -
> - pci_read_config_dword(hw->pdev, PEX_UNC_ERR_STAT, &pex_err);
> + u32 pex_err = sky2_read32(hw, PCI_C(PEX_UNC_ERR_STAT));
>
> if (net_ratelimit())
> printk(KERN_ERR PFX "%s: pci express error (0x%x)\n",
> pci_name(hw->pdev), pex_err);
>
> /* clear the interrupt */
> - sky2_write32(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
> - pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
> - 0xffffffffUL);
> - sky2_write32(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
> + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
> + sky2_write32(hw, PCI_CI(PEX_UNC_ERR_STAT), 0xffffffffUL);
> + sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
>
> if (pex_err & PEX_FATAL_ERRORS) {
> u32 hwmsk = sky2_read32(hw, B0_HWE_IMSK);
> @@ -2181,12 +2178,8 @@ static int sky2_reset(struct sky2_hw *hw
> sky2_write8(hw, B0_CTST, CS_MRST_CLR);
>
> /* clear any PEX errors */
> - if (is_pciex(hw)) {
> - u16 lstat;
> - pci_write_config_dword(hw->pdev, PEX_UNC_ERR_STAT,
> - 0xffffffffUL);
> - pci_read_config_word(hw->pdev, PEX_LNK_STAT, &lstat);
> - }
> + if (pci_find_capability(hw->pdev, PCI_CAP_ID_EXP))
> + sky2_write32(hw, PCI_C(PEX_UNC_ERR_STAT), 0xffffffffUL);
>
> pmd_type = sky2_read8(hw, B2_PMD_TYP);
> hw->copper = !(pmd_type == 'L' || pmd_type == 'S');
> --- sky2-2.6.orig/drivers/net/sky2.h
> +++ sky2-2.6/drivers/net/sky2.h
> @@ -183,6 +183,12 @@ enum csr_regs {
> Y2_CFG_SPC = 0x1c00,
> };
>
> +/* Workaround for ACPI limitations in pci support.
> + * Sometimes it is impossible to access registers > 256 with
> + * pci_{read/write}_config_dword
> + */
> +#define PCI_C(reg) (Y2_CFG_SPC + reg)
> +
> /* B0_CTST 16 bit Control/Status register */
> enum {
> Y2_VMAIN_AVAIL = 1<<17,/* VMAIN available (YUKON-2 only) */


--
|[ ~~~~~~~~~~~~~~~~~~~~~~ ]|
+-> http://ThinRope.net/ <-+
|[ ______________________ ]|

2006-01-26 17:51:50

by Stephen Hemminger

[permalink] [raw]
Subject: Re: [RFT] sky2: pci express error fix

On Fri, 27 Jan 2006 01:11:20 +0900
Kalin KOZHUHAROV <[email protected]> wrote:

> Stephen Hemminger wrote:
> > For all those people suffering with pci express errors
> > on the sky2 driver. The problem is the PCI subsystem sometimes
> > won't let the sky2 driver write to PCI express registers. It depends
> > on the phase of the moon (actually ACPI) and number of devices.
> >
> > Anyway, this should fix it. Please tell me if it solves it for you.
>
> Can you describe the bug a bit more? What happens?
>
> I had a few times something like this:
>
> [ 24.145040] sky2 eth0: phy interrupt status 0x1c40 0xbc0c

>
> [ 3647.341757] sky2 eth0: phy interrupt status 0x1c40 0xbc4c
>

Looks like a noisy crappy cable causing PHY link status changes.


> after which all network was dead. (and it wasn't a module so had to
> restart). As you can see from the above two logs, sometimes it failed on
> boot, sometimes after an hour. Sourry, I didn't remember the phase of the
> moon, but I can check :-)
>
> I have two Asus P5GDC-V Deluxe boards, with these chips. One of them is
> happily working with sk98lin (the binary one), the other is dying miserably,
> so now I use r8169 card to be able to isolate the problem (separate mail).
>
>

2006-01-27 05:22:30

by Kalin KOZHUHAROV

[permalink] [raw]
Subject: Re: [RFT] sky2: pci express error fix

Stephen Hemminger wrote:
> On Fri, 27 Jan 2006 01:11:20 +0900
> Kalin KOZHUHAROV <[email protected]> wrote:
>
>> Stephen Hemminger wrote:
>>> For all those people suffering with pci express errors
>>> on the sky2 driver. The problem is the PCI subsystem sometimes
>>> won't let the sky2 driver write to PCI express registers. It depends
>>> on the phase of the moon (actually ACPI) and number of devices.
>>>
>>> Anyway, this should fix it. Please tell me if it solves it for you.
>> Can you describe the bug a bit more? What happens?
>>
>> I had a few times something like this:
>>
>> [ 24.145040] sky2 eth0: phy interrupt status 0x1c40 0xbc0c
>
>> [ 3647.341757] sky2 eth0: phy interrupt status 0x1c40 0xbc4c
>>
>
> Looks like a noisy crappy cable causing PHY link status changes.

I will check that particular cable on monday, but it *should* be CAT6 not
very cheap cable (Japanese brand: Elecom). In the worst case it is a CAT5e
from probably the same brand. (just because there are no other cables in the
office)

Can these errors be caused by bad hub?
>From what I've seen the network on this machine dies at the same time (not
sure before or after) as the error in dmesg.

>> after which all network was dead. (and it wasn't a module so had to
>> restart). As you can see from the above two logs, sometimes it failed on
>> boot, sometimes after an hour. Sourry, I didn't remember the phase of the
>> moon, but I can check :-)
>>
>> I have two Asus P5GDC-V Deluxe boards, with these chips. One of them is
>> happily working with sk98lin (the binary one), the other is dying miserably,
>> so now I use r8169 card to be able to isolate the problem (separate mail).
Forgot to post it, now it went under the subject:
libata errors in 2.6.15.1 ICH6 AHCI (SATA drive WD740GD)

Kalin.

--
|[ ~~~~~~~~~~~~~~~~~~~~~~ ]|
+-> http://ThinRope.net/ <-+
|[ ______________________ ]|

2006-02-02 15:25:35

by Ansgar Esztermann

[permalink] [raw]
Subject: Re: [RFT] sky2: pci express error fix

Stephen,

> For all those people suffering with pci express errors
> on the sky2 driver. The problem is the PCI subsystem sometimes
> won't let the sky2 driver write to PCI express registers. It depends
> on the phase of the moon (actually ACPI) and number of devices.
>
> Anyway, this should fix it. Please tell me if it solves it for you.

I've applied your patch to an -mm4 soure tree, and the error messages
did stop. Thanks!

BTW, I think there is a typo in this line:
+ sky2_write32(hw, PCI_CI(PEX_UNC_ERR_STAT), 0xffffffffUL);
(it should be PCI_C, not PCI_CI).

A.
--
Ansgar Esztermann
Researcher & Sysadmin
http://www2.thphy.uni-duesseldorf.de/~ansgar