Root/target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch

1From bb6fd2eef9359aff90f78b8791967a37e3284784 Mon Sep 17 00:00:00 2001
2From: Jason Jin <jason.jin@freescale.com>
3Date: Thu, 4 Aug 2011 09:59:55 +0800
4Subject: [PATCH 49/52] Update FEC driver for MCF5445x and MCF54418
5
6This patch fixed the bug that FEC could not support 10Mbps
7for MCF5445x.
8This patch also improved FEC performance.
9
10Signed-off-by: Alison Wang <b18965@freescale.com>
11Signed-off-by: Jason Jin <jason.jin@freescale.com>
12---
13 arch/m68k/coldfire/m5441x/fec.c | 4 ++--
14 arch/m68k/coldfire/m5445x/fec.c | 17 +++++++++++++++--
15 drivers/net/fec.c | 9 +++++----
16 3 files changed, 22 insertions(+), 8 deletions(-)
17
18--- a/arch/m68k/coldfire/m5441x/fec.c
19+++ b/arch/m68k/coldfire/m5441x/fec.c
20@@ -98,7 +98,7 @@ static struct fec_platform_data m54418_f
21 };
22 
23 static struct platform_device fec0_coldfire_device = {
24- .name = "m54418-fec",
25+ .name = "coldfire-fec",
26     .id = 0,
27     .resource = fec0_resources,
28     .num_resources = ARRAY_SIZE(fec0_resources),
29@@ -109,7 +109,7 @@ static struct platform_device fec0_coldf
30 
31 #if defined(CONFIG_FEC2)
32 static struct platform_device fec1_coldfire_device = {
33- .name = "m54418-fec",
34+ .name = "coldfire-fec",
35     .id = 1,
36     .resource = fec1_resources,
37     .num_resources = ARRAY_SIZE(fec1_resources),
38--- a/arch/m68k/coldfire/m5445x/fec.c
39+++ b/arch/m68k/coldfire/m5445x/fec.c
40@@ -34,6 +34,10 @@
41 #include <linux/skbuff.h>
42 #include <linux/spinlock.h>
43 #include <linux/workqueue.h>
44+#include <linux/platform_device.h>
45+#include <linux/fec.h>
46+#include <linux/io.h>
47+
48 #include <asm/pgtable.h>
49 
50 #include <asm/traps.h>
51@@ -89,19 +93,28 @@ static struct resource fec1_resources[]
52 };
53 #endif
54 
55+static struct fec_platform_data m5445x_fec_pdata = {
56+ .phy = PHY_INTERFACE_MODE_RMII,
57+};
58 static struct platform_device fec0_coldfire_device = {
59- .name = "fec",
60+ .name = "coldfire-fec",
61     .id = 0,
62     .resource = fec0_resources,
63     .num_resources = ARRAY_SIZE(fec0_resources),
64+ .dev = {
65+ .platform_data = &m5445x_fec_pdata,
66+ }
67 };
68 
69 #if defined(CONFIG_FEC2)
70 static struct platform_device fec1_coldfire_device = {
71- .name = "fec",
72+ .name = "coldfire-fec",
73     .id = 1,
74     .resource = fec1_resources,
75     .num_resources = ARRAY_SIZE(fec1_resources),
76+ .dev = {
77+ .platform_data = &m5445x_fec_pdata,
78+ }
79 };
80 #endif
81 
82--- a/drivers/net/fec.c
83+++ b/drivers/net/fec.c
84@@ -76,7 +76,7 @@ static struct platform_device_id fec_dev
85         .name = "imx28-fec",
86         .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME,
87     }, {
88- .name = "m54418-fec",
89+ .name = "coldfire-fec",
90         .driver_data = FEC_QUIRK_ENET_MAC,
91     },
92     { }
93@@ -341,8 +341,9 @@ fec_enet_start_xmit(struct sk_buff *skb,
94     /* Push the data cache so the CPM does not get stale memory
95      * data.
96      */
97- bdp->cbd_bufaddr = dma_map_single(&dev->dev, bufaddr,
98- FEC_ENET_TX_FRSIZE, DMA_TO_DEVICE);
99+ bdp->cbd_bufaddr = __pa(bufaddr);
100+ flush_dcache_range((unsigned long)skb->data,
101+ (unsigned long)skb->data + skb->len);
102 
103     /* Send it on its way. Tell FEC it's ready, interrupt when done,
104      * it's the last BD of the frame, and to put the CRC on the end.
105@@ -1074,7 +1075,7 @@ static int fec_enet_alloc_buffers(struct
106 
107     bdp = fep->tx_bd_base;
108     for (i = 0; i < TX_RING_SIZE; i++) {
109- fep->tx_bounce[i] = kmalloc(FEC_ENET_TX_FRSIZE, GFP_KERNEL);
110+ fep->tx_bounce[i] = kmalloc(FEC_ENET_TX_FRSIZE, GFP_DMA);
111 
112         bdp->cbd_sc = 0;
113         bdp->cbd_bufaddr = 0;
114

Archive Download this file



interactive