diff options
Diffstat (limited to 'target/linux/generic/hack-5.4/683-NET-add-mac-address-property.patch')
-rw-r--r-- | target/linux/generic/hack-5.4/683-NET-add-mac-address-property.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/target/linux/generic/hack-5.4/683-NET-add-mac-address-property.patch b/target/linux/generic/hack-5.4/683-NET-add-mac-address-property.patch new file mode 100644 index 0000000000..de561c5336 --- /dev/null +++ b/target/linux/generic/hack-5.4/683-NET-add-mac-address-property.patch @@ -0,0 +1,59 @@ +From: David Bauer <mail@david-bauer.net> +Date: Tue, 20 Jul 2021 22:00:10 +0200 +Subject: [PATCH] generic: add mac-address property for NVMEM mac addresses + +Traversing the device-tree by referencing a network device to determine +a devices labe-mac does not work with the generic nvmem implementation, +as the userspace expects the MAC-address to be available as a +device-tree property. + +The legacy mtd-mac-address implementation did create such a node. Do the +same when using the nvmem implementation to allow reading the MAC +address. + +Fixes commit d284e6ef0f06 ("treewide: convert mtd-mac-address-increment* +to generic implementation") + +Signed-off-by: David Bauer <mail@david-bauer.net> + +--- a/drivers/of/of_net.c ++++ b/drivers/of/of_net.c +@@ -61,6 +61,7 @@ static void *of_get_mac_addr_nvmem(struc + void *mac; + u8 nvmem_mac[ETH_ALEN]; + struct platform_device *pdev = of_find_device_by_node(np); ++ struct property *prop; + + if (!pdev) { + *err = -ENODEV; +@@ -78,10 +79,29 @@ static void *of_get_mac_addr_nvmem(struc + put_device(&pdev->dev); + if (!mac) { + *err = -ENOMEM; +- return NULL; ++ goto out_err; ++ } ++ ++ prop = devm_kzalloc(&pdev->dev, sizeof(*prop), GFP_KERNEL); ++ if (!prop) { ++ *err = -ENOMEM; ++ goto out_err; ++ } ++ prop->name = "mac-address"; ++ prop->length = ETH_ALEN; ++ prop->value = devm_kmemdup(&pdev->dev, mac, ETH_ALEN, GFP_KERNEL); ++ if (!prop->value || of_add_property(np, prop)) { ++ *err = -ENOMEM; ++ goto out_err; + } + + return mac; ++ ++out_err: ++ devm_kfree(&pdev->dev, prop->value); ++ devm_kfree(&pdev->dev, prop); ++ devm_kfree(&pdev->dev, mac); ++ return NULL; + } + + static void *of_get_mac_address_mtd(struct device_node *np) |