forked from openwrt/openwrt
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
generic: write back netdev MAC-address to device-tree
The label-mac logic relies on the mac-address property of a netdev devices of-node. However, the mac address can also be stored as a different property or read from e.g. an mtd device. Create this node when reading a mac-address from OF if it does not already exist and copy the mac-address used for the device to this property. This way, the MAC address can be accessed using procfs. Signed-off-by: David Bauer <mail@david-bauer.net>
- Loading branch information
1 parent
57ece63
commit cd39aba
Showing
6 changed files
with
112 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
44 changes: 44 additions & 0 deletions
44
target/linux/generic/pending-5.10/683-of_net-add-mac-address-to-of-tree.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
--- a/drivers/of/of_net.c | ||
+++ b/drivers/of/of_net.c | ||
@@ -132,6 +132,33 @@ static void *of_get_mac_address_mtd(stru | ||
#endif | ||
} | ||
|
||
+static int of_add_mac_address(struct device_node *np, u8* addr) | ||
+{ | ||
+ struct property *prop; | ||
+ u8 *np_addr; | ||
+ | ||
+ np_addr = of_get_mac_addr(np, "mac-address"); | ||
+ if (np_addr) { | ||
+ memcpy(np_addr, addr, ETH_ALEN); | ||
+ return 0; | ||
+ } | ||
+ | ||
+ prop = kzalloc(sizeof(*prop), GFP_KERNEL); | ||
+ if (!prop) | ||
+ return 0; | ||
+ | ||
+ prop->name = "mac-address"; | ||
+ prop->length = ETH_ALEN; | ||
+ prop->value = kmemdup(addr, ETH_ALEN, GFP_KERNEL); | ||
+ if (!prop->value || of_add_property(np, prop)) | ||
+ goto free; | ||
+ | ||
+ return 0; | ||
+free: | ||
+ kfree(prop->value); | ||
+ kfree(prop); | ||
+ return -ENOMEM; | ||
+} | ||
|
||
/** | ||
* Search the device tree for the best MAC address to use. 'mac-address' is | ||
@@ -205,6 +232,7 @@ found: | ||
if (!of_property_read_u32(np, "mac-address-increment", &mac_inc)) | ||
addr[inc_idx] += mac_inc; | ||
|
||
+ of_add_mac_address(np, addr); | ||
return addr; | ||
} | ||
EXPORT_SYMBOL(of_get_mac_address); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
44 changes: 44 additions & 0 deletions
44
target/linux/generic/pending-5.4/683-of_net-add-mac-address-to-of-tree.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
--- a/drivers/of/of_net.c | ||
+++ b/drivers/of/of_net.c | ||
@@ -125,6 +125,33 @@ static void *of_get_mac_address_mtd(stru | ||
#endif | ||
} | ||
|
||
+static int of_add_mac_address(struct device_node *np, u8* addr) | ||
+{ | ||
+ struct property *prop; | ||
+ u8 *np_addr; | ||
+ | ||
+ np_addr = of_get_mac_addr(np, "mac-address"); | ||
+ if (np_addr) { | ||
+ memcpy(np_addr, addr, ETH_ALEN); | ||
+ return 0; | ||
+ } | ||
+ | ||
+ prop = kzalloc(sizeof(*prop), GFP_KERNEL); | ||
+ if (!prop) | ||
+ return 0; | ||
+ | ||
+ prop->name = "mac-address"; | ||
+ prop->length = ETH_ALEN; | ||
+ prop->value = kmemdup(addr, ETH_ALEN, GFP_KERNEL); | ||
+ if (!prop->value || of_add_property(np, prop)) | ||
+ goto free; | ||
+ | ||
+ return 0; | ||
+free: | ||
+ kfree(prop->value); | ||
+ kfree(prop); | ||
+ return -ENOMEM; | ||
+} | ||
|
||
/** | ||
* Search the device tree for the best MAC address to use. 'mac-address' is | ||
@@ -198,6 +225,7 @@ found: | ||
if (!of_property_read_u32(np, "mac-address-increment", &mac_inc)) | ||
addr[inc_idx] += mac_inc; | ||
|
||
+ of_add_mac_address(np, addr); | ||
return addr; | ||
} | ||
EXPORT_SYMBOL(of_get_mac_address); |