brcm47xx: add a new version of the nvram rewrite patch
authorHauke Mehrtens <hauke@hauke-m.de>
Thu, 3 Jan 2013 01:53:30 +0000 (01:53 +0000)
committerHauke Mehrtens <hauke@hauke-m.de>
Thu, 3 Jan 2013 01:53:30 +0000 (01:53 +0000)
This is the version like it was send for mainline inclusion.

SVN-Revision: 34988

13 files changed:
package/switch/src/switch-adm.c
package/switch/src/switch-robo.c
package/system/rtc-rv5c386a/src/rtc.c
target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch
target/linux/brcm47xx/patches-3.6/080-MIPS-BCM47XX-rewrite-nvram-probing.patch
target/linux/brcm47xx/patches-3.6/116-MIPS-BCM47xx-Remove-CFE-console.patch
target/linux/brcm47xx/patches-3.6/210-b44_phy_fix.patch
target/linux/brcm47xx/patches-3.6/400-arch-bcm47xx.patch
target/linux/brcm47xx/patches-3.6/520-MIPS-BCM47XX-fix-time-for-WL520G-and-other-200-MHz-C.patch
target/linux/brcm47xx/patches-3.6/700-ssb-gigabit-ethernet-driver.patch
target/linux/brcm47xx/patches-3.6/820-wgt634u-nvram-fix.patch
target/linux/brcm47xx/patches-3.6/980-wnr834b_no_cardbus_invariant.patch
target/linux/brcm47xx/patches-3.6/999-wl_exports.patch

index 9a6d32b1efc53f3347789d266354117fc457f1cc..f21470ed53bac7c1814b9876a42929be78c55077 100644 (file)
@@ -38,7 +38,7 @@
 #include "gpio.h"
 
 #ifdef CONFIG_BCM47XX
-#include <nvram.h>
+#include <bcm47xx_nvram.h>
 #endif
 
 #define DRIVER_NAME "adm6996"
