bus/dpaa: add API to get MAC address

Signed-off-by: Akhil Goyal <akhil.goyal@nxp.com>
Acked-by: Shreyansh Jain <shreyansh.jain@nxp.com>
This commit is contained in:
Akhil Goyal 2018-07-06 13:40:04 +05:30 committed by Thomas Monjalon
parent 9abdad12b8
commit d6995aa332
3 changed files with 49 additions and 0 deletions

View File

@ -546,3 +546,42 @@ of_device_is_compatible(const struct device_node *dev_node,
return true;
return false;
}
static const void *of_get_mac_addr(const struct device_node *np,
const char *name)
{
return of_get_property(np, name, NULL);
}
/**
* Search the device tree 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 device tree, but were not set by U-Boot. 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.
*/
const void *of_get_mac_address(const struct device_node *np)
{
const void *addr;
addr = of_get_mac_addr(np, "mac-address");
if (addr)
return addr;
addr = of_get_mac_addr(np, "local-mac-address");
if (addr)
return addr;
return of_get_mac_addr(np, "address");
}

View File

@ -109,6 +109,8 @@ const struct device_node *of_get_parent(const struct device_node *dev_node);
const struct device_node *of_get_next_child(const struct device_node *dev_node,
const struct device_node *prev);
const void *of_get_mac_address(const struct device_node *np);
#define for_each_child_node(parent, child) \
for (child = of_get_next_child(parent, NULL); child != NULL; \
child = of_get_next_child(parent, child))

View File

@ -92,3 +92,11 @@ DPDK_18.02 {
local: *;
} DPDK_17.11;
DPDK_18.08 {
global:
of_get_mac_address;
local: *;
} DPDK_18.02;