On Mon, 27 Feb 2006, Olaf Hering wrote:


 commit 24180333206519e6b0c4633eab81e773b4527cac

> author Jesse Brandeburg <[EMAIL PROTECTED]> Wed, 18 Jan 2006 07:01:06 -0800
> committer Jeff Garzik <[EMAIL PROTECTED]> Wed, 18 Jan 2006 05:15:15 -0500
>
> [PATCH] e100: Fix TX hang and RMCP Ping issue (due to a microcode loading 
issue)
>
> e100: Fix TX hang and RMCP Ping issue (due to a microcode loading issue)
>
> Set the end of list bit to cause the hardware's transmit state machine to
> work correctly and not prevent management (BMC) traffic.

Olaf, please try this patch...

--- linux-2.6.16-rc5.orig/drivers/net/e100.c 2006-02-26 21:09:35.000000000 -0800 +++ linux-2.6.16-rc5/drivers/net/e100.c 2006-02-27 17:03:34.000000000 -0800
@@ -2154,6 +2154,9 @@ static int e100_loopback_test(struct nic

        msleep(10);

+ pci_dma_sync>

> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html





> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html





> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html





> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html





> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html





> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html





> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html





> @@ -1388,7 +1422,7 @@ static int e100_hw_init(struct nic *nic)
>               return err;
>       if((err = e100_exec_cmd(nic, ruc_load_base, 0)))
>               return err;
> -     if((err = e100_exec_cb(nic, NULL, e100_load_ucode)))
> +     if ((err = e100_exec_cb_wait(nic, NULL, e100_setup_ucode)))
>               return err;
>       if((err = e100_exec_cb(nic, NULL, e100_configure)))
>               return err;

this commit for 2.6.16-rc2 causes ethtool -t eth0 trouble on an IBM
pSeries 630. It triggers EEH errors, and also a bug in the eehd, but
thats unrelated. It shouldnt trigger the EEH errors in the first place.

Any ideas how to fix it? If I change the e100_exec_cb_wait() call back
to e100_exec_cb(), no errors are triggered. But the ethtool -t test
fails.

http://ozlabs.org/pipermail/linuxppc-dev/2006-February/021308.html


Olaf I reproduced this problem on a 630 and this patch fixes it for me, please verify. Due to the new load ucode command the cb list must be allocated before calling e100_init_hw. Ignore the crazy paths on the files. (patch -p1 should take care of)

--- linux-2.6.16-rc5/drivers/net/e100.c 2006-02-26 21:09:35.000000000 -0800
+++ linux-2.6.15.1/drivers/net/e100.c   2006-02-27 17:03:34.000000000 -0800
@@ -2154,6 +2154,9 @@ static int e100_loopback_test(struct nic

        msleep(10);

+       pci_dma_sync_single_for_cpu(nic->pdev, nic->rx_to_clean->dma_addr,
+                       RFD_BUF_LEN, PCI_DMA_FROMDEVICE);
+
        if(memcmp(nic->rx_to_clean->skb->data + sizeof(struct rfd),
           skb->data, ETH_DATA_LEN))
                err = -EAGAIN;
@@ -2161,8 +2164,9 @@ static int e100_loopback_test(struct nic
 err_loopback_none:
        mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR, 0);
        nic->loopback = lb_none;
-       e100_hw_init(nic);
        e100_clean_cbs(nic);
+       e100_alloc_cbs(nic);
+       e100_hw_init(nic);
 err_clean_rx:
        e100_rx_clean_list(nic);
        return err;
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to