From patchwork Mon Jul 4 05:50:22 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shawn Guo X-Patchwork-Id: 2433 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 917C723F54 for ; Mon, 4 Jul 2011 05:44:06 +0000 (UTC) Received: from mail-qw0-f52.google.com (mail-qw0-f52.google.com [209.85.216.52]) by fiordland.canonical.com (Postfix) with ESMTP id 46D65A18809 for ; Mon, 4 Jul 2011 05:44:06 +0000 (UTC) Received: by qwb8 with SMTP id 8so3355565qwb.11 for ; Sun, 03 Jul 2011 22:44:05 -0700 (PDT) Received: by 10.229.54.12 with SMTP id o12mr762297qcg.80.1309758245711; Sun, 03 Jul 2011 22:44:05 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.229.48.135 with SMTP id r7cs19799qcf; Sun, 3 Jul 2011 22:44:05 -0700 (PDT) Received: by 10.42.108.6 with SMTP id f6mr259109icp.327.1309758244707; Sun, 03 Jul 2011 22:44:04 -0700 (PDT) Received: from TX2EHSOBE004.bigfish.com (tx2ehsobe002.messaging.microsoft.com [65.55.88.12]) by mx.google.com with ESMTPS id o7si7649288iba.0.2011.07.03.22.44.04 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 03 Jul 2011 22:44:04 -0700 (PDT) Received-SPF: neutral (google.com: 65.55.88.12 is neither permitted nor denied by best guess record for domain of r65073@freescale.com) client-ip=65.55.88.12; Authentication-Results: mx.google.com; spf=neutral (google.com: 65.55.88.12 is neither permitted nor denied by best guess record for domain of r65073@freescale.com) smtp.mail=r65073@freescale.com Received: from mail32-tx2-R.bigfish.com (10.9.14.243) by TX2EHSOBE004.bigfish.com (10.9.40.24) with Microsoft SMTP Server id 14.1.225.22; Mon, 4 Jul 2011 05:44:03 +0000 Received: from mail32-tx2 (localhost.localdomain [127.0.0.1]) by mail32-tx2-R.bigfish.com (Postfix) with ESMTP id 6C871258124; Mon, 4 Jul 2011 05:44:03 +0000 (UTC) X-SpamScore: -12 X-BigFish: VS-12(zz146fK1432N98dKzz1202hzz8275ch8275dhz2dh2a8h668h839h944h61h) X-Spam-TCS-SCL: 0:0 X-Forefront-Antispam-Report: CIP:70.37.183.190; KIP:(null); UIP:(null); IPVD:NLI; H:mail.freescale.net; RD:none; EFVD:NLI Received: from mail32-tx2 (localhost.localdomain [127.0.0.1]) by mail32-tx2 (MessageSwitch) id 1309758243248153_18825; Mon, 4 Jul 2011 05:44:03 +0000 (UTC) Received: from TX2EHSMHS032.bigfish.com (unknown [10.9.14.254]) by mail32-tx2.bigfish.com (Postfix) with ESMTP id 372954E0050; Mon, 4 Jul 2011 05:44:03 +0000 (UTC) Received: from mail.freescale.net (70.37.183.190) by TX2EHSMHS032.bigfish.com (10.9.99.132) with Microsoft SMTP Server (TLS) id 14.1.225.22; Mon, 4 Jul 2011 05:44:03 +0000 Received: from az33smr01.freescale.net (10.64.34.199) by 039-SN1MMR1-001.039d.mgd.msft.net (10.84.1.13) with Microsoft SMTP Server id 14.1.289.8; Mon, 4 Jul 2011 00:44:02 -0500 Received: from S2100-06.ap.freescale.net (S2100-06.ap.freescale.net [10.192.242.125]) by az33smr01.freescale.net (8.13.1/8.13.0) with ESMTP id p645hxD0017064; Mon, 4 Jul 2011 00:43:59 -0500 (CDT) Date: Mon, 4 Jul 2011 13:50:22 +0800 From: Shawn Guo To: Grant Likely CC: Shawn Guo , , , , Jason Liu , "David S. Miller" , Subject: Re: [PATCH] net/fec: add device tree probe support Message-ID: <20110704055021.GC10245@S2100-06.ap.freescale.net> References: <1309680401-22904-1-git-send-email-shawn.guo@linaro.org> <20110703212312.GD13742@ponder.secretlab.ca> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20110703212312.GD13742@ponder.secretlab.ca> User-Agent: Mutt/1.5.21 (2010-09-15) X-OriginatorOrg: freescale.com On Sun, Jul 03, 2011 at 03:23:12PM -0600, Grant Likely wrote: > On Sun, Jul 03, 2011 at 04:06:41PM +0800, Shawn Guo wrote: > > It adds device tree probe support for fec driver. > > > > Signed-off-by: Jason Liu > > Signed-off-by: Shawn Guo > > Cc: David S. Miller > > Cc: Grant Likely > > Minor comments below. After addressing them you can add my: > > Acked-by: Grant Likely > > I don't see any reason not to merge this one in v3.1 > > g. > > > --- > > Documentation/devicetree/bindings/net/fsl-fec.txt | 24 ++++ > > drivers/net/fec.c | 120 ++++++++++++++++++++- > > 2 files changed, 139 insertions(+), 5 deletions(-) > > create mode 100644 Documentation/devicetree/bindings/net/fsl-fec.txt > > > > diff --git a/Documentation/devicetree/bindings/net/fsl-fec.txt b/Documentation/devicetree/bindings/net/fsl-fec.txt > > new file mode 100644 > > index 0000000..1dad888 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/net/fsl-fec.txt > > @@ -0,0 +1,24 @@ > > +* Freescale Fast Ethernet Controller (FEC) > > + > > +Required properties: > > +- compatible : Should be "fsl,-fec" > > +- reg : Address and length of the register set for the device > > +- interrupts : Should contain fec interrupt > > +- phy-mode : String, operation mode of the PHY interface. > > + Supported values are: "mii", "gmii", "sgmii", "tbi", "rmii", > > + "rgmii", "rgmii-id", "rgmii-rxid", "rgmii-txid", "rtbi". > > We don't have a common binding for this yet. Should be > "fsl,phy-mode". > There is nothing really fsl specific. How does the following patch look to you? ---8<--------- ------------ [...] > > @@ -734,8 +748,25 @@ static void __inline__ fec_get_mac(struct net_device *ndev) > > */ > > iap = macaddr; > > > > +#ifdef CONFIG_OF > > + /* > > + * 2) from device tree data > > + */ > > + if (!is_valid_ether_addr(iap)) { > > + struct device_node *np = fep->pdev->dev.of_node; > > + if (np) { > > + const char *mac; > > + int err; > > + err = of_property_read_string(np, > > + "local-mac-address", &mac); > > + if (err) > > + iap = (unsigned char *) mac; > > There is already a function for doing this. of_get_mac_address(). > And mac address is *not* a string, it is a byte array. > Yes, I mistakenly converted of_find_property to of_property_read_string. Anyway, I'm now using of_get_mac_address as you suggested. diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c index 86f334a..cc117db 100644 --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c @@ -8,6 +8,49 @@ #include #include #include +#include + +/** + * It maps 'enum phy_interface_t' found in include/linux/phy.h + * into the device tree binding of 'phy-mode', so that Ethernet + * device driver can get phy interface from device tree. + */ +static const char *phy_modes[] = { + [PHY_INTERFACE_MODE_MII] = "mii", + [PHY_INTERFACE_MODE_GMII] = "gmii", + [PHY_INTERFACE_MODE_SGMII] = "sgmii", + [PHY_INTERFACE_MODE_TBI] = "tbi", + [PHY_INTERFACE_MODE_RMII] = "rmii", + [PHY_INTERFACE_MODE_RGMII] = "rgmii", + [PHY_INTERFACE_MODE_RGMII_ID] = "rgmii-id", + [PHY_INTERFACE_MODE_RGMII_RXID] = "rgmii-rxid", + [PHY_INTERFACE_MODE_RGMII_TXID] = "rgmii-txid", + [PHY_INTERFACE_MODE_RTBI] = "rtbi", +}; + +/** + * of_get_phy_mode - Get phy mode for given device_node + * @np: Pointer to the given device_node + * + * The function gets phy interface string from property 'phy-mode', + * and return its index in phy_modes table, or errno in error case. + */ +const int of_get_phy_mode(struct device_node *np) +{ + const char *pm; + int err, i; + + err = of_property_read_string(np, "phy-mode", &pm); + if (err < 0) + return err; + + for (i = 0; i < ARRAY_SIZE(phy_modes); i++) + if (!strcasecmp(pm, phy_modes[i])) + return i; + + return -ENODEV; +} +EXPORT_SYMBOL_GPL(of_get_phy_mode); /** * Search the device tree for the best MAC address to use. 'mac-address' is