public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 2/2] net: eth-uclass: Support device tree MAC addresses
Date: Thu, 25 Apr 2019 15:34:16 +0200	[thread overview]
Message-ID: <20190425133416.GE10218@ulmo> (raw)
In-Reply-To: <4d60ae2d-661d-b4fa-0850-bbd68d213f77@ti.com>

On Thu, Apr 18, 2019 at 07:30:05PM +0300, Grygorii Strashko wrote:
> 
> 
> On 17.04.19 18:03, Thierry Reding wrote:
> > On Wed, Apr 17, 2019 at 02:49:22PM +0300, Grygorii Strashko wrote:
> >>
> >>
> >> On 16.04.19 19:24, Thierry Reding wrote:
> >>> From: Thierry Reding <treding@nvidia.com>
> >>>
> >>> Add the standard Ethernet device tree bindings (imported from v5.0 of
> >>> the Linux kernel) and implement support for reading the MAC address for
> >>> Ethernet devices in the Ethernet uclass. If the "mac-address" property
> >>> exists, the MAC address will be parsed from that. If that property does
> >>> not exist, the "local-mac-address" property will be tried as fallback.
> >>>
> >>> MAC addresses from device tree take precedence over the ones stored in
> >>> a network interface card's ROM.
> >>>
> >>> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
> >>> Signed-off-by: Thierry Reding <treding@nvidia.com>
> >>> ---
> >>> Changes in v2:
> >>> - use dev_read_u8_array_ptr()
> >>>
> >>>  .../devicetree/bindings/net/ethernet.txt      | 66 +++++++++++++++++++
> >>>  net/eth-uclass.c                              | 26 +++++++-
> >>>  2 files changed, 89 insertions(+), 3 deletions(-)
> >>>  create mode 100644 Documentation/devicetree/bindings/net/ethernet.txt
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/net/ethernet.txt b/Documentation/devicetree/bindings/net/ethernet.txt
> >>> new file mode 100644
> >>> index 000000000000..cfc376bc977a
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/net/ethernet.txt
> >>> @@ -0,0 +1,66 @@
> >>> +The following properties are common to the Ethernet controllers:
> >>> +
> >>> +NOTE: All 'phy*' properties documented below are Ethernet specific. For the
> >>> +generic PHY 'phys' property, see
> >>> +Documentation/devicetree/bindings/phy/phy-bindings.txt.
> >>> +
> >>> +- local-mac-address: array of 6 bytes, specifies the MAC address that was
> >>> +  assigned to the network device;
> >>> +- mac-address: array of 6 bytes, specifies the MAC address that was last used by
> >>> +  the boot program; should be used in cases where the MAC address assigned to
> >>> +  the device by the boot program is different from the "local-mac-address"
> >>> +  property;
> >>> +- nvmem-cells: phandle, reference to an nvmem node for the MAC address;
> >>> +- nvmem-cell-names: string, should be "mac-address" if nvmem is to be used;
> >>> +- max-speed: number, specifies maximum speed in Mbit/s supported by the device;
> >>> +- max-frame-size: number, maximum transfer unit (IEEE defined MTU), rather than
> >>> +  the maximum frame size (there's contradiction in the Devicetree
> >>> +  Specification).
> >>> +- phy-mode: string, operation mode of the PHY interface. This is now a de-facto
> >>> +  standard property; supported values are:
> >>> +  * "internal"
> >>> +  * "mii"
> >>> +  * "gmii"
> >>> +  * "sgmii"
> >>> +  * "qsgmii"
> >>> +  * "tbi"
> >>> +  * "rev-mii"
> >>> +  * "rmii"
> >>> +  * "rgmii" (RX and TX delays are added by the MAC when required)
> >>> +  * "rgmii-id" (RGMII with internal RX and TX delays provided by the PHY, the
> >>> +     MAC should not add the RX or TX delays in this case)
> >>> +  * "rgmii-rxid" (RGMII with internal RX delay provided by the PHY, the MAC
> >>> +     should not add an RX delay in this case)
> >>> +  * "rgmii-txid" (RGMII with internal TX delay provided by the PHY, the MAC
> >>> +     should not add an TX delay in this case)
> >>> +  * "rtbi"
> >>> +  * "smii"
> >>> +  * "xgmii"
> >>> +  * "trgmii"
> >>> +  * "2000base-x",
> >>> +  * "2500base-x",
> >>> +  * "rxaui"
> >>> +  * "xaui"
> >>> +  * "10gbase-kr" (10GBASE-KR, XFI, SFI)
> >>> +- phy-connection-type: the same as "phy-mode" property but described in the
> >>> +  Devicetree Specification;
> >>> +- phy-handle: phandle, specifies a reference to a node representing a PHY
> >>> +  device; this property is described in the Devicetree Specification and so
> >>> +  preferred;
> >>> +- phy: the same as "phy-handle" property, not recommended for new bindings.
> >>> +- phy-device: the same as "phy-handle" property, not recommended for new
> >>> +  bindings.
> >>> +- rx-fifo-depth: the size of the controller's receive fifo in bytes. This
> >>> +  is used for components that can have configurable receive fifo sizes,
> >>> +  and is useful for determining certain configuration settings such as
> >>> +  flow control thresholds.
> >>> +- tx-fifo-depth: the size of the controller's transmit fifo in bytes. This
> >>> +  is used for components that can have configurable fifo sizes.
> >>> +- managed: string, specifies the PHY management type. Supported values are:
> >>> +  "auto", "in-band-status". "auto" is the default, it usess MDIO for
> >>> +  management if fixed-link is not specified.
> >>> +
> >>> +Child nodes of the Ethernet controller are typically the individual PHY devices
> >>> +connected via the MDIO bus (sometimes the MDIO bus controller is separate).
> >>> +They are described in the phy.txt file in this same directory.
> >>> +For non-MDIO PHY management see fixed-link.txt.
> >>> diff --git a/net/eth-uclass.c b/net/eth-uclass.c
> >>> index 4225aabf1fa1..c6d5ec013bd8 100644
> >>> --- a/net/eth-uclass.c
> >>> +++ b/net/eth-uclass.c
> >>> @@ -455,6 +455,23 @@ static int eth_pre_unbind(struct udevice *dev)
> >>>  	return 0;
> >>>  }
> >>>  
> >>> +static bool eth_dev_get_mac_address(struct udevice *dev, u8 mac[ARP_HLEN])
> >>> +{
> >>> +	const uint8_t *p;
> >>> +
> >>> +	p = dev_read_u8_array_ptr(dev, "mac-address", ARP_HLEN);
> >>> +	if (!p)
> >>> +		p = dev_read_u8_array_ptr(dev, "local-mac-address", ARP_HLEN);
> >>> +
> >>> +	if (!p) {
> >>> +		memset(mac, 0, ARP_HLEN);
> >>> +		return false;
> >>> +	}
> >>> +
> >>> +	memcpy(mac, p, ARP_HLEN);
> >>> +	return true;
> >>> +}
> >>
> >> There are set of DT files in u-boot which have
> >> mac-address = [ 00 00 00 00 00 00 ];
> >>
> >> How will it work for them? 
> >> Wouldn't cause unexpected skipping eth_get_ops(dev)->read_rom_hwaddr(dev) call?
> > 
> > Not sure. Are devices with mac-address set to all zeros in the DT
> > expected to have a ROM from which the address could be read? Seems like
> > if the MAC address can be read from ROM there shouldn't be a need to
> > have an extra mac-address property in device tree.
> 
> 
> correct, for TI boards it's expected to populate mac address in DT by u-boot,
> so linux can use it.

