All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mtd: bcm47xxpart: detect Squashfs partition
@ 2013-09-13 16:38 Rafał Miłecki
  2013-09-13 18:45 ` Florian Fainelli
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Rafał Miłecki @ 2013-09-13 16:38 UTC (permalink / raw)
  To: linux-mtd, Artem Bityutskiy, David Woodhouse
  Cc: Hauke Mehrtens, Rafał Miłecki


Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
---
 drivers/mtd/bcm47xxpart.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
index 9279a91..96f821a 100644
--- a/drivers/mtd/bcm47xxpart.c
+++ b/drivers/mtd/bcm47xxpart.c
@@ -32,6 +32,7 @@
 #define ML_MAGIC1			0x39685a42
 #define ML_MAGIC2			0x26594131
 #define TRX_MAGIC			0x30524448
+#define SQSH_MAGIC			0x71736873	/* shsq */
 
 struct trx_header {
 	uint32_t magic;
@@ -167,6 +168,13 @@ static int bcm47xxpart_parse(struct mtd_info *master,
 			offset = rounddown(offset + trx->length, blocksize);
 			continue;
 		}
+
+		/* Squashfs */
+		if (buf[0x000 / 4] == SQSH_MAGIC) {
+			bcm47xxpart_add_part(&parts[curr_part++], "rootfs",
+					     offset, 0);
+			continue;
+		}
 	}
 
 	/* Look for NVRAM at the end of the last block. */
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] mtd: bcm47xxpart: detect Squashfs partition
  2013-09-13 16:38 [PATCH] mtd: bcm47xxpart: detect Squashfs partition Rafał Miłecki
@ 2013-09-13 18:45 ` Florian Fainelli
  2013-09-13 18:56 ` Brian Norris
  2013-09-13 20:25 ` [PATCH V2] mtd: bcm47xxpart: detect block aligned " Rafał Miłecki
  2 siblings, 0 replies; 9+ messages in thread
From: Florian Fainelli @ 2013-09-13 18:45 UTC (permalink / raw)
  To: linux-mtd
  Cc: Hauke Mehrtens, Rafał Miłecki, David Woodhouse,
	Artem Bityutskiy

Le vendredi 13 septembre 2013 18:38:17 Rafał Miłecki a écrit :
> Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

A little commit message would be welcome.

