aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/imx6/patches-3.10/020-marvell-sky2-macdt.patch
diff options
context:
space:
mode:
authorLuka Perkov <luka@openwrt.org>2013-07-15 23:44:26 +0000
committerLuka Perkov <luka@openwrt.org>2013-07-15 23:44:26 +0000
commit6a985ed219e179a9f14e227457201c01c40e8b74 (patch)
tree7f4e28cecaec3fa01ac15bb0f6e147f618f0158c /target/linux/imx6/patches-3.10/020-marvell-sky2-macdt.patch
parentaf6eb6cc8cc64ff4029cf583b2f250ba16faabac (diff)
downloadupstream-6a985ed219e179a9f14e227457201c01c40e8b74.tar.gz
upstream-6a985ed219e179a9f14e227457201c01c40e8b74.tar.bz2
upstream-6a985ed219e179a9f14e227457201c01c40e8b74.zip
imx6: add missing patches (r37363)
SVN-Revision: 37364
Diffstat (limited to 'target/linux/imx6/patches-3.10/020-marvell-sky2-macdt.patch')
-rw-r--r--target/linux/imx6/patches-3.10/020-marvell-sky2-macdt.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/target/linux/imx6/patches-3.10/020-marvell-sky2-macdt.patch b/target/linux/imx6/patches-3.10/020-marvell-sky2-macdt.patch
new file mode 100644
index 0000000000..e1639d6223
--- /dev/null
+++ b/target/linux/imx6/patches-3.10/020-marvell-sky2-macdt.patch
@@ -0,0 +1,57 @@
+--- a/drivers/net/ethernet/marvell/sky2.c
++++ b/drivers/net/ethernet/marvell/sky2.c
+@@ -44,6 +44,8 @@
+ #include <linux/prefetch.h>
+ #include <linux/debugfs.h>
+ #include <linux/mii.h>
++#include <linux/of_device.h>
++#include <linux/of_net.h>
+
+ #include <asm/irq.h>
+
+@@ -4748,6 +4750,7 @@ static struct net_device *sky2_init_netd
+ {
+ struct sky2_port *sky2;
+ struct net_device *dev = alloc_etherdev(sizeof(*sky2));
++ unsigned char *iap, tmpaddr[ETH_ALEN];
+
+ if (!dev)
+ return NULL;
+@@ -4802,8 +4805,36 @@ static struct net_device *sky2_init_netd
+
+ dev->features |= dev->hw_features;
+
++ /*
++ * try to get mac address in the following order:
++ * 1) from device tree data
++ * 2) from internal registers set by bootloader
++ */
++ iap = NULL;
++#ifdef CONFIG_OF
++ struct device_node *np;
++ np = of_find_node_by_path("/aliases");
++ if (np) {
++ const char *path = of_get_property(np, "sky2", NULL);
++ if (path)
++ np = of_find_node_by_path(path);
++ if (np)
++ path = of_get_mac_address(np);
++ if (path)
++ iap = (unsigned char *) path;
++ }
++#endif
++
++ /*
++ * 2) mac registers set by bootloader
++ */
++ if (!iap || !is_valid_ether_addr(iap)) {
++ memcpy_fromio(&tmpaddr, hw->regs + B2_MAC_1 + port * 8, ETH_ALEN);
++ iap = &tmpaddr[0];
++ }
++
+ /* read the mac address */
+- memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8, ETH_ALEN);
++ memcpy(dev->dev_addr, iap, ETH_ALEN);
+
+ return dev;
+ }