diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/fec_main.c')
-rw-r--r-- | drivers/net/ethernet/freescale/fec_main.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 01f7e811739b..692ee248e486 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c | |||
@@ -89,10 +89,10 @@ static struct platform_device_id fec_devtype[] = { | |||
89 | .driver_data = 0, | 89 | .driver_data = 0, |
90 | }, { | 90 | }, { |
91 | .name = "imx25-fec", | 91 | .name = "imx25-fec", |
92 | .driver_data = FEC_QUIRK_USE_GASKET | FEC_QUIRK_HAS_RACC, | 92 | .driver_data = FEC_QUIRK_USE_GASKET, |
93 | }, { | 93 | }, { |
94 | .name = "imx27-fec", | 94 | .name = "imx27-fec", |
95 | .driver_data = FEC_QUIRK_HAS_RACC, | 95 | .driver_data = 0, |
96 | }, { | 96 | }, { |
97 | .name = "imx28-fec", | 97 | .name = "imx28-fec", |
98 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME | | 98 | .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME | |
@@ -180,6 +180,7 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address"); | |||
180 | /* FEC receive acceleration */ | 180 | /* FEC receive acceleration */ |
181 | #define FEC_RACC_IPDIS (1 << 1) | 181 | #define FEC_RACC_IPDIS (1 << 1) |
182 | #define FEC_RACC_PRODIS (1 << 2) | 182 | #define FEC_RACC_PRODIS (1 << 2) |
183 | #define FEC_RACC_SHIFT16 BIT(7) | ||
183 | #define FEC_RACC_OPTIONS (FEC_RACC_IPDIS | FEC_RACC_PRODIS) | 184 | #define FEC_RACC_OPTIONS (FEC_RACC_IPDIS | FEC_RACC_PRODIS) |
184 | 185 | ||
185 | /* | 186 | /* |
@@ -945,9 +946,11 @@ fec_restart(struct net_device *ndev) | |||
945 | 946 | ||
946 | #if !defined(CONFIG_M5272) | 947 | #if !defined(CONFIG_M5272) |
947 | if (fep->quirks & FEC_QUIRK_HAS_RACC) { | 948 | if (fep->quirks & FEC_QUIRK_HAS_RACC) { |
948 | /* set RX checksum */ | ||
949 | val = readl(fep->hwp + FEC_RACC); | 949 | val = readl(fep->hwp + FEC_RACC); |
950 | /* align IP header */ | ||
951 | val |= FEC_RACC_SHIFT16; | ||
950 | if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) | 952 | if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) |
953 | /* set RX checksum */ | ||
951 | val |= FEC_RACC_OPTIONS; | 954 | val |= FEC_RACC_OPTIONS; |
952 | else | 955 | else |
953 | val &= ~FEC_RACC_OPTIONS; | 956 | val &= ~FEC_RACC_OPTIONS; |
@@ -1428,6 +1431,12 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) | |||
1428 | prefetch(skb->data - NET_IP_ALIGN); | 1431 | prefetch(skb->data - NET_IP_ALIGN); |
1429 | skb_put(skb, pkt_len - 4); | 1432 | skb_put(skb, pkt_len - 4); |
1430 | data = skb->data; | 1433 | data = skb->data; |
1434 | |||
1435 | #if !defined(CONFIG_M5272) | ||
1436 | if (fep->quirks & FEC_QUIRK_HAS_RACC) | ||
1437 | data = skb_pull_inline(skb, 2); | ||
1438 | #endif | ||
1439 | |||
1431 | if (!is_copybreak && need_swap) | 1440 | if (!is_copybreak && need_swap) |
1432 | swap_buffer(data, pkt_len); | 1441 | swap_buffer(data, pkt_len); |
1433 | 1442 | ||