Просмотр исходного кода

brcm47xx: add a new version of the nvram rewrite patch

This is the version like it was send for mainline inclusion.

SVN-Revision: 34988
Hauke Mehrtens 13 лет назад
Родитель
Сommit
25afeba608

+ 6 - 6
package/switch/src/switch-adm.c

@@ -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;

+ 2 - 2
package/switch/src/switch-robo.c

@@ -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);
 	}

+ 5 - 5
package/system/rtc-rv5c386a/src/rtc.c

@@ -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;

+ 9 - 9
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)

+ 314 - 38
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 <[email protected]>
++ *
++ *  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 <[email protected]>
+- *
+- *  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)

+ 2 - 2
target/linux/brcm47xx/patches-3.6/116-MIPS-BCM47xx-Remove-CFE-console.patch

@@ -26,7 +26,7 @@ Signed-off-by: Hauke Mehrtens <[email protected]>
  	 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 <[email protected]>
  }
  
  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();

+ 1 - 1
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)

+ 4 - 4
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)];

+ 3 - 3
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;
 +

+ 3 - 3
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)

+ 7 - 7
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);

+ 1 - 1
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 */

+ 1 - 1
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];