aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/freescale/fec_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/freescale/fec_main.c')
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c15
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