
This makes the patches which were just copied in the previous commit apply on top of kernel 4.19. The patches in the backports-4.19 folder were checked if they are really in kernel 4.19 based on the title and only removed if they were found in the upstream kernel. The following additional patches form the pending folder went into upstream Linux 4.19: pending-4.19/171-usb-dwc2-Fix-inefficient-copy-of-unaligned-buffers.patch pending-4.19/190-2-5-e1000e-Fix-wrong-comment-related-to-link-detection.patch pending-4.19/478-mtd-spi-nor-Add-support-for-XM25QH64A-and-XM25QH128A.patch pending-4.19/479-mtd-spi-nor-add-eon-en25qh32.patch pending-4.19/950-tty-serial-exar-generalize-rs485-setup.patch pending-4.19/340-MIPS-mm-remove-mips_dma_mapping_error.patch Bigger changes were introduced to the m25p80 spi nor driver, as far as I saw it in the new code, it now has the functionality provided in this patch: pending-4.19/450-mtd-m25p80-allow-fallback-from-spi_flash_read-to-reg.patch Part of this patch went upstream independent of OpenWrt: hack-4.19/220-gc_sections.patch This patch was reworked to match the changes done upstream. The MIPS DMA API changed a lot, this patch was rewritten to match the new DMA handling: pending-4.19/341-MIPS-mm-remove-no-op-dma_map_ops-where-possible.patch I did bigger manual changes to the following patches and I am not 100% sure if they are all correct: pending-4.19/0931-w1-gpio-fix-problem-with-platfom-data-in-w1-gpio.patch pending-4.19/411-mtd-partial_eraseblock_write.patch pending-4.19/600-netfilter_conntrack_flush.patch pending-4.19/611-netfilter_match_bypass_default_table.patch pending-4.19/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch hack-4.19/211-host_tools_portability.patch hack-4.19/221-module_exports.patch hack-4.19/321-powerpc_crtsavres_prereq.patch hack-4.19/902-debloat_proc.patch This is based on patchset from Marko Ratkaj <marko.ratkaj@sartura.hr> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
173 lines
5.1 KiB
Diff
173 lines
5.1 KiB
Diff
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
Subject: mtd: part: add generic parsing of linux,part-probe
|
|
|
|
This moves the linux,part-probe device tree parsing code from
|
|
physmap_of.c to mtdpart.c. Now all drivers can use this feature by just
|
|
providing a reference to their device tree node in struct
|
|
mtd_part_parser_data.
|
|
|
|
THIS METHOD HAS BEEN DEPRECATED
|
|
|
|
Linux supports "compatible" property in the "partitions" subnode now. It
|
|
should be used to specify partitions format (and trigger proper parser
|
|
usage) if needed.
|
|
|
|
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
|
---
|
|
Documentation/devicetree/bindings/mtd/nand.txt | 16 +++++++++
|
|
drivers/mtd/maps/physmap_of.c | 46 +-------------------------
|
|
drivers/mtd/mtdpart.c | 45 +++++++++++++++++++++++++
|
|
3 files changed, 62 insertions(+), 45 deletions(-)
|
|
|
|
--- a/Documentation/devicetree/bindings/mtd/nand.txt
|
|
+++ b/Documentation/devicetree/bindings/mtd/nand.txt
|
|
@@ -49,6 +49,22 @@ Optional NAND chip properties:
|
|
|
|
- nand-rb: shall contain the native Ready/Busy ids.
|
|
|
|
+- linux,part-probe: list of name as strings of the partition parser
|
|
+ which should be used to parse the partition table.
|
|
+ They will be tried in the specified ordering and
|
|
+ the next one will be used if the previous one
|
|
+ failed.
|
|
+
|
|
+ Example: linux,part-probe = "cmdlinepart", "ofpart";
|
|
+
|
|
+ This is also the default value, which will be used
|
|
+ if this attribute is not specified. It could be
|
|
+ that the flash driver in use overwrote the default
|
|
+ value and uses some other default.
|
|
+
|
|
+ Possible values are: bcm47xxpart, afs, ar7part,
|
|
+ ofoldpart, ofpart, bcm63xxpart, RedBoot, cmdlinepart
|
|
+
|
|
The ECC strength and ECC step size properties define the correction capability
|
|
of a controller. Together, they say a controller can correct "{strength} bit
|
|
errors per {size} bytes".
|
|
--- a/drivers/mtd/maps/physmap_of_core.c
|
|
+++ b/drivers/mtd/maps/physmap_of_core.c
|
|
@@ -115,37 +115,9 @@ static struct mtd_info *obsolete_probe(s
|
|
static const char * const part_probe_types_def[] = {
|
|
"cmdlinepart", "RedBoot", "ofpart", "ofoldpart", NULL };
|
|
|
|
-static const char * const *of_get_probes(struct device_node *dp)
|
|
-{
|
|
- const char **res;
|
|
- int count;
|
|
-
|
|
- count = of_property_count_strings(dp, "linux,part-probe");
|
|
- if (count < 0)
|
|
- return part_probe_types_def;
|
|
-
|
|
- res = kcalloc(count + 1, sizeof(*res), GFP_KERNEL);
|
|
- if (!res)
|
|
- return NULL;
|
|
-
|
|
- count = of_property_read_string_array(dp, "linux,part-probe", res,
|
|
- count);
|
|
- if (count < 0)
|
|
- return NULL;
|
|
-
|
|
- return res;
|
|
-}
|
|
-
|
|
-static void of_free_probes(const char * const *probes)
|
|
-{
|
|
- if (probes != part_probe_types_def)
|
|
- kfree(probes);
|
|
-}
|
|
-
|
|
static const struct of_device_id of_flash_match[];
|
|
static int of_flash_probe(struct platform_device *dev)
|
|
{
|
|
- const char * const *part_probe_types;
|
|
const struct of_device_id *match;
|
|
struct device_node *dp = dev->dev.of_node;
|
|
struct resource res;
|
|
@@ -316,14 +288,8 @@ static int of_flash_probe(struct platfor
|
|
|
|
info->cmtd->dev.parent = &dev->dev;
|
|
mtd_set_of_node(info->cmtd, dp);
|
|
- part_probe_types = of_get_probes(dp);
|
|
- if (!part_probe_types) {
|
|
- err = -ENOMEM;
|
|
- goto err_out;
|
|
- }
|
|
- mtd_device_parse_register(info->cmtd, part_probe_types, NULL,
|
|
+ mtd_device_parse_register(info->cmtd, part_probe_types_def, NULL,
|
|
NULL, 0);
|
|
- of_free_probes(part_probe_types);
|
|
|
|
kfree(mtd_list);
|
|
|
|
--- a/drivers/mtd/mtdpart.c
|
|
+++ b/drivers/mtd/mtdpart.c
|
|
@@ -29,6 +29,7 @@
|
|
#include <linux/kmod.h>
|
|
#include <linux/mtd/mtd.h>
|
|
#include <linux/mtd/partitions.h>
|
|
+#include <linux/of.h>
|
|
#include <linux/err.h>
|
|
#include <linux/of.h>
|
|
|
|
@@ -796,6 +797,37 @@ void deregister_mtd_parser(struct mtd_pa
|
|
}
|
|
EXPORT_SYMBOL_GPL(deregister_mtd_parser);
|
|
|
|
+#include <linux/version.h>
|
|
+
|
|
+/*
|
|
+ * Parses the linux,part-probe device tree property.
|
|
+ * When a non null value is returned it has to be freed with kfree() by
|
|
+ * the caller.
|
|
+ */
|
|
+static const char * const *of_get_probes(struct device_node *dp)
|
|
+{
|
|
+ const char **res;
|
|
+ int count;
|
|
+
|
|
+ count = of_property_count_strings(dp, "linux,part-probe");
|
|
+ if (count < 0)
|
|
+ return NULL;
|
|
+
|
|
+ res = kzalloc((count + 1) * sizeof(*res), GFP_KERNEL);
|
|
+ if (!res)
|
|
+ return NULL;
|
|
+
|
|
+ count = of_property_read_string_array(dp, "linux,part-probe", res,
|
|
+ count);
|
|
+ if (count < 0)
|
|
+ return NULL;
|
|
+
|
|
+ pr_warn("Support for the generic \"linux,part-probe\" has been deprecated and will be removed soon");
|
|
+ BUILD_BUG_ON(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0));
|
|
+
|
|
+ return res;
|
|
+}
|
|
+
|
|
/*
|
|
* Do not forget to update 'parse_mtd_partitions()' kerneldoc comment if you
|
|
* are changing this array!
|
|
@@ -948,6 +980,13 @@ int parse_mtd_partitions(struct mtd_info
|
|
struct mtd_partitions pparts = { };
|
|
struct mtd_part_parser *parser;
|
|
int ret, err = 0;
|
|
+ const char *const *types_of = NULL;
|
|
+
|
|
+ if (mtd_get_of_node(master)) {
|
|
+ types_of = of_get_probes(mtd_get_of_node(master));
|
|
+ if (types_of != NULL)
|
|
+ types = types_of;
|
|
+ }
|
|
|
|
if (!types)
|
|
types = mtd_is_partition(master) ? default_subpartition_types :
|
|
@@ -989,6 +1028,7 @@ int parse_mtd_partitions(struct mtd_info
|
|
if (ret < 0 && !err)
|
|
err = ret;
|
|
}
|
|
+ kfree(types_of);
|
|
return err;
|
|
}
|
|
|