summaryrefslogtreecommitdiff
path: root/target/linux
diff options
context:
space:
mode:
authorhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-01-03 01:53:30 +0000
committerhauke <hauke@3c298f89-4303-0410-b956-a3cf2f4a3e73>2013-01-03 01:53:30 +0000
commite2a6028da3eccac80337a17129174ae2d7716b66 (patch)
tree80c467f23a4f364b9be69716075cd3b186161e62 /target/linux
parentae4d4c4a99d64d402a985e12510a5e05598c6200 (diff)
brcm47xx: add a new version of the nvram rewrite patch
This is the version like it was send for mainline inclusion. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34988 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux')
-rw-r--r--target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch18
-rw-r--r--target/linux/brcm47xx/patches-3.6/080-MIPS-BCM47XX-rewrite-nvram-probing.patch352
-rw-r--r--target/linux/brcm47xx/patches-3.6/116-MIPS-BCM47xx-Remove-CFE-console.patch4
-rw-r--r--target/linux/brcm47xx/patches-3.6/210-b44_phy_fix.patch2
-rw-r--r--target/linux/brcm47xx/patches-3.6/400-arch-bcm47xx.patch8
-rw-r--r--target/linux/brcm47xx/patches-3.6/520-MIPS-BCM47XX-fix-time-for-WL520G-and-other-200-MHz-C.patch6
-rw-r--r--target/linux/brcm47xx/patches-3.6/700-ssb-gigabit-ethernet-driver.patch6
-rw-r--r--target/linux/brcm47xx/patches-3.6/820-wgt634u-nvram-fix.patch14
-rw-r--r--target/linux/brcm47xx/patches-3.6/980-wnr834b_no_cardbus_invariant.patch2
-rw-r--r--target/linux/brcm47xx/patches-3.6/999-wl_exports.patch2
10 files changed, 345 insertions, 69 deletions
diff --git a/target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch b/target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch
index 61e8838c0d..ea092cc272 100644
--- a/target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch
+++ b/target/linux/brcm47xx/patches-3.6/050-mtd-add-bcm47xx-part-parser.patch
@@ -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>
+
+
@@ -378,19 +378,19 @@
+ 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)
diff --git a/target/linux/brcm47xx/patches-3.6/080-MIPS-BCM47XX-rewrite-nvram-probing.patch b/target/linux/brcm47xx/patches-3.6/080-MIPS-BCM47XX-rewrite-nvram-probing.patch
index a271876fa9..ecc9e04134 100644
--- a/target/linux/brcm47xx/patches-3.6/080-MIPS-BCM47XX-rewrite-nvram-probing.patch
+++ b/target/linux/brcm47xx/patches-3.6/080-MIPS-BCM47XX-rewrite-nvram-probing.patch
@@ -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;
@@ -94,8 +100,9 @@
goto found;
+ }
+- return;
+ pr_err("no nvram found\n");
- return;
++ return -ENXIO;
found:
+
@@ -112,72 +119,341 @@
- 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)
diff --git a/target/linux/brcm47xx/patches-3.6/116-MIPS-BCM47xx-Remove-CFE-console.patch b/target/linux/brcm47xx/patches-3.6/116-MIPS-BCM47xx-Remove-CFE-console.patch
index 8d2f7ca4e1..f068ac8b46 100644
--- a/target/linux/brcm47xx/patches-3.6/116-MIPS-BCM47xx-Remove-CFE-console.patch
+++ b/target/linux/brcm47xx/patches-3.6/116-MIPS-BCM47xx-Remove-CFE-console.patch
@@ -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();
diff --git a/target/linux/brcm47xx/patches-3.6/210-b44_phy_fix.patch b/target/linux/brcm47xx/patches-3.6/210-b44_phy_fix.patch
index a7929bb420..4fb93195ae 100644
--- a/target/linux/brcm47xx/patches-3.6/210-b44_phy_fix.patch
+++ b/target/linux/brcm47xx/patches-3.6/210-b44_phy_fix.patch
@@ -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)
diff --git a/target/linux/brcm47xx/patches-3.6/400-arch-bcm47xx.patch b/target/linux/brcm47xx/patches-3.6/400-arch-bcm47xx.patch
index bdd2c040dc..1ed0b8ab66 100644
--- a/target/linux/brcm47xx/patches-3.6/400-arch-bcm47xx.patch
+++ b/target/linux/brcm47xx/patches-3.6/400-arch-bcm47xx.patch
@@ -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)];
diff --git a/target/linux/brcm47xx/patches-3.6/520-MIPS-BCM47XX-fix-time-for-WL520G-and-other-200-MHz-C.patch b/target/linux/brcm47xx/patches-3.6/520-MIPS-BCM47XX-fix-time-for-WL520G-and-other-200-MHz-C.patch
index 2ae45e8f44..ff670e87a9 100644
--- a/target/linux/brcm47xx/patches-3.6/520-MIPS-BCM47XX-fix-time-for-WL520G-and-other-200-MHz-C.patch
+++ b/target/linux/brcm47xx/patches-3.6/520-MIPS-BCM47XX-fix-time-for-WL520G-and-other-200-MHz-C.patch
@@ -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)
{
@@ -31,10 +31,10 @@
}
+ 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;
+
diff --git a/target/linux/brcm47xx/patches-3.6/700-ssb-gigabit-ethernet-driver.patch b/target/linux/brcm47xx/patches-3.6/700-ssb-gigabit-ethernet-driver.patch
index cc9c178be0..fe65cc451d 100644
--- a/target/linux/brcm47xx/patches-3.6/700-ssb-gigabit-ethernet-driver.patch
+++ b/target/linux/brcm47xx/patches-3.6/700-ssb-gigabit-ethernet-driver.patch
@@ -406,14 +406,14 @@
}
-#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)
diff --git a/target/linux/brcm47xx/patches-3.6/820-wgt634u-nvram-fix.patch b/target/linux/brcm47xx/patches-3.6/820-wgt634u-nvram-fix.patch
index c2da5e0770..74b17c74e6 100644
--- a/target/linux/brcm47xx/patches-3.6/820-wgt634u-nvram-fix.patch
+++ b/target/linux/brcm47xx/patches-3.6/820-wgt634u-nvram-fix.patch
@@ -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);
diff --git a/target/linux/brcm47xx/patches-3.6/980-wnr834b_no_cardbus_invariant.patch b/target/linux/brcm47xx/patches-3.6/980-wnr834b_no_cardbus_invariant.patch
index 1c0c6195e8..455067631a 100644
--- a/target/linux/brcm47xx/patches-3.6/980-wnr834b_no_cardbus_invariant.patch
+++ b/target/linux/brcm47xx/patches-3.6/980-wnr834b_no_cardbus_invariant.patch
@@ -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 */
diff --git a/target/linux/brcm47xx/patches-3.6/999-wl_exports.patch b/target/linux/brcm47xx/patches-3.6/999-wl_exports.patch
index 1bf09f36b0..d40f4670f6 100644
--- a/target/linux/brcm47xx/patches-3.6/999-wl_exports.patch
+++ b/target/linux/brcm47xx/patches-3.6/999-wl_exports.patch
@@ -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];