Changeset 31790


Ignore:
Timestamp:
2012-05-18T18:04:10+02:00 (6 years ago)
Author:
hauke
Message:

brcm47xx: fix nvram read out on devices with serial flash

detect nvram on Linksys E3200

Location:
trunk/target/linux/brcm47xx/patches-3.3
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/patches-3.3/029-bcm47xx-read-nvram-from-sflash.patch

    r31142 r31790  
    2525                lim = bcma_cc->pflash.window_size; 
    2626                break; 
    27 @@ -86,7 +84,110 @@ found: 
     27@@ -86,7 +84,115 @@ found: 
    2828        for (i = 0; i < sizeof(struct nvram_header); i += 4) 
    2929                *dst++ = *src++; 
     
    3333+} 
    3434+ 
     35+static int find_nvram_size(void) 
     36+{ 
     37+       struct nvram_header header; 
     38+       int nvram_sizes[] = {NVRAM_SPACE, 0xF000, 2 * NVRAM_SPACE}; 
     39+       int i; 
     40+       int ret; 
     41+ 
     42+       for (i = 0; i < sizeof(nvram_sizes); i++) { 
     43+               ret = bcm47xx_sflash.read(&bcm47xx_sflash, bcm47xx_sflash.size - nvram_sizes[i], sizeof(header), (u8 *)&header); 
     44+               if (ret != sizeof(header)) 
     45+                       return ret; 
     46+               if (header.magic == NVRAM_HEADER) 
     47+                       return nvram_sizes[i]; 
     48+       } 
     49+       return -1; 
     50+} 
     51+ 
    3552+static int early_nvram_init_sflash(void) 
    3653+{ 
    37 +       struct nvram_header header; 
    3854+       u32 off; 
    3955+       int ret; 
    4056+       char *dst; 
    4157+       int len; 
     58+       int size; 
    4259+ 
    4360+       /* check if the struct is already initilized */ 
     
    4562+               return -1; 
    4663+ 
    47 +       off = FLASH_MIN; 
    48 +       while (off <= bcm47xx_sflash.size) { 
    49 +               ret = bcm47xx_sflash.read(&bcm47xx_sflash, off - NVRAM_SPACE, sizeof(header), (u8 *)&header); 
    50 +               if (ret != sizeof(header)) 
    51 +                       return ret; 
    52 +               if (header.magic == NVRAM_HEADER) 
    53 +                       goto found; 
    54 +               off <<= 1; 
    55 +       } 
     64+       size = find_nvram_size(); 
     65+       if (size <= 0) 
     66+               return size; 
    5667+ 
    57 +       off = FLASH_MIN; 
    58 +       while (off <= bcm47xx_sflash.size) { 
    59 +               ret = bcm47xx_sflash.read(&bcm47xx_sflash, off - (2 * NVRAM_SPACE), sizeof(header), (u8 *)&header); 
    60 +               if (ret != sizeof(header)) 
    61 +                       return ret; 
    62 +               if (header.magic == NVRAM_HEADER) 
    63 +                       goto found; 
    64 +               off <<= 1; 
    65 +       } 
    66 +       return -1; 
    67 + 
    68 +found: 
    6968+       len = NVRAM_SPACE; 
    7069+       dst = nvram_buf; 
     70+       off = bcm47xx_sflash.size; 
     71+       if (size > len) { 
     72+               printk(KERN_WARNING "nvram on flash is bigger than the reserved" 
     73+                      " space in memory, will just copy the first %i bytes\n", 
     74+                      len); 
     75+       } 
    7176+       while (len) { 
    72 +               ret = bcm47xx_sflash.read(&bcm47xx_sflash, off - (2 * NVRAM_SPACE), len, dst); 
     77+               ret = bcm47xx_sflash.read(&bcm47xx_sflash, off - size, len, dst); 
    7378+               if (ret < 0) 
    7479+                       return ret; 
  • trunk/target/linux/brcm47xx/patches-3.3/030-bcm47xx-bcma-nandflash.patch

    r31573 r31790  
    4747 static char nvram_buf[NVRAM_SPACE]; 
    4848  
    49 @@ -134,6 +136,51 @@ found: 
     49@@ -139,6 +141,51 @@ static int early_nvram_init_sflash(void) 
    5050        return 0; 
    5151 } 
     
    6565+       if (!flash_size) 
    6666+               return -1; 
    67 +        
     67+ 
    6868+       cfe_env = 0; 
    6969+ 
     
    9999 static void early_nvram_init_ssb(void) 
    100100 { 
    101 @@ -168,6 +215,11 @@ static void early_nvram_init_bcma(void) 
     101@@ -173,6 +220,11 @@ static void early_nvram_init_bcma(void) 
    102102                if (err < 0) 
    103103                        printk(KERN_WARNING "can not read from flash: %i\n", err); 
  • trunk/target/linux/brcm47xx/patches-3.3/197-MIPS-BCM47XX-return-number-of-written-bytes-in-nvram.patch

    r31142 r31790  
    22--- a/arch/mips/bcm47xx/nvram.c 
    33+++ b/arch/mips/bcm47xx/nvram.c 
    4 @@ -263,8 +263,7 @@ int nvram_getenv(char *name, char *val, 
     4@@ -268,8 +268,7 @@ int nvram_getenv(char *name, char *val, 
    55                value = eq + 1; 
    66                if ((eq - var) == strlen(name) && 
  • trunk/target/linux/brcm47xx/patches-3.3/400-arch-bcm47xx.patch

    r31772 r31790  
    11--- a/arch/mips/bcm47xx/nvram.c 
    22+++ b/arch/mips/bcm47xx/nvram.c 
    3 @@ -269,3 +269,30 @@ int nvram_getenv(char *name, char *val, 
     3@@ -274,3 +274,30 @@ int nvram_getenv(char *name, char *val, 
    44        return NVRAM_ERR_ENVNOTFOUND; 
    55 } 
  • trunk/target/linux/brcm47xx/patches-3.3/820-wgt634u-nvram-fix.patch

    r31142 r31790  
    281281        off = FLASH_MIN; 
    282282        while (off <= lim) { 
    283 @@ -252,6 +273,12 @@ int nvram_getenv(char *name, char *val, 
     283@@ -257,6 +278,12 @@ int nvram_getenv(char *name, char *val, 
    284284        if (!nvram_buf[0]) 
    285285                early_nvram_init(); 
     
    294294        var = &nvram_buf[sizeof(struct nvram_header)]; 
    295295        end = nvram_buf + sizeof(nvram_buf) - 2; 
    296 @@ -280,6 +307,9 @@ char *nvram_get(const char *name) 
     296@@ -285,6 +312,9 @@ char *nvram_get(const char *name) 
    297297        if (!nvram_buf[0]) 
    298298                early_nvram_init(); 
Note: See TracChangeset for help on using the changeset viewer.