mtd: bcm47xxpart: find boot partition by CFE magic
authorRafał Miłecki <zajec5@gmail.com>
Sat, 21 Dec 2013 18:39:11 +0000 (19:39 +0100)
committerBrian Norris <computersforpeace@gmail.com>
Tue, 7 Jan 2014 18:07:36 +0000 (10:07 -0800)
Some devices have even nicer-to-recognize CFE thanks to the magic.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/bcm47xxpart.c

index 931746ded98905af7bf0fd75376eeded39b17817..877c17c7f5d3ca0af70b2dfb40b030b9e471886f 100644 (file)
  * Amount of bytes we read when analyzing each block of flash memory.
  * Set it big enough to allow detecting partition and reading important data.
  */
-#define BCM47XXPART_BYTES_TO_READ      0x404
+#define BCM47XXPART_BYTES_TO_READ      0x4e8
 
 /* Magics */
 #define BOARD_DATA_MAGIC               0x5246504D      /* MPFR */
+#define CFE_MAGIC                      0x43464531      /* 1EFC */
 #define FACTORY_MAGIC                  0x59544346      /* FCTY */
 #define POT_MAGIC1                     0x54544f50      /* POTT */
 #define POT_MAGIC2                     0x504f          /* OP */
@@ -102,8 +103,9 @@ static int bcm47xxpart_parse(struct mtd_info *master,
                        continue;
                }
 
-               /* CFE has small NVRAM at 0x400 */
-               if (buf[0x400 / 4] == NVRAM_HEADER) {
+               /* Magic or small NVRAM at 0x400 */
+               if ((buf[0x4e0 / 4] == CFE_MAGIC && buf[0x4e4 / 4] == CFE_MAGIC) ||
+                   (buf[0x400 / 4] == NVRAM_HEADER)) {
                        bcm47xxpart_add_part(&parts[curr_part++], "boot",
                                             offset, MTD_WRITEABLE);
                        continue;