All of lore.kernel.org
 help / color / mirror / Atom feed
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/ <-+
|[ ______________________ ]|


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