From patchwork Sat Mar 15 13:07:43 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Pargmann X-Patchwork-Id: 3837301 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 76E06BF540 for ; Sat, 15 Mar 2014 13:12:35 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 8A7B32024D for ; Sat, 15 Mar 2014 13:12:34 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7A788201FB for ; Sat, 15 Mar 2014 13:12:33 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WOoMf-0003LX-RP; Sat, 15 Mar 2014 13:11:02 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WOoME-0005KP-Qr; Sat, 15 Mar 2014 13:10:34 +0000 Received: from metis.ext.pengutronix.de ([2001:6f8:1178:4:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WOoLI-0005DG-S5 for linux-arm-kernel@lists.infradead.org; Sat, 15 Mar 2014 13:09:42 +0000 Received: from dude.hi.pengutronix.de ([2001:6f8:1178:2:a236:9fff:fe00:814]) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1WOoKU-0004JZ-94; Sat, 15 Mar 2014 14:08:46 +0100 Received: from mpa by dude.hi.pengutronix.de with local (Exim 4.82) (envelope-from ) id 1WOoKT-00039l-Ab; Sat, 15 Mar 2014 14:08:45 +0100 From: Markus Pargmann To: "David S. Miller" Subject: [PATCH v2 4/5] net: cpsw: Use cpsw-ctrl-macid driver Date: Sat, 15 Mar 2014 14:07:43 +0100 Message-Id: <1394888864-11007-5-git-send-email-mpa@pengutronix.de> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1394888864-11007-1-git-send-email-mpa@pengutronix.de> References: <1394888864-11007-1-git-send-email-mpa@pengutronix.de> X-SA-Exim-Connect-IP: 2001:6f8:1178:2:a236:9fff:fe00:814 X-SA-Exim-Mail-From: mpa@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140315_090937_663294_FC244068 X-CRM114-Status: GOOD ( 18.70 ) X-Spam-Score: -1.9 (-) Cc: devicetree@vger.kernel.org, =?UTF-8?q?Beno=C3=AEt=20Cousson?= , kernel@pengutronix.de, Markus Pargmann , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Use ctrl-macid driver to obtain the macids stored in the processor. This is only done when defined in DT. The internal macid is not used if mac-address is given explicitly. So it does not change the behavior if the bootloader provides a mac address through the mac-address property Signed-off-by: Markus Pargmann --- Documentation/devicetree/bindings/net/cpsw.txt | 6 ++++++ drivers/net/ethernet/ti/cpsw.c | 16 +++++++++++++--- drivers/net/ethernet/ti/cpsw.h | 2 ++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/net/cpsw.txt b/Documentation/devicetree/bindings/net/cpsw.txt index c39f077..b997b96 100644 --- a/Documentation/devicetree/bindings/net/cpsw.txt +++ b/Documentation/devicetree/bindings/net/cpsw.txt @@ -34,6 +34,12 @@ Required properties: Optional properties: - dual_emac_res_vlan : Specifies VID to be used to segregate the ports - mac-address : Specifies slave MAC address +- ti,mac-address-ctrl : When cpsw-ctrl-macid support is compiled-in, this can + be set to a phandle with one argument, see + cpsw-ctrl-macid.txt. If this method fails, cpsw falls + back to a random mac-address. An explicit mac-address + property takes precedence. + Note: "ti,hwmods" field is used to fetch the base address and irq resources from TI, omap hwmod data base during device registration. diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 651087b..05f4948 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -1892,8 +1892,15 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data, } mac_addr = of_get_mac_address(slave_node); - if (mac_addr) - memcpy(slave_data->mac_addr, mac_addr, ETH_ALEN); + if (mac_addr) { + memcpy(slave_data->mac_addr, mac_addr, + ETH_ALEN); + } else { + ret = cpsw_ctrl_macid_read(slave_node, + slave_data->mac_addr); + if (ret == -EPROBE_DEFER) + return ret; + } slave_data->phy_if = of_get_phy_mode(slave_node); if (slave_data->phy_if < 0) { @@ -2038,10 +2045,13 @@ static int cpsw_probe(struct platform_device *pdev) /* Select default pin state */ pinctrl_pm_select_default_state(&pdev->dev); - if (cpsw_probe_dt(&priv->data, pdev)) { + ret = cpsw_probe_dt(&priv->data, pdev); + if (ret == -EINVAL) { pr_err("cpsw: platform data missing\n"); ret = -ENODEV; goto clean_runtime_disable_ret; + } else if (ret) { + goto clean_runtime_disable_ret; } data = &priv->data; diff --git a/drivers/net/ethernet/ti/cpsw.h b/drivers/net/ethernet/ti/cpsw.h index 1b71067..222eebe 100644 --- a/drivers/net/ethernet/ti/cpsw.h +++ b/drivers/net/ethernet/ti/cpsw.h @@ -42,4 +42,6 @@ struct cpsw_platform_data { void cpsw_phy_sel(struct device *dev, phy_interface_t phy_mode, int slave); +int cpsw_ctrl_macid_read(struct device_node *np, u8 *mac_addr); + #endif /* __CPSW_H__ */