Are you passing on the DT from U-Boot to the kernel for these devices?
This patch operates on U-Boot's built-in DTB (i.e. the control DTB), so
it should have no effect on what's passed to Linux.

> Not sure why there are zero "mac-address" property in DT - probably due to
> some historical reasons.

> 
> 
> > 
> > That said, if this really is a problem, I suppose we could add an
> > additional check to see if the MAC address read from DT is all zeros,
> > and if so attempt to read the ROM anyway.
> 
> I think, the linux code can be used as reference here:
> 
> static const void *of_get_mac_addr(struct device_node *np, const char *name)
> {
> 	struct property *pp = of_find_property(np, name, NULL);
> 
> 	if (pp && pp->length == ETH_ALEN && is_valid_ether_addr(pp->value))
> 
> ^^^^ there is additional check is_valid_ether_addr()
> 
> 		return pp->value;
> 	return NULL;
> }

I've added that check now and will resend the patch.

Thanks,
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190425/dc11455d/attachment.sig>

  reply	other threads:[~2019-04-25 13:34 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-16 16:24 [U-Boot] [PATCH v2 1/2] net: eth-uclass: Write MAC address to hardware after probe Thierry Reding
2019-04-16 16:24 ` [U-Boot] [PATCH v2 2/2] net: eth-uclass: Support device tree MAC addresses Thierry Reding
2019-04-17 11:49   ` Grygorii Strashko
2019-04-17 15:03     ` Thierry Reding
2019-04-18  4:32       ` Simon Glass
2019-04-25 13:22         ` Thierry Reding
2019-04-18 16:30       ` Grygorii Strashko
2019-04-25 13:34         ` Thierry Reding [this message]
2019-04-16 16:37 ` [U-Boot] [PATCH v2 1/2] net: eth-uclass: Write MAC address to hardware after probe Joe Hershberger

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=20190425133416.GE10218@ulmo \
    --to=thierry.reding@gmail.com \
    --cc=u-boot@lists.denx.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox