bcm53xx: use static NVRAM pointer for now
This will allow us to sync with code sent for upstream. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 43608
This commit is contained in:
parent
a1da38f7b1
commit
b0b43e1ef9
4 changed files with 14 additions and 534 deletions
|
@ -39,6 +39,8 @@ struct bcm47xx_nvram {
|
||||||
char *nvram_buf;
|
char *nvram_buf;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct bcm47xx_nvram *nvram = NULL;
|
||||||
|
|
||||||
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
static const u32 nvram_sizes[] = {0x8000, 0xF000, 0x10000};
|
||||||
|
|
||||||
static u32 find_nvram_size(void __iomem *end)
|
static u32 find_nvram_size(void __iomem *end)
|
||||||
|
@ -117,16 +119,9 @@ found:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bcm47xx_nvram_getenv(const struct device *dev, const char *name, char *val,
|
int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len)
|
||||||
size_t val_len)
|
|
||||||
{
|
{
|
||||||
char *var, *value, *end, *eq;
|
char *var, *value, *end, *eq;
|
||||||
struct bcm47xx_nvram *nvram;
|
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
nvram = dev_get_drvdata(dev);
|
|
||||||
|
|
||||||
if (!name || !nvram || !nvram->nvram_len)
|
if (!name || !nvram || !nvram->nvram_len)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -149,20 +144,17 @@ int bcm47xx_nvram_getenv(const struct device *dev, const char *name, char *val,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(bcm47xx_nvram_getenv);
|
EXPORT_SYMBOL(bcm47xx_nvram_getenv);
|
||||||
|
|
||||||
int bcm47xx_nvram_gpio_pin(const struct device *dev, const char *name)
|
int bcm47xx_nvram_gpio_pin(const char *name)
|
||||||
{
|
{
|
||||||
int i, err;
|
int i, err;
|
||||||
char nvram_var[10];
|
char nvram_var[10];
|
||||||
char buf[30];
|
char buf[30];
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
for (i = 0; i < 32; i++) {
|
for (i = 0; i < 32; i++) {
|
||||||
err = snprintf(nvram_var, sizeof(nvram_var), "gpio%i", i);
|
err = snprintf(nvram_var, sizeof(nvram_var), "gpio%i", i);
|
||||||
if (err <= 0)
|
if (err <= 0)
|
||||||
continue;
|
continue;
|
||||||
err = bcm47xx_nvram_getenv(dev, nvram_var, buf, sizeof(buf));
|
err = bcm47xx_nvram_getenv(nvram_var, buf, sizeof(buf));
|
||||||
if (err <= 0)
|
if (err <= 0)
|
||||||
continue;
|
continue;
|
||||||
if (!strcmp(name, buf))
|
if (!strcmp(name, buf))
|
||||||
|
@ -176,7 +168,6 @@ static int bcm47xx_nvram_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
struct device_node *np = dev->of_node;
|
struct device_node *np = dev->of_node;
|
||||||
struct bcm47xx_nvram *nvram;
|
|
||||||
int err;
|
int err;
|
||||||
struct resource flash_mem;
|
struct resource flash_mem;
|
||||||
void __iomem *mmio;
|
void __iomem *mmio;
|
||||||
|
@ -199,8 +190,6 @@ static int bcm47xx_nvram_probe(struct platform_device *pdev)
|
||||||
if (err)
|
if (err)
|
||||||
goto err_unmap_mmio;
|
goto err_unmap_mmio;
|
||||||
|
|
||||||
platform_set_drvdata(pdev, nvram);
|
|
||||||
|
|
||||||
err_unmap_mmio:
|
err_unmap_mmio:
|
||||||
iounmap(mmio);
|
iounmap(mmio);
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -637,9 +637,7 @@ static void bcm47xx_sprom_fill(struct ssb_sprom *sprom,
|
||||||
static int bcm47xx_sprom_getenv(const struct bcm47xx_sprom_fill *fill,
|
static int bcm47xx_sprom_getenv(const struct bcm47xx_sprom_fill *fill,
|
||||||
const char *name, char *val, size_t val_len)
|
const char *name, char *val, size_t val_len)
|
||||||
{
|
{
|
||||||
const struct platform_device *nvram_dev = fill->priv;
|
return bcm47xx_nvram_getenv(name, val, val_len);
|
||||||
|
|
||||||
return bcm47xx_nvram_getenv(&nvram_dev->dev, name, val, val_len);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int bcm47xx_sprom_probe(struct platform_device *pdev)
|
static int bcm47xx_sprom_probe(struct platform_device *pdev)
|
||||||
|
|
|
@ -59,184 +59,6 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ compatible = "brcm,bcm47xx-nvram";
|
+ compatible = "brcm,bcm47xx-nvram";
|
||||||
+ reg = <0x1c000000 0x01000000>;
|
+ reg = <0x1c000000 0x01000000>;
|
||||||
+};
|
+};
|
||||||
--- a/arch/mips/bcm47xx/board.c
|
|
||||||
+++ b/arch/mips/bcm47xx/board.c
|
|
||||||
@@ -196,50 +196,50 @@ static __init const struct bcm47xx_board
|
|
||||||
const struct bcm47xx_board_type_list2 *e2;
|
|
||||||
const struct bcm47xx_board_type_list3 *e3;
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("model_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "model_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_model_name; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("model_no", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "model_no", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_model_no; e1->value1; e1++) {
|
|
||||||
if (strstarts(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("machine_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "machine_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_machine_name; e1->value1; e1++) {
|
|
||||||
if (strstarts(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("hardware_version", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "hardware_version", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_hardware_version; e1->value1; e1++) {
|
|
||||||
if (strstarts(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("productid", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "productid", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_productid; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("ModelId", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "ModelId", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_ModelId; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("melco_id", buf1, sizeof(buf1)) >= 0 ||
|
|
||||||
- bcm47xx_nvram_getenv("buf1falo_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "melco_id", buf1, sizeof(buf1)) >= 0 ||
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "buf1falo_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
/* buffalo hardware, check id for specific hardware matches */
|
|
||||||
for (e1 = bcm47xx_board_list_melco_id; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
@@ -247,8 +247,8 @@ static __init const struct bcm47xx_board
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("boot_hw_model", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boot_hw_ver", buf2, sizeof(buf2)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "boot_hw_model", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boot_hw_ver", buf2, sizeof(buf2)) >= 0) {
|
|
||||||
for (e2 = bcm47xx_board_list_boot_hw; e2->value1; e2++) {
|
|
||||||
if (!strcmp(buf1, e2->value1) &&
|
|
||||||
!strcmp(buf2, e2->value2))
|
|
||||||
@@ -256,16 +256,16 @@ static __init const struct bcm47xx_board
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("board_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "board_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_board_id; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("boardtype", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boardnum", buf2, sizeof(buf2)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boardrev", buf3, sizeof(buf3)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "boardtype", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boardnum", buf2, sizeof(buf2)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boardrev", buf3, sizeof(buf3)) >= 0) {
|
|
||||||
for (e3 = bcm47xx_board_list_board; e3->value1; e3++) {
|
|
||||||
if (!strcmp(buf1, e3->value1) &&
|
|
||||||
!strcmp(buf2, e3->value2) &&
|
|
||||||
@@ -286,7 +286,7 @@ void __init bcm47xx_board_detect(void)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* check if the nvram is available */
|
|
||||||
- err = bcm47xx_nvram_getenv("boardtype", buf, sizeof(buf));
|
|
||||||
+ err = bcm47xx_nvram_getenv(NULL, "boardtype", buf, sizeof(buf));
|
|
||||||
|
|
||||||
/* init of nvram failed, probably too early now */
|
|
||||||
if (err == -ENXIO) {
|
|
||||||
--- a/arch/mips/bcm47xx/nvram.c
|
|
||||||
+++ b/arch/mips/bcm47xx/nvram.c
|
|
||||||
@@ -158,7 +158,8 @@ static int nvram_init(void)
|
|
||||||
return -ENXIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int bcm47xx_nvram_getenv(char *name, char *val, size_t val_len)
|
|
||||||
+int bcm47xx_nvram_getenv(const struct device *dev, const char *name, char *val,
|
|
||||||
+ size_t val_len)
|
|
||||||
{
|
|
||||||
char *var, *value, *end, *eq;
|
|
||||||
int err;
|
|
||||||
@@ -190,7 +191,7 @@ int bcm47xx_nvram_getenv(char *name, cha
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(bcm47xx_nvram_getenv);
|
|
||||||
|
|
||||||
-int bcm47xx_nvram_gpio_pin(const char *name)
|
|
||||||
+int bcm47xx_nvram_gpio_pin(const struct device *dev, const char *name)
|
|
||||||
{
|
|
||||||
int i, err;
|
|
||||||
char nvram_var[10];
|
|
||||||
@@ -200,7 +201,7 @@ int bcm47xx_nvram_gpio_pin(const char *n
|
|
||||||
err = snprintf(nvram_var, sizeof(nvram_var), "gpio%i", i);
|
|
||||||
if (err <= 0)
|
|
||||||
continue;
|
|
||||||
- err = bcm47xx_nvram_getenv(nvram_var, buf, sizeof(buf));
|
|
||||||
+ err = bcm47xx_nvram_getenv(dev, nvram_var, buf, sizeof(buf));
|
|
||||||
if (err <= 0)
|
|
||||||
continue;
|
|
||||||
if (!strcmp(name, buf))
|
|
||||||
--- a/arch/mips/bcm47xx/setup.c
|
|
||||||
+++ b/arch/mips/bcm47xx/setup.c
|
|
||||||
@@ -123,7 +123,7 @@ static int bcm47xx_get_invariants(struct
|
|
||||||
memset(&iv->sprom, 0, sizeof(struct ssb_sprom));
|
|
||||||
bcm47xx_fill_sprom(&iv->sprom, NULL, false);
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "cardbus", buf, sizeof(buf)) >= 0)
|
|
||||||
iv->has_cardbus_slot = !!simple_strtoul(buf, NULL, 10);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -146,7 +146,7 @@ static void __init bcm47xx_register_ssb(
|
|
||||||
panic("Failed to initialize SSB bus (err %d)", err);
|
|
||||||
|
|
||||||
mcore = &bcm47xx_bus.ssb.mipscore;
|
|
||||||
- if (bcm47xx_nvram_getenv("kernel_args", buf, sizeof(buf)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "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
|
|
||||||
@@ -50,10 +50,10 @@ static int get_nvram_var(const char *pre
|
|
||||||
|
|
||||||
create_key(prefix, postfix, name, key, sizeof(key));
|
|
||||||
|
|
||||||
- err = bcm47xx_nvram_getenv(key, buf, len);
|
|
||||||
+ err = bcm47xx_nvram_getenv(NULL, key, buf, len);
|
|
||||||
if (fallback && err == -ENOENT && prefix) {
|
|
||||||
create_key(NULL, postfix, name, key, sizeof(key));
|
|
||||||
- err = bcm47xx_nvram_getenv(key, buf, len);
|
|
||||||
+ err = bcm47xx_nvram_getenv(NULL, key, buf, len);
|
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
--- a/arch/mips/bcm47xx/time.c
|
|
||||||
+++ b/arch/mips/bcm47xx/time.c
|
|
||||||
@@ -61,7 +61,7 @@ void __init plat_time_init(void)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chip_id == 0x5354) {
|
|
||||||
- len = bcm47xx_nvram_getenv("clkfreq", buf, sizeof(buf));
|
|
||||||
+ len = bcm47xx_nvram_getenv(NULL, "clkfreq", buf, sizeof(buf));
|
|
||||||
if (len >= 0 && !strncmp(buf, "200", 4))
|
|
||||||
hz = 100000000;
|
|
||||||
}
|
|
||||||
--- a/drivers/misc/Kconfig
|
--- a/drivers/misc/Kconfig
|
||||||
+++ b/drivers/misc/Kconfig
|
+++ b/drivers/misc/Kconfig
|
||||||
@@ -515,6 +515,11 @@ config SRAM
|
@@ -515,6 +515,11 @@ config SRAM
|
||||||
|
@ -258,81 +80,17 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
obj-y += mic/
|
obj-y += mic/
|
||||||
obj-$(CONFIG_GENWQE) += genwqe/
|
obj-$(CONFIG_GENWQE) += genwqe/
|
||||||
+obj-$(CONFIG_BCM47XX_NVRAM) += bcm47xx-nvram.o
|
+obj-$(CONFIG_BCM47XX_NVRAM) += bcm47xx-nvram.o
|
||||||
--- a/drivers/net/ethernet/broadcom/b44.c
|
|
||||||
+++ b/drivers/net/ethernet/broadcom/b44.c
|
|
||||||
@@ -411,7 +411,7 @@ static void b44_wap54g10_workaround(stru
|
|
||||||
* see https://dev.openwrt.org/ticket/146
|
|
||||||
* check and reset bit "isolate"
|
|
||||||
*/
|
|
||||||
- if (bcm47xx_nvram_getenv("boardnum", buf, sizeof(buf)) < 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "boardnum", buf, sizeof(buf)) < 0)
|
|
||||||
return;
|
|
||||||
if (simple_strtoul(buf, NULL, 0) == 2) {
|
|
||||||
err = __b44_readphy(bp, 0, MII_BMCR, &val);
|
|
||||||
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
@@ -974,7 +974,8 @@ static void bgmac_chip_reset(struct bgma
|
|
||||||
BGMAC_CHIPCTL_1_IF_TYPE_MII;
|
|
||||||
char buf[4];
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("et_swtype", buf, sizeof(buf)) > 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "et_swtype", buf,
|
|
||||||
+ sizeof(buf)) > 0) {
|
|
||||||
if (kstrtou8(buf, 0, &et_swtype))
|
|
||||||
bgmac_err(bgmac, "Failed to parse et_swtype (%s)\n",
|
|
||||||
buf);
|
|
||||||
@@ -1534,7 +1535,7 @@ static int bgmac_probe(struct bcma_devic
|
|
||||||
}
|
|
||||||
|
|
||||||
bgmac->int_mask = BGMAC_IS_ERRMASK | BGMAC_IS_RX | BGMAC_IS_TX_MASK;
|
|
||||||
- if (bcm47xx_nvram_getenv("et0_no_txint", NULL, 0) == 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "et0_no_txint", NULL, 0) == 0)
|
|
||||||
bgmac->int_mask &= ~BGMAC_IS_TX_MASK;
|
|
||||||
|
|
||||||
/* TODO: reset the external phy. Specs are needed */
|
|
||||||
--- a/drivers/ssb/driver_chipcommon_pmu.c
|
|
||||||
+++ b/drivers/ssb/driver_chipcommon_pmu.c
|
|
||||||
@@ -319,7 +319,8 @@ static void ssb_pmu_pll_init(struct ssb_
|
|
||||||
|
|
||||||
if (bus->bustype == SSB_BUSTYPE_SSB) {
|
|
||||||
char buf[20];
|
|
||||||
- if (bcm47xx_nvram_getenv("xtalfreq", buf, sizeof(buf)) >= 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "xtalfreq", buf,
|
|
||||||
+ sizeof(buf)) >= 0)
|
|
||||||
crystalfreq = simple_strtoul(buf, NULL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/include/linux/bcm47xx_nvram.h
|
--- a/include/linux/bcm47xx_nvram.h
|
||||||
+++ b/include/linux/bcm47xx_nvram.h
|
+++ b/include/linux/bcm47xx_nvram.h
|
||||||
@@ -15,18 +15,23 @@
|
@@ -15,7 +15,7 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
||||||
-#ifdef CONFIG_BCM47XX
|
-#ifdef CONFIG_BCM47XX
|
||||||
-int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len);
|
|
||||||
+struct device;
|
|
||||||
|
|
||||||
-int bcm47xx_nvram_gpio_pin(const char *name);
|
|
||||||
+#if defined(CONFIG_BCM47XX) || defined(CONFIG_BCM47XX_NVRAM)
|
+#if defined(CONFIG_BCM47XX) || defined(CONFIG_BCM47XX_NVRAM)
|
||||||
+int bcm47xx_nvram_getenv(const struct device *dev, const char *name, char *val,
|
int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len);
|
||||||
+ size_t val_len);
|
|
||||||
+
|
|
||||||
+int bcm47xx_nvram_gpio_pin(const struct device *dev, const char *name);
|
|
||||||
#else
|
|
||||||
-static inline int bcm47xx_nvram_getenv(const char *name, char *val,
|
|
||||||
+static inline int bcm47xx_nvram_getenv(const struct device *dev,
|
|
||||||
+ const char *name, char *val,
|
|
||||||
size_t val_len)
|
|
||||||
{
|
|
||||||
return -ENXIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static inline int bcm47xx_nvram_gpio_pin(const char *name)
|
int bcm47xx_nvram_gpio_pin(const char *name);
|
||||||
+static inline int bcm47xx_nvram_gpio_pin(const struct device *dev,
|
|
||||||
+ const char *name)
|
|
||||||
{
|
|
||||||
return -ENXIO;
|
|
||||||
}
|
|
||||||
--- a/drivers/misc/bcm47xx-nvram.c
|
--- a/drivers/misc/bcm47xx-nvram.c
|
||||||
+++ b/drivers/misc/bcm47xx-nvram.c
|
+++ b/drivers/misc/bcm47xx-nvram.c
|
||||||
@@ -28,7 +28,7 @@
|
@@ -28,7 +28,7 @@
|
||||||
|
|
|
@ -59,208 +59,6 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
+ compatible = "brcm,bcm47xx-nvram";
|
+ compatible = "brcm,bcm47xx-nvram";
|
||||||
+ reg = <0x1c000000 0x01000000>;
|
+ reg = <0x1c000000 0x01000000>;
|
||||||
+};
|
+};
|
||||||
--- a/arch/mips/bcm47xx/board.c
|
|
||||||
+++ b/arch/mips/bcm47xx/board.c
|
|
||||||
@@ -218,36 +218,36 @@ static __init const struct bcm47xx_board
|
|
||||||
const struct bcm47xx_board_type_list2 *e2;
|
|
||||||
const struct bcm47xx_board_type_list3 *e3;
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("model_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "model_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_model_name; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("model_no", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "model_no", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_model_no; e1->value1; e1++) {
|
|
||||||
if (strstarts(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("machine_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "machine_name", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_machine_name; e1->value1; e1++) {
|
|
||||||
if (strstarts(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("hardware_version", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "hardware_version", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_hardware_version; e1->value1; e1++) {
|
|
||||||
if (strstarts(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("hardware_version", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boardtype", buf2, sizeof(buf2)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "hardware_version", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boardtype", buf2, sizeof(buf2)) >= 0) {
|
|
||||||
for (e2 = bcm47xx_board_list_boot_hw; e2->value1; e2++) {
|
|
||||||
if (!strstarts(buf1, e2->value1) &&
|
|
||||||
!strcmp(buf2, e2->value2))
|
|
||||||
@@ -255,22 +255,22 @@ static __init const struct bcm47xx_board
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("productid", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "productid", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_productid; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("ModelId", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "ModelId", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_ModelId; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("melco_id", buf1, sizeof(buf1)) >= 0 ||
|
|
||||||
- bcm47xx_nvram_getenv("buf1falo_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "melco_id", buf1, sizeof(buf1)) >= 0 ||
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "buf1falo_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
/* buffalo hardware, check id for specific hardware matches */
|
|
||||||
for (e1 = bcm47xx_board_list_melco_id; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
@@ -278,8 +278,8 @@ static __init const struct bcm47xx_board
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("boot_hw_model", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boot_hw_ver", buf2, sizeof(buf2)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "boot_hw_model", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boot_hw_ver", buf2, sizeof(buf2)) >= 0) {
|
|
||||||
for (e2 = bcm47xx_board_list_boot_hw; e2->value1; e2++) {
|
|
||||||
if (!strcmp(buf1, e2->value1) &&
|
|
||||||
!strcmp(buf2, e2->value2))
|
|
||||||
@@ -287,16 +287,16 @@ static __init const struct bcm47xx_board
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("board_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "board_id", buf1, sizeof(buf1)) >= 0) {
|
|
||||||
for (e1 = bcm47xx_board_list_board_id; e1->value1; e1++) {
|
|
||||||
if (!strcmp(buf1, e1->value1))
|
|
||||||
return &e1->board;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("boardtype", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boardnum", buf2, sizeof(buf2)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boardrev", buf3, sizeof(buf3)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "boardtype", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boardnum", buf2, sizeof(buf2)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boardrev", buf3, sizeof(buf3)) >= 0) {
|
|
||||||
for (e3 = bcm47xx_board_list_board; e3->value1; e3++) {
|
|
||||||
if (!strcmp(buf1, e3->value1) &&
|
|
||||||
!strcmp(buf2, e3->value2) &&
|
|
||||||
@@ -305,9 +305,9 @@ static __init const struct bcm47xx_board
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("boardtype", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boardrev", buf2, sizeof(buf2)) >= 0 &&
|
|
||||||
- bcm47xx_nvram_getenv("boardnum", buf3, sizeof(buf3)) == -ENOENT) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "boardtype", buf1, sizeof(buf1)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boardrev", buf2, sizeof(buf2)) >= 0 &&
|
|
||||||
+ bcm47xx_nvram_getenv(NULL, "boardnum", buf3, sizeof(buf3)) == -ENOENT) {
|
|
||||||
for (e2 = bcm47xx_board_list_board_type_rev; e2->value1; e2++) {
|
|
||||||
if (!strcmp(buf1, e2->value1) &&
|
|
||||||
!strcmp(buf2, e2->value2))
|
|
||||||
@@ -327,7 +327,7 @@ void __init bcm47xx_board_detect(void)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* check if the nvram is available */
|
|
||||||
- err = bcm47xx_nvram_getenv("boardtype", buf, sizeof(buf));
|
|
||||||
+ err = bcm47xx_nvram_getenv(NULL, "boardtype", buf, sizeof(buf));
|
|
||||||
|
|
||||||
/* init of nvram failed, probably too early now */
|
|
||||||
if (err == -ENXIO) {
|
|
||||||
--- a/arch/mips/bcm47xx/nvram.c
|
|
||||||
+++ b/arch/mips/bcm47xx/nvram.c
|
|
||||||
@@ -158,7 +158,8 @@ static int nvram_init(void)
|
|
||||||
return -ENXIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int bcm47xx_nvram_getenv(char *name, char *val, size_t val_len)
|
|
||||||
+int bcm47xx_nvram_getenv(const struct device *dev, const char *name, char *val,
|
|
||||||
+ size_t val_len)
|
|
||||||
{
|
|
||||||
char *var, *value, *end, *eq;
|
|
||||||
int err;
|
|
||||||
@@ -190,7 +191,7 @@ int bcm47xx_nvram_getenv(char *name, cha
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(bcm47xx_nvram_getenv);
|
|
||||||
|
|
||||||
-int bcm47xx_nvram_gpio_pin(const char *name)
|
|
||||||
+int bcm47xx_nvram_gpio_pin(const struct device *dev, const char *name)
|
|
||||||
{
|
|
||||||
int i, err;
|
|
||||||
char nvram_var[10];
|
|
||||||
@@ -200,7 +201,7 @@ int bcm47xx_nvram_gpio_pin(const char *n
|
|
||||||
err = snprintf(nvram_var, sizeof(nvram_var), "gpio%i", i);
|
|
||||||
if (err <= 0)
|
|
||||||
continue;
|
|
||||||
- err = bcm47xx_nvram_getenv(nvram_var, buf, sizeof(buf));
|
|
||||||
+ err = bcm47xx_nvram_getenv(dev, nvram_var, buf, sizeof(buf));
|
|
||||||
if (err <= 0)
|
|
||||||
continue;
|
|
||||||
if (!strcmp(name, buf))
|
|
||||||
--- a/arch/mips/bcm47xx/setup.c
|
|
||||||
+++ b/arch/mips/bcm47xx/setup.c
|
|
||||||
@@ -132,7 +132,7 @@ static int bcm47xx_get_invariants(struct
|
|
||||||
memset(&iv->sprom, 0, sizeof(struct ssb_sprom));
|
|
||||||
bcm47xx_fill_sprom(&iv->sprom, NULL, false);
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("cardbus", buf, sizeof(buf)) >= 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "cardbus", buf, sizeof(buf)) >= 0)
|
|
||||||
iv->has_cardbus_slot = !!simple_strtoul(buf, NULL, 10);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -155,7 +155,7 @@ static void __init bcm47xx_register_ssb(
|
|
||||||
panic("Failed to initialize SSB bus (err %d)", err);
|
|
||||||
|
|
||||||
mcore = &bcm47xx_bus.ssb.mipscore;
|
|
||||||
- if (bcm47xx_nvram_getenv("kernel_args", buf, sizeof(buf)) >= 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "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
|
|
||||||
@@ -52,10 +52,10 @@ static int get_nvram_var(const char *pre
|
|
||||||
|
|
||||||
create_key(prefix, postfix, name, key, sizeof(key));
|
|
||||||
|
|
||||||
- err = bcm47xx_nvram_getenv(key, buf, len);
|
|
||||||
+ err = bcm47xx_nvram_getenv(NULL, key, buf, len);
|
|
||||||
if (fallback && err == -ENOENT && prefix) {
|
|
||||||
create_key(NULL, postfix, name, key, sizeof(key));
|
|
||||||
- err = bcm47xx_nvram_getenv(key, buf, len);
|
|
||||||
+ err = bcm47xx_nvram_getenv(NULL, key, buf, len);
|
|
||||||
}
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
--- a/arch/mips/bcm47xx/time.c
|
|
||||||
+++ b/arch/mips/bcm47xx/time.c
|
|
||||||
@@ -61,7 +61,7 @@ void __init plat_time_init(void)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (chip_id == 0x5354) {
|
|
||||||
- len = bcm47xx_nvram_getenv("clkfreq", buf, sizeof(buf));
|
|
||||||
+ len = bcm47xx_nvram_getenv(NULL, "clkfreq", buf, sizeof(buf));
|
|
||||||
if (len >= 0 && !strncmp(buf, "200", 4))
|
|
||||||
hz = 100000000;
|
|
||||||
}
|
|
||||||
--- a/drivers/misc/Kconfig
|
--- a/drivers/misc/Kconfig
|
||||||
+++ b/drivers/misc/Kconfig
|
+++ b/drivers/misc/Kconfig
|
||||||
@@ -515,6 +515,11 @@ config VEXPRESS_SYSCFG
|
@@ -515,6 +515,11 @@ config VEXPRESS_SYSCFG
|
||||||
|
@ -282,82 +80,19 @@ Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||||
obj-$(CONFIG_VEXPRESS_SYSCFG) += vexpress-syscfg.o
|
obj-$(CONFIG_VEXPRESS_SYSCFG) += vexpress-syscfg.o
|
||||||
obj-$(CONFIG_CXL_BASE) += cxl/
|
obj-$(CONFIG_CXL_BASE) += cxl/
|
||||||
+obj-$(CONFIG_BCM47XX_NVRAM) += bcm47xx-nvram.o
|
+obj-$(CONFIG_BCM47XX_NVRAM) += bcm47xx-nvram.o
|
||||||
--- a/drivers/net/ethernet/broadcom/b44.c
|
|
||||||
+++ b/drivers/net/ethernet/broadcom/b44.c
|
|
||||||
@@ -411,7 +411,7 @@ static void b44_wap54g10_workaround(stru
|
|
||||||
* see https://dev.openwrt.org/ticket/146
|
|
||||||
* check and reset bit "isolate"
|
|
||||||
*/
|
|
||||||
- if (bcm47xx_nvram_getenv("boardnum", buf, sizeof(buf)) < 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "boardnum", buf, sizeof(buf)) < 0)
|
|
||||||
return;
|
|
||||||
if (simple_strtoul(buf, NULL, 0) == 2) {
|
|
||||||
err = __b44_readphy(bp, 0, MII_BMCR, &val);
|
|
||||||
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
|
||||||
@@ -974,7 +974,8 @@ static void bgmac_chip_reset(struct bgma
|
|
||||||
BGMAC_CHIPCTL_1_IF_TYPE_MII;
|
|
||||||
char buf[4];
|
|
||||||
|
|
||||||
- if (bcm47xx_nvram_getenv("et_swtype", buf, sizeof(buf)) > 0) {
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "et_swtype", buf,
|
|
||||||
+ sizeof(buf)) > 0) {
|
|
||||||
if (kstrtou8(buf, 0, &et_swtype))
|
|
||||||
bgmac_err(bgmac, "Failed to parse et_swtype (%s)\n",
|
|
||||||
buf);
|
|
||||||
@@ -1534,7 +1535,7 @@ static int bgmac_probe(struct bcma_devic
|
|
||||||
}
|
|
||||||
|
|
||||||
bgmac->int_mask = BGMAC_IS_ERRMASK | BGMAC_IS_RX | BGMAC_IS_TX_MASK;
|
|
||||||
- if (bcm47xx_nvram_getenv("et0_no_txint", NULL, 0) == 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "et0_no_txint", NULL, 0) == 0)
|
|
||||||
bgmac->int_mask &= ~BGMAC_IS_TX_MASK;
|
|
||||||
|
|
||||||
/* TODO: reset the external phy. Specs are needed */
|
|
||||||
--- a/drivers/ssb/driver_chipcommon_pmu.c
|
|
||||||
+++ b/drivers/ssb/driver_chipcommon_pmu.c
|
|
||||||
@@ -319,7 +319,8 @@ static void ssb_pmu_pll_init(struct ssb_
|
|
||||||
|
|
||||||
if (bus->bustype == SSB_BUSTYPE_SSB) {
|
|
||||||
char buf[20];
|
|
||||||
- if (bcm47xx_nvram_getenv("xtalfreq", buf, sizeof(buf)) >= 0)
|
|
||||||
+ if (bcm47xx_nvram_getenv(NULL, "xtalfreq", buf,
|
|
||||||
+ sizeof(buf)) >= 0)
|
|
||||||
crystalfreq = simple_strtoul(buf, NULL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/include/linux/bcm47xx_nvram.h
|
--- a/include/linux/bcm47xx_nvram.h
|
||||||
+++ b/include/linux/bcm47xx_nvram.h
|
+++ b/include/linux/bcm47xx_nvram.h
|
||||||
@@ -14,19 +14,24 @@
|
@@ -14,8 +14,8 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
+
|
-
|
||||||
+struct device;
|
|
||||||
|
|
||||||
-#ifdef CONFIG_BCM47XX
|
-#ifdef CONFIG_BCM47XX
|
||||||
-int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len);
|
+
|
||||||
+#if defined(CONFIG_BCM47XX) || defined(CONFIG_BCM47XX_NVRAM)
|
+#if defined(CONFIG_BCM47XX) || defined(CONFIG_BCM47XX_NVRAM)
|
||||||
+int bcm47xx_nvram_getenv(const struct device *dev, const char *name, char *val,
|
int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len);
|
||||||
+ size_t val_len);
|
|
||||||
|
|
||||||
-int bcm47xx_nvram_gpio_pin(const char *name);
|
int bcm47xx_nvram_gpio_pin(const char *name);
|
||||||
+int bcm47xx_nvram_gpio_pin(const struct device *dev, const char *name);
|
|
||||||
#else
|
|
||||||
-static inline int bcm47xx_nvram_getenv(const char *name, char *val,
|
|
||||||
+static inline int bcm47xx_nvram_getenv(const struct device *dev,
|
|
||||||
+ const char *name, char *val,
|
|
||||||
size_t val_len)
|
|
||||||
{
|
|
||||||
return -ENXIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static inline int bcm47xx_nvram_gpio_pin(const char *name)
|
|
||||||
+static inline int bcm47xx_nvram_gpio_pin(const struct device *dev,
|
|
||||||
+ const char *name)
|
|
||||||
{
|
|
||||||
return -ENXIO;
|
|
||||||
}
|
|
||||||
--- a/drivers/misc/bcm47xx-nvram.c
|
--- a/drivers/misc/bcm47xx-nvram.c
|
||||||
+++ b/drivers/misc/bcm47xx-nvram.c
|
+++ b/drivers/misc/bcm47xx-nvram.c
|
||||||
@@ -28,7 +28,7 @@
|
@@ -28,7 +28,7 @@
|
||||||
|
|
Loading…
Reference in a new issue