kernel: of: remove mac-address-increment support hack

The MAC address increment has been replaced by the new "mac-base"
NVMEM fixed layout. This old implementation can be removed now.

Signed-off-by: Shiji Yang <yangshiji66@qq.com>
Signed-off-by: Rosen Penev <rosenp@gmail.com>
This commit is contained in:
Rosen Penev 2023-11-29 11:06:38 -08:00 committed by Christian Marangi
parent 00256d86dc
commit 5717c29e6b
No known key found for this signature in database
GPG Key ID: AC001D09ADBFEAD7
6 changed files with 50 additions and 230 deletions

View File

@ -1,80 +0,0 @@
From 844c273286f328acf0dab5fbd5d864366b4904dc Mon Sep 17 00:00:00 2001
From: Ansuel Smith <ansuelsmth@gmail.com>
Date: Tue, 30 Mar 2021 18:21:14 +0200
Subject: [PATCH] of_net: add mac-address-increment support
Lots of embedded devices use the mac-address of other interface
extracted from nvmem cells and increments it by one or two. Add two
bindings to integrate this and directly use the right mac-address for
the interface. Some example are some routers that use the gmac
mac-address stored in the art partition and increments it by one for the
wifi. mac-address-increment-byte bindings is used to tell what byte of
the mac-address has to be increased (if not defined the last byte is
increased) and mac-address-increment tells how much the byte decided
early has to be increased.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
---
net/core/of_net.c | 43 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 39 insertions(+), 4 deletions(-)
--- a/net/core/of_net.c
+++ b/net/core/of_net.c
@@ -119,10 +119,19 @@ static int of_get_mac_addr_nvmem(struct
* this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
* but is all zeros.
*
+ * DT can tell the system to increment the mac-address after is extracted by
+ * using:
+ * - mac-address-increment to decide how much to increase. The value WILL
+ * overflow to other bytes if the increment is over 255 or the total
+ * increment will exceed 255 of the current byte.
+ * (example 00:01:02:03:04:ff + 1 == 00:01:02:03:05:00)
+ * (example 00:01:02:03:04:fe + 5 == 00:01:02:03:05:03)
+ *
* Return: 0 on success and errno in case of error.
*/
int of_get_mac_address(struct device_node *np, u8 *addr)
{
+ u32 mac_inc, mac_val;
int ret;
if (!np)
@@ -130,17 +139,33 @@ int of_get_mac_address(struct device_nod
ret = of_get_mac_addr(np, "mac-address", addr);
if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "local-mac-address", addr);
if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "address", addr);
if (!ret)
- return 0;
+ goto found;
+
+ ret = of_get_mac_addr_nvmem(np, addr);
+ if (ret)
+ return ret;
+
+found:
+ if (!of_property_read_u32(np, "mac-address-increment", &mac_inc)) {
+ /* Convert to a contiguous value */
+ mac_val = (addr[3] << 16) + (addr[4] << 8) + addr[5];
+ mac_val += mac_inc;
+
+ /* Apply the incremented value handling overflow case */
+ addr[3] = (mac_val >> 16) & 0xff;
+ addr[4] = (mac_val >> 8) & 0xff;
+ addr[5] = (mac_val >> 0) & 0xff;
+ }
- return of_get_mac_addr_nvmem(np, addr);
+ return ret;
}
EXPORT_SYMBOL(of_get_mac_address);

View File

@ -45,11 +45,31 @@ property. This way, the MAC address can be accessed using procfs.
/** /**
* of_get_mac_address() * of_get_mac_address()
* @np: Caller's Device Node * @np: Caller's Device Node
@@ -165,6 +186,7 @@ found: @@ -130,17 +151,23 @@ int of_get_mac_address(struct device_nod
addr[5] = (mac_val >> 0) & 0xff;
}
+ of_add_mac_address(np, addr); ret = of_get_mac_addr(np, "mac-address", addr);
return ret; if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "local-mac-address", addr);
if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "address", addr);
if (!ret)
- return 0;
+ goto found;
- return of_get_mac_addr_nvmem(np, addr);
+ ret = of_get_mac_addr_nvmem(np, addr);
+ if (ret)
+ return ret;
+
+found:
+ ret = of_add_mac_address(np, addr);
+ return ret;
} }
EXPORT_SYMBOL(of_get_mac_address); EXPORT_SYMBOL(of_get_mac_address);

View File

@ -1,30 +0,0 @@
From dd07dd394d8bfdb5d527fab18ca54f20815ec4e4 Mon Sep 17 00:00:00 2001
From: Will Moss <willormos@gmail.com>
Date: Wed, 3 Aug 2022 13:48:55 +0000
Subject: [PATCH] of_net: do mac-address-increment only once
Remove mac-address-increment and mac-address-increment-byte
DT property after incrementing process to make sure MAC address
would not get incremented more if this function is stared again.
It could happen if device initialization is deferred after
unsuccessful attempt.
Signed-off-by: Will Moss <willormos@gmail.com>
---
drivers/of/of_net.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/net/core/of_net.c
+++ b/net/core/of_net.c
@@ -184,6 +184,11 @@ found:
addr[3] = (mac_val >> 16) & 0xff;
addr[4] = (mac_val >> 8) & 0xff;
addr[5] = (mac_val >> 0) & 0xff;
+
+ /* Remove mac-address-increment DT property to make sure MAC
+ * address would not get incremented more if this function is
+ * stared again. */
+ of_remove_property(np, of_find_property(np, "mac-address-increment", NULL));
}
of_add_mac_address(np, addr);

