aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch
diff options
context:
space:
mode:
authorImre Kaloz <kaloz@openwrt.org>2012-05-01 07:00:17 +0000
committerImre Kaloz <kaloz@openwrt.org>2012-05-01 07:00:17 +0000
commit880de62f91bcffe7f1c7f16c9463e10853fa2524 (patch)
tree058bb1c73786a7bf492cc1a554effe4692a9b50e /target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch
parent7a8d12bafaf8b882d0278156e5f22d0a396687e2 (diff)
downloadupstream-880de62f91bcffe7f1c7f16c9463e10853fa2524.tar.gz
upstream-880de62f91bcffe7f1c7f16c9463e10853fa2524.tar.bz2
upstream-880de62f91bcffe7f1c7f16c9463e10853fa2524.zip
switch to 2.6.38
SVN-Revision: 31546
Diffstat (limited to 'target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch')
-rw-r--r--target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch b/target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch
new file mode 100644
index 0000000000..3a25350c09
--- /dev/null
+++ b/target/linux/coldfire/patches/049-Update-FEC-driver-for-MCF5445x-and-MCF54418.patch
@@ -0,0 +1,113 @@
+From bb6fd2eef9359aff90f78b8791967a37e3284784 Mon Sep 17 00:00:00 2001
+From: Jason Jin <jason.jin@freescale.com>
+Date: Thu, 4 Aug 2011 09:59:55 +0800
+Subject: [PATCH 49/52] Update FEC driver for MCF5445x and MCF54418
+
+This patch fixed the bug that FEC could not support 10Mbps
+for MCF5445x.
+This patch also improved FEC performance.
+
+Signed-off-by: Alison Wang <b18965@freescale.com>
+Signed-off-by: Jason Jin <jason.jin@freescale.com>
+---
+ arch/m68k/coldfire/m5441x/fec.c | 4 ++--
+ arch/m68k/coldfire/m5445x/fec.c | 17 +++++++++++++++--
+ drivers/net/fec.c | 9 +++++----
+ 3 files changed, 22 insertions(+), 8 deletions(-)
+
+--- a/arch/m68k/coldfire/m5441x/fec.c
++++ b/arch/m68k/coldfire/m5441x/fec.c
+@@ -98,7 +98,7 @@ static struct fec_platform_data m54418_f
+ };
+
+ static struct platform_device fec0_coldfire_device = {
+- .name = "m54418-fec",
++ .name = "coldfire-fec",
+ .id = 0,
+ .resource = fec0_resources,
+ .num_resources = ARRAY_SIZE(fec0_resources),
+@@ -109,7 +109,7 @@ static struct platform_device fec0_coldf
+
+ #if defined(CONFIG_FEC2)
+ static struct platform_device fec1_coldfire_device = {
+- .name = "m54418-fec",
++ .name = "coldfire-fec",
+ .id = 1,
+ .resource = fec1_resources,
+ .num_resources = ARRAY_SIZE(fec1_resources),
+--- a/arch/m68k/coldfire/m5445x/fec.c
++++ b/arch/m68k/coldfire/m5445x/fec.c
+@@ -34,6 +34,10 @@
+ #include <linux/skbuff.h>
+ #include <linux/spinlock.h>
+ #include <linux/workqueue.h>
++#include <linux/platform_device.h>
++#include <linux/fec.h>
++#include <linux/io.h>
++
+ #include <asm/pgtable.h>
+
+ #include <asm/traps.h>
+@@ -89,19 +93,28 @@ static struct resource fec1_resources[]
+ };
+ #endif
+
++static struct fec_platform_data m5445x_fec_pdata = {
++ .phy = PHY_INTERFACE_MODE_RMII,
++};
+ static struct platform_device fec0_coldfire_device = {
+- .name = "fec",
++ .name = "coldfire-fec",
+ .id = 0,
+ .resource = fec0_resources,
+ .num_resources = ARRAY_SIZE(fec0_resources),
++ .dev = {
++ .platform_data = &m5445x_fec_pdata,
++ }
+ };
+
+ #if defined(CONFIG_FEC2)
+ static struct platform_device fec1_coldfire_device = {
+- .name = "fec",
++ .name = "coldfire-fec",
+ .id = 1,
+ .resource = fec1_resources,
+ .num_resources = ARRAY_SIZE(fec1_resources),
++ .dev = {
++ .platform_data = &m5445x_fec_pdata,
++ }
+ };
+ #endif
+
+--- a/drivers/net/fec.c
++++ b/drivers/net/fec.c
+@@ -76,7 +76,7 @@ static struct platform_device_id fec_dev
+ .name = "imx28-fec",
+ .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME,
+ }, {
+- .name = "m54418-fec",
++ .name = "coldfire-fec",
+ .driver_data = FEC_QUIRK_ENET_MAC,
+ },
+ { }
+@@ -341,8 +341,9 @@ fec_enet_start_xmit(struct sk_buff *skb,
+ /* Push the data cache so the CPM does not get stale memory
+ * data.
+ */
+- bdp->cbd_bufaddr = dma_map_single(&dev->dev, bufaddr,
+- FEC_ENET_TX_FRSIZE, DMA_TO_DEVICE);
++ bdp->cbd_bufaddr = __pa(bufaddr);
++ flush_dcache_range((unsigned long)skb->data,
++ (unsigned long)skb->data + skb->len);
+
+ /* Send it on its way. Tell FEC it's ready, interrupt when done,
+ * it's the last BD of the frame, and to put the CRC on the end.
+@@ -1074,7 +1075,7 @@ static int fec_enet_alloc_buffers(struct
+
+ bdp = fep->tx_bd_base;
+ for (i = 0; i < TX_RING_SIZE; i++) {
+- fep->tx_bounce[i] = kmalloc(FEC_ENET_TX_FRSIZE, GFP_KERNEL);
++ fep->tx_bounce[i] = kmalloc(FEC_ENET_TX_FRSIZE, GFP_DMA);
+
+ bdp->cbd_sc = 0;
+ bdp->cbd_bufaddr = 0;