]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
net: Add support for reading mac addresses from nvmem cells
authorSean Anderson <sean.anderson@seco.com>
Thu, 5 May 2022 17:11:41 +0000 (13:11 -0400)
committerTom Rini <trini@konsulko.com>
Wed, 8 Jun 2022 18:00:22 +0000 (14:00 -0400)
This adds support for reading mac addresses from the "mac-address" nvmem
cell. If there is no (local-)mac-address property, then we will try
reading from an nvmem cell.

For some existing examples of this property, refer to imx8mn.dtsi and
imx8mp.dtsi. Unfortunately, fuse drivers have not yet been converted
to DM.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
net/eth-uclass.c

index bcefc54ded891df8e3adb3e808059c3f484a5fd2..0f6b45b002c0be52ad15cd08c064d960ed475dd1 100644 (file)
@@ -14,6 +14,7 @@
 #include <env.h>
 #include <log.h>
 #include <net.h>
+#include <nvmem.h>
 #include <asm/global_data.h>
 #include <dm/device-internal.h>
 #include <dm/uclass-internal.h>
@@ -507,17 +508,21 @@ static bool eth_dev_get_mac_address(struct udevice *dev, u8 mac[ARP_HLEN])
 {
 #if CONFIG_IS_ENABLED(OF_CONTROL)
        const uint8_t *p;
+       struct nvmem_cell mac_cell;
 
        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)
-               return false;
+       if (p) {
+               memcpy(mac, p, ARP_HLEN);
+               return true;
+       }
 
-       memcpy(mac, p, ARP_HLEN);
+       if (nvmem_cell_get_by_name(dev, "mac-address", &mac_cell))
+               return false;
 
-       return true;
+       return !nvmem_cell_read(&mac_cell, mac, ARP_HLEN);
 #else
        return false;
 #endif