arm: Kirkwood: Check the error summary bit for error detection
authorSimon Kagstrom <simon.kagstrom@netinsight.net>
Wed, 8 Jul 2009 11:05:11 +0000 (13:05 +0200)
committerBen Warren <biggerbadderben@gmail.com>
Thu, 23 Jul 2009 05:53:45 +0000 (22:53 -0700)
The Marvell documentation for the 88f6281 states that the error coding
is only valid if the error summary and last frame bits in the transmit
descriptor status field are set. This patch adds checks for these for
transmit (I would get transmit errors on bootp with the current check,
which I believe are spurious).

Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
drivers/net/kirkwood_egiga.c
drivers/net/kirkwood_egiga.h

index 77c7a840cfc3041b23178b57002d1791cfc3aed5..701812bf1c5258175a223fb1896791a588bcbde1 100644 (file)
@@ -511,7 +511,9 @@ static int kwgbe_send(struct eth_device *dev, volatile void *dataptr,
        cmd_sts = readl(&p_txdesc->cmd_sts);
        while (cmd_sts & KWGBE_BUFFER_OWNED_BY_DMA) {
                /* return fail if error is detected */
-               if (cmd_sts & (KWGBE_UR_ERROR | KWGBE_RL_ERROR)) {
+               if ((cmd_sts & (KWGBE_ERROR_SUMMARY | KWGBE_TX_LAST_FRAME)) ==
+                               (KWGBE_ERROR_SUMMARY | KWGBE_TX_LAST_FRAME) &&
+                               cmd_sts & (KWGBE_UR_ERROR | KWGBE_RL_ERROR)) {
                        printf("Err..(%s) in xmit packet\n", __FUNCTION__);
                        return -1;
                }
index 8b67c9c79078ba417afc03b62dd1a890d68b730c..9c893d131831164ae68ce7f92c0bbd69d389cab5 100644 (file)
 #define KWGBE_UR_ERROR                 (1 << 1)
 #define KWGBE_RL_ERROR                 (1 << 2)
 #define KWGBE_LLC_SNAP_FORMAT          (1 << 9)
+#define KWGBE_TX_LAST_FRAME            (1 << 20)
 
 /* Rx descriptors status */
 #define KWGBE_CRC_ERROR                        0