[PATCH V2] mtd: bcm47xxpart: detect block aligned Squashfs partition

Florian Fainelli f.fainelli at gmail.com
Fri Sep 13 17:24:51 EDT 2013


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



More information about the linux-mtd mailing list