Re: [PATCH net-next v3 4/9] device property: move mac addr helpers to eth.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 06, 2021 at 06:06:57PM -0700, Jakub Kicinski wrote:
> Move the mac address helpers out, eth.c already contains
> a bunch of similar helpers.
> 
> Suggested-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> Acked-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>

FWIW:

Reviewed-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>

> ---
> v2: new patch
> ---
>  drivers/base/property.c     | 63 -------------------------------------
>  include/linux/etherdevice.h |  6 ++++
>  include/linux/property.h    |  4 ---
>  net/ethernet/eth.c          | 63 +++++++++++++++++++++++++++++++++++++
>  4 files changed, 69 insertions(+), 67 deletions(-)
> 
> diff --git a/drivers/base/property.c b/drivers/base/property.c
> index 453918eb7390..f1f35b48ab8b 100644
> --- a/drivers/base/property.c
> +++ b/drivers/base/property.c
> @@ -15,7 +15,6 @@
>  #include <linux/of_graph.h>
>  #include <linux/of_irq.h>
>  #include <linux/property.h>
> -#include <linux/etherdevice.h>
>  #include <linux/phy.h>
>  
>  struct fwnode_handle *dev_fwnode(struct device *dev)
> @@ -935,68 +934,6 @@ int device_get_phy_mode(struct device *dev)
>  }
>  EXPORT_SYMBOL_GPL(device_get_phy_mode);
>  
> -static void *fwnode_get_mac_addr(struct fwnode_handle *fwnode,
> -				 const char *name, char *addr,
> -				 int alen)
> -{
> -	int ret = fwnode_property_read_u8_array(fwnode, name, addr, alen);
> -
> -	if (ret == 0 && alen == ETH_ALEN && is_valid_ether_addr(addr))
> -		return addr;
> -	return NULL;
> -}
> -
> -/**
> - * fwnode_get_mac_address - Get the MAC from the firmware node
> - * @fwnode:	Pointer to the firmware node
> - * @addr:	Address of buffer to store the MAC in
> - * @alen:	Length of the buffer pointed to by addr, should be ETH_ALEN
> - *
> - * Search the firmware node for the best MAC address to use.  'mac-address' is
> - * checked first, because that is supposed to contain to "most recent" MAC
> - * address. If that isn't set, then 'local-mac-address' is checked next,
> - * because that is the default address.  If that isn't set, then the obsolete
> - * 'address' is checked, just in case we're using an old device tree.
> - *
> - * Note that the 'address' property is supposed to contain a virtual address of
> - * the register set, but some DTS files have redefined that property to be the
> - * MAC address.
> - *
> - * All-zero MAC addresses are rejected, because those could be properties that
> - * exist in the firmware tables, but were not updated by the firmware.  For
> - * example, the DTS could define 'mac-address' and 'local-mac-address', with
> - * zero MAC addresses.  Some older U-Boots only initialized 'local-mac-address'.
> - * In this case, the real MAC is in 'local-mac-address', and 'mac-address'
> - * exists but is all zeros.
> -*/
> -void *fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr, int alen)
> -{
> -	char *res;
> -
> -	res = fwnode_get_mac_addr(fwnode, "mac-address", addr, alen);
> -	if (res)
> -		return res;
> -
> -	res = fwnode_get_mac_addr(fwnode, "local-mac-address", addr, alen);
> -	if (res)
> -		return res;
> -
> -	return fwnode_get_mac_addr(fwnode, "address", addr, alen);
> -}
> -EXPORT_SYMBOL(fwnode_get_mac_address);
> -
> -/**
> - * device_get_mac_address - Get the MAC for a given device
> - * @dev:	Pointer to the device
> - * @addr:	Address of buffer to store the MAC in
> - * @alen:	Length of the buffer pointed to by addr, should be ETH_ALEN
> - */
> -void *device_get_mac_address(struct device *dev, char *addr, int alen)
> -{
> -	return fwnode_get_mac_address(dev_fwnode(dev), addr, alen);
> -}
> -EXPORT_SYMBOL(device_get_mac_address);
> -
>  /**
>   * fwnode_irq_get - Get IRQ directly from a fwnode
>   * @fwnode:	Pointer to the firmware node
> diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
> index c8442d954d19..b3b6591d84c6 100644
> --- a/include/linux/etherdevice.h
> +++ b/include/linux/etherdevice.h
> @@ -26,9 +26,15 @@
>  
>  #ifdef __KERNEL__
>  struct device;
> +struct fwnode_handle;
> +
>  int eth_platform_get_mac_address(struct device *dev, u8 *mac_addr);
>  unsigned char *arch_get_platform_mac_address(void);
>  int nvmem_get_mac_address(struct device *dev, void *addrbuf);
> +void *device_get_mac_address(struct device *dev, char *addr, int alen);
> +void *fwnode_get_mac_address(struct fwnode_handle *fwnode,
> +			     char *addr, int alen);
> +
>  u32 eth_get_headlen(const struct net_device *dev, const void *data, u32 len);
>  __be16 eth_type_trans(struct sk_buff *skb, struct net_device *dev);
>  extern const struct header_ops eth_header_ops;
> diff --git a/include/linux/property.h b/include/linux/property.h
> index 357513a977e5..4fb081684255 100644
> --- a/include/linux/property.h
> +++ b/include/linux/property.h
> @@ -389,11 +389,7 @@ const void *device_get_match_data(struct device *dev);
>  
>  int device_get_phy_mode(struct device *dev);
>  
> -void *device_get_mac_address(struct device *dev, char *addr, int alen);
> -
>  int fwnode_get_phy_mode(struct fwnode_handle *fwnode);
> -void *fwnode_get_mac_address(struct fwnode_handle *fwnode,
> -			     char *addr, int alen);
>  struct fwnode_handle *fwnode_graph_get_next_endpoint(
>  	const struct fwnode_handle *fwnode, struct fwnode_handle *prev);
>  struct fwnode_handle *
> diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
> index b57530c231a6..9ea45aae04ee 100644
> --- a/net/ethernet/eth.c
> +++ b/net/ethernet/eth.c
> @@ -51,6 +51,7 @@
>  #include <linux/if_ether.h>
>  #include <linux/of_net.h>
>  #include <linux/pci.h>
> +#include <linux/property.h>
>  #include <net/dst.h>
>  #include <net/arp.h>
>  #include <net/sock.h>
> @@ -558,3 +559,65 @@ int nvmem_get_mac_address(struct device *dev, void *addrbuf)
>  	return 0;
>  }
>  EXPORT_SYMBOL(nvmem_get_mac_address);
> +
> +static void *fwnode_get_mac_addr(struct fwnode_handle *fwnode,
> +				 const char *name, char *addr,
> +				 int alen)
> +{
> +	int ret = fwnode_property_read_u8_array(fwnode, name, addr, alen);
> +
> +	if (ret == 0 && alen == ETH_ALEN && is_valid_ether_addr(addr))
> +		return addr;
> +	return NULL;
> +}
> +
> +/**
> + * fwnode_get_mac_address - Get the MAC from the firmware node
> + * @fwnode:	Pointer to the firmware node
> + * @addr:	Address of buffer to store the MAC in
> + * @alen:	Length of the buffer pointed to by addr, should be ETH_ALEN
> + *
> + * Search the firmware node for the best MAC address to use.  'mac-address' is
> + * checked first, because that is supposed to contain to "most recent" MAC
> + * address. If that isn't set, then 'local-mac-address' is checked next,
> + * because that is the default address.  If that isn't set, then the obsolete
> + * 'address' is checked, just in case we're using an old device tree.
> + *
> + * Note that the 'address' property is supposed to contain a virtual address of
> + * the register set, but some DTS files have redefined that property to be the
> + * MAC address.
> + *
> + * All-zero MAC addresses are rejected, because those could be properties that
> + * exist in the firmware tables, but were not updated by the firmware.  For
> + * example, the DTS could define 'mac-address' and 'local-mac-address', with
> + * zero MAC addresses.  Some older U-Boots only initialized 'local-mac-address'.
> + * In this case, the real MAC is in 'local-mac-address', and 'mac-address'
> + * exists but is all zeros.
> + */
> +void *fwnode_get_mac_address(struct fwnode_handle *fwnode, char *addr, int alen)
> +{
> +	char *res;
> +
> +	res = fwnode_get_mac_addr(fwnode, "mac-address", addr, alen);
> +	if (res)
> +		return res;
> +
> +	res = fwnode_get_mac_addr(fwnode, "local-mac-address", addr, alen);
> +	if (res)
> +		return res;
> +
> +	return fwnode_get_mac_addr(fwnode, "address", addr, alen);
> +}
> +EXPORT_SYMBOL(fwnode_get_mac_address);
> +
> +/**
> + * device_get_mac_address - Get the MAC for a given device
> + * @dev:	Pointer to the device
> + * @addr:	Address of buffer to store the MAC in
> + * @alen:	Length of the buffer pointed to by addr, should be ETH_ALEN
> + */
> +void *device_get_mac_address(struct device *dev, char *addr, int alen)
> +{
> +	return fwnode_get_mac_address(dev_fwnode(dev), addr, alen);
> +}
> +EXPORT_SYMBOL(device_get_mac_address);
> -- 
> 2.31.1

thanks,

-- 
heikki



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux