brcm47xx: fix detection of some Linksys WRT54G* devices
[openwrt.git] / target / linux / brcm47xx / patches-3.10 / 023-mtd-bcm47xxpart-find-boot-partition-by-CFE-magic.patch
1 From 4f8aaf72287578c846ed7ac8c6114aacbf416e45 Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
3 Date: Sat, 21 Dec 2013 19:39:11 +0100
4 Subject: [PATCH] mtd: bcm47xxpart: find boot partition by CFE magic
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Some devices have even nicer-to-recognize CFE thanks to the magic.
10
11 Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
12 Signed-off-by: Brian Norris <computersforpeace@gmail.com>
13 ---
14  drivers/mtd/bcm47xxpart.c |    8 +++++---
15  1 file changed, 5 insertions(+), 3 deletions(-)
16
17 --- a/drivers/mtd/bcm47xxpart.c
18 +++ b/drivers/mtd/bcm47xxpart.c
19 @@ -23,10 +23,11 @@
20   * Amount of bytes we read when analyzing each block of flash memory.
21   * Set it big enough to allow detecting partition and reading important data.
22   */
23 -#define BCM47XXPART_BYTES_TO_READ      0x404
24 +#define BCM47XXPART_BYTES_TO_READ      0x4e8
25  
26  /* Magics */
27  #define BOARD_DATA_MAGIC               0x5246504D      /* MPFR */
28 +#define CFE_MAGIC                      0x43464531      /* 1EFC */
29  #define FACTORY_MAGIC                  0x59544346      /* FCTY */
30  #define POT_MAGIC1                     0x54544f50      /* POTT */
31  #define POT_MAGIC2                     0x504f          /* OP */
32 @@ -102,8 +103,9 @@ static int bcm47xxpart_parse(struct mtd_
33                         continue;
34                 }
35  
36 -               /* CFE has small NVRAM at 0x400 */
37 -               if (buf[0x400 / 4] == NVRAM_HEADER) {
38 +               /* Magic or small NVRAM at 0x400 */
39 +               if ((buf[0x4e0 / 4] == CFE_MAGIC && buf[0x4e4 / 4] == CFE_MAGIC) ||
40 +                   (buf[0x400 / 4] == NVRAM_HEADER)) {
41                         bcm47xxpart_add_part(&parts[curr_part++], "boot",
42                                              offset, MTD_WRITEABLE);
43                         continue;