View File

@ -1,80 +0,0 @@
From 844c273286f328acf0dab5fbd5d864366b4904dc Mon Sep 17 00:00:00 2001
From: Ansuel Smith <ansuelsmth@gmail.com>
Date: Tue, 30 Mar 2021 18:21:14 +0200
Subject: [PATCH] of_net: add mac-address-increment support
Lots of embedded devices use the mac-address of other interface
extracted from nvmem cells and increments it by one or two. Add two
bindings to integrate this and directly use the right mac-address for
the interface. Some example are some routers that use the gmac
mac-address stored in the art partition and increments it by one for the
wifi. mac-address-increment-byte bindings is used to tell what byte of
the mac-address has to be increased (if not defined the last byte is
increased) and mac-address-increment tells how much the byte decided
early has to be increased.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
---
net/core/of_net.c | 43 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 39 insertions(+), 4 deletions(-)
--- a/net/core/of_net.c
+++ b/net/core/of_net.c
@@ -119,10 +119,19 @@ static int of_get_mac_addr_nvmem(struct
* this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
* but is all zeros.
*
+ * DT can tell the system to increment the mac-address after is extracted by
+ * using:
+ * - mac-address-increment to decide how much to increase. The value WILL
+ * overflow to other bytes if the increment is over 255 or the total
+ * increment will exceed 255 of the current byte.
+ * (example 00:01:02:03:04:ff + 1 == 00:01:02:03:05:00)
+ * (example 00:01:02:03:04:fe + 5 == 00:01:02:03:05:03)
+ *
* Return: 0 on success and errno in case of error.
*/
int of_get_mac_address(struct device_node *np, u8 *addr)
{
+ u32 mac_inc, mac_val;
int ret;
if (!np)
@@ -130,17 +139,33 @@ int of_get_mac_address(struct device_nod
ret = of_get_mac_addr(np, "mac-address", addr);
if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "local-mac-address", addr);
if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "address", addr);
if (!ret)
- return 0;
+ goto found;
+
+ ret = of_get_mac_addr_nvmem(np, addr);
+ if (ret)
+ return ret;
+
+found:
+ if (!of_property_read_u32(np, "mac-address-increment", &mac_inc)) {
+ /* Convert to a contiguous value */
+ mac_val = (addr[3] << 16) + (addr[4] << 8) + addr[5];
+ mac_val += mac_inc;
+
+ /* Apply the incremented value handling overflow case */
+ addr[3] = (mac_val >> 16) & 0xff;
+ addr[4] = (mac_val >> 8) & 0xff;
+ addr[5] = (mac_val >> 0) & 0xff;
+ }
- return of_get_mac_addr_nvmem(np, addr);
+ return ret;
}
EXPORT_SYMBOL(of_get_mac_address);

View File

@ -45,11 +45,31 @@ property. This way, the MAC address can be accessed using procfs.
/** /**
* of_get_mac_address() * of_get_mac_address()
* @np: Caller's Device Node * @np: Caller's Device Node
@@ -165,6 +186,7 @@ found: @@ -130,17 +151,23 @@ int of_get_mac_address(struct device_nod
addr[5] = (mac_val >> 0) & 0xff;
}
+ of_add_mac_address(np, addr); ret = of_get_mac_addr(np, "mac-address", addr);
return ret; if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "local-mac-address", addr);
if (!ret)
- return 0;
+ goto found;
ret = of_get_mac_addr(np, "address", addr);
if (!ret)
- return 0;
+ goto found;
- return of_get_mac_addr_nvmem(np, addr);
+ ret = of_get_mac_addr_nvmem(np, addr);
+ if (ret)
+ return ret;
+
+found:
+ ret = of_add_mac_address(np, addr);
+ return ret;
} }
EXPORT_SYMBOL(of_get_mac_address); EXPORT_SYMBOL(of_get_mac_address);

View File

@ -1,30 +0,0 @@
From dd07dd394d8bfdb5d527fab18ca54f20815ec4e4 Mon Sep 17 00:00:00 2001
From: Will Moss <willormos@gmail.com>
Date: Wed, 3 Aug 2022 13:48:55 +0000
Subject: [PATCH] of_net: do mac-address-increment only once
Remove mac-address-increment and mac-address-increment-byte
DT property after incrementing process to make sure MAC address
would not get incremented more if this function is stared again.
It could happen if device initialization is deferred after
unsuccessful attempt.
Signed-off-by: Will Moss <willormos@gmail.com>
---
drivers/of/of_net.c | 6 ++++++
1 file changed, 6 insertions(+)
--- a/net/core/of_net.c
+++ b/net/core/of_net.c
@@ -184,6 +184,11 @@ found:
addr[3] = (mac_val >> 16) & 0xff;
addr[4] = (mac_val >> 8) & 0xff;
addr[5] = (mac_val >> 0) & 0xff;
+
+ /* Remove mac-address-increment DT property to make sure MAC
+ * address would not get incremented more if this function is
+ * stared again. */
+ of_remove_property(np, of_find_property(np, "mac-address-increment", NULL));
}
of_add_mac_address(np, addr);