mtd: bcm47xxpart: detect block aligned Squashfs partition

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Wed Nov 13 13:59:04 EST 2013


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=020c6bcfbeabee72c18d862769d72cf9241b9004
Commit:     020c6bcfbeabee72c18d862769d72cf9241b9004
Parent:     99b1d1887fee36ef9ff5d2ee24f0cf3e8c172104
Author:     Rafał Miłecki <zajec5 at gmail.com>
AuthorDate: Mon Oct 21 22:34:37 2013 +0200
Committer:  Brian Norris <computersforpeace at gmail.com>
CommitDate: Wed Nov 6 23:32:58 2013 -0800

    mtd: bcm47xxpart: detect block aligned Squashfs partition
    
    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 at gmail.com>
    Signed-off-by: Brian Norris <computersforpeace 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 6d42746..a737450 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;
@@ -174,6 +175,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. */



More information about the linux-mtd-cvs mailing list