LINUX.ORG.RU

sky2|sk98lin (Marvell) pci express error


0

0

День добрый,

есть ASUS A8V-E SE с 

lspci | grep -i eth
05:00.0 Ethernet controller: Marvell: Unknown device 4362 (rev 19)

Marvell Yukon 88E8053 Gigabit Ethernet Controller

на борту.

В зависимости от расположения луны, появляется такая вот ошибка

sky2:

sky2 eth0: enabling interface
sky2 0000:05:00.0: pci express error (0x4000)
sky2 eth0: Link is up at 100 Mbps, full duplex, flow control both
sky2 0000:05:00.0: pci express error (0x4000)

sk98lin:

eth0: Marvell Yukon 88E8053 Gigabit Ethernet Controller
      PrefPort:A  RlmtMode:Check Link State
eth0: -- ERROR --
        Class:  Hardware failure
        Nr:  0x271
        Msg:  Uncorrectable PCI Express error
eth0: network connection up using port A
    speed:           100
    autonegotiation: yes
    duplex mode:     full
    flowctrl:        symmetric
    irq moderation:  disabled
    tcp offload:     enabled
    scatter-gather:  enabled
    tx-checksum:     enabled
    rx-checksum:     enabled
    rx-polling:      enabled
eth0: -- ERROR --
        Class:  Hardware failure
        Nr:  0x271
        Msg:  Uncorrectable PCI Express error
via82xx: Assuming DXS channels with 48k fixed sample rate.
         Please try dxs_support=1 or dxs_support=4 option
         and report if it works on your machine.

Появляется такое только во время загрузки. И например, если 
перед эти нажать del (bios setup) и перезагрузится, работает 
как надо и во время работы никаких ошибок не появляется. До 
следующего выключения-включения компьютера.

halflife@fate:~/games$ uname -a
Linux fate 2.6.17.8 #1 Mon Aug 7 21:46:26 CDT 2006 i686 unknown unknown GNU/Linu

В lkml нашел вот что:

http://marc.theaimsgroup.com/?l=linux-kernel&m=115269213215606&w=4
тут немного не понятно, но как я понял, проблемы это не решит, нужно что бы у драйвера был error_handler, которого в sky2 вроде бы нет..

Нашел так-же patch который якобы эту проблему решает

http://marc.theaimsgroup.com/?l=linux-kernel&m=113816914103598&w=4

но, к сожалению он на 2.6.17.8 не накладывается.

Никто с таким не сталкивался ? Или может у кого хватит склов 
перенести вышеупомянутый патч в 2.6.17.8, вроде бы там не много.. ?

Спасибо заранее.


> склов

умений :)

патч:

--- 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) */

halflife ★★
() автор топика
Ответ на: комментарий от halflife

Вроде бы пофиксил.. ну.. может не та фаза луны, но 2 раза 
выключил/включил и все Ок.

Может еще кому пригодится

--- sky2.c      2006-08-11 16:24:50.000000000 +0300
+++ linux-2.6.17.8/drivers/net/sky2.c   2006-08-11 17:20:47.000000000 +0300
@@ -2330,7 +2330,7 @@
 
        /* clear any PEX errors */
        if (pci_find_capability(hw->pdev, PCI_CAP_ID_EXP))
-               sky2_pci_write32(hw, PEX_UNC_ERR_STAT, 0xffffffffUL);
+               sky2_pci_write32(hw, Y2_CFG_SPC + PEX_UNC_ERR_STAT, 0xffffffffUL);
 
 
        pmd_type = sky2_read8(hw, B2_PMD_TYP);

halflife ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.