All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mugunthan V N <mugunthanvnm@ti.com>
To: Markus Pargmann <mpa@pengutronix.de>,
	"David S. Miller" <davem@davemloft.net>
Cc: "Benoît Cousson" <bcousson@baylibre.com>,
	"Tony Lindgren" <tony@atomide.com>,
	"Wolfram Sang" <wsa@the-dreams.de>,
	"Steven Rostedt" <rostedt@goodmis.org>,
	linux-omap@vger.kernel.org, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, kernel@pengutronix.de
Subject: Re: [PATCH v4 5/7] net: cpsw: Add am33xx MACID readout
Date: Thu, 21 Aug 2014 14:51:53 +0530	[thread overview]
Message-ID: <53F5BA31.6030703@ti.com> (raw)
In-Reply-To: <1408600314-19824-6-git-send-email-mpa@pengutronix.de>

On Thursday 21 August 2014 11:21 AM, Markus Pargmann wrote:
> This patch adds a function to get the MACIDs from the am33xx SoC
> control module registers which hold unique vendor MACIDs. This is only
> used if of_get_mac_address() fails to get a valid mac address.
>
> Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
> Reviewed-by: Wolfram Sang <wsa@the-dreams.de>
> Tested-by: Steven Rostedt <rostedt@goodmis.org>
> ---
>  Documentation/devicetree/bindings/net/cpsw.txt |  4 +++
>  drivers/net/ethernet/ti/Kconfig                |  2 ++
>  drivers/net/ethernet/ti/cpsw.c                 | 46 ++++++++++++++++++++++++--
>  3 files changed, 50 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/net/cpsw.txt b/Documentation/devicetree/bindings/net/cpsw.txt
> index 107caf174a0e..33fe8462edf4 100644
> --- a/Documentation/devicetree/bindings/net/cpsw.txt
> +++ b/Documentation/devicetree/bindings/net/cpsw.txt
> @@ -24,6 +24,8 @@ Optional properties:
>  - ti,hwmods		: Must be "cpgmac0"
>  - no_bd_ram		: Must be 0 or 1
>  - dual_emac		: Specifies Switch to act as Dual EMAC
> +- syscon		: Phandle to the system control device node, which is
> +			  the control module device of the am33x
>  
>  Slave Properties:
>  Required properties:
> @@ -57,6 +59,7 @@ Examples:
>  		active_slave = <0>;
>  		cpts_clock_mult = <0x80000000>;
>  		cpts_clock_shift = <29>;
> +		syscon = <&cm>;
>  		cpsw_emac0: slave@0 {
>  			phy_id = <&davinci_mdio>, <0>;
>  			phy-mode = "rgmii-txid";
> @@ -85,6 +88,7 @@ Examples:
>  		active_slave = <0>;
>  		cpts_clock_mult = <0x80000000>;
>  		cpts_clock_shift = <29>;
> +		syscon = <&cm>;
>  		cpsw_emac0: slave@0 {
>  			phy_id = <&davinci_mdio>, <0>;
>  			phy-mode = "rgmii-txid";
> diff --git a/drivers/net/ethernet/ti/Kconfig b/drivers/net/ethernet/ti/Kconfig
> index 1769700a6070..5d8cb7956113 100644
> --- a/drivers/net/ethernet/ti/Kconfig
> +++ b/drivers/net/ethernet/ti/Kconfig
> @@ -62,6 +62,8 @@ config TI_CPSW
>  	select TI_DAVINCI_CPDMA
>  	select TI_DAVINCI_MDIO
>  	select TI_CPSW_PHY_SEL
> +	select MFD_SYSCON
> +	select REGMAP
>  	---help---
>  	  This driver supports TI's CPSW Ethernet Switch.
>  
> diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
> index 0bc2c2a2c236..aaf8a42f9633 100644
> --- a/drivers/net/ethernet/ti/cpsw.c
> +++ b/drivers/net/ethernet/ti/cpsw.c
> @@ -33,6 +33,8 @@
>  #include <linux/of_net.h>
>  #include <linux/of_device.h>
>  #include <linux/if_vlan.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/regmap.h>
>  
>  #include <linux/pinctrl/consumer.h>
>  
> @@ -1816,6 +1818,39 @@ static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_priv *priv,
>  	slave->port_vlan = data->dual_emac_res_vlan;
>  }
>  
> +#define AM33XX_CTRL_MAC_LO_REG(id) (0x630 + 0x8 * id)
> +#define AM33XX_CTRL_MAC_HI_REG(id) (0x630 + 0x8 * id + 0x4)
> +
> +static int cpsw_am33xx_cm_get_macid(struct device *dev, int slave,
> +		u8 *mac_addr)
> +{
> +	u32 macid_lo;
> +	u32 macid_hi;
> +	struct regmap *syscon;
> +
> +	if (!of_machine_is_compatible("ti,am33xx"))
> +		return 0;
> +
> +	syscon = syscon_regmap_lookup_by_phandle(dev->of_node, "syscon");
> +	if (IS_ERR(syscon)) {
> +		if (PTR_ERR(syscon) == -ENODEV)
> +			return 0;
> +		return PTR_ERR(syscon);
> +	}
> +
> +	regmap_read(syscon, AM33XX_CTRL_MAC_LO_REG(slave), &macid_lo);
> +	regmap_read(syscon, AM33XX_CTRL_MAC_HI_REG(slave), &macid_hi);
> +
> +	mac_addr[5] = (macid_lo >> 8) & 0xff;
> +	mac_addr[4] = macid_lo & 0xff;
> +	mac_addr[3] = (macid_hi >> 24) & 0xff;
> +	mac_addr[2] = (macid_hi >> 16) & 0xff;
> +	mac_addr[1] = (macid_hi >> 8) & 0xff;
> +	mac_addr[0] = macid_hi & 0xff;
> +
> +	return 0;
> +}
> +
>  static int cpsw_probe_dt(struct cpsw_platform_data *data,
>  			 struct platform_device *pdev)
>  {
> @@ -1928,8 +1963,15 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
>  			 PHY_ID_FMT, mdio->name, phyid);
>  
>  		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);

