diff options
Diffstat (limited to 'target/linux/generic/pending-5.10')
3 files changed, 53 insertions, 112 deletions
diff --git a/target/linux/generic/pending-5.10/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch b/target/linux/generic/pending-5.10/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch index 71d794e83b..463fc270c6 100644 --- a/target/linux/generic/pending-5.10/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch +++ b/target/linux/generic/pending-5.10/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch @@ -17,28 +17,19 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c -@@ -11,6 +11,7 @@ - #include <linux/phy.h> +@@ -12,6 +12,7 @@ #include <linux/export.h> #include <linux/device.h> + #include <linux/nvmem-consumer.h> +#include <linux/mtd/mtd.h> /** * of_get_phy_mode - Get phy mode for given device_node -@@ -45,7 +46,7 @@ int of_get_phy_mode(struct device_node * +@@ -95,6 +96,52 @@ static int of_get_mac_addr_nvmem(struct + return 0; } - EXPORT_SYMBOL_GPL(of_get_phy_mode); --static const void *of_get_mac_addr(struct device_node *np, const char *name) -+static void *of_get_mac_addr(struct device_node *np, const char *name) - { - struct property *pp = of_find_property(np, name, NULL); - -@@ -78,6 +79,55 @@ static const void *of_get_mac_addr_nvmem - return mac; - } - -+static const void *of_get_mac_address_mtd(struct device_node *np) ++static int of_get_mac_address_mtd(struct device_node *np, u8 *addr) +{ +#ifdef CONFIG_MTD + struct platform_device *pdev = of_find_device_by_node(np); @@ -50,18 +41,17 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> + const __be32 *list; + phandle phandle; + u8 mac[ETH_ALEN]; -+ void *addr; + + list = of_get_property(np, "mtd-mac-address", &size); + if (!list || (size != (2 * sizeof(*list)))) -+ return NULL; ++ return -ENODEV; + + phandle = be32_to_cpup(list++); + if (phandle) + mtd_np = of_find_node_by_phandle(phandle); + + if (!mtd_np) -+ return NULL; ++ return -ENODEV; + + part = of_get_property(mtd_np, "label", NULL); + if (!part) @@ -69,28 +59,26 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> + + mtd = get_mtd_device_nm(part); + if (IS_ERR(mtd)) -+ return NULL; ++ return -ENODEV; + + ret = mtd_read(mtd, be32_to_cpup(list), 6, &retlen, mac); + put_mtd_device(mtd); + + if (!is_valid_ether_addr(mac)) -+ return NULL; ++ return -EINVAL; + -+ addr = devm_kmemdup(&pdev->dev, mac, ETH_ALEN, GFP_KERNEL); -+ if (!addr) -+ return ERR_PTR(-ENOMEM); ++ memcpy(addr, mac, ETH_ALEN); + -+ return addr; ++ return 0; +#endif -+ return NULL; ++ return -EINVAL; +} + + /** * Search the device tree for the best MAC address to use. 'mac-address' is * checked first, because that is supposed to contain to "most recent" MAC -@@ -98,6 +148,10 @@ static const void *of_get_mac_addr_nvmem +@@ -115,6 +161,10 @@ 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. * @@ -98,17 +86,17 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> + * If a mtd-mac-address property exists, try to fetch the MAC address from the + * specified mtd device. + * - * Return: Will be a valid pointer on success and ERR_PTR in case of error. + * Return: 0 on success and errno in case of error. */ - const void *of_get_mac_address(struct device_node *np) -@@ -116,6 +170,10 @@ const void *of_get_mac_address(struct de - if (addr) - return addr; + int of_get_mac_address(struct device_node *np, u8 *addr) +@@ -136,6 +186,10 @@ int of_get_mac_address(struct device_nod + if (!ret) + return 0; -+ addr = of_get_mac_address_mtd(np); -+ if (addr) -+ return addr; ++ ret = of_get_mac_address_mtd(np, addr); ++ if (!ret) ++ return 0; + - return of_get_mac_addr_nvmem(np); + return of_get_mac_addr_nvmem(np, addr); } EXPORT_SYMBOL(of_get_mac_address); diff --git a/target/linux/generic/pending-5.10/682-of_net-add-mac-address-increment-support.patch b/target/linux/generic/pending-5.10/682-of_net-add-mac-address-increment-support.patch index 9032b9186c..ce5211a21b 100644 --- a/target/linux/generic/pending-5.10/682-of_net-add-mac-address-increment-support.patch +++ b/target/linux/generic/pending-5.10/682-of_net-add-mac-address-increment-support.patch @@ -20,52 +20,7 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c -@@ -55,31 +55,36 @@ static void *of_get_mac_addr(struct devi - return NULL; - } - --static const void *of_get_mac_addr_nvmem(struct device_node *np) -+static void *of_get_mac_addr_nvmem(struct device_node *np, int *err) - { - int ret; -- const void *mac; -+ void *mac; - u8 nvmem_mac[ETH_ALEN]; - struct platform_device *pdev = of_find_device_by_node(np); - -- if (!pdev) -- return ERR_PTR(-ENODEV); -+ if (!pdev) { -+ *err = -ENODEV; -+ return NULL; -+ } - - ret = nvmem_get_mac_address(&pdev->dev, &nvmem_mac); - if (ret) { - put_device(&pdev->dev); -- return ERR_PTR(ret); -+ *err = ret; -+ return NULL; - } - - mac = devm_kmemdup(&pdev->dev, nvmem_mac, ETH_ALEN, GFP_KERNEL); - put_device(&pdev->dev); -- if (!mac) -- return ERR_PTR(-ENOMEM); -+ if (!mac) { -+ *err = -ENOMEM; -+ return NULL; -+ } - - return mac; - } - --static const void *of_get_mac_address_mtd(struct device_node *np) -+static void *of_get_mac_address_mtd(struct device_node *np) - { - #ifdef CONFIG_MTD - struct platform_device *pdev = of_find_device_by_node(np); -@@ -152,28 +157,54 @@ static const void *of_get_mac_address_mt +@@ -165,31 +165,56 @@ static int of_get_mac_address_mtd(struct * If a mtd-mac-address property exists, try to fetch the MAC address from the * specified mtd device. * @@ -77,52 +32,53 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> + * not overflow to other bytes if the increment is over 255. + * (example 00:01:02:03:04:ff + 1 == 00:01:02:03:04:00) + * - * Return: Will be a valid pointer on success and ERR_PTR in case of error. + * Return: 0 on success and errno in case of error. */ - const void *of_get_mac_address(struct device_node *np) + int of_get_mac_address(struct device_node *np, u8 *addr) { -- const void *addr; + u32 inc_idx, mac_inc; -+ int ret = 0; -+ u8 *addr; -+ + int ret; + + /* Check first if the increment byte is present and valid. + * If not set assume to increment the last byte if found. + */ + if (of_property_read_u32(np, "mac-address-increment-byte", &inc_idx)) + inc_idx = 5; + if (inc_idx < 3 || inc_idx > 5) -+ return ERR_PTR(-EINVAL); ++ return -EINVAL; ++ + if (!np) + return -ENODEV; - addr = of_get_mac_addr(np, "mac-address"); - if (addr) -- return addr; + ret = of_get_mac_addr(np, "mac-address", addr); + if (!ret) +- return 0; + goto found; - addr = of_get_mac_addr(np, "local-mac-address"); - if (addr) -- return addr; + ret = of_get_mac_addr(np, "local-mac-address", addr); + if (!ret) +- return 0; + goto found; - addr = of_get_mac_addr(np, "address"); - if (addr) -- return addr; + ret = of_get_mac_addr(np, "address", addr); + if (!ret) +- return 0; + goto found; - addr = of_get_mac_address_mtd(np); - if (addr) -- return addr; + ret = of_get_mac_address_mtd(np, addr); + if (!ret) +- return 0; + goto found; + -+ addr = of_get_mac_addr_nvmem(np, &ret); ++ ret = of_get_mac_addr_nvmem(np, addr); + if (ret) -+ return ERR_PTR(ret); ++ return ret; + +found: + if (!of_property_read_u32(np, "mac-address-increment", &mac_inc)) + addr[inc_idx] += mac_inc; -- return of_get_mac_addr_nvmem(np); -+ return addr; +- return of_get_mac_addr_nvmem(np, addr); ++ return ret; } EXPORT_SYMBOL(of_get_mac_address); diff --git a/target/linux/generic/pending-5.10/683-of_net-add-mac-address-to-of-tree.patch b/target/linux/generic/pending-5.10/683-of_net-add-mac-address-to-of-tree.patch index eac7933884..377f16e7c9 100644 --- a/target/linux/generic/pending-5.10/683-of_net-add-mac-address-to-of-tree.patch +++ b/target/linux/generic/pending-5.10/683-of_net-add-mac-address-to-of-tree.patch @@ -1,19 +1,16 @@ --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c -@@ -132,6 +132,33 @@ static void *of_get_mac_address_mtd(stru - return NULL; +@@ -132,6 +132,30 @@ static void *of_get_mac_address_mtd(stru + return -EINVAL; } +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 = of_find_property(np, "mac-address", NULL); ++ if (prop) ++ kfree(prop); + + prop = kzalloc(sizeof(*prop), GFP_KERNEL); + if (!prop) @@ -39,6 +36,6 @@ addr[inc_idx] += mac_inc; + of_add_mac_address(np, addr); - return addr; + return ret; } EXPORT_SYMBOL(of_get_mac_address); |