diff mbox series

[1/2] mtd: parsers: trx: Allow to specify trx-magic in DT

Message ID 20210315170711.567358-2-hauke@hauke-m.de
State New
Headers show
Series mtd: parsers: trx: Add support for Buffalo WSR-2533DHP2 | expand

Commit Message

Hauke Mehrtens March 15, 2021, 5:07 p.m. UTC
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(-)

Comments

Miquel Raynal March 17, 2021, 9:25 a.m. UTC | #1
Hi Hauke,

Hauke Mehrtens <hauke@hauke-m.de> wrote on Mon, 15 Mar 2021 18:07:10
+0100:

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

Can you please split this patch:
1- dt-binding update
2- driver update

This way we can collect Rob's ack for the binding patch.

Thanks,
Miquèl
Rafał Miłecki March 18, 2021, 6:43 a.m. UTC | #2
On 15.03.2021 18:07, Hauke Mehrtens wrote:
> 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(-)
> 
> diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt
> index b677147ca4e1..715a18ca36bd 100644
> --- 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 header.
>   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.

It may need to be brcm,trx-magic and ack for sending a separated bt-bindings patch.


> diff --git a/drivers/mtd/parsers/parser_trx.c b/drivers/mtd/parsers/parser_trx.c
> index 8541182134d4..fd424587caa4 100644
> --- a/drivers/mtd/parsers/parser_trx.c
> +++ b/drivers/mtd/parsers/parser_trx.c
> @@ -47,6 +47,24 @@ static const char *parser_trx_data_part_name(struct mtd_info *master,
>   	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;

This check seems redundant, of_ returns -EINVAL also for NULL node.


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

I'm not native, but shouldn't that be s/use/using/ ?


> +
> +	return trx_magic;
> +}
Hauke Mehrtens April 18, 2021, 4:59 p.m. UTC | #3
On 3/18/21 7:43 AM, Rafał Miłecki wrote:
> On 15.03.2021 18:07, Hauke Mehrtens wrote:

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

>>

>> diff --git 

>> a/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt 

>> b/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt

>> index b677147ca4e1..715a18ca36bd 100644

>> --- 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 header.

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

> 

> It may need to be brcm,trx-magic and ack for sending a separated 

> bt-bindings patch.


Ok, I will rename it to brcm,trx-magic.

>> diff --git a/drivers/mtd/parsers/parser_trx.c 

>> b/drivers/mtd/parsers/parser_trx.c

>> index 8541182134d4..fd424587caa4 100644

>> --- a/drivers/mtd/parsers/parser_trx.c

>> +++ b/drivers/mtd/parsers/parser_trx.c

>> @@ -47,6 +47,24 @@ static const char *parser_trx_data_part_name(struct 

>> mtd_info *master,

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

> 

> This check seems redundant, of_ returns -EINVAL also for NULL node.


Thanks for the information, I will remove this check. Then it could also 
be easier to just inline this code.

> 

> 

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

> 

> I'm not native, but shouldn't that be s/use/using/ ?


I am also not a native speaker, but I agree with you and will change this.

Hauke
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt b/Documentation/devicetree/bindings/mtd/partitions/brcm,trx.txt
index b677147ca4e1..715a18ca36bd 100644
--- 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 header.
 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 {
diff --git a/drivers/mtd/parsers/parser_trx.c b/drivers/mtd/parsers/parser_trx.c
index 8541182134d4..fd424587caa4 100644
--- a/drivers/mtd/parsers/parser_trx.c
+++ b/drivers/mtd/parsers/parser_trx.c
@@ -47,6 +47,24 @@  static const char *parser_trx_data_part_name(struct mtd_info *master,
 	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)
@@ -56,6 +74,7 @@  static int parser_trx_parse(struct mtd_info *mtd,
 	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),
@@ -70,7 +89,7 @@  static int parser_trx_parse(struct mtd_info *mtd,
 		return err;
 	}
 
-	if (trx.magic != TRX_MAGIC) {
+	if (trx.magic != trx_magic) {
 		kfree(parts);
 		return -ENOENT;
 	}