From patchwork Thu Apr 30 02:00:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthias Schiffer X-Patchwork-Id: 466357 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id F148F140308 for ; Thu, 30 Apr 2015 12:02:58 +1000 (AEST) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 4D78828BCC4; Thu, 30 Apr 2015 04:00:54 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00, T_RP_MATCHES_RCVD autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 2E68E28A70D for ; Thu, 30 Apr 2015 03:59:53 +0200 (CEST) X-policyd-weight: using cached result; rate: -7.6 Received: from chaos.universe-factory.net (chaos.universe-factory.net [37.72.148.22]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Thu, 30 Apr 2015 03:59:52 +0200 (CEST) Received: from avalon.neoraider.dn42 (i5E860364.versanet.de [94.134.3.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by chaos.universe-factory.net (Postfix) with ESMTPSA id 28699189649 for ; Thu, 30 Apr 2015 04:00:57 +0200 (CEST) From: Matthias Schiffer To: openwrt-devel@lists.openwrt.org Date: Thu, 30 Apr 2015 04:00:43 +0200 Message-Id: <5b8d0eacb0d44535c453e97d8647546e357d559e.1430359244.git.mschiffer@universe-factory.net> X-Mailer: git-send-email 2.3.7 In-Reply-To: <143a33f7885285c9de093d52dca4449bd715e4b5.1430359244.git.mschiffer@universe-factory.net> References: <143a33f7885285c9de093d52dca4449bd715e4b5.1430359244.git.mschiffer@universe-factory.net> In-Reply-To: <143a33f7885285c9de093d52dca4449bd715e4b5.1430359244.git.mschiffer@universe-factory.net> References: <143a33f7885285c9de093d52dca4449bd715e4b5.1430359244.git.mschiffer@universe-factory.net> Subject: [OpenWrt-Devel] [PATCH 2/3] mpc85xx: gianfar: add mtd-mac-address support X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Signed-off-by: Matthias Schiffer --- .../101-NET-add-of_get_mac_address_mtd.patch | 76 ++++++++++++++++++++++ .../102-net-gianfar-use-mtd-mac-address.patch | 19 ++++++ 2 files changed, 95 insertions(+) create mode 100644 target/linux/mpc85xx/patches-3.18/101-NET-add-of_get_mac_address_mtd.patch create mode 100644 target/linux/mpc85xx/patches-3.18/102-net-gianfar-use-mtd-mac-address.patch diff --git a/target/linux/mpc85xx/patches-3.18/101-NET-add-of_get_mac_address_mtd.patch b/target/linux/mpc85xx/patches-3.18/101-NET-add-of_get_mac_address_mtd.patch new file mode 100644 index 0000000..4d05dd6 --- /dev/null +++ b/target/linux/mpc85xx/patches-3.18/101-NET-add-of_get_mac_address_mtd.patch @@ -0,0 +1,76 @@ +From 92f38460229a8816404408f036f0a374f1013d0e Mon Sep 17 00:00:00 2001 +From: John Crispin +Date: Sun, 27 Jul 2014 09:40:01 +0100 +Subject: NET: add of_get_mac_address_mtd() + +Many embedded devices have information such as mac addresses stored inside mtd +devices. This patch allows us to add a property inside a node describing a +network interface. The new property points at a mtd partition with an offset +where the mac address can be found. + +Signed-off-by: John Crispin +--- + drivers/of/of_net.c | 37 +++++++++++++++++++++++++++++++++++++ + include/linux/of_net.h | 1 + + 2 files changed, 38 insertions(+) + +--- a/drivers/of/of_net.c ++++ b/drivers/of/of_net.c +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + /** + * of_get_phy_mode - Get phy mode for given device_node +@@ -75,3 +76,39 @@ const void *of_get_mac_address(struct de + return NULL; + } + EXPORT_SYMBOL(of_get_mac_address); ++ ++int of_get_mac_address_mtd(struct device_node *np, void *mac) ++{ ++ struct device_node *mtd_np = NULL; ++ size_t retlen; ++ int size, ret; ++ struct mtd_info *mtd; ++ const char *part; ++ const __be32 *list; ++ phandle phandle; ++ ++ list = of_get_property(np, "mtd-mac-address", &size); ++ if (!list || (size != (2 * sizeof(*list)))) ++ return -ENOENT; ++ ++ phandle = be32_to_cpup(list++); ++ if (phandle) ++ mtd_np = of_find_node_by_phandle(phandle); ++ ++ if (!mtd_np) ++ return -ENOENT; ++ ++ part = of_get_property(mtd_np, "label", NULL); ++ if (!part) ++ part = mtd_np->name; ++ ++ mtd = get_mtd_device_nm(part); ++ if (IS_ERR(mtd)) ++ return PTR_ERR(mtd); ++ ++ ret = mtd_read(mtd, be32_to_cpup(list), 6, &retlen, (u_char *) mac); ++ put_mtd_device(mtd); ++ ++ return ret; ++} ++EXPORT_SYMBOL_GPL(of_get_mac_address_mtd); +--- a/include/linux/of_net.h ++++ b/include/linux/of_net.h +@@ -11,6 +11,7 @@ + #include + extern int of_get_phy_mode(struct device_node *np); + extern const void *of_get_mac_address(struct device_node *np); ++extern int of_get_mac_address_mtd(struct device_node *np, void *mac); + #else + static inline int of_get_phy_mode(struct device_node *np) + { diff --git a/target/linux/mpc85xx/patches-3.18/102-net-gianfar-use-mtd-mac-address.patch b/target/linux/mpc85xx/patches-3.18/102-net-gianfar-use-mtd-mac-address.patch new file mode 100644 index 0000000..1b7abc8 --- /dev/null +++ b/target/linux/mpc85xx/patches-3.18/102-net-gianfar-use-mtd-mac-address.patch @@ -0,0 +1,19 @@ +--- a/drivers/net/ethernet/freescale/gianfar.c ++++ b/drivers/net/ethernet/freescale/gianfar.c +@@ -858,10 +858,13 @@ static int gfar_of_init(struct platform_ + if (stash_len || stash_idx) + priv->device_flags |= FSL_GIANFAR_DEV_HAS_BUF_STASHING; + +- mac_addr = of_get_mac_address(np); ++ err = of_get_mac_address_mtd(np, dev->dev_addr); ++ if (err) { ++ mac_addr = of_get_mac_address(np); + +- if (mac_addr) +- memcpy(dev->dev_addr, mac_addr, ETH_ALEN); ++ if (mac_addr) ++ memcpy(dev->dev_addr, mac_addr, ETH_ALEN); ++ } + + if (model && !strcasecmp(model, "TSEC")) + priv->device_flags |= FSL_GIANFAR_DEV_HAS_GIGABIT |