The MAC address fetched by an NVMEM provider might have an offset to it. Add the support for it in nvmem_get_mac_address(). Signed-off-by: Michael Walle <michael@xxxxxxxx> --- drivers/of/of_net.c | 4 ++++ net/ethernet/eth.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c index dbac3a172a11..60c6048a823a 100644 --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c @@ -63,6 +63,7 @@ static int of_get_mac_addr_nvmem(struct device_node *np, u8 *addr) struct nvmem_cell *cell; const void *mac; size_t len; + u32 offset; int ret; /* Try lookup by device first, there might be a nvmem_cell_lookup @@ -92,6 +93,9 @@ static int of_get_mac_addr_nvmem(struct device_node *np, u8 *addr) memcpy(addr, mac, ETH_ALEN); kfree(mac); + if (!of_property_read_u32(np, "nvmem-mac-address-offset", &offset)) + eth_addr_add(addr, offset); + return 0; } diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 9cce612e8976..fe5311f614fe 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -541,6 +541,7 @@ int nvmem_get_mac_address(struct device *dev, void *addrbuf) { struct nvmem_cell *cell; const void *mac; + u32 offset; size_t len; cell = nvmem_cell_get(dev, "mac-address"); @@ -561,6 +562,10 @@ int nvmem_get_mac_address(struct device *dev, void *addrbuf) ether_addr_copy(addrbuf, mac); kfree(mac); + if (!device_property_read_u32(dev, "nvmem-mac-address-offset", + &offset)) + eth_addr_add(addrbuf, offset); + return 0; } EXPORT_SYMBOL(nvmem_get_mac_address); -- 2.20.1