Patchwork mtd: bcm47xxpart: detect Squashfs partition

login
register
mail settings
Submitter Rafał Miłecki
Date Sept. 13, 2013, 4:38 p.m.
Message ID <1379090297-2880-1-git-send-email-zajec5@gmail.com>
Download mbox | patch
Permalink /patch/274808/
State New
Headers show

Comments

Rafał Miłecki - Sept. 13, 2013, 4:38 p.m.
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
---
 drivers/mtd/bcm47xxpart.c |    8 ++++++++
 1 file changed, 8 insertions(+)
Florian Fainelli - Sept. 13, 2013, 6:45 p.m.
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!
Brian Norris - Sept. 13, 2013, 6:56 p.m.
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
Rafał Miłecki - Sept. 13, 2013, 8:02 p.m.
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).
Brian Norris - Sept. 14, 2013, 6:19 p.m.
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

Patch

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