From 25afeba608b9db64cc0cab1f7be790f64193f590 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Thu, 3 Jan 2013 01:53:30 +0000 Subject: [PATCH] brcm47xx: add a new version of the nvram rewrite patch This is the version like it was send for mainline inclusion. SVN-Revision: 34988 --- package/switch/src/switch-adm.c | 12 +- package/switch/src/switch-robo.c | 4 +- package/system/rtc-rv5c386a/src/rtc.c | 10 +- .../050-mtd-add-bcm47xx-part-parser.patch | 18 +- ...0-MIPS-BCM47XX-rewrite-nvram-probing.patch | 352 ++++++++++++++++-- .../116-MIPS-BCM47xx-Remove-CFE-console.patch | 4 +- .../patches-3.6/210-b44_phy_fix.patch | 2 +- .../patches-3.6/400-arch-bcm47xx.patch | 8 +- ...-time-for-WL520G-and-other-200-MHz-C.patch | 6 +- .../700-ssb-gigabit-ethernet-driver.patch | 6 +- .../patches-3.6/820-wgt634u-nvram-fix.patch | 14 +- .../980-wnr834b_no_cardbus_invariant.patch | 2 +- .../brcm47xx/patches-3.6/999-wl_exports.patch | 2 +- 13 files changed, 358 insertions(+), 82 deletions(-) diff --git a/package/switch/src/switch-adm.c b/package/switch/src/switch-adm.c index 9a6d32b1ef..f21470ed53 100644 --- a/package/switch/src/switch-adm.c +++ b/package/switch/src/switch-adm.c @@ -38,7 +38,7 @@ #include "gpio.h" #ifdef CONFIG_BCM47XX -#include +#include #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; diff --git a/package/switch/src/switch-robo.c b/package/switch/src/switch-robo.c index f1160c8894..3751653a6d 100644 --- a/package/switch/src/switch-robo.c +++ b/package/switch/src/switch-robo.c @@ -35,7 +35,7 @@ #include "etc53xx.h" #ifdef CONFIG_BCM47XX -#include +#include #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); } diff --git a/package/system/rtc-rv5c386a/src/rtc.c b/package/system/rtc-rv5c386a/src/rtc.c index 25e5331409..2fc6f093cf 100644 --- a/package/system/rtc-rv5c386a/src/rtc.c +++ b/package/system/rtc-rv5c386a/src/rtc.c @@ -62,7 +62,7 @@ #endif #include -#include +#include #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; 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 +#include +#include -+#include -+#include ++#include ++#include +#include + + @@ -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 + #include + #include +-#include ++#include + #include 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 + #include + #include +-#include ++#include + + 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 +-#include ++#include + + 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 ++ * ++ * 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 ++#include ++ ++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 +- * +- * 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 +-#include +- +-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 ++#include + 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 + #include + #ifdef CONFIG_BCM47XX +-#include ++#include + #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 ++#include + /* 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 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 #include @@ -130,7 +130,7 @@ Signed-off-by: Hauke Mehrtens } 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 #include #include -+#include ++#include 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 +-#include -/* 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 + #include #include -static char nvram_buf[NVRAM_SPACE];