diff options
author | Ansuel Smith <ansuelsmth@gmail.com> | 2021-07-12 21:42:41 +0200 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2021-07-19 14:51:22 +0200 |
commit | d284e6ef0f06551bad5696f16f26e6ff27b065d4 (patch) | |
tree | 49720a51bc62207ca574a6933200e9e46287738e /target/linux/generic | |
parent | 985954ccbd11ba716dc0569c5101583a4a74b215 (diff) | |
download | upstream-d284e6ef0f06551bad5696f16f26e6ff27b065d4.tar.gz upstream-d284e6ef0f06551bad5696f16f26e6ff27b065d4.tar.bz2 upstream-d284e6ef0f06551bad5696f16f26e6ff27b065d4.zip |
treewide: convert mtd-mac-address-increment* to generic implementation
Rework patch 681-NET-add-mtd-mac-address-support to implement
only the function to read the mac-address from mtd.
Generalize mtd-mac-address-increment function so it can be applied
to any source of of_get_mac_address.
Rename any mtd-mac-address-increment to mac-address-increment.
Rename any mtd-mac-address-increment-byte to mac-address-increment-byte.
This should make simplify the conversion of target to nvmem implementation.
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
Diffstat (limited to 'target/linux/generic')
-rw-r--r-- | target/linux/generic/pending-5.10/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch (renamed from target/linux/generic/pending-5.10/681-NET-add-of_get_mac_address_mtd.patch) | 45 | ||||
-rw-r--r-- | target/linux/generic/pending-5.10/682-of_net-add-mac-address-increment-support.patch | 133 | ||||
-rw-r--r-- | target/linux/generic/pending-5.4/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch (renamed from target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch) | 45 | ||||
-rw-r--r-- | target/linux/generic/pending-5.4/682-of_net-add-mac-address-increment-support.patch | 133 |
4 files changed, 310 insertions, 46 deletions
diff --git a/target/linux/generic/pending-5.10/681-NET-add-of_get_mac_address_mtd.patch b/target/linux/generic/pending-5.10/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch index 71fbfe9978..44a6b6a047 100644 --- a/target/linux/generic/pending-5.10/681-NET-add-of_get_mac_address_mtd.patch +++ b/target/linux/generic/pending-5.10/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch @@ -1,5 +1,7 @@ -From: John Crispin <blogic@openwrt.org> -Subject: NET: add mtd-mac-address support to of_get_mac_address() +From 6f8e5369ae054ec6c9265581d5a7e39738a5cd84 Mon Sep 17 00:00:00 2001 +From: Ansuel Smith <ansuelsmth@gmail.com> +Date: Tue, 30 Mar 2021 13:16:38 +0200 +Subject: [PATCH 1/2] NET: add mtd-mac-address support to of_get_mac_address() Many embedded devices have information such as mac addresses stored inside mtd devices. This patch allows us to add a property inside a node describing a @@ -8,11 +10,13 @@ where the mac address can be found. Signed-off-by: John Crispin <blogic@openwrt.org> Signed-off-by: Felix Fietkau <nbd@nbd.name> +Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> --- - drivers/of/of_net.c | 37 +++++++++++++++++++++++++++++++++++++ - include/linux/of_net.h | 1 + - 2 files changed, 38 insertions(+) + drivers/of/of_net.c | 75 ++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 74 insertions(+), 1 deletion(-) +diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c +index 6e411821583e..f072e2509cc9 100644 --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c @@ -11,6 +11,7 @@ @@ -23,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /** * of_get_phy_mode - Get phy mode for given device_node -@@ -45,7 +46,7 @@ int of_get_phy_mode(struct device_node * +@@ -45,7 +46,7 @@ int of_get_phy_mode(struct device_node *np, phy_interface_t *interface) } EXPORT_SYMBOL_GPL(of_get_phy_mode); @@ -32,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { struct property *pp = of_find_property(np, name, NULL); -@@ -78,6 +79,79 @@ static const void *of_get_mac_addr_nvmem +@@ -78,6 +79,70 @@ static const void *of_get_mac_addr_nvmem(struct device_node *np) return mac; } @@ -47,10 +51,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + const char *part; + const __be32 *list; + phandle phandle; -+ u32 mac_inc = 0; + u8 mac[ETH_ALEN]; + void *addr; -+ u32 inc_idx; + + list = of_get_property(np, "mtd-mac-address", &size); + if (!list || (size != (2 * sizeof(*list)))) @@ -74,14 +76,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + ret = mtd_read(mtd, be32_to_cpup(list), 6, &retlen, mac); + put_mtd_device(mtd); + -+ if (of_property_read_u32(np, "mtd-mac-address-increment-byte", &inc_idx)) -+ inc_idx = 5; -+ if (inc_idx > 5) -+ return NULL; -+ -+ if (!of_property_read_u32(np, "mtd-mac-address-increment", &mac_inc)) -+ mac[inc_idx] += mac_inc; -+ + if (!is_valid_ether_addr(mac)) + return NULL; + @@ -109,10 +103,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + return NULL; +} + ++ /** * 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,12 +172,20 @@ static const void *of_get_mac_addr_nvmem +@@ -98,6 +163,10 @@ static const void *of_get_mac_addr_nvmem(struct device_node *np) * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists * but is all zeros. * @@ -123,13 +118,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> * Return: Will be a valid pointer on success and ERR_PTR in case of error. */ const void *of_get_mac_address(struct device_node *np) - { - const void *addr; +@@ -116,6 +185,10 @@ const void *of_get_mac_address(struct device_node *np) + if (addr) + return addr; + addr = of_get_mac_address_mtd(np); + if (addr) + return addr; + - addr = of_get_mac_addr(np, "mac-address"); - if (addr) - return addr; + return of_get_mac_addr_nvmem(np); + } + EXPORT_SYMBOL(of_get_mac_address); +-- +2.30.2 + 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 new file mode 100644 index 0000000000..1c08e23699 --- /dev/null +++ b/target/linux/generic/pending-5.10/682-of_net-add-mac-address-increment-support.patch @@ -0,0 +1,133 @@ +From 639dba857aa554f2a78572adc4cf3c32de9ec2e2 Mon Sep 17 00:00:00 2001 +From: Ansuel Smith <ansuelsmth@gmail.com> +Date: Tue, 30 Mar 2021 18:21:14 +0200 +Subject: [PATCH 2/2] 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> +--- + drivers/of/of_net.c | 59 ++++++++++++++++++++++++++++++++++----------- + 1 file changed, 45 insertions(+), 14 deletions(-) + +diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c +index f072e2509cc9..0dbd1f7ef396 100644 +--- a/drivers/of/of_net.c ++++ b/drivers/of/of_net.c +@@ -55,31 +55,36 @@ static void *of_get_mac_addr(struct device_node *np, const char *name) + 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 device_node *mtd_np = NULL; +@@ -167,28 +172,54 @@ static const void *of_get_mac_address_mtd(struct device_node *np) + * If a mtd-mac-address property exists, try to fetch the MAC address from the + * specified mtd device, and store it as a 'mac-address' property + * ++ * DT can tell the system to increment the mac-address after is extracted by ++ * using: ++ * - mac-address-increment-byte to decide what byte to increase ++ * (if not defined is increased the last byte) ++ * - mac-address-increment to decide how much to increase. The value will ++ * 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. + */ + const void *of_get_mac_address(struct device_node *np) + { +- const void *addr; ++ u32 inc_idx, mac_inc; ++ int ret = 0; ++ u8 *addr; ++ ++ /* 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); + + addr = of_get_mac_addr(np, "mac-address"); + if (addr) +- return addr; ++ goto found; + + addr = of_get_mac_addr(np, "local-mac-address"); + if (addr) +- return addr; ++ goto found; + + addr = of_get_mac_addr(np, "address"); + if (addr) +- return addr; ++ goto found; + + addr = of_get_mac_address_mtd(np); + if (addr) +- return addr; ++ goto found; ++ ++ addr = of_get_mac_addr_nvmem(np, &ret); ++ if (ret) ++ return ERR_PTR(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; + } + EXPORT_SYMBOL(of_get_mac_address); +-- +2.30.2 + diff --git a/target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch b/target/linux/generic/pending-5.4/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch index b02febefd8..44a6b6a047 100644 --- a/target/linux/generic/pending-5.4/681-NET-add-of_get_mac_address_mtd.patch +++ b/target/linux/generic/pending-5.4/681-NET-add-mtd-mac-address-support-to-of_get_mac_addres.patch @@ -1,5 +1,7 @@ -From: John Crispin <blogic@openwrt.org> -Subject: NET: add mtd-mac-address support to of_get_mac_address() +From 6f8e5369ae054ec6c9265581d5a7e39738a5cd84 Mon Sep 17 00:00:00 2001 +From: Ansuel Smith <ansuelsmth@gmail.com> +Date: Tue, 30 Mar 2021 13:16:38 +0200 +Subject: [PATCH 1/2] NET: add mtd-mac-address support to of_get_mac_address() Many embedded devices have information such as mac addresses stored inside mtd devices. This patch allows us to add a property inside a node describing a @@ -8,11 +10,13 @@ where the mac address can be found. Signed-off-by: John Crispin <blogic@openwrt.org> Signed-off-by: Felix Fietkau <nbd@nbd.name> +Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> --- - drivers/of/of_net.c | 37 +++++++++++++++++++++++++++++++++++++ - include/linux/of_net.h | 1 + - 2 files changed, 38 insertions(+) + drivers/of/of_net.c | 75 ++++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 74 insertions(+), 1 deletion(-) +diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c +index 6e411821583e..f072e2509cc9 100644 --- a/drivers/of/of_net.c +++ b/drivers/of/of_net.c @@ -11,6 +11,7 @@ @@ -23,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /** * of_get_phy_mode - Get phy mode for given device_node -@@ -39,7 +40,7 @@ int of_get_phy_mode(struct device_node * +@@ -45,7 +46,7 @@ int of_get_phy_mode(struct device_node *np, phy_interface_t *interface) } EXPORT_SYMBOL_GPL(of_get_phy_mode); @@ -32,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { struct property *pp = of_find_property(np, name, NULL); -@@ -72,6 +73,79 @@ static const void *of_get_mac_addr_nvmem +@@ -78,6 +79,70 @@ static const void *of_get_mac_addr_nvmem(struct device_node *np) return mac; } @@ -47,10 +51,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + const char *part; + const __be32 *list; + phandle phandle; -+ u32 mac_inc = 0; + u8 mac[ETH_ALEN]; + void *addr; -+ u32 inc_idx; + + list = of_get_property(np, "mtd-mac-address", &size); + if (!list || (size != (2 * sizeof(*list)))) @@ -74,14 +76,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + ret = mtd_read(mtd, be32_to_cpup(list), 6, &retlen, mac); + put_mtd_device(mtd); + -+ if (of_property_read_u32(np, "mtd-mac-address-increment-byte", &inc_idx)) -+ inc_idx = 5; -+ if (inc_idx > 5) -+ return NULL; -+ -+ if (!of_property_read_u32(np, "mtd-mac-address-increment", &mac_inc)) -+ mac[inc_idx] += mac_inc; -+ + if (!is_valid_ether_addr(mac)) + return NULL; + @@ -109,10 +103,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + return NULL; +} + ++ /** * 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 -@@ -92,12 +166,20 @@ static const void *of_get_mac_addr_nvmem +@@ -98,6 +163,10 @@ static const void *of_get_mac_addr_nvmem(struct device_node *np) * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists * but is all zeros. * @@ -123,13 +118,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> * Return: Will be a valid pointer on success and ERR_PTR in case of error. */ const void *of_get_mac_address(struct device_node *np) - { - const void *addr; +@@ -116,6 +185,10 @@ const void *of_get_mac_address(struct device_node *np) + if (addr) + return addr; + addr = of_get_mac_address_mtd(np); + if (addr) + return addr; + - addr = of_get_mac_addr(np, "mac-address"); - if (addr) - return addr; + return of_get_mac_addr_nvmem(np); + } + EXPORT_SYMBOL(of_get_mac_address); +-- +2.30.2 + diff --git a/target/linux/generic/pending-5.4/682-of_net-add-mac-address-increment-support.patch b/target/linux/generic/pending-5.4/682-of_net-add-mac-address-increment-support.patch new file mode 100644 index 0000000000..1c08e23699 --- /dev/null +++ b/target/linux/generic/pending-5.4/682-of_net-add-mac-address-increment-support.patch @@ -0,0 +1,133 @@ +From 639dba857aa554f2a78572adc4cf3c32de9ec2e2 Mon Sep 17 00:00:00 2001 +From: Ansuel Smith <ansuelsmth@gmail.com> +Date: Tue, 30 Mar 2021 18:21:14 +0200 +Subject: [PATCH 2/2] 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> +--- + drivers/of/of_net.c | 59 ++++++++++++++++++++++++++++++++++----------- + 1 file changed, 45 insertions(+), 14 deletions(-) + +diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c +index f072e2509cc9..0dbd1f7ef396 100644 +--- a/drivers/of/of_net.c ++++ b/drivers/of/of_net.c +@@ -55,31 +55,36 @@ static void *of_get_mac_addr(struct device_node *np, const char *name) + 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 device_node *mtd_np = NULL; +@@ -167,28 +172,54 @@ static const void *of_get_mac_address_mtd(struct device_node *np) + * If a mtd-mac-address property exists, try to fetch the MAC address from the + * specified mtd device, and store it as a 'mac-address' property + * ++ * DT can tell the system to increment the mac-address after is extracted by ++ * using: ++ * - mac-address-increment-byte to decide what byte to increase ++ * (if not defined is increased the last byte) ++ * - mac-address-increment to decide how much to increase. The value will ++ * 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. + */ + const void *of_get_mac_address(struct device_node *np) + { +- const void *addr; ++ u32 inc_idx, mac_inc; ++ int ret = 0; ++ u8 *addr; ++ ++ /* 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); + + addr = of_get_mac_addr(np, "mac-address"); + if (addr) +- return addr; ++ goto found; + + addr = of_get_mac_addr(np, "local-mac-address"); + if (addr) +- return addr; ++ goto found; + + addr = of_get_mac_addr(np, "address"); + if (addr) +- return addr; ++ goto found; + + addr = of_get_mac_address_mtd(np); + if (addr) +- return addr; ++ goto found; ++ ++ addr = of_get_mac_addr_nvmem(np, &ret); ++ if (ret) ++ return ERR_PTR(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; + } + EXPORT_SYMBOL(of_get_mac_address); +-- +2.30.2 + |