76 lines
2.3 KiB
Diff
76 lines
2.3 KiB
Diff
|
From 0600e3d81628002a5cd80cf83ee454851b0063c0 Mon Sep 17 00:00:00 2001
|
||
|
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||
|
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 <hauke@hauke-m.de>
|
||
|
---
|
||
|
.../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;
|
||
|
}
|