@@ -89,7 +89,7 @@ static unsigned int get_gpiopin(char *pin_name, unsigned int def_pin)
        /* Go thru all possibilities till a match in pin name */
        for (pin = 0; pin < 16; pin ++) {
                sprintf(name, "gpio%d", pin);
-               if (nvram_getenv(name, val, sizeof(val)) >= 0) {
+               if (bcm47xx_nvram_getenv(name, val, sizeof(val)) >= 0) {
                        if (!strcmp(val, pin_name))
                                return pin;
                }
@@ -497,10 +497,10 @@ static int detect_adm(void)
        int boardflags = 0;
        int boardnum = 0;
                
-       if (nvram_getenv("boardflags", buf, sizeof(buf)) >= 0)
+       if (bcm47xx_nvram_getenv("boardflags", buf, sizeof(buf)) >= 0)
                boardflags = simple_strtoul(buf, NULL, 0);
 
-       if (nvram_getenv("boardnum", buf, sizeof(buf)) >= 0)
+       if (bcm47xx_nvram_getenv("boardnum", buf, sizeof(buf)) >= 0)
                boardnum = simple_strtoul(buf, NULL, 0);
 
        if ((boardnum == 44) && (boardflags == 0x0388)) {  /* Trendware TEW-411BRP+ */
@@ -519,9 +519,9 @@ static int detect_adm(void)
                eedi = get_gpiopin("adm_eedi", 4);
                eerc = get_gpiopin("adm_rc", 0);
 
-       } else if (nvram_getenv("boardtype", buf, sizeof(buf)) >= 0) {
+       } else if (bcm47xx_nvram_getenv("boardtype", buf, sizeof(buf)) >= 0) {
                if (strcmp(buf, "bcm94710dev") == 0) {
-                       if (nvram_getenv("boardnum", buf, sizeof(buf)) >= 0) {
+                       if (bcm47xx_nvram_getenv("boardnum", buf, sizeof(buf)) >= 0) {
                                if (strncmp(buf, "42", 2) == 0) {
                                        /* WRT54G v1.1 hack */
                                        eecs = 2;
index f1160c8894a160389f9c4e9780fe5153e3256159..3751653a6d95fa95b9c54a82b68d6aa117a0cc9c 100644 (file)
@@ -35,7 +35,7 @@
 #include "etc53xx.h"
 
 #ifdef CONFIG_BCM47XX
-#include <nvram.h>
+#include <bcm47xx_nvram.h>
 #endif
 
 #define DRIVER_NAME            "bcm53xx"
@@ -236,7 +236,7 @@ static int robo_switch_enable(void)
 
 #ifdef CONFIG_BCM47XX
        /* WAN port LED, except for Netgear WGT634U */
-       if (nvram_getenv("nvram_type", buf, sizeof(buf)) >= 0) {
+       if (bcm47xx_nvram_getenv("nvram_type", buf, sizeof(buf)) >= 0) {
                if (strcmp(buf, "cfe") != 0)
                        robo_write16(ROBO_CTRL_PAGE, 0x16, 0x1F);
        }
index 25e5331409894c9bc24532fe3d7a915b05b75b61..2fc6f093cf6bf017fc1711b8e91880fceaef918a 100644 (file)
@@ -62,7 +62,7 @@
 #endif
 
 #include <bcm47xx.h>
-#include <nvram.h>
+#include <bcm47xx_nvram.h>
 
 #define RTC_IS_OPEN            0x01    /* Means /dev/rtc is in use.  */
 
@@ -530,7 +530,7 @@ static void platform_detect(void)
        int et0phyaddr, et1phyaddr;
 
        /* Based on "model_no".  */
-       if (nvram_getenv("model_no", buf, sizeof(buf)) >= 0) {
+       if (bcm47xx_nvram_getenv("model_no", buf, sizeof(buf)) >= 0) {
                if (startswith(buf, "WL700")) { /* WL700* */
                        sda_index = 2;
                        scl_index = 5;
@@ -538,12 +538,12 @@ static void platform_detect(void)
                }
        }
 
-       if (nvram_getenv("et0phyaddr", buf, sizeof(buf)) >= 0 )
+       if (bcm47xx_nvram_getenv("et0phyaddr", buf, sizeof(buf)) >= 0 )
                et0phyaddr = simple_strtoul(buf, NULL, 0);
-       if (nvram_getenv("et1phyaddr", buf, sizeof(buf)) >= 0 )
+       if (bcm47xx_nvram_getenv("et1phyaddr", buf, sizeof(buf)) >= 0 )
                et1phyaddr = simple_strtoul(buf, NULL, 0);
 
-       if (nvram_getenv("hardware_version", buf, sizeof(buf)) >= 0) {
+       if (bcm47xx_nvram_getenv("hardware_version", buf, sizeof(buf)) >= 0) {
                /* Either WL-300g or WL-HDD, do more extensive checks */
                if (startswith(buf, "WL300-") && et0phyaddr == 0 && et1phyaddr == 1) {
                        sda_index = 4;
index 61e8838c0d67f2a5a56ce1be8705bdce3b7495b4..ea092cc27275b1442372507cdccc08df1245d75e 100644 (file)
@@ -76,8 +76,8 @@
 +#include <linux/mtd/partitions.h>
 +#include <linux/crc32.h>
 +#include <linux/io.h>
-+#include <asm/mach-bcm47xx/nvram.h>
-+#include <asm/mach-bcm47xx/bcm47xx.h>
++#include <bcm47xx_nvram.h>
++#include <bcm47xx.h>
 +#include <asm/fw/cfe/cfe_api.h>
 +
 +
 +      u16 cardbus = 0;
 +      u16 strev = 0;
 +
-+      if (nvram_getenv("boardnum", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("boardnum", buf, sizeof(buf)) >= 0)
 +              boardnum = simple_strtoul(buf, NULL, 0);
-+      if (nvram_getenv("boardtype", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("boardtype", buf, sizeof(buf)) >= 0)
 +              boardtype = simple_strtoul(buf, NULL, 0);
-+      if (nvram_getenv("boardrev", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("boardrev", buf, sizeof(buf)) >= 0)
 +              boardrev = simple_strtoul(buf, NULL, 0);
-+      if (nvram_getenv("boardflags", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("boardflags", buf, sizeof(buf)) >= 0)
 +              boardflags = simple_strtoul(buf, NULL, 0);
-+      if (nvram_getenv("sdram_init", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("sdram_init", buf, sizeof(buf)) >= 0)
 +              sdram_init = simple_strtoul(buf, NULL, 0);
-+      if (nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
 +              cardbus = simple_strtoul(buf, NULL, 0);
-+      if (nvram_getenv("st_rev", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("st_rev", buf, sizeof(buf)) >= 0)
 +              strev = simple_strtoul(buf, NULL, 0);
 +
 +      if ((boardnum == 8 || boardnum == 01)
index a271876fa93bdb91928a3032b795aafc60267338..ecc9e04134aa9abc6958f183bc612ae1c4b51dc8 100644 (file)
@@ -9,7 +9,13 @@
   *
   * This program is free software; you can redistribute  it and/or modify it
   * under  the terms of  the GNU General  Public License as published by the
-@@ -23,69 +23,139 @@
+@@ -18,83 +18,166 @@
+ #include <linux/kernel.h>
+ #include <linux/string.h>
+ #include <asm/addrspace.h>
+-#include <asm/mach-bcm47xx/nvram.h>
++#include <bcm47xx_nvram.h>
+ #include <asm/mach-bcm47xx/bcm47xx.h>
  
  static char nvram_buf[NVRAM_SPACE];
  
@@ -30,7 +36,7 @@
 +
  /* Probe for NVRAM header */
 -static void early_nvram_init(void)
-+static void early_nvram_init_fill(u32 base, u32 lim)
++static int nvram_find_and_copy(u32 base, u32 lim)
  {
 -#ifdef CONFIG_BCM47XX_SSB
 -      struct ssb_mipscore *mcore_ssb;
                goto found;
 +      }
  
+-      return;
 +      pr_err("no nvram found\n");
-       return;
++      return -ENXIO;
  
  found:
 +
 -      for (; i < header->len && i < NVRAM_SPACE; i += 4)
 +      for (; i < header->len && i < NVRAM_SPACE && i < size; i += 4)
                *dst++ = le32_to_cpu(*src++);
++      memset(dst, 0x0, NVRAM_SPACE - i);
++
++      return 0;
  }
  
+-int nvram_getenv(char *name, char *val, size_t val_len)
++#ifdef CONFIG_BCM47XX_SSB
++static int nvram_init_ssb(void)
++{
++      struct ssb_mipscore *mcore = &bcm47xx_bus.ssb.mipscore;
++      struct ssb_chipcommon *chipco = &bcm47xx_bus.ssb.chipco;
++      u32 base;
++      u32 lim;
++
++      if (mcore->pflash.present) {
++              base = mcore->pflash.window;
++              lim = mcore->pflash.window_size;
++#ifdef CONFIG_SSB_SFLASH
++      } else if (chipco->sflash.present) {
++              base = chipco->sflash.window;
++              lim = chipco->sflash.size;
++#endif
++      } else {
++              pr_err("Couldn't find supported flash memory\n");
++              return -ENXIO;
++      }
++
++      return nvram_find_and_copy(base, lim);
++}
++#endif
++
 +#ifdef CONFIG_BCM47XX_BCMA
-+static void early_nvram_init_bcma(void)
++static int nvram_init_bcma(void)
 +{
 +      struct bcma_drv_cc *cc = &bcm47xx_bus.bcma.bus.drv_cc;
-+      u32 base = 0;
-+      u32 lim = 0;
++      u32 base;
++      u32 lim;
 +
++#ifdef CONFIG_BCMA_NFLASH
 +      if (cc->nflash.boot) {
 +              base = BCMA_SOC_FLASH1;
 +              lim = BCMA_SOC_FLASH1_SZ;
-+      } else if (cc->pflash.present) {
++      } else
++#endif
++      if (cc->pflash.present) {
 +              base = cc->pflash.window;
 +              lim = cc->pflash.window_size;
++#ifdef CONFIG_BCMA_SFLASH
 +      } else if (cc->sflash.present) {
 +              base = cc->sflash.window;
 +              lim = cc->sflash.size;
-+      } else {
-+              pr_err("No supported flash found\n");
-+              return;
-+      }
-+
-+      early_nvram_init_fill(base, lim);
-+}
 +#endif
-+
-+#ifdef CONFIG_BCM47XX_SSB
-+static void early_nvram_init_ssb(void)
-+{
-+      struct ssb_mipscore *mcore = &bcm47xx_bus.ssb.mipscore;
-+      struct ssb_chipcommon *chipco = &bcm47xx_bus.ssb.chipco;
-+      u32 base = 0;
-+      u32 lim = 0;
-+
-+      if (mcore->pflash.present) {
-+              base = mcore->pflash.window;
-+              lim = mcore->pflash.window_size;
-+      } else if (chipco->sflash.present) {
-+              base = chipco->sflash.window;
-+              lim = chipco->sflash.size;
 +      } else {
-+              pr_err("No supported flash found\n");
-+              return;
++              pr_err("Couldn't find supported flash memory\n");
++              return -ENXIO;
 +      }
 +
-+      early_nvram_init_fill(base, lim);
++      return nvram_find_and_copy(base, lim);
 +}
 +#endif
 +
-+static void early_nvram_init(void)
++static int nvram_init(void)
 +{
 +      switch (bcm47xx_bus_type) {
 +#ifdef CONFIG_BCM47XX_SSB
 +      case BCM47XX_BUS_TYPE_SSB:
-+              early_nvram_init_ssb();
-+              break;
++              return nvram_init_ssb();
 +#endif
 +#ifdef CONFIG_BCM47XX_BCMA
 +      case BCM47XX_BUS_TYPE_BCMA:
-+              early_nvram_init_bcma();
-+              break;
++              return nvram_init_bcma();
 +#endif
 +      }
++      return -ENXIO;
 +}
 +
- int nvram_getenv(char *name, char *val, size_t val_len)
++int bcm47xx_nvram_getenv(char *name, char *val, size_t val_len)
  {
        char *var, *value, *end, *eq;
++      int err;
+       if (!name)
+-              return NVRAM_ERR_INV_PARAM;
++              return -EINVAL;
+-      if (!nvram_buf[0])
+-              early_nvram_init();
++      if (!nvram_buf[0]) {
++              err = nvram_init();
++              if (err)
++                      return err;
++      }
+       /* Look for name=value and return value */
+       var = &nvram_buf[sizeof(struct nvram_header)];
+@@ -110,6 +193,6 @@ int nvram_getenv(char *name, char *val,
+                       return snprintf(val, val_len, "%s", value);
+               }
+       }
+-      return NVRAM_ERR_ENVNOTFOUND;
++      return -ENOENT;
+ }
+-EXPORT_SYMBOL(nvram_getenv);
++EXPORT_SYMBOL(bcm47xx_nvram_getenv);
+--- a/arch/mips/bcm47xx/setup.c
++++ b/arch/mips/bcm47xx/setup.c
+@@ -35,7 +35,7 @@
+ #include <asm/reboot.h>
+ #include <asm/time.h>
+ #include <bcm47xx.h>
+-#include <asm/mach-bcm47xx/nvram.h>
++#include <bcm47xx_nvram.h>
+ union bcm47xx_bus bcm47xx_bus;
+ EXPORT_SYMBOL(bcm47xx_bus);
+@@ -115,7 +115,7 @@ static int bcm47xx_get_invariants(struct
+       memset(&iv->sprom, 0, sizeof(struct ssb_sprom));
+       bcm47xx_fill_sprom(&iv->sprom, NULL, false);
+-      if (nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
++      if (bcm47xx_nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
+               iv->has_cardbus_slot = !!simple_strtoul(buf, NULL, 10);
+       return 0;
+@@ -138,7 +138,7 @@ static void __init bcm47xx_register_ssb(
+               panic("Failed to initialize SSB bus (err %d)", err);
+       mcore = &bcm47xx_bus.ssb.mipscore;
+-      if (nvram_getenv("kernel_args", buf, sizeof(buf)) >= 0) {
++      if (bcm47xx_nvram_getenv("kernel_args", buf, sizeof(buf)) >= 0) {
+               if (strstr(buf, "console=ttyS1")) {
+                       struct ssb_serial_port port;
+--- a/arch/mips/bcm47xx/sprom.c
++++ b/arch/mips/bcm47xx/sprom.c
+@@ -27,7 +27,7 @@
+  */
+ #include <bcm47xx.h>
+-#include <nvram.h>
++#include <bcm47xx_nvram.h>
+ static void create_key(const char *prefix, const char *postfix,
+                      const char *name, char *buf, int len)
+@@ -50,10 +50,10 @@ static int get_nvram_var(const char *pre
+       create_key(prefix, postfix, name, key, sizeof(key));
+-      err = nvram_getenv(key, buf, len);
+-      if (fallback && err == NVRAM_ERR_ENVNOTFOUND && prefix) {
++      err = bcm47xx_nvram_getenv(key, buf, len);
++      if (fallback && err == -ENOENT && prefix) {
+               create_key(NULL, postfix, name, key, sizeof(key));
+-              err = nvram_getenv(key, buf, len);
++              err = bcm47xx_nvram_getenv(key, buf, len);
+       }
+       return err;
+ }
+@@ -144,7 +144,7 @@ static void nvram_read_macaddr(const cha
+       if (err < 0)
+               return;
+-      nvram_parse_macaddr(buf, *val);
++      bcm47xx_nvram_parse_macaddr(buf, *val);
+ }
+ static void nvram_read_alpha2(const char *prefix, const char *name,
+--- /dev/null
++++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_nvram.h
+@@ -0,0 +1,51 @@
++/*
++ *  Copyright (C) 2005, Broadcom Corporation
++ *  Copyright (C) 2006, Felix Fietkau <nbd@openwrt.org>
++ *
++ *  This program is free software; you can redistribute  it and/or modify it
++ *  under  the terms of  the GNU General  Public License as published by the
++ *  Free Software Foundation;  either version 2 of the  License, or (at your
++ *  option) any later version.
++ */
++
++#ifndef __BCM47XX_NVRAM_H
++#define __BCM47XX_NVRAM_H
++
++#include <linux/types.h>
++#include <linux/kernel.h>
++
++struct nvram_header {
++      u32 magic;
++      u32 len;
++      u32 crc_ver_init;       /* 0:7 crc, 8:15 ver, 16:31 sdram_init */
++      u32 config_refresh;     /* 0:15 sdram_config, 16:31 sdram_refresh */
++      u32 config_ncdl;        /* ncdl values for memc */
++};
++
++#define NVRAM_HEADER          0x48534C46      /* 'FLSH' */
++#define NVRAM_VERSION         1
++#define NVRAM_HEADER_SIZE     20
++#define NVRAM_SPACE           0x8000
++
++#define FLASH_MIN             0x00020000      /* Minimum flash size */
++
++#define NVRAM_MAX_VALUE_LEN 255
++#define NVRAM_MAX_PARAM_LEN 64
++
++extern int bcm47xx_nvram_getenv(char *name, char *val, size_t val_len);
++
++static inline void bcm47xx_nvram_parse_macaddr(char *buf, u8 macaddr[6])
++{
++      if (strchr(buf, ':'))
++              sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &macaddr[0],
++                      &macaddr[1], &macaddr[2], &macaddr[3], &macaddr[4],
++                      &macaddr[5]);
++      else if (strchr(buf, '-'))
++              sscanf(buf, "%hhx-%hhx-%hhx-%hhx-%hhx-%hhx", &macaddr[0],
++                      &macaddr[1], &macaddr[2], &macaddr[3], &macaddr[4],
++                      &macaddr[5]);
++      else
++              printk(KERN_WARNING "Can not parse mac address: %s\n", buf);
++}
++
++#endif /* __BCM47XX_NVRAM_H */
+--- a/arch/mips/include/asm/mach-bcm47xx/nvram.h
++++ /dev/null
+@@ -1,54 +0,0 @@
+-/*
+- *  Copyright (C) 2005, Broadcom Corporation
+- *  Copyright (C) 2006, Felix Fietkau <nbd@openwrt.org>
+- *
+- *  This program is free software; you can redistribute  it and/or modify it
+- *  under  the terms of  the GNU General  Public License as published by the
+- *  Free Software Foundation;  either version 2 of the  License, or (at your
+- *  option) any later version.
+- */
+-
+-#ifndef __NVRAM_H
+-#define __NVRAM_H
+-
+-#include <linux/types.h>
+-#include <linux/kernel.h>
+-
+-struct nvram_header {
+-      u32 magic;
+-      u32 len;
+-      u32 crc_ver_init;       /* 0:7 crc, 8:15 ver, 16:31 sdram_init */
+-      u32 config_refresh;     /* 0:15 sdram_config, 16:31 sdram_refresh */
+-      u32 config_ncdl;        /* ncdl values for memc */
+-};
+-
+-#define NVRAM_HEADER          0x48534C46      /* 'FLSH' */
+-#define NVRAM_VERSION         1
+-#define NVRAM_HEADER_SIZE     20
+-#define NVRAM_SPACE           0x8000
+-
+-#define FLASH_MIN             0x00020000      /* Minimum flash size */
+-
+-#define NVRAM_MAX_VALUE_LEN 255
+-#define NVRAM_MAX_PARAM_LEN 64
+-
+-#define NVRAM_ERR_INV_PARAM   -8
+-#define NVRAM_ERR_ENVNOTFOUND -9
+-
+-extern int nvram_getenv(char *name, char *val, size_t val_len);
+-
+-static inline void nvram_parse_macaddr(char *buf, u8 macaddr[6])
+-{
+-      if (strchr(buf, ':'))
+-              sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &macaddr[0],
+-                      &macaddr[1], &macaddr[2], &macaddr[3], &macaddr[4],
+-                      &macaddr[5]);
+-      else if (strchr(buf, '-'))
+-              sscanf(buf, "%hhx-%hhx-%hhx-%hhx-%hhx-%hhx", &macaddr[0],
+-                      &macaddr[1], &macaddr[2], &macaddr[3], &macaddr[4],
+-                      &macaddr[5]);
+-      else
+-              printk(KERN_WARNING "Can not parse mac address: %s\n", buf);
+-}
+-
+-#endif
+--- a/drivers/net/ethernet/broadcom/b44.c
++++ b/drivers/net/ethernet/broadcom/b44.c
+@@ -381,7 +381,7 @@ static void b44_set_flow_ctrl(struct b44
+ }
+ #ifdef CONFIG_BCM47XX
+-#include <asm/mach-bcm47xx/nvram.h>
++#include <bcm47xx_nvram.h>
+ static void b44_wap54g10_workaround(struct b44 *bp)
+ {
+       char buf[20];
+@@ -393,7 +393,7 @@ static void b44_wap54g10_workaround(stru
+        * see https://dev.openwrt.org/ticket/146
+        * check and reset bit "isolate"
+        */
+-      if (nvram_getenv("boardnum", buf, sizeof(buf)) < 0)
++      if (bcm47xx_nvram_getenv("boardnum", buf, sizeof(buf)) < 0)
+               return;
+       if (simple_strtoul(buf, NULL, 0) == 2) {
+               err = __b44_readphy(bp, 0, MII_BMCR, &val);
+--- a/drivers/ssb/driver_chipcommon_pmu.c
++++ b/drivers/ssb/driver_chipcommon_pmu.c
+@@ -14,7 +14,7 @@
+ #include <linux/delay.h>
+ #include <linux/export.h>
+ #ifdef CONFIG_BCM47XX
+-#include <asm/mach-bcm47xx/nvram.h>
++#include <bcm47xx_nvram.h>
+ #endif
+ #include "ssb_private.h"
+@@ -322,7 +322,7 @@ static void ssb_pmu_pll_init(struct ssb_
+       if (bus->bustype == SSB_BUSTYPE_SSB) {
+ #ifdef CONFIG_BCM47XX
+               char buf[20];
+-              if (nvram_getenv("xtalfreq", buf, sizeof(buf)) >= 0)
++              if (bcm47xx_nvram_getenv("xtalfreq", buf, sizeof(buf)) >= 0)
+                       crystalfreq = simple_strtoul(buf, NULL, 0);
+ #endif
+       }
+--- a/include/linux/ssb/ssb_driver_gige.h
++++ b/include/linux/ssb/ssb_driver_gige.h
+@@ -98,14 +98,14 @@ static inline bool ssb_gige_must_flush_p
+ }
+ #ifdef CONFIG_BCM47XX
+-#include <asm/mach-bcm47xx/nvram.h>
++#include <bcm47xx_nvram.h>
+ /* Get the device MAC address */
+ static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
+ {
+       char buf[20];
+-      if (nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0)
++      if (bcm47xx_nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0)
+               return;
+-      nvram_parse_macaddr(buf, macaddr);
++      bcm47xx_nvram_parse_macaddr(buf, macaddr);
+ }
+ #else
+ static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
index 8d2f7ca4e14676b12b7bd94568e16833548675d8..f068ac8b46aaaa0d03a944bb35bceff8a38f6912 100644 (file)
@@ -26,7 +26,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
         Support for BCM47XX based boards
 --- a/arch/mips/bcm47xx/prom.c
 +++ b/arch/mips/bcm47xx/prom.c
-@@ -31,96 +31,28 @@
+@@ -33,96 +33,28 @@
  #include <asm/fw/cfe/cfe_api.h>
  #include <asm/fw/cfe/cfe_error.h>
  
@@ -130,7 +130,7 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
  }
  
  static __init void prom_init_mem(void)
-@@ -161,8 +93,6 @@ static __init void prom_init_mem(void)
+@@ -173,8 +105,6 @@ static __init void prom_init_mem(void)
  void __init prom_init(void)
  {
        prom_init_cfe();
index a7929bb420a3934525e347497fc88f5c2d6106c1..4fb93195ae0b1c88ca1420d05b9818c30486f1f0 100644 (file)
@@ -15,7 +15,7 @@
 +              bp->phy_addr = B44_PHY_ADDR_NO_PHY;
 +      } else {
 +              /* WL-HDD */
-+              if (nvram_getenv("hardware_version", buf, sizeof(buf)) >= 0 &&
++              if (bcm47xx_nvram_getenv("hardware_version", buf, sizeof(buf)) >= 0 &&
 +                  !strncmp(buf, "WL300-", strlen("WL300-"))) {
 +                      if (sdev->bus->sprom.et0phyaddr == 0 &&
 +                          sdev->bus->sprom.et1phyaddr == 1)
index bdd2c040dc3d352ff1ccdc1b18dcf324d077bd82..1ed0b8ab665c8099e7ef29ad1db0654e5ec16c5b 100644 (file)
@@ -1,9 +1,9 @@
 --- a/arch/mips/bcm47xx/nvram.c
 +++ b/arch/mips/bcm47xx/nvram.c
-@@ -183,3 +183,30 @@ int nvram_getenv(char *name, char *val,
-       return NVRAM_ERR_ENVNOTFOUND;
+@@ -196,3 +196,30 @@ int bcm47xx_nvram_getenv(char *name, cha
+       return -ENOENT;
  }
- EXPORT_SYMBOL(nvram_getenv);
+ EXPORT_SYMBOL(bcm47xx_nvram_getenv);
 +
 +char *nvram_get(const char *name)
 +{
@@ -13,7 +13,7 @@
 +              return NULL;
 +
 +      if (!nvram_buf[0])
-+              early_nvram_init();
++              nvram_init();
 +
 +      /* Look for name=value and return value */
 +      var = &nvram_buf[sizeof(struct nvram_header)];
index 2ae45e8f44a04faabb608a197c2c3f90f66ca3ce..ff670e87a9f66a4957a4477581bc6d97c0ddcf7f 100644 (file)
@@ -4,7 +4,7 @@
  #include <linux/ssb/ssb.h>
  #include <asm/time.h>
  #include <bcm47xx.h>
-+#include <nvram.h>
++#include <bcm47xx_nvram.h>
  
  void __init plat_time_init(void)
  {
        }
  
 +      if (chip_id == 0x5354) {
-+              len = nvram_getenv("clkfreq", buf, sizeof(buf));
++              len = bcm47xx_nvram_getenv("clkfreq", buf, sizeof(buf));
 +              if (len >= 0 && !strncmp(buf, "200", 4))
 +                      hz = 100000000;
-+              len = nvram_getenv("hardware_version", buf, sizeof(buf));
++              len = bcm47xx_nvram_getenv("hardware_version", buf, sizeof(buf));
 +              if (len >= 0 && !strncmp(buf, "WL520G", 6))
 +                      hz = 100000000;
 +
index cc9c178be067059acf0e71f5d0dd6d9bcd8301b1..fe65cc451df256073f8c58182312a3fcb7bd320c 100644 (file)
  }
  
 -#ifdef CONFIG_BCM47XX
--#include <asm/mach-bcm47xx/nvram.h>
+-#include <bcm47xx_nvram.h>
 -/* Get the device MAC address */
 -static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
 -{
 -      char buf[20];
--      if (nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0)
+-      if (bcm47xx_nvram_getenv("et0macaddr", buf, sizeof(buf)) < 0)
 -              return;
--      nvram_parse_macaddr(buf, macaddr);
+-      bcm47xx_nvram_parse_macaddr(buf, macaddr);
 -}
 -#else
  static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
index c2da5e07708d2c30513e9a8c822c660fc01da89b..74b17c74e6c98b5f5b9e98724bb69525643e884b 100644 (file)
@@ -254,7 +254,7 @@ out the configuration than the in kernel cfe config reader.
  
  static u32 find_nvram_size(u32 end)
  {
-@@ -47,6 +49,26 @@ static void early_nvram_init_fill(u32 ba
+@@ -47,6 +49,26 @@ static int nvram_find_and_copy(u32 base,
        u32 *src, *dst;
        u32 size;
  
@@ -274,16 +274,16 @@ out the configuration than the in kernel cfe config reader.
 +                              *dst++ = *src++;
 +                      }
 +                      cfe_env = 1;
-+                      return;
++                      return 0;
 +              }
 +      }
 +
        /* TODO: when nvram is on nand flash check for bad blocks first. */
        off = FLASH_MIN;
        while (off <= lim) {
-@@ -166,6 +188,12 @@ int nvram_getenv(char *name, char *val,
-       if (!nvram_buf[0])
-               early_nvram_init();
+@@ -179,6 +201,12 @@ int bcm47xx_nvram_getenv(char *name, cha
+                       return err;
+       }
  
 +      if (cfe_env) {
 +              value = cfe_env_get(nvram_buf, name);
@@ -294,9 +294,9 @@ out the configuration than the in kernel cfe config reader.
        /* Look for name=value and return value */
        var = &nvram_buf[sizeof(struct nvram_header)];
        end = nvram_buf + sizeof(nvram_buf) - 2;
-@@ -194,6 +222,9 @@ char *nvram_get(const char *name)
+@@ -207,6 +235,9 @@ char *nvram_get(const char *name)
        if (!nvram_buf[0])
-               early_nvram_init();
+               nvram_init();
  
 +      if (cfe_env)
 +              return cfe_env_get(nvram_buf, name);
index 1c0c6195e88b674e3ce781bde82f72d03a008fee..455067631a76a6c455fd56bae21620ac195f9550 100644 (file)
@@ -1,7 +1,7 @@
 --- a/arch/mips/bcm47xx/setup.c
 +++ b/arch/mips/bcm47xx/setup.c
 @@ -120,6 +120,10 @@ static int bcm47xx_get_invariants(struct
-       if (nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
+       if (bcm47xx_nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
                iv->has_cardbus_slot = !!simple_strtoul(buf, NULL, 10);
  
 +      /* Do not indicate cardbus for Netgear WNR834B V1 and V2 */
index 1bf09f36b0f8cc15df47d113005a5e3cb7a95153..d40f4670f6cc0a05e89bea95216fcc0a4839a391 100644 (file)
@@ -1,7 +1,7 @@
 --- a/arch/mips/bcm47xx/nvram.c
 +++ b/arch/mips/bcm47xx/nvram.c
 @@ -21,7 +21,8 @@
- #include <asm/mach-bcm47xx/nvram.h>
+ #include <bcm47xx_nvram.h>
  #include <asm/mach-bcm47xx/bcm47xx.h>
  
 -static char nvram_buf[NVRAM_SPACE];