Alignment should match open parenthesis

> +		} else {
> +			ret = cpsw_am33xx_cm_get_macid(&pdev->dev, i,
> +					slave_data->mac_addr);
> +			if (ret)
> +				return ret;
> +		}
>  
>  		slave_data->phy_if = of_get_phy_mode(slave_node);
>  		if (slave_data->phy_if < 0) {


WARNING: multiple messages have this Message-ID (diff)
From: mugunthanvnm@ti.com (Mugunthan V N)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 5/7] net: cpsw: Add am33xx MACID readout
Date: Thu, 21 Aug 2014 14:51:53 +0530	[thread overview]
Message-ID: <53F5BA31.6030703@ti.com> (raw)
In-Reply-To: <1408600314-19824-6-git-send-email-mpa@pengutronix.de>

On Thursday 21 August 2014 11:21 AM, Markus Pargmann wrote:
> This patch adds a function to get the MACIDs from the am33xx SoC
> control module registers which hold unique vendor MACIDs. This is only
> used if of_get_mac_address() fails to get a valid mac address.
>
> Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
> Reviewed-by: Wolfram Sang <wsa@the-dreams.de>
> Tested-by: Steven Rostedt <rostedt@goodmis.org>
> ---
>  Documentation/devicetree/bindings/net/cpsw.txt |  4 +++
>  drivers/net/ethernet/ti/Kconfig                |  2 ++
>  drivers/net/ethernet/ti/cpsw.c                 | 46 ++++++++++++++++++++++++--
>  3 files changed, 50 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/net/cpsw.txt b/Documentation/devicetree/bindings/net/cpsw.txt
> index 107caf174a0e..33fe8462edf4 100644
> --- a/Documentation/devicetree/bindings/net/cpsw.txt
> +++ b/Documentation/devicetree/bindings/net/cpsw.txt
> @@ -24,6 +24,8 @@ Optional properties:
>  - ti,hwmods		: Must be "cpgmac0"
>  - no_bd_ram		: Must be 0 or 1
>  - dual_emac		: Specifies Switch to act as Dual EMAC
> +- syscon		: Phandle to the system control device node, which is
> +			  the control module device of the am33x
>  
>  Slave Properties:
>  Required properties:
> @@ -57,6 +59,7 @@ Examples:
>  		active_slave = <0>;
>  		cpts_clock_mult = <0x80000000>;
>  		cpts_clock_shift = <29>;
> +		syscon = <&cm>;
>  		cpsw_emac0: slave at 0 {
>  			phy_id = <&davinci_mdio>, <0>;
>  			phy-mode = "rgmii-txid";
> @@ -85,6 +88,7 @@ Examples:
>  		active_slave = <0>;
>  		cpts_clock_mult = <0x80000000>;
>  		cpts_clock_shift = <29>;
> +		syscon = <&cm>;
>  		cpsw_emac0: slave at 0 {
>  			phy_id = <&davinci_mdio>, <0>;
>  			phy-mode = "rgmii-txid";
> diff --git a/drivers/net/ethernet/ti/Kconfig b/drivers/net/ethernet/ti/Kconfig
> index 1769700a6070..5d8cb7956113 100644
> --- a/drivers/net/ethernet/ti/Kconfig
> +++ b/drivers/net/ethernet/ti/Kconfig
> @@ -62,6 +62,8 @@ config TI_CPSW
>  	select TI_DAVINCI_CPDMA
>  	select TI_DAVINCI_MDIO
>  	select TI_CPSW_PHY_SEL
> +	select MFD_SYSCON
> +	select REGMAP
>  	---help---
>  	  This driver supports TI's CPSW Ethernet Switch.
>  
> diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
> index 0bc2c2a2c236..aaf8a42f9633 100644
> --- a/drivers/net/ethernet/ti/cpsw.c
> +++ b/drivers/net/ethernet/ti/cpsw.c
> @@ -33,6 +33,8 @@
>  #include <linux/of_net.h>
>  #include <linux/of_device.h>
>  #include <linux/if_vlan.h>
> +#include <linux/mfd/syscon.h>
> +#include <linux/regmap.h>
>  
>  #include <linux/pinctrl/consumer.h>
>  
> @@ -1816,6 +1818,39 @@ static void cpsw_slave_init(struct cpsw_slave *slave, struct cpsw_priv *priv,
>  	slave->port_vlan = data->dual_emac_res_vlan;
>  }
>  
> +#define AM33XX_CTRL_MAC_LO_REG(id) (0x630 + 0x8 * id)
> +#define AM33XX_CTRL_MAC_HI_REG(id) (0x630 + 0x8 * id + 0x4)
> +
> +static int cpsw_am33xx_cm_get_macid(struct device *dev, int slave,
> +		u8 *mac_addr)
> +{
> +	u32 macid_lo;
> +	u32 macid_hi;
> +	struct regmap *syscon;
> +
> +	if (!of_machine_is_compatible("ti,am33xx"))
> +		return 0;
> +
> +	syscon = syscon_regmap_lookup_by_phandle(dev->of_node, "syscon");
> +	if (IS_ERR(syscon)) {
> +		if (PTR_ERR(syscon) == -ENODEV)
> +			return 0;
> +		return PTR_ERR(syscon);
> +	}
> +
> +	regmap_read(syscon, AM33XX_CTRL_MAC_LO_REG(slave), &macid_lo);
> +	regmap_read(syscon, AM33XX_CTRL_MAC_HI_REG(slave), &macid_hi);
> +
> +	mac_addr[5] = (macid_lo >> 8) & 0xff;
> +	mac_addr[4] = macid_lo & 0xff;
> +	mac_addr[3] = (macid_hi >> 24) & 0xff;
> +	mac_addr[2] = (macid_hi >> 16) & 0xff;
> +	mac_addr[1] = (macid_hi >> 8) & 0xff;
> +	mac_addr[0] = macid_hi & 0xff;
> +
> +	return 0;
> +}
> +
>  static int cpsw_probe_dt(struct cpsw_platform_data *data,
>  			 struct platform_device *pdev)
>  {
> @@ -1928,8 +1963,15 @@ static int cpsw_probe_dt(struct cpsw_platform_data *data,
>  			 PHY_ID_FMT, mdio->name, phyid);
>  
>  		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);

Alignment should match open parenthesis

> +		} else {
> +			ret = cpsw_am33xx_cm_get_macid(&pdev->dev, i,
> +					slave_data->mac_addr);
> +			if (ret)
> +				return ret;
> +		}
>  
>  		slave_data->phy_if = of_get_phy_mode(slave_node);
>  		if (slave_data->phy_if < 0) {

  reply	other threads:[~2014-08-21  9:22 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-21  5:51 [PATCH v4 0/7] net: cpsw: Support for am335x chip MACIDs Markus Pargmann
2014-08-21  5:51 ` Markus Pargmann
2014-08-21  5:51 ` [PATCH v4 1/7] DT doc: net: cpsw mac-address is optional Markus Pargmann
2014-08-21  5:51   ` Markus Pargmann
2014-08-21  5:51 ` [PATCH v4 2/7] net: cpsw: Add missing return value Markus Pargmann
2014-08-21  5:51   ` Markus Pargmann
     [not found] ` <1408600314-19824-1-git-send-email-mpa-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2014-08-21  5:51   ` [PATCH v4 3/7] net: cpsw: header, Add missing include Markus Pargmann
2014-08-21  5:51     ` Markus Pargmann
2014-08-21  5:51 ` [PATCH v4 4/7] net: cpsw: Replace pr_err by dev_err Markus Pargmann
2014-08-21  5:51   ` Markus Pargmann
2014-08-21  5:51 ` [PATCH v4 5/7] net: cpsw: Add am33xx MACID readout Markus Pargmann
2014-08-21  5:51   ` Markus Pargmann
2014-08-21  9:21   ` Mugunthan V N [this message]
2014-08-21  9:21     ` Mugunthan V N
2014-08-24 15:44     ` Markus Pargmann
2014-08-24 15:44       ` Markus Pargmann
2014-08-21  5:51 ` [PATCH v4 6/7] am33xx: define syscon control module device node Markus Pargmann
2014-08-21  5:51   ` Markus Pargmann
2014-08-21  5:51 ` [PATCH v4 7/7] arm: dts: am33xx, Add syscon phandle to cpsw node Markus Pargmann
2014-08-21  5:51   ` Markus Pargmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53F5BA31.6030703@ti.com \
    --to=mugunthanvnm@ti.com \
    --cc=bcousson@baylibre.com \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=mpa@pengutronix.de \
    --cc=rostedt@goodmis.org \
    --cc=tony@atomide.com \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.