> ---
>  drivers/mtd/bcm47xxpart.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
> index 9279a91..96f821a 100644
> --- a/drivers/mtd/bcm47xxpart.c
> +++ b/drivers/mtd/bcm47xxpart.c
> @@ -32,6 +32,7 @@
>  #define ML_MAGIC1			0x39685a42
>  #define ML_MAGIC2			0x26594131
>  #define TRX_MAGIC			0x30524448
> +#define SQSH_MAGIC			0x71736873	/* shsq */
> 
>  struct trx_header {
>  	uint32_t magic;
> @@ -167,6 +168,13 @@ static int bcm47xxpart_parse(struct mtd_info *master,
>  			offset = rounddown(offset + trx->length, blocksize);
>  			continue;
>  		}
> +
> +		/* Squashfs */
> +		if (buf[0x000 / 4] == SQSH_MAGIC) {

So basically buf[0], which is a bit more readable.

Thanks!
-- 
Florian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mtd: bcm47xxpart: detect Squashfs partition
  2013-09-13 16:38 [PATCH] mtd: bcm47xxpart: detect Squashfs partition Rafał Miłecki
  2013-09-13 18:45 ` Florian Fainelli
@ 2013-09-13 18:56 ` Brian Norris
  2013-09-13 20:02   ` Rafał Miłecki
  2013-09-13 20:25 ` [PATCH V2] mtd: bcm47xxpart: detect block aligned " Rafał Miłecki
  2 siblings, 1 reply; 9+ messages in thread
From: Brian Norris @ 2013-09-13 18:56 UTC (permalink / raw)
  To: Rafał Miłecki
  Cc: Hauke Mehrtens, linux-mtd, David Woodhouse, Artem Bityutskiy

On Fri, Sep 13, 2013 at 06:38:17PM +0200, Rafał Miłecki wrote:
> 
> Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
> ---
>  drivers/mtd/bcm47xxpart.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
> index 9279a91..96f821a 100644
> --- a/drivers/mtd/bcm47xxpart.c
> +++ b/drivers/mtd/bcm47xxpart.c
> @@ -32,6 +32,7 @@
>  #define ML_MAGIC1			0x39685a42
>  #define ML_MAGIC2			0x26594131
>  #define TRX_MAGIC			0x30524448
> +#define SQSH_MAGIC			0x71736873	/* shsq */

s/shsq/sqsh/

Or really, the "sqsh" comment doesn't add much to the SQSH_MAGIC macro.
Maybe this instead?

s/shsq/SquashFS/

>  
>  struct trx_header {
>  	uint32_t magic;
> @@ -167,6 +168,13 @@ static int bcm47xxpart_parse(struct mtd_info *master,
>  			offset = rounddown(offset + trx->length, blocksize);
>  			continue;
>  		}
> +
> +		/* Squashfs */
> +		if (buf[0x000 / 4] == SQSH_MAGIC) {
> +			bcm47xxpart_add_part(&parts[curr_part++], "rootfs",
> +					     offset, 0);
> +			continue;
> +		}
>  	}
>  
>  	/* Look for NVRAM at the end of the last block. */

Brian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mtd: bcm47xxpart: detect Squashfs partition
  2013-09-13 18:56 ` Brian Norris
@ 2013-09-13 20:02   ` Rafał Miłecki
  2013-09-14 18:19     ` Brian Norris
  0 siblings, 1 reply; 9+ messages in thread
From: Rafał Miłecki @ 2013-09-13 20:02 UTC (permalink / raw)
  To: Brian Norris; +Cc: Hauke Mehrtens, linux-mtd, David Woodhouse, Artem Bityutskiy

2013/9/13 Brian Norris <computersforpeace@gmail.com>:
> On Fri, Sep 13, 2013 at 06:38:17PM +0200, Rafał Miłecki wrote:
>>
>> Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
>> ---
>>  drivers/mtd/bcm47xxpart.c |    8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
>> index 9279a91..96f821a 100644
>> --- a/drivers/mtd/bcm47xxpart.c
>> +++ b/drivers/mtd/bcm47xxpart.c
>> @@ -32,6 +32,7 @@
>>  #define ML_MAGIC1                    0x39685a42
>>  #define ML_MAGIC2                    0x26594131
>>  #define TRX_MAGIC                    0x30524448
>> +#define SQSH_MAGIC                   0x71736873      /* shsq */
>
> s/shsq/sqsh/
>
> Or really, the "sqsh" comment doesn't add much to the SQSH_MAGIC macro.
> Maybe this instead?
>
> s/shsq/SquashFS/

This is really a "shsq". If you read 0x71736873 in LE, you get:
1) 0x73 (s)
2) 0x68 (h)
3) 0x73 (s)
4) 0x71 (q)

This is way I put the comment. To underline that this is a "shsq" in
LE, that means SQSH (SQuaSHfs).

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH V2] mtd: bcm47xxpart: detect block aligned Squashfs partition
  2013-09-13 16:38 [PATCH] mtd: bcm47xxpart: detect Squashfs partition Rafał Miłecki
  2013-09-13 18:45 ` Florian Fainelli
  2013-09-13 18:56 ` Brian Norris
@ 2013-09-13 20:25 ` Rafał Miłecki
  2013-09-13 21:24   ` Florian Fainelli
  2 siblings, 1 reply; 9+ messages in thread
From: Rafał Miłecki @ 2013-09-13 20:25 UTC (permalink / raw)
  To: linux-mtd, Artem Bityutskiy, David Woodhouse
  Cc: Hauke Mehrtens, Rafał Miłecki

Most of the bcm47xx devices use TRX format for storing kernel and some
partition like Squashfs or JFFS2. This is pretty flexible solution, CFE
(the bootloader) just writes (and later boots) TRX at some hardcoded
place and paritions can vary in the size.

However some devices don't use TRX format. Very recently we have
discovered ZTE H218N that has kernel and rootfs partitions at some
"random" places.

This patch allows Linux find a rootfs partition after installing custom
image with a CFE bootloader.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
---
 drivers/mtd/bcm47xxpart.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
index 9279a91..61213f9 100644
--- a/drivers/mtd/bcm47xxpart.c
+++ b/drivers/mtd/bcm47xxpart.c
@@ -32,6 +32,7 @@
 #define ML_MAGIC1			0x39685a42
 #define ML_MAGIC2			0x26594131
 #define TRX_MAGIC			0x30524448
+#define SQSH_MAGIC			0x71736873	/* shsq */
 
 struct trx_header {
 	uint32_t magic;
@@ -167,6 +168,13 @@ static int bcm47xxpart_parse(struct mtd_info *master,
 			offset = rounddown(offset + trx->length, blocksize);
 			continue;
 		}
+
+		/* Squashfs on devices not using TRX */
+		if (buf[0x000 / 4] == SQSH_MAGIC) {
+			bcm47xxpart_add_part(&parts[curr_part++], "rootfs",
+					     offset, 0);
+			continue;
+		}
 	}
 
 	/* Look for NVRAM at the end of the last block. */
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH V2] mtd: bcm47xxpart: detect block aligned Squashfs partition
  2013-09-13 20:25 ` [PATCH V2] mtd: bcm47xxpart: detect block aligned " Rafał Miłecki
@ 2013-09-13 21:24   ` Florian Fainelli
  2013-09-14  7:04     ` Rafał Miłecki
  0 siblings, 1 reply; 9+ messages in thread
From: Florian Fainelli @ 2013-09-13 21:24 UTC (permalink / raw)
  To: linux-mtd
  Cc: Hauke Mehrtens, Rafał Miłecki, David Woodhouse,
	Artem Bityutskiy

Le vendredi 13 septembre 2013 22:25:30 Rafał Miłecki a écrit :
> Most of the bcm47xx devices use TRX format for storing kernel and some
> partition like Squashfs or JFFS2. This is pretty flexible solution, CFE
> (the bootloader) just writes (and later boots) TRX at some hardcoded
> place and paritions can vary in the size.
> 
> However some devices don't use TRX format. Very recently we have
> discovered ZTE H218N that has kernel and rootfs partitions at some
> "random" places.
> 
> This patch allows Linux find a rootfs partition after installing custom
> image with a CFE bootloader.
> 

This looks much better, thanks! Couple of nitpicks below.

> Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
> ---
>  drivers/mtd/bcm47xxpart.c |    8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
> index 9279a91..61213f9 100644
> --- a/drivers/mtd/bcm47xxpart.c
> +++ b/drivers/mtd/bcm47xxpart.c
> @@ -32,6 +32,7 @@
>  #define ML_MAGIC1			0x39685a42
>  #define ML_MAGIC2			0x26594131
>  #define TRX_MAGIC			0x30524448
> +#define SQSH_MAGIC			0x71736873	/* shsq */

You could include uapi/linux/magic.h and use the SQUASHFS_MAGIC constant 
directly, sorry for not noticing earlier.

> 
>  struct trx_header {
>  	uint32_t magic;
> @@ -167,6 +168,13 @@ static int bcm47xxpart_parse(struct mtd_info *master,
>  			offset = rounddown(offset + trx->length, blocksize);
>  			continue;
>  		}
> +
> +		/* Squashfs on devices not using TRX */
> +		if (buf[0x000 / 4] == SQSH_MAGIC) {

In theory le32_to_cpu() should be used to mimic what init/do_mounts_rd.c does 
but we do not support big-endian BCM47xx devices yet so this probably does not 
matter much.
-- 
Florian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V2] mtd: bcm47xxpart: detect block aligned Squashfs partition
  2013-09-13 21:24   ` Florian Fainelli
@ 2013-09-14  7:04     ` Rafał Miłecki
  2013-09-16  9:31       ` Florian Fainelli
  0 siblings, 1 reply; 9+ messages in thread
From: Rafał Miłecki @ 2013-09-14  7:04 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: Hauke Mehrtens, linux-mtd, David Woodhouse, Artem Bityutskiy

2013/9/13 Florian Fainelli <f.fainelli@gmail.com>:
> Le vendredi 13 septembre 2013 22:25:30 Rafał Miłecki a écrit :
>> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
>> index 9279a91..61213f9 100644
>> --- a/drivers/mtd/bcm47xxpart.c
>> +++ b/drivers/mtd/bcm47xxpart.c
>> @@ -32,6 +32,7 @@
>>  #define ML_MAGIC1                    0x39685a42
>>  #define ML_MAGIC2                    0x26594131
>>  #define TRX_MAGIC                    0x30524448
>> +#define SQSH_MAGIC                   0x71736873      /* shsq */
>
> You could include uapi/linux/magic.h and use the SQUASHFS_MAGIC constant
> directly, sorry for not noticing earlier.

OK, I need help with that crazy endianness here... When I look at
flash dump in hexdump (or Okteta for gui) I see:
37:0000 | 73 68 73 71 BB 03 00 00 00 00 00 00 88 1B 00 40 | shsq»..........@

bcm47xx is LE, so reading first 4 bytes results in: 0x71'73'68'73 ([3]
+ [2] + [1] + [0]). That is what I used for my SQSH_MAGIC.

However SQUASHFS_MAGIC is 0x73717368. So I need to read [2] + [3] +
[0] + [1]... Any help how to achieve that?

-- 
Rafał

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] mtd: bcm47xxpart: detect Squashfs partition
  2013-09-13 20:02   ` Rafał Miłecki
@ 2013-09-14 18:19     ` Brian Norris
  0 siblings, 0 replies; 9+ messages in thread
From: Brian Norris @ 2013-09-14 18:19 UTC (permalink / raw)
  To: Rafał Miłecki
  Cc: Hauke Mehrtens, linux-mtd, David Woodhouse, Artem Bityutskiy

On 09/13/2013 01:02 PM, Rafał Miłecki wrote:
> 2013/9/13 Brian Norris <computersforpeace@gmail.com>:
>> On Fri, Sep 13, 2013 at 06:38:17PM +0200, Rafał Miłecki wrote:
>>>
>>> Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
>>> ---
>>>   drivers/mtd/bcm47xxpart.c |    8 ++++++++
>>>   1 file changed, 8 insertions(+)
>>>
>>> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
>>> index 9279a91..96f821a 100644
>>> --- a/drivers/mtd/bcm47xxpart.c
>>> +++ b/drivers/mtd/bcm47xxpart.c
>>> @@ -32,6 +32,7 @@
>>>   #define ML_MAGIC1                    0x39685a42
>>>   #define ML_MAGIC2                    0x26594131
>>>   #define TRX_MAGIC                    0x30524448
>>> +#define SQSH_MAGIC                   0x71736873      /* shsq */
>>
>> s/shsq/sqsh/
>>
>> Or really, the "sqsh" comment doesn't add much to the SQSH_MAGIC macro.
>> Maybe this instead?
>>
>> s/shsq/SquashFS/
>
> This is really a "shsq". If you read 0x71736873 in LE, you get:
> 1) 0x73 (s)
> 2) 0x68 (h)
> 3) 0x73 (s)
> 4) 0x71 (q)
>
> This is way I put the comment. To underline that this is a "shsq" in
> LE, that means SQSH (SQuaSHfs).

I see, my bad. That's still a weird magic (not your fault), as it's not 
really LE in the traditional (byte atomic) sense, but little endian with 
16-bit atoms.

Brian

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH V2] mtd: bcm47xxpart: detect block aligned Squashfs partition
  2013-09-14  7:04     ` Rafał Miłecki
@ 2013-09-16  9:31       ` Florian Fainelli
  0 siblings, 0 replies; 9+ messages in thread
From: Florian Fainelli @ 2013-09-16  9:31 UTC (permalink / raw)
  To: Rafał Miłecki
  Cc: Hauke Mehrtens, linux-mtd, David Woodhouse, Artem Bityutskiy

Hello Rafal,

2013/9/14 Rafał Miłecki <zajec5@gmail.com>:
> 2013/9/13 Florian Fainelli <f.fainelli@gmail.com>:
>> Le vendredi 13 septembre 2013 22:25:30 Rafał Miłecki a écrit :
>>> diff --git a/drivers/mtd/bcm47xxpart.c b/drivers/mtd/bcm47xxpart.c
>>> index 9279a91..61213f9 100644
>>> --- a/drivers/mtd/bcm47xxpart.c
>>> +++ b/drivers/mtd/bcm47xxpart.c
>>> @@ -32,6 +32,7 @@
>>>  #define ML_MAGIC1                    0x39685a42
>>>  #define ML_MAGIC2                    0x26594131
>>>  #define TRX_MAGIC                    0x30524448
>>> +#define SQSH_MAGIC                   0x71736873      /* shsq */
>>
>> You could include uapi/linux/magic.h and use the SQUASHFS_MAGIC constant
>> directly, sorry for not noticing earlier.
>
> OK, I need help with that crazy endianness here... When I look at
> flash dump in hexdump (or Okteta for gui) I see:
> 37:0000 | 73 68 73 71 BB 03 00 00 00 00 00 00 88 1B 00 40 | shsq»..........@
>
> bcm47xx is LE, so reading first 4 bytes results in: 0x71'73'68'73 ([3]
> + [2] + [1] + [0]). That is what I used for my SQSH_MAGIC.
>
> However SQUASHFS_MAGIC is 0x73717368. So I need to read [2] + [3] +
> [0] + [1]... Any help how to achieve that?

My bad, there does not seem to be a good combination of endian
swapping which produces the magic you need.
-- 
Florian

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2013-09-16  9:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-13 16:38 [PATCH] mtd: bcm47xxpart: detect Squashfs partition Rafał Miłecki
2013-09-13 18:45 ` Florian Fainelli
2013-09-13 18:56 ` Brian Norris
2013-09-13 20:02   ` Rafał Miłecki
2013-09-14 18:19     ` Brian Norris
2013-09-13 20:25 ` [PATCH V2] mtd: bcm47xxpart: detect block aligned " Rafał Miłecki
2013-09-13 21:24   ` Florian Fainelli
2013-09-14  7:04     ` Rafał Miłecki
2013-09-16  9:31       ` Florian Fainelli

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.