From: Daniel Drake <dsd@gentoo.org>
To: David Luyer <david@luyer.net>
Cc: Stephen Hemminger <shemminger@osdl.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: SKY2 driver - version 0.13 - buggy but working
Date: Thu, 19 Jan 2006 11:07:40 +0000 [thread overview]
Message-ID: <43CF72FC.9060207@gentoo.org> (raw)
In-Reply-To: <200601190930.k0J9US4P009504@typhaon.pacific.net.au>
[-- Attachment #1: Type: text/plain, Size: 569 bytes --]
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.
[-- Attachment #2: sky2-error-reporting.patch --]
[-- Type: text/x-patch, Size: 6658 bytes --]
Date: Wed, 11 Jan 2006 15:37:01 -0800
From: Stephen Hemminger <shemminger@osdl.org>
To: "Dmitrij D. Czarkoff" <czarkoff@yandex.ru>, Daniel Drake
<dsd@gentoo.org>
Cc: netdev@vger.kernel.org
Subject: sky2: error reporting
Message-ID: <20060111153701.26d66526@dxpl.pdx.osdl.net>
In-Reply-To: <200601112116.46099.czarkoff@yandex.ru>
References: <200601112116.46099.czarkoff@yandex.ru>
X-Mailer: Sylpheed-Claws 1.9.100 (GTK+ 2.6.10; x86_64-redhat-linux-gnu)
X-Face: &@E+xe?c%:&e4D{>f1O<&U>2qwRREG5!}7R4;D<"NO^UI2mJ[eEOA2*3>(`Th.yP,VDPo9$
/`~cw![cmj~~jWe?AHY7D1S+\}5brN0k*NE?pPh_'_d>6;XGG[\KDRViCfumZT3@[
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
X-MIMEDefang-Filter: osdl$Revision: 1.129 $
X-Scanned-By: MIMEDefang 2.36
X-Virus-Scan: scanned
Try this, it limits the console output and attempts to handle more
errors. Of course, I see no errors on my systems (that would make
this problem too easy)...
Index: sky2-work/drivers/net/sky2.c
===================================================================
--- sky2-work.orig/drivers/net/sky2.c 2006-01-11 13:54:23.000000000 -0800
+++ sky2-work/drivers/net/sky2.c 2006-01-11 15:19:56.000000000 -0800
@@ -1900,8 +1900,9 @@
{
struct net_device *dev = hw->dev[port];
- printk(KERN_INFO PFX "%s: hw error interrupt status 0x%x\n",
- dev->name, status);
+ if (printk_ratelimit())
+ printk(KERN_INFO PFX "%s: hw error interrupt status 0x%x\n",
+ dev->name, status);
if (status & Y2_IS_PAR_RD1) {
printk(KERN_ERR PFX "%s: ram data read parity error\n",
@@ -1918,12 +1919,14 @@
}
if (status & Y2_IS_PAR_MAC1) {
- printk(KERN_ERR PFX "%s: MAC parity error\n", dev->name);
+ if (printk_ratelimit())
+ printk(KERN_ERR PFX "%s: MAC parity error\n", dev->name);
sky2_write8(hw, SK_REG(port, TX_GMF_CTRL_T), GMF_CLI_TX_PE);
}
if (status & Y2_IS_PAR_RX1) {
- printk(KERN_ERR PFX "%s: RX parity error\n", dev->name);
+ if (printk_ratelimit())
+ printk(KERN_ERR PFX "%s: RX parity error\n", dev->name);
sky2_write32(hw, Q_ADDR(rxqaddr[port], Q_CSR), BMU_CLR_IRQ_PAR);
}
@@ -1935,43 +1938,64 @@
static void sky2_hw_intr(struct sky2_hw *hw)
{
+ struct pci_dev *pdev = hw->pdev;
u32 status = sky2_read32(hw, B0_HWE_ISRC);
+ sky2_write32(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
+ /* This driver doesn't use receive timestamps */
if (status & Y2_IS_TIST_OV)
sky2_write8(hw, GMAC_TI_ST_CTRL, GMT_ST_CLR_IRQ);
+ if (status & Y2_IS_PCI_NEXP) {
+ if (printk_ratelimit())
+ printk(KERN_INFO PFX "%s: pci express abort\n",
+ pci_name(pdev));
+ }
+
if (status & (Y2_IS_MST_ERR | Y2_IS_IRQ_STAT)) {
u16 pci_err;
- pci_read_config_word(hw->pdev, PCI_STATUS, &pci_err);
- printk(KERN_ERR PFX "%s: pci hw error (0x%x)\n",
- pci_name(hw->pdev), pci_err);
+ pci_read_config_word(pdev, PCI_STATUS, &pci_err);
+ if (printk_ratelimit())
+ printk(KERN_ERR PFX "%s: pci hw error (0x%x)\n",
+ pci_name(pdev), pci_err);
- sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON);
- pci_write_config_word(hw->pdev, PCI_STATUS,
+ pci_write_config_word(pdev, PCI_STATUS,
pci_err | PCI_STATUS_ERROR_BITS);
- sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
}
- if (status & Y2_IS_PCI_EXP) {
- /* PCI-Express uncorrectable Error occurred */
- u32 pex_err;
+ if (status & Y2_IS_PCI_EXP) { /* PCI-Express error */
+ u32 err;
- pci_read_config_dword(hw->pdev, PEX_UNC_ERR_STAT, &pex_err);
+ pci_read_config_dword(pdev, PEX_UNC_ERR_STAT, &err);
+ if (err) {
+ if (net_ratelimit())
+ printk(KERN_INFO PFX
+ "%s: pci express uncorrectable error (0x%x)\n",
+ pci_name(pdev), err);
- printk(KERN_ERR PFX "%s: pci express error (0x%x)\n",
- pci_name(hw->pdev), pex_err);
+ if (err & PEX_FATAL_ERRORS) {
+ u32 hwmsk = sky2_read32(hw, B0_HWE_IMSK);
- /* 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);
+ printk(KERN_ERR PFX "%s: adapter failed\n", pci_name(pdev));
- if (pex_err & PEX_FATAL_ERRORS) {
- u32 hwmsk = sky2_read32(hw, B0_HWE_IMSK);
- hwmsk &= ~Y2_IS_PCI_EXP;
- sky2_write32(hw, B0_HWE_IMSK, hwmsk);
+ hwmsk &= ~Y2_IS_PCI_EXP;
+ sky2_write32(hw, B0_HWE_IMSK, hwmsk);
+
+ /* Should we turn off all interrupts?? */
+ }
+
+ /* clear the interrupt */
+ pci_write_config_dword(pdev, PEX_UNC_ERR_STAT, 0xffffffffUL);
+ }
+
+ pci_read_config_dword(pdev, PEX_COR_ERR_STAT, &err);
+ if (err) {
+ if (printk_ratelimit())
+ printk(KERN_INFO PFX
+ "%s: pci express correctable error (0x%x)\n",
+ pci_name(pdev), err);
+ pci_write_config_dword(pdev, PEX_COR_ERR_STAT, 0xffffffffUL);
}
}
@@ -1980,6 +2004,8 @@
status >>= 8;
if (status & Y2_HWE_L1_MASK)
sky2_hw_error(hw, 1, status);
+
+ sky2_write32(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF);
}
static void sky2_mac_intr(struct sky2_hw *hw, unsigned port)
Index: sky2-work/drivers/net/sky2.h
===================================================================
--- sky2-work.orig/drivers/net/sky2.h 2006-01-11 13:54:23.000000000 -0800
+++ sky2-work/drivers/net/sky2.h 2006-01-11 15:18:12.000000000 -0800
@@ -10,9 +10,25 @@
#define PCI_DEV_STATUS 0x7c
#define PCI_OS_PCI_X (1<<26)
-#define PEX_LNK_STAT 0xf2
-#define PEX_UNC_ERR_STAT 0x104
-#define PEX_DEV_CTRL 0xe8
+#define PEX_CAP_ID 0xe0 /* 8 bit PEX Capability ID */
+#define PEX_NITEM 0xe1 /* 8 bit PEX Next Item Pointer */
+#define PEX_CAP_REG 0xe2 /* 16 bit PEX Capability Register */
+#define PEX_DEV_CAP 0xe4 /* 32 bit PEX Device Capabilities */
+#define PEX_DEV_CTRL 0xe8 /* 16 bit PEX Device Control */
+#define PEX_DEV_STAT 0xea /* 16 bit PEX Device Status */
+#define PEX_LNK_CAP 0xec /* 32 bit PEX Link Capabilities */
+#define PEX_LNK_CTRL 0xf0 /* 16 bit PEX Link Control */
+#define PEX_LNK_STAT 0xf2 /* 16 bit PEX Link Status */
+
+/* PCI Express Extended Capabilities */
+#define PEX_ADV_ERR_REP 0x100 /* 32 bit PEX Advanced Error Reporting */
+#define PEX_UNC_ERR_STAT 0x104 /* 32 bit PEX Uncorr. Errors Status */
+#define PEX_UNC_ERR_MASK 0x108 /* 32 bit PEX Uncorr. Errors Mask */
+#define PEX_UNC_ERR_SEV 0x10c /* 32 bit PEX Uncorr. Errors Severity */
+#define PEX_COR_ERR_STAT 0x110 /* 32 bit PEX Correc. Errors Status */
+#define PEX_COR_ERR_MASK 0x114 /* 32 bit PEX Correc. Errors Mask */
+#define PEX_ADV_ERR_CAP_C 0x118 /* 32 bit PEX Advanced Error Cap./Ctrl */
+#define PEX_HEADER_LOG 0x11c /* 4x32 bit PEX Header Log Register */
/* Yukon-2 */
enum pci_dev_reg_1 {
next prev parent reply other threads:[~2006-01-19 11:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-19 9:30 SKY2 driver - version 0.13 - buggy but working David Luyer
2006-01-19 11:07 ` Daniel Drake [this message]
2006-01-25 6:05 ` [RFT] sky2: pci express error fix Stephen Hemminger
2006-01-26 16:11 ` Kalin KOZHUHAROV
2006-01-26 17:51 ` Stephen Hemminger
2006-01-27 5:22 ` Kalin KOZHUHAROV
2006-02-02 15:25 ` Ansgar Esztermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43CF72FC.9060207@gentoo.org \
--to=dsd@gentoo.org \
--cc=david@luyer.net \
--cc=linux-kernel@vger.kernel.org \
--cc=shemminger@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.