Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen 2022-07-09 15:44:09 +08:00
commit 9217b197ca
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
20 changed files with 471 additions and 38 deletions

View File

@ -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

View File

@ -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)
{ {

View File

@ -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)
{ {

View File

@ -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);
/*

View File

@ -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)

View File

@ -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);
/*

View File

@ -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)

View File

@ -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);
} }

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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;
} }

View File

@ -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.
*/ */

View File

@ -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);

View File

@ -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;
} }

View File

@ -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.
*/ */

View File

@ -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);

View File

@ -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)
{ {

View File

@ -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; \

View File

@ -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