From: Kalin KOZHUHAROV <kalin@thinrope.net>
To: linux-kernel@vger.kernel.org
Subject: Re: [RFT] sky2: pci express error fix
Date: Fri, 27 Jan 2006 01:11:20 +0900 [thread overview]
Message-ID: <drasb9$5jj$1@sea.gmane.org> (raw)
In-Reply-To: <20060124220533.5fade501@localhost.localdomain>
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/ <-+
|[ ______________________ ]|
next prev parent reply other threads:[~2006-01-26 16:13 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
2006-01-25 6:05 ` [RFT] sky2: pci express error fix Stephen Hemminger
2006-01-26 16:11 ` Kalin KOZHUHAROV [this message]
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='drasb9$5jj$1@sea.gmane.org' \
--to=kalin@thinrope.net \
--cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox