Merge Official Source
Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
commit
9217b197ca
@ -0,0 +1,69 @@
|
|||||||
|
From 98bc509f92cccedd7d51d5ebadc424e2d7f5cbb4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chukun Pan <amadeus@jmu.edu.cn>
|
||||||
|
Date: Tue, 5 Jul 2022 15:20:10 +0800
|
||||||
|
Subject: [PATCH] ksmbd: fixes build on kernel 5.15.52 or higher
|
||||||
|
|
||||||
|
The 5.15.52 kernel downported two commits "fs: remove unused low-level
|
||||||
|
mapping helpers" and "fs: use low-level mapping helpers", which broken
|
||||||
|
the compilation[1]. This commit fixed it.
|
||||||
|
|
||||||
|
1. https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.15.52
|
||||||
|
|
||||||
|
Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
|
||||||
|
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
|
||||||
|
---
|
||||||
|
smbacl.c | 6 ++++--
|
||||||
|
smbacl.h | 6 ++++--
|
||||||
|
2 files changed, 8 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/smbacl.c b/smbacl.c
|
||||||
|
index 275e357..19c682a 100644
|
||||||
|
--- a/smbacl.c
|
||||||
|
+++ b/smbacl.c
|
||||||
|
@@ -281,7 +281,8 @@ static int sid_to_id(struct user_namespace *user_ns,
|
||||||
|
uid_t id;
|
||||||
|
|
||||||
|
id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]);
|
||||||
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)
|
||||||
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \
|
||||||
|
+ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0))
|
||||||
|
uid = mapped_kuid_user(user_ns, &init_user_ns, KUIDT_INIT(id));
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
@@ -304,7 +305,8 @@ static int sid_to_id(struct user_namespace *user_ns,
|
||||||
|
gid_t id;
|
||||||
|
|
||||||
|
id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]);
|
||||||
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)
|
||||||
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \
|
||||||
|
+ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0))
|
||||||
|
gid = mapped_kgid_user(user_ns, &init_user_ns, KGIDT_INIT(id));
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
diff --git a/smbacl.h b/smbacl.h
|
||||||
|
index f2bcdb4..7368bf4 100644
|
||||||
|
--- a/smbacl.h
|
||||||
|
+++ b/smbacl.h
|
||||||
|
@@ -221,7 +221,8 @@ static inline uid_t posix_acl_uid_translate(struct user_namespace *mnt_userns,
|
||||||
|
kuid_t kuid;
|
||||||
|
|
||||||
|
/* If this is an idmapped mount, apply the idmapping. */
|
||||||
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)
|
||||||
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \
|
||||||
|
+ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0))
|
||||||
|
kuid = mapped_kuid_fs(mnt_userns, &init_user_ns, pace->e_uid);
|
||||||
|
#else
|
||||||
|
kuid = kuid_into_mnt(mnt_userns, pace->e_uid);
|
||||||
|
@@ -241,7 +242,8 @@ static inline gid_t posix_acl_gid_translate(struct user_namespace *mnt_userns,
|
||||||
|
kgid_t kgid;
|
||||||
|
|
||||||
|
/* If this is an idmapped mount, apply the idmapping. */
|
||||||
|
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)
|
||||||
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0) || \
|
||||||
|
+ (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 52) && LINUX_VERSION_CODE < KERNEL_VERSION(5, 16, 0))
|
||||||
|
kgid = mapped_kgid_fs(mnt_userns, &init_user_ns, pace->e_gid);
|
||||||
|
#else
|
||||||
|
kgid = kgid_into_mnt(mnt_userns, pace->e_gid);
|
||||||
|
--
|
||||||
|
2.36.1
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/core.c
|
--- a/drivers/mtd/spi-nor/core.c
|
||||||
+++ b/drivers/mtd/spi-nor/core.c
|
+++ b/drivers/mtd/spi-nor/core.c
|
||||||
@@ -3156,6 +3156,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3141,6 +3141,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
struct device *dev = nor->dev;
|
struct device *dev = nor->dev;
|
||||||
struct mtd_info *mtd = &nor->mtd;
|
struct mtd_info *mtd = &nor->mtd;
|
||||||
struct device_node *np = spi_nor_get_flash_node(nor);
|
struct device_node *np = spi_nor_get_flash_node(nor);
|
||||||
@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -3210,7 +3211,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3195,7 +3196,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
mtd->type = MTD_NORFLASH;
|
mtd->type = MTD_NORFLASH;
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -778,6 +778,17 @@ out_error:
|
@@ -849,6 +849,17 @@ out_error:
|
||||||
*/
|
*/
|
||||||
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/core.c
|
--- a/drivers/mtd/spi-nor/core.c
|
||||||
+++ b/drivers/mtd/spi-nor/core.c
|
+++ b/drivers/mtd/spi-nor/core.c
|
||||||
@@ -3110,6 +3110,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3095,6 +3095,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
struct device *dev = nor->dev;
|
struct device *dev = nor->dev;
|
||||||
struct mtd_info *mtd = &nor->mtd;
|
struct mtd_info *mtd = &nor->mtd;
|
||||||
struct device_node *np = spi_nor_get_flash_node(nor);
|
struct device_node *np = spi_nor_get_flash_node(nor);
|
||||||
@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -3164,7 +3165,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3149,7 +3150,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
mtd->type = MTD_NORFLASH;
|
mtd->type = MTD_NORFLASH;
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -778,6 +778,17 @@ out_error:
|
@@ -849,6 +849,17 @@ out_error:
|
||||||
*/
|
*/
|
||||||
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -0,0 +1,72 @@
|
|||||||
|
From bcdf0315a61a29eb753a607d3a85a4032de72d94 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Tue, 10 May 2022 15:12:59 +0200
|
||||||
|
Subject: [PATCH] mtd: call of_platform_populate() for MTD partitions
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Until this change MTD subsystem supported handling partitions only with
|
||||||
|
MTD partitions parsers. That's a specific / limited API designed around
|
||||||
|
partitions.
|
||||||
|
|
||||||
|
Some MTD partitions may however require different handling. They may
|
||||||
|
contain specific data that needs to be parsed and somehow extracted. For
|
||||||
|
that purpose MTD subsystem should allow binding of standard platform
|
||||||
|
drivers.
|
||||||
|
|
||||||
|
An example can be U-Boot (sub)partition with environment variables.
|
||||||
|
There exist a "u-boot,env" DT binding for MTD (sub)partition that
|
||||||
|
requires an NVMEM driver.
|
||||||
|
|
||||||
|
Ref: 5db1c2dbc04c ("dt-bindings: nvmem: add U-Boot environment variables binding")
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20220510131259.555-1-zajec5@gmail.com
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdpart.c | 9 +++++++++
|
||||||
|
1 file changed, 9 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdpart.c
|
||||||
|
+++ b/drivers/mtd/mtdpart.c
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
+#include <linux/of_platform.h>
|
||||||
|
|
||||||
|
#include "mtdcore.h"
|
||||||
|
|
||||||
|
@@ -578,10 +579,16 @@ static int mtd_part_of_parse(struct mtd_
|
||||||
|
struct mtd_part_parser *parser;
|
||||||
|
struct device_node *np;
|
||||||
|
struct property *prop;
|
||||||
|
+ struct device *dev;
|
||||||
|
const char *compat;
|
||||||
|
const char *fixed = "fixed-partitions";
|
||||||
|
int ret, err = 0;
|
||||||
|
|
||||||
|
+ dev = &master->dev;
|
||||||
|
+ /* Use parent device (controller) if the top level MTD is not registered */
|
||||||
|
+ if (!IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) && !mtd_is_partition(master))
|
||||||
|
+ dev = master->dev.parent;
|
||||||
|
+
|
||||||
|
np = mtd_get_of_node(master);
|
||||||
|
if (mtd_is_partition(master))
|
||||||
|
of_node_get(np);
|
||||||
|
@@ -594,6 +601,7 @@ static int mtd_part_of_parse(struct mtd_
|
||||||
|
continue;
|
||||||
|
ret = mtd_part_do_parse(parser, master, pparts, NULL);
|
||||||
|
if (ret > 0) {
|
||||||
|
+ of_platform_populate(np, NULL, NULL, dev);
|
||||||
|
of_node_put(np);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -601,6 +609,7 @@ static int mtd_part_of_parse(struct mtd_
|
||||||
|
if (ret < 0 && !err)
|
||||||
|
err = ret;
|
||||||
|
}
|
||||||
|
+ of_platform_populate(np, NULL, NULL, dev);
|
||||||
|
of_node_put(np);
|
||||||
|
|
||||||
|
/*
|
||||||
@ -0,0 +1,106 @@
|
|||||||
|
From ad9b10d1eaada169bd764abcab58f08538877e26 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Wed, 22 Jun 2022 03:06:28 +0200
|
||||||
|
Subject: mtd: core: introduce of support for dynamic partitions
|
||||||
|
|
||||||
|
We have many parser that register mtd partitions at runtime. One example
|
||||||
|
is the cmdlinepart or the smem-part parser where the compatible is defined
|
||||||
|
in the dts and the partitions gets detected and registered by the
|
||||||
|
parser. This is problematic for the NVMEM subsystem that requires an OF
|
||||||
|
node to detect NVMEM cells.
|
||||||
|
|
||||||
|
To fix this problem, introduce an additional logic that will try to
|
||||||
|
assign an OF node to the MTD if declared.
|
||||||
|
|
||||||
|
On MTD addition, it will be checked if the MTD has an OF node and if
|
||||||
|
not declared will check if a partition with the same label / node name is
|
||||||
|
declared in DTS. If an exact match is found, the partition dynamically
|
||||||
|
allocated by the parser will have a connected OF node.
|
||||||
|
|
||||||
|
The NVMEM subsystem will detect the OF node and register any NVMEM cells
|
||||||
|
declared statically in the DTS.
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20220622010628.30414-4-ansuelsmth@gmail.com
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 61 +++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 61 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -561,6 +561,66 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void mtd_check_of_node(struct mtd_info *mtd)
|
||||||
|
+{
|
||||||
|
+ struct device_node *partitions, *parent_dn, *mtd_dn = NULL;
|
||||||
|
+ const char *pname, *prefix = "partition-";
|
||||||
|
+ int plen, mtd_name_len, offset, prefix_len;
|
||||||
|
+ struct mtd_info *parent;
|
||||||
|
+ bool found = false;
|
||||||
|
+
|
||||||
|
+ /* Check if MTD already has a device node */
|
||||||
|
+ if (dev_of_node(&mtd->dev))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ /* Check if a partitions node exist */
|
||||||
|
+ parent = mtd->parent;
|
||||||
|
+ parent_dn = dev_of_node(&parent->dev);
|
||||||
|
+ if (!parent_dn)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ partitions = of_get_child_by_name(parent_dn, "partitions");
|
||||||
|
+ if (!partitions)
|
||||||
|
+ goto exit_parent;
|
||||||
|
+
|
||||||
|
+ prefix_len = strlen(prefix);
|
||||||
|
+ mtd_name_len = strlen(mtd->name);
|
||||||
|
+
|
||||||
|
+ /* Search if a partition is defined with the same name */
|
||||||
|
+ for_each_child_of_node(partitions, mtd_dn) {
|
||||||
|
+ offset = 0;
|
||||||
|
+
|
||||||
|
+ /* Skip partition with no/wrong prefix */
|
||||||
|
+ if (!of_node_name_prefix(mtd_dn, "partition-"))
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ /* Label have priority. Check that first */
|
||||||
|
+ if (of_property_read_string(mtd_dn, "label", &pname)) {
|
||||||
|
+ of_property_read_string(mtd_dn, "name", &pname);
|
||||||
|
+ offset = prefix_len;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ plen = strlen(pname) - offset;
|
||||||
|
+ if (plen == mtd_name_len &&
|
||||||
|
+ !strncmp(mtd->name, pname + offset, plen)) {
|
||||||
|
+ found = true;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!found)
|
||||||
|
+ goto exit_partitions;
|
||||||
|
+
|
||||||
|
+ /* Set of_node only for nvmem */
|
||||||
|
+ if (of_device_is_compatible(mtd_dn, "nvmem-cells"))
|
||||||
|
+ mtd_set_of_node(mtd, mtd_dn);
|
||||||
|
+
|
||||||
|
+exit_partitions:
|
||||||
|
+ of_node_put(partitions);
|
||||||
|
+exit_parent:
|
||||||
|
+ of_node_put(parent_dn);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* add_mtd_device - register an MTD device
|
||||||
|
* @mtd: pointer to new MTD device info structure
|
||||||
|
@@ -666,6 +726,7 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||||
|
mtd->dev.devt = MTD_DEVT(i);
|
||||||
|
dev_set_name(&mtd->dev, "mtd%d", i);
|
||||||
|
dev_set_drvdata(&mtd->dev, mtd);
|
||||||
|
+ mtd_check_of_node(mtd);
|
||||||
|
of_node_get(mtd_get_of_node(mtd));
|
||||||
|
error = device_register(&mtd->dev);
|
||||||
|
if (error)
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
From bcdf0315a61a29eb753a607d3a85a4032de72d94 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Tue, 10 May 2022 15:12:59 +0200
|
||||||
|
Subject: [PATCH] mtd: call of_platform_populate() for MTD partitions
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Until this change MTD subsystem supported handling partitions only with
|
||||||
|
MTD partitions parsers. That's a specific / limited API designed around
|
||||||
|
partitions.
|
||||||
|
|
||||||
|
Some MTD partitions may however require different handling. They may
|
||||||
|
contain specific data that needs to be parsed and somehow extracted. For
|
||||||
|
that purpose MTD subsystem should allow binding of standard platform
|
||||||
|
drivers.
|
||||||
|
|
||||||
|
An example can be U-Boot (sub)partition with environment variables.
|
||||||
|
There exist a "u-boot,env" DT binding for MTD (sub)partition that
|
||||||
|
requires an NVMEM driver.
|
||||||
|
|
||||||
|
Ref: 5db1c2dbc04c ("dt-bindings: nvmem: add U-Boot environment variables binding")
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20220510131259.555-1-zajec5@gmail.com
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdpart.c | 9 +++++++++
|
||||||
|
1 file changed, 9 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdpart.c
|
||||||
|
+++ b/drivers/mtd/mtdpart.c
|
||||||
|
@@ -17,6 +17,7 @@
|
||||||
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
+#include <linux/of_platform.h>
|
||||||
|
|
||||||
|
#include "mtdcore.h"
|
||||||
|
|
||||||
|
@@ -577,10 +578,16 @@ static int mtd_part_of_parse(struct mtd_
|
||||||
|
struct mtd_part_parser *parser;
|
||||||
|
struct device_node *np;
|
||||||
|
struct property *prop;
|
||||||
|
+ struct device *dev;
|
||||||
|
const char *compat;
|
||||||
|
const char *fixed = "fixed-partitions";
|
||||||
|
int ret, err = 0;
|
||||||
|
|
||||||
|
+ dev = &master->dev;
|
||||||
|
+ /* Use parent device (controller) if the top level MTD is not registered */
|
||||||
|
+ if (!IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) && !mtd_is_partition(master))
|
||||||
|
+ dev = master->dev.parent;
|
||||||
|
+
|
||||||
|
np = mtd_get_of_node(master);
|
||||||
|
if (mtd_is_partition(master))
|
||||||
|
of_node_get(np);
|
||||||
|
@@ -593,6 +600,7 @@ static int mtd_part_of_parse(struct mtd_
|
||||||
|
continue;
|
||||||
|
ret = mtd_part_do_parse(parser, master, pparts, NULL);
|
||||||
|
if (ret > 0) {
|
||||||
|
+ of_platform_populate(np, NULL, NULL, dev);
|
||||||
|
of_node_put(np);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -600,6 +608,7 @@ static int mtd_part_of_parse(struct mtd_
|
||||||
|
if (ret < 0 && !err)
|
||||||
|
err = ret;
|
||||||
|
}
|
||||||
|
+ of_platform_populate(np, NULL, NULL, dev);
|
||||||
|
of_node_put(np);
|
||||||
|
|
||||||
|
/*
|
||||||
@ -0,0 +1,106 @@
|
|||||||
|
From ad9b10d1eaada169bd764abcab58f08538877e26 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Date: Wed, 22 Jun 2022 03:06:28 +0200
|
||||||
|
Subject: mtd: core: introduce of support for dynamic partitions
|
||||||
|
|
||||||
|
We have many parser that register mtd partitions at runtime. One example
|
||||||
|
is the cmdlinepart or the smem-part parser where the compatible is defined
|
||||||
|
in the dts and the partitions gets detected and registered by the
|
||||||
|
parser. This is problematic for the NVMEM subsystem that requires an OF
|
||||||
|
node to detect NVMEM cells.
|
||||||
|
|
||||||
|
To fix this problem, introduce an additional logic that will try to
|
||||||
|
assign an OF node to the MTD if declared.
|
||||||
|
|
||||||
|
On MTD addition, it will be checked if the MTD has an OF node and if
|
||||||
|
not declared will check if a partition with the same label / node name is
|
||||||
|
declared in DTS. If an exact match is found, the partition dynamically
|
||||||
|
allocated by the parser will have a connected OF node.
|
||||||
|
|
||||||
|
The NVMEM subsystem will detect the OF node and register any NVMEM cells
|
||||||
|
declared statically in the DTS.
|
||||||
|
|
||||||
|
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20220622010628.30414-4-ansuelsmth@gmail.com
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 61 +++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 61 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -564,6 +564,66 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void mtd_check_of_node(struct mtd_info *mtd)
|
||||||
|
+{
|
||||||
|
+ struct device_node *partitions, *parent_dn, *mtd_dn = NULL;
|
||||||
|
+ const char *pname, *prefix = "partition-";
|
||||||
|
+ int plen, mtd_name_len, offset, prefix_len;
|
||||||
|
+ struct mtd_info *parent;
|
||||||
|
+ bool found = false;
|
||||||
|
+
|
||||||
|
+ /* Check if MTD already has a device node */
|
||||||
|
+ if (dev_of_node(&mtd->dev))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ /* Check if a partitions node exist */
|
||||||
|
+ parent = mtd->parent;
|
||||||
|
+ parent_dn = dev_of_node(&parent->dev);
|
||||||
|
+ if (!parent_dn)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ partitions = of_get_child_by_name(parent_dn, "partitions");
|
||||||
|
+ if (!partitions)
|
||||||
|
+ goto exit_parent;
|
||||||
|
+
|
||||||
|
+ prefix_len = strlen(prefix);
|
||||||
|
+ mtd_name_len = strlen(mtd->name);
|
||||||
|
+
|
||||||
|
+ /* Search if a partition is defined with the same name */
|
||||||
|
+ for_each_child_of_node(partitions, mtd_dn) {
|
||||||
|
+ offset = 0;
|
||||||
|
+
|
||||||
|
+ /* Skip partition with no/wrong prefix */
|
||||||
|
+ if (!of_node_name_prefix(mtd_dn, "partition-"))
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ /* Label have priority. Check that first */
|
||||||
|
+ if (of_property_read_string(mtd_dn, "label", &pname)) {
|
||||||
|
+ of_property_read_string(mtd_dn, "name", &pname);
|
||||||
|
+ offset = prefix_len;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ plen = strlen(pname) - offset;
|
||||||
|
+ if (plen == mtd_name_len &&
|
||||||
|
+ !strncmp(mtd->name, pname + offset, plen)) {
|
||||||
|
+ found = true;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!found)
|
||||||
|
+ goto exit_partitions;
|
||||||
|
+
|
||||||
|
+ /* Set of_node only for nvmem */
|
||||||
|
+ if (of_device_is_compatible(mtd_dn, "nvmem-cells"))
|
||||||
|
+ mtd_set_of_node(mtd, mtd_dn);
|
||||||
|
+
|
||||||
|
+exit_partitions:
|
||||||
|
+ of_node_put(partitions);
|
||||||
|
+exit_parent:
|
||||||
|
+ of_node_put(parent_dn);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* add_mtd_device - register an MTD device
|
||||||
|
* @mtd: pointer to new MTD device info structure
|
||||||
|
@@ -669,6 +729,7 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||||
|
mtd->dev.devt = MTD_DEVT(i);
|
||||||
|
dev_set_name(&mtd->dev, "mtd%d", i);
|
||||||
|
dev_set_drvdata(&mtd->dev, mtd);
|
||||||
|
+ mtd_check_of_node(mtd);
|
||||||
|
of_node_get(mtd_get_of_node(mtd));
|
||||||
|
error = device_register(&mtd->dev);
|
||||||
|
if (error)
|
||||||
@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
|
|
||||||
@@ -851,6 +852,8 @@ int mtd_device_parse_register(struct mtd
|
@@ -922,6 +923,8 @@ int mtd_device_parse_register(struct mtd
|
||||||
register_reboot_notifier(&mtd->reboot_notifier);
|
register_reboot_notifier(&mtd->reboot_notifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
|||||||
#include <linux/nvmem-provider.h>
|
#include <linux/nvmem-provider.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
@@ -694,6 +695,19 @@ int add_mtd_device(struct mtd_info *mtd)
|
@@ -765,6 +766,19 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||||
of this try_ nonsense, and no bitching about it
|
of this try_ nonsense, and no bitching about it
|
||||||
either. :) */
|
either. :) */
|
||||||
__module_get(THIS_MODULE);
|
__module_get(THIS_MODULE);
|
||||||
|
|||||||
@ -77,7 +77,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
|
|
||||||
@@ -1012,6 +1013,8 @@ int mtd_device_parse_register(struct mtd
|
@@ -1073,6 +1074,8 @@ int mtd_device_parse_register(struct mtd
|
||||||
|
|
||||||
ret = mtd_otp_nvmem_add(mtd);
|
ret = mtd_otp_nvmem_add(mtd);
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
|||||||
#include <linux/nvmem-provider.h>
|
#include <linux/nvmem-provider.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
@@ -707,6 +708,16 @@ int add_mtd_device(struct mtd_info *mtd)
|
@@ -768,6 +769,16 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||||
of this try_ nonsense, and no bitching about it
|
of this try_ nonsense, and no bitching about it
|
||||||
either. :) */
|
either. :) */
|
||||||
__module_get(THIS_MODULE);
|
__module_get(THIS_MODULE);
|
||||||
|
|||||||
@ -28,20 +28,21 @@
|
|||||||
depends on m
|
depends on m
|
||||||
--- a/drivers/mtd/mtdpart.c
|
--- a/drivers/mtd/mtdpart.c
|
||||||
+++ b/drivers/mtd/mtdpart.c
|
+++ b/drivers/mtd/mtdpart.c
|
||||||
@@ -15,10 +15,12 @@
|
@@ -15,11 +15,13 @@
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
+#include <linux/magic.h>
|
+#include <linux/magic.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
+#include "mtdsplit/mtdsplit.h"
|
+#include "mtdsplit/mtdsplit.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MTD methods which simply translate the effective address and pass through
|
* MTD methods which simply translate the effective address and pass through
|
||||||
@@ -236,6 +238,146 @@ static int mtd_add_partition_attrs(struc
|
@@ -237,6 +239,146 @@ static int mtd_add_partition_attrs(struc
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +189,7 @@
|
|||||||
int mtd_add_partition(struct mtd_info *parent, const char *name,
|
int mtd_add_partition(struct mtd_info *parent, const char *name,
|
||||||
long long offset, long long length)
|
long long offset, long long length)
|
||||||
{
|
{
|
||||||
@@ -274,6 +416,7 @@ int mtd_add_partition(struct mtd_info *p
|
@@ -275,6 +417,7 @@ int mtd_add_partition(struct mtd_info *p
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_remove_part;
|
goto err_remove_part;
|
||||||
|
|
||||||
@ -196,7 +197,7 @@
|
|||||||
mtd_add_partition_attrs(child);
|
mtd_add_partition_attrs(child);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -422,6 +565,7 @@ int add_mtd_partitions(struct mtd_info *
|
@@ -423,6 +566,7 @@ int add_mtd_partitions(struct mtd_info *
|
||||||
goto err_del_partitions;
|
goto err_del_partitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,7 +205,7 @@
|
|||||||
mtd_add_partition_attrs(child);
|
mtd_add_partition_attrs(child);
|
||||||
|
|
||||||
/* Look for subpartitions */
|
/* Look for subpartitions */
|
||||||
@@ -438,31 +582,6 @@ err_del_partitions:
|
@@ -439,31 +583,6 @@ err_del_partitions:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -106,7 +106,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
|||||||
&dev_attr_oobsize.attr,
|
&dev_attr_oobsize.attr,
|
||||||
--- a/drivers/mtd/mtdpart.c
|
--- a/drivers/mtd/mtdpart.c
|
||||||
+++ b/drivers/mtd/mtdpart.c
|
+++ b/drivers/mtd/mtdpart.c
|
||||||
@@ -40,6 +40,7 @@ static struct mtd_info *allocate_partiti
|
@@ -41,6 +41,7 @@ static struct mtd_info *allocate_partiti
|
||||||
struct mtd_info *master = mtd_get_master(parent);
|
struct mtd_info *master = mtd_get_master(parent);
|
||||||
int wr_alignment = (parent->flags & MTD_NO_ERASE) ?
|
int wr_alignment = (parent->flags & MTD_NO_ERASE) ?
|
||||||
master->writesize : master->erasesize;
|
master->writesize : master->erasesize;
|
||||||
@ -114,7 +114,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
|||||||
u64 parent_size = mtd_is_partition(parent) ?
|
u64 parent_size = mtd_is_partition(parent) ?
|
||||||
parent->part.size : parent->size;
|
parent->part.size : parent->size;
|
||||||
struct mtd_info *child;
|
struct mtd_info *child;
|
||||||
@@ -164,6 +165,7 @@ static struct mtd_info *allocate_partiti
|
@@ -165,6 +166,7 @@ static struct mtd_info *allocate_partiti
|
||||||
} else {
|
} else {
|
||||||
/* Single erase size */
|
/* Single erase size */
|
||||||
child->erasesize = master->erasesize;
|
child->erasesize = master->erasesize;
|
||||||
@ -122,7 +122,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -171,26 +173,39 @@ static struct mtd_info *allocate_partiti
|
@@ -172,26 +174,39 @@ static struct mtd_info *allocate_partiti
|
||||||
* exposes several regions with different erasesize. Adjust
|
* exposes several regions with different erasesize. Adjust
|
||||||
* wr_alignment accordingly.
|
* wr_alignment accordingly.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -1046,6 +1046,44 @@ out_unlock:
|
@@ -1117,6 +1117,44 @@ out_unlock:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
||||||
|
|
||||||
|
|||||||
@ -28,20 +28,21 @@
|
|||||||
depends on m
|
depends on m
|
||||||
--- a/drivers/mtd/mtdpart.c
|
--- a/drivers/mtd/mtdpart.c
|
||||||
+++ b/drivers/mtd/mtdpart.c
|
+++ b/drivers/mtd/mtdpart.c
|
||||||
@@ -15,10 +15,12 @@
|
@@ -15,11 +15,13 @@
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
+#include <linux/magic.h>
|
+#include <linux/magic.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
#include <linux/of_platform.h>
|
||||||
|
|
||||||
#include "mtdcore.h"
|
#include "mtdcore.h"
|
||||||
+#include "mtdsplit/mtdsplit.h"
|
+#include "mtdsplit/mtdsplit.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MTD methods which simply translate the effective address and pass through
|
* MTD methods which simply translate the effective address and pass through
|
||||||
@@ -235,6 +237,146 @@ static int mtd_add_partition_attrs(struc
|
@@ -236,6 +238,146 @@ static int mtd_add_partition_attrs(struc
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +189,7 @@
|
|||||||
int mtd_add_partition(struct mtd_info *parent, const char *name,
|
int mtd_add_partition(struct mtd_info *parent, const char *name,
|
||||||
long long offset, long long length)
|
long long offset, long long length)
|
||||||
{
|
{
|
||||||
@@ -273,6 +415,7 @@ int mtd_add_partition(struct mtd_info *p
|
@@ -274,6 +416,7 @@ int mtd_add_partition(struct mtd_info *p
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_remove_part;
|
goto err_remove_part;
|
||||||
|
|
||||||
@ -196,7 +197,7 @@
|
|||||||
mtd_add_partition_attrs(child);
|
mtd_add_partition_attrs(child);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -421,6 +564,7 @@ int add_mtd_partitions(struct mtd_info *
|
@@ -422,6 +565,7 @@ int add_mtd_partitions(struct mtd_info *
|
||||||
goto err_del_partitions;
|
goto err_del_partitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,7 +205,7 @@
|
|||||||
mtd_add_partition_attrs(child);
|
mtd_add_partition_attrs(child);
|
||||||
|
|
||||||
/* Look for subpartitions */
|
/* Look for subpartitions */
|
||||||
@@ -437,31 +581,6 @@ err_del_partitions:
|
@@ -438,31 +582,6 @@ err_del_partitions:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -106,7 +106,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
|||||||
&dev_attr_oobsize.attr,
|
&dev_attr_oobsize.attr,
|
||||||
--- a/drivers/mtd/mtdpart.c
|
--- a/drivers/mtd/mtdpart.c
|
||||||
+++ b/drivers/mtd/mtdpart.c
|
+++ b/drivers/mtd/mtdpart.c
|
||||||
@@ -40,6 +40,7 @@ static struct mtd_info *allocate_partiti
|
@@ -41,6 +41,7 @@ static struct mtd_info *allocate_partiti
|
||||||
struct mtd_info *master = mtd_get_master(parent);
|
struct mtd_info *master = mtd_get_master(parent);
|
||||||
int wr_alignment = (parent->flags & MTD_NO_ERASE) ?
|
int wr_alignment = (parent->flags & MTD_NO_ERASE) ?
|
||||||
master->writesize : master->erasesize;
|
master->writesize : master->erasesize;
|
||||||
@ -114,7 +114,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
|||||||
u64 parent_size = mtd_is_partition(parent) ?
|
u64 parent_size = mtd_is_partition(parent) ?
|
||||||
parent->part.size : parent->size;
|
parent->part.size : parent->size;
|
||||||
struct mtd_info *child;
|
struct mtd_info *child;
|
||||||
@@ -164,6 +165,7 @@ static struct mtd_info *allocate_partiti
|
@@ -165,6 +166,7 @@ static struct mtd_info *allocate_partiti
|
||||||
} else {
|
} else {
|
||||||
/* Single erase size */
|
/* Single erase size */
|
||||||
child->erasesize = master->erasesize;
|
child->erasesize = master->erasesize;
|
||||||
@ -122,7 +122,7 @@ Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -171,26 +173,39 @@ static struct mtd_info *allocate_partiti
|
@@ -172,26 +174,39 @@ static struct mtd_info *allocate_partiti
|
||||||
* exposes several regions with different erasesize. Adjust
|
* exposes several regions with different erasesize. Adjust
|
||||||
* wr_alignment accordingly.
|
* wr_alignment accordingly.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -1213,6 +1213,44 @@ out_unlock:
|
@@ -1274,6 +1274,44 @@ out_unlock:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/core.c
|
--- a/drivers/mtd/spi-nor/core.c
|
||||||
+++ b/drivers/mtd/spi-nor/core.c
|
+++ b/drivers/mtd/spi-nor/core.c
|
||||||
@@ -3156,6 +3156,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3141,6 +3141,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
struct device *dev = nor->dev;
|
struct device *dev = nor->dev;
|
||||||
struct mtd_info *mtd = &nor->mtd;
|
struct mtd_info *mtd = &nor->mtd;
|
||||||
struct device_node *np = spi_nor_get_flash_node(nor);
|
struct device_node *np = spi_nor_get_flash_node(nor);
|
||||||
@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -3210,7 +3211,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3195,7 +3196,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
mtd->type = MTD_NORFLASH;
|
mtd->type = MTD_NORFLASH;
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -778,6 +778,17 @@ out_error:
|
@@ -849,6 +849,17 @@ out_error:
|
||||||
*/
|
*/
|
||||||
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -21,6 +21,11 @@ define Build/dlink-cameo
|
|||||||
$(SCRIPT_DIR)/cameo-tag.py $@ $(DLINK_KERNEL_PART_SIZE)
|
$(SCRIPT_DIR)/cameo-tag.py $@ $(DLINK_KERNEL_PART_SIZE)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
define Build/dlink-version
|
||||||
|
echo -n "OpenWrt" >> $@
|
||||||
|
dd if=/dev/zero bs=25 count=1 >> $@
|
||||||
|
endef
|
||||||
|
|
||||||
define Build/dlink-headers
|
define Build/dlink-headers
|
||||||
dd if=$@ bs=$(DLINK_KERNEL_PART_SIZE) count=1 of=$@.kernel_part; \
|
dd if=$@ bs=$(DLINK_KERNEL_PART_SIZE) count=1 of=$@.kernel_part; \
|
||||||
dd if=$@ bs=$(DLINK_KERNEL_PART_SIZE) skip=1 of=$@.rootfs_part; \
|
dd if=$@ bs=$(DLINK_KERNEL_PART_SIZE) skip=1 of=$@.rootfs_part; \
|
||||||
|
|||||||
@ -17,6 +17,14 @@ define Device/d-link_dgs-1210
|
|||||||
DEVICE_VENDOR := D-Link
|
DEVICE_VENDOR := D-Link
|
||||||
DLINK_KERNEL_PART_SIZE := 1572864
|
DLINK_KERNEL_PART_SIZE := 1572864
|
||||||
KERNEL := kernel-bin | append-dtb | gzip | uImage gzip | dlink-cameo
|
KERNEL := kernel-bin | append-dtb | gzip | uImage gzip | dlink-cameo
|
||||||
|
CAMEO_KERNEL_PART := 2
|
||||||
|
CAMEO_ROOTFS_PART := 3
|
||||||
|
CAMEO_CUSTOMER_SIGNATURE := 2
|
||||||
|
CAMEO_BOARD_VERSION := 32
|
||||||
|
IMAGES += factory_image1.bin
|
||||||
|
IMAGE/factory_image1.bin := append-kernel | pad-to 64k | \
|
||||||
|
append-rootfs | pad-rootfs | pad-to 16 | check-size | \
|
||||||
|
dlink-version | dlink-headers
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Device/d-link_dgs-1210-10p
|
define Device/d-link_dgs-1210-10p
|
||||||
@ -41,13 +49,6 @@ TARGET_DEVICES += d-link_dgs-1210-20
|
|||||||
define Device/d-link_dgs-1210-28
|
define Device/d-link_dgs-1210-28
|
||||||
$(Device/d-link_dgs-1210)
|
$(Device/d-link_dgs-1210)
|
||||||
DEVICE_MODEL := DGS-1210-28
|
DEVICE_MODEL := DGS-1210-28
|
||||||
CAMEO_KERNEL_PART := 2
|
|
||||||
CAMEO_ROOTFS_PART := 3
|
|
||||||
CAMEO_CUSTOMER_SIGNATURE := 2
|
|
||||||
CAMEO_BOARD_VERSION := 32
|
|
||||||
IMAGES += factory_image1.bin
|
|
||||||
IMAGE/factory_image1.bin := append-kernel | pad-to 64k | \
|
|
||||||
append-rootfs | pad-rootfs | pad-to 16 | check-size | dlink-headers
|
|
||||||
endef
|
endef
|
||||||
TARGET_DEVICES += d-link_dgs-1210-28
|
TARGET_DEVICES += d-link_dgs-1210-28
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user