-
-
Notifications
You must be signed in to change notification settings - Fork 9.8k
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); |
cd39aba
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@blocktrron this make build fail if CONFIG_MTD is not set
cd39aba
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Running the snapshot build with this patch, I have got much more interrupt errors than the former snapshot without this patch. The router is D-Link DIR-860L b1 work as an AP.