|
|
@@ -0,0 +1,75 @@
|
|
|
+From 0600e3d81628002a5cd80cf83ee454851b0063c0 Mon Sep 17 00:00:00 2001
|
|
|
+From: Hauke Mehrtens <[email protected]>
|
|
|
+Date: Sun, 7 Mar 2021 18:19:26 +0100
|
|
|
+Subject: mtd: parsers: trx: Allow to specify trx-magic in DT
|
|
|
+
|
|
|
+Buffalo uses a different TRX magic for every device, to be able to use
|
|
|
+this trx parser, make it possible to specify the TRX magic in device
|
|
|
+tree. If no TRX magic is specified in device tree, the standard value
|
|
|
+will be used. This value should only be specified if a vendor chooses to
|
|
|
+use a non standard TRX magic.
|
|
|
+
|
|
|
+Signed-off-by: Hauke Mehrtens <[email protected]>
|
|
|
+---
|
|
|
+ .../bindings/mtd/partitions/brcm,trx.txt | 5 +++++
|
|
|
+ drivers/mtd/parsers/parser_trx.c | 21 ++++++++++++++++++-
|
|
|
+ 2 files changed, 25 insertions(+), 1 deletion(-)
|
|
|
+
|
|
|
+--- a/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt
|
|
|
++++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt
|
|
|
+@@ -28,6 +28,11 @@ detected by a software parsing TRX heade
|
|
|
+ Required properties:
|
|
|
+ - compatible : (required) must be "brcm,trx"
|
|
|
+
|
|
|
++Optional properties:
|
|
|
++
|
|
|
++- trx-magic: TRX magic, if it is different from the default magic
|
|
|
++ 0x30524448 as a u32.
|
|
|
++
|
|
|
+ Example:
|
|
|
+
|
|
|
+ flash@0 {
|
|
|
+--- a/drivers/mtd/parsers/parser_trx.c
|
|
|
++++ b/drivers/mtd/parsers/parser_trx.c
|
|
|
+@@ -74,6 +74,24 @@ out_default:
|
|
|
+ return "rootfs";
|
|
|
+ }
|
|
|
+
|
|
|
++static uint32_t parser_trx_get_magic(struct mtd_info *mtd)
|
|
|
++{
|
|
|
++ uint32_t trx_magic = TRX_MAGIC;
|
|
|
++ struct device_node *np;
|
|
|
++ int err;
|
|
|
++
|
|
|
++ np = mtd_get_of_node(mtd);
|
|
|
++ if (!np)
|
|
|
++ return trx_magic;
|
|
|
++
|
|
|
++ /* Get different magic from device tree if specified */
|
|
|
++ err = of_property_read_u32(np, "trx-magic", &trx_magic);
|
|
|
++ if (err != 0 && err != -EINVAL)
|
|
|
++ pr_err("failed to parse \"trx-magic\" DT attribute, use default: %d\n", err);
|
|
|
++
|
|
|
++ return trx_magic;
|
|
|
++}
|
|
|
++
|
|
|
+ static int parser_trx_parse(struct mtd_info *mtd,
|
|
|
+ const struct mtd_partition **pparts,
|
|
|
+ struct mtd_part_parser_data *data)
|
|
|
+@@ -83,6 +101,7 @@ static int parser_trx_parse(struct mtd_i
|
|
|
+ struct trx_header trx;
|
|
|
+ size_t bytes_read;
|
|
|
+ uint8_t curr_part = 0, i = 0;
|
|
|
++ uint32_t trx_magic = parser_trx_get_magic(mtd);
|
|
|
+ int err;
|
|
|
+
|
|
|
+ parts = kcalloc(TRX_PARSER_MAX_PARTS, sizeof(struct mtd_partition),
|
|
|
+@@ -97,7 +116,7 @@ static int parser_trx_parse(struct mtd_i
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+- if (trx.magic != TRX_MAGIC) {
|
|
|
++ if (trx.magic != trx_magic) {
|
|
|
+ kfree(parts);
|
|
|
+ return -ENOENT;
|
|
|
+ }
|