Changeset 35791


Ignore:
Timestamp:
2013-02-25T21:56:37+01:00 (5 years ago)
Author:
hauke
Message:

brcm47xx: use bcm47xx_board_get() and detect some more boards in flash partition driver

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch

    r34988 r35791  
    2727--- /dev/null 
    2828+++ b/drivers/mtd/bcm47xxpart.c 
    29 @@ -0,0 +1,541 @@ 
     29@@ -0,0 +1,504 @@ 
    3030+/* 
    3131+ *  Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org> 
     
    8080+#include <bcm47xx.h> 
    8181+#include <asm/fw/cfe/cfe_api.h> 
     82+#include <bcm47xx_board.h> 
    8283+ 
    8384+ 
     
    107108+ 
    108109+#define NVRAM_SPACE 0x8000 
    109 + 
    110 +#define ROUTER_NETGEAR_WGR614L         1 
    111 +#define ROUTER_NETGEAR_WNR834B         2 
    112 +#define ROUTER_NETGEAR_WNDR3300                3 
    113 +#define ROUTER_NETGEAR_WNR3500L                4 
    114 +#define ROUTER_SIMPLETECH_SIMPLESHARE  5 
    115 +#define ROUTER_NETGEAR_WNDR3400                6 
    116110+ 
    117111+static int 
     
    368362+} 
    369363+ 
    370 +static int get_router(void) 
     364+static bool is_simpletech_simpleshare(void) 
    371365+{ 
    372366+       char buf[20]; 
    373 +       u32 boardnum = 0; 
    374367+       u16 boardtype = 0; 
    375368+       u16 boardrev = 0; 
    376369+       u32 boardflags = 0; 
    377 +       u16 sdram_init = 0; 
    378 +       u16 cardbus = 0; 
    379370+       u16 strev = 0; 
    380371+ 
    381 +       if (bcm47xx_nvram_getenv("boardnum", buf, sizeof(buf)) >= 0) 
    382 +               boardnum = simple_strtoul(buf, NULL, 0); 
    383372+       if (bcm47xx_nvram_getenv("boardtype", buf, sizeof(buf)) >= 0) 
    384373+               boardtype = simple_strtoul(buf, NULL, 0); 
     
    387376+       if (bcm47xx_nvram_getenv("boardflags", buf, sizeof(buf)) >= 0) 
    388377+               boardflags = simple_strtoul(buf, NULL, 0); 
    389 +       if (bcm47xx_nvram_getenv("sdram_init", buf, sizeof(buf)) >= 0) 
    390 +               sdram_init = simple_strtoul(buf, NULL, 0); 
    391 +       if (bcm47xx_nvram_getenv("cardbus", buf, sizeof(buf)) >= 0) 
    392 +               cardbus = simple_strtoul(buf, NULL, 0); 
    393378+       if (bcm47xx_nvram_getenv("st_rev", buf, sizeof(buf)) >= 0) 
    394379+               strev = simple_strtoul(buf, NULL, 0); 
    395 + 
    396 +       if ((boardnum == 8 || boardnum == 01) 
    397 +         && boardtype == 0x0472 && cardbus == 1) { 
    398 +               /* Netgear WNR834B, Netgear WNR834Bv2 */ 
    399 +               return ROUTER_NETGEAR_WNR834B; 
    400 +       } 
    401 + 
    402 +       if (boardnum == 01 && boardtype == 0x0472 && boardrev == 0x23) { 
    403 +               /* Netgear WNDR-3300 */ 
    404 +               return ROUTER_NETGEAR_WNDR3300; 
    405 +       } 
    406 + 
    407 +       if ((boardnum == 83258 || boardnum == 01) 
    408 +         && boardtype == 0x048e 
    409 +         && (boardrev == 0x11 || boardrev == 0x10) 
    410 +         && boardflags == 0x750 
    411 +         && sdram_init == 0x000A) { 
    412 +               /* Netgear WGR614v8/L/WW 16MB ram, cfe v1.3 or v1.5 */ 
    413 +               return ROUTER_NETGEAR_WGR614L; 
    414 +       } 
    415 + 
    416 +       if ((boardnum == 1 || boardnum == 3500) 
    417 +         && boardtype == 0x04CF 
    418 +         && (boardrev == 0x1213 || boardrev == 02)) { 
    419 +               /* Netgear WNR3500v2/U/L */ 
    420 +               return ROUTER_NETGEAR_WNR3500L; 
    421 +       } 
    422 + 
    423 +       if (boardnum == 1 && boardtype == 0xb4cf && boardrev == 0x1100) { 
    424 +               /* Netgear WNDR3400 */ 
    425 +               return ROUTER_NETGEAR_WNDR3400; 
    426 +       } 
    427380+ 
    428381+       if (boardtype == 0x042f 
     
    431384+         && strev == 0x11) { 
    432385+               /* Simpletech Simpleshare */ 
    433 +               return ROUTER_SIMPLETECH_SIMPLESHARE; 
    434 +       } 
    435 + 
    436 +       return 0; 
     386+               return true; 
     387+       } 
     388+ 
     389+       return false; 
    437390+} 
    438391+ 
     
    469422+       if (cfe_size != 384 * 1024) { 
    470423+ 
    471 +               switch (get_router()) { 
    472 +               case ROUTER_NETGEAR_WGR614L: 
    473 +               case ROUTER_NETGEAR_WNR834B: 
    474 +               case ROUTER_NETGEAR_WNDR3300: 
    475 +               case ROUTER_NETGEAR_WNR3500L: 
    476 +               case ROUTER_NETGEAR_WNDR3400: 
     424+               switch (bcm47xx_board_get()) { 
     425+               case BCM47XX_BOARD_NETGEAR_WGR614V8: 
     426+               case BCM47XX_BOARD_NETGEAR_WGR614V9: 
     427+               case BCM47XX_BOARD_NETGEAR_WNDR3300: 
     428+               case BCM47XX_BOARD_NETGEAR_WNDR3400V1: 
     429+               case BCM47XX_BOARD_NETGEAR_WNDR3400V2: 
     430+               case BCM47XX_BOARD_NETGEAR_WNDR3400VCNA: 
     431+               case BCM47XX_BOARD_NETGEAR_WNDR3700V3: 
     432+               case BCM47XX_BOARD_NETGEAR_WNDR4000: 
     433+               case BCM47XX_BOARD_NETGEAR_WNDR4500: 
     434+               case BCM47XX_BOARD_NETGEAR_WNR2000: 
     435+               case BCM47XX_BOARD_NETGEAR_WNR3500L: 
     436+               case BCM47XX_BOARD_NETGEAR_WNR3500U: 
     437+               case BCM47XX_BOARD_NETGEAR_WNR3500V2: 
     438+               case BCM47XX_BOARD_NETGEAR_WNR3500V2VC: 
     439+               case BCM47XX_BOARD_NETGEAR_WNR834BV2: 
    477440+                       /* Netgear: checksum is @ 0x003AFFF8 for 4M flash or checksum 
    478441+                        * is @ 0x007AFFF8 for 8M flash 
     
    489452+                       break; 
    490453+ 
    491 +               case ROUTER_SIMPLETECH_SIMPLESHARE: 
    492 +                       /* Fixup Simpletech Simple share nvram  */ 
    493 + 
    494 +                       pr_notice("Setting up simpletech nvram\n"); 
    495 +                       custom_data_size = mtd->erasesize; 
    496 + 
    497 +                       bcm47xx_parts[3].offset = mtd->size - roundup(NVRAM_SPACE, mtd->erasesize) * 2; 
    498 +                       bcm47xx_parts[3].size   = roundup(NVRAM_SPACE, mtd->erasesize); 
    499 + 
    500 +                       /* Place backup nvram into a partition */ 
    501 +                       bcm47xx_parts[4].name = "nvram_copy"; 
    502 +                       bcm47xx_parts[4].offset = mtd->size - roundup(NVRAM_SPACE, mtd->erasesize); 
    503 +                       bcm47xx_parts[4].size   = roundup(NVRAM_SPACE, mtd->erasesize); 
    504 +                       break; 
    505 + 
    506454+               default: 
    507 +                       bcm47xx_parts[3].offset = mtd->size - roundup(NVRAM_SPACE, mtd->erasesize); 
    508 +                       bcm47xx_parts[3].size   = roundup(NVRAM_SPACE, mtd->erasesize); 
     455+                       if (is_simpletech_simpleshare()) { 
     456+                               /* Fixup Simpletech Simple share nvram  */ 
     457+ 
     458+                               pr_notice("Setting up simpletech nvram\n"); 
     459+                               custom_data_size = mtd->erasesize; 
     460+ 
     461+                               bcm47xx_parts[3].offset = mtd->size - roundup(NVRAM_SPACE, mtd->erasesize) * 2; 
     462+                               bcm47xx_parts[3].size   = roundup(NVRAM_SPACE, mtd->erasesize); 
     463+ 
     464+                               /* Place backup nvram into a partition */ 
     465+                               bcm47xx_parts[4].name = "nvram_copy"; 
     466+                               bcm47xx_parts[4].offset = mtd->size - roundup(NVRAM_SPACE, mtd->erasesize); 
     467+                               bcm47xx_parts[4].size   = roundup(NVRAM_SPACE, mtd->erasesize); 
     468+                       } else { 
     469+                               bcm47xx_parts[3].offset = mtd->size - roundup(NVRAM_SPACE, mtd->erasesize); 
     470+                               bcm47xx_parts[3].size   = roundup(NVRAM_SPACE, mtd->erasesize); 
     471+                       } 
    509472+               } 
    510473+ 
     
    520483+       /* linux (kernel and rootfs) */ 
    521484+       if (cfe_size != 384 * 1024) { 
    522 +               if (get_router() == ROUTER_SIMPLETECH_SIMPLESHARE) { 
     485+               if (is_simpletech_simpleshare()) { 
    523486+                       bcm47xx_parts[1].offset = bcm47xx_parts[0].size; 
    524487+                       bcm47xx_parts[1].size   = bcm47xx_parts[4].offset - dual_image_offset - 
Note: See TracChangeset for help on using the changeset viewer.