diff mbox series

[v3,10/13] net: Add support for reading mac addresses from nvmem cells

Message ID 20220418193659.3677824-11-sean.anderson@seco.com
State Changes Requested
Delegated to: Tom Rini
Headers show
Series Add support for NVMEM API | expand

Commit Message

Sean Anderson April 18, 2022, 7:36 p.m. UTC
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>
---

(no changes since v1)

 net/eth-uclass.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

Comments

Tom Rini April 29, 2022, 2:48 p.m. UTC | #1
On Mon, Apr 18, 2022 at 03:36:56PM -0400, Sean Anderson wrote:

> 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>

So, this breaks sandbox_noinst as drivers/misc/i2c_eeprom_emul.c does
not provide i2c_eeprom_read(...) and we fail to link.
diff mbox series

Patch

diff --git a/net/eth-uclass.c b/net/eth-uclass.c
index 58c308f332..211e88fbbe 100644
--- a/net/eth-uclass.c
+++ b/net/eth-uclass.c
@@ -13,6 +13,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>
@@ -499,17 +500,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)
+	if (p) {
+		memcpy(mac, p, ARP_HLEN);
+		return true;
+	}
+
+	if (nvmem_cell_get_by_name(dev, "mac-address", &mac_cell))
 		return false;
 
-	memcpy(mac, p, ARP_HLEN);
-
-	return true;
+	return !nvmem_cell_read(&mac_cell, mac, ARP_HLEN);
 #else
 	return false;
 #endif