aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-4.0/031-08-mips-bcm47xx-allow-retrieval-of-complete-nvram-conte.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm47xx/patches-4.0/031-08-mips-bcm47xx-allow-retrieval-of-complete-nvram-conte.patch')
-rw-r--r--target/linux/brcm47xx/patches-4.0/031-08-mips-bcm47xx-allow-retrieval-of-complete-nvram-conte.patch164
1 files changed, 0 insertions, 164 deletions
diff --git a/target/linux/brcm47xx/patches-4.0/031-08-mips-bcm47xx-allow-retrieval-of-complete-nvram-conte.patch b/target/linux/brcm47xx/patches-4.0/031-08-mips-bcm47xx-allow-retrieval-of-complete-nvram-conte.patch
deleted file mode 100644
index bfa93af41c..0000000000
--- a/target/linux/brcm47xx/patches-4.0/031-08-mips-bcm47xx-allow-retrieval-of-complete-nvram-conte.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-From 2536295c2aeafc769215a6b2883126fa94c90b9a Mon Sep 17 00:00:00 2001
-From: Hante Meuleman <meuleman@broadcom.com>
-Date: Thu, 21 May 2015 15:27:23 +0200
-Subject: [PATCH] mips: bcm47xx: allow retrieval of complete nvram contents
-
-Host platforms such as routers supported by OpenWrt can
-support NVRAM reading directly from internal NVRAM store.
-The brcmfmac for one requires the complete nvram contents
-to select what needs to be sent to wireless device.
-
-Signed-off-by: Arend van Spriel <arend@broadcom.com>
-Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
-Reviewed-by: Arend Van Spriel <arend@broadcom.com>
-Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
-Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
-Reviewed-by: Daniel (Deognyoun) Kim <dekim@broadcom.com>
-Cc: linux-mips@linux-mips.org
-Patchwork: https://patchwork.linux-mips.org/patch/10093/
-Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
----
- arch/mips/bcm47xx/nvram.c | 60 ++++++++++++++++++++++++++++++++-----------
- include/linux/bcm47xx_nvram.h | 15 +++++++++++
- 2 files changed, 60 insertions(+), 15 deletions(-)
-
-diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c
-index 95d028c..2ed762e 100644
---- a/arch/mips/bcm47xx/nvram.c
-+++ b/arch/mips/bcm47xx/nvram.c
-@@ -94,17 +94,22 @@ static int nvram_find_and_copy(void __iomem *iobase, u32 lim)
- return -ENXIO;
-
- found:
-- if (header->len > size)
-- pr_err("The nvram size accoridng to the header seems to be bigger than the partition on flash\n");
-- if (header->len > NVRAM_SPACE)
-- pr_err("nvram on flash (%i bytes) is bigger than the reserved space in memory, will just copy the first %i bytes\n",
-- header->len, NVRAM_SPACE - 1);
--
- src = (u32 *)header;
- dst = (u32 *)nvram_buf;
- for (i = 0; i < sizeof(struct nvram_header); i += 4)
- *dst++ = __raw_readl(src++);
-- for (; i < header->len && i < NVRAM_SPACE && i < size; i += 4)
-+ header = (struct nvram_header *)nvram_buf;
-+ if (header->len > size) {
-+ pr_err("The nvram size according to the header seems to be bigger than the partition on flash\n");
-+ header->len = size;
-+ }
-+ if (header->len >= NVRAM_SPACE) {
-+ pr_err("nvram on flash (%i bytes) is bigger than the reserved space in memory, will just copy the first %i bytes\n",
-+ header->len, NVRAM_SPACE - 1);
-+ header->len = NVRAM_SPACE - 1;
-+ }
-+ /* proceed reading data after header */
-+ for (; i < header->len; i += 4)
- *dst++ = readl(src++);
- nvram_buf[NVRAM_SPACE - 1] = '\0';
-
-@@ -139,6 +144,7 @@ static int nvram_init(void)
- #ifdef CONFIG_MTD
- struct mtd_info *mtd;
- struct nvram_header header;
-+ struct nvram_header *pheader;
- size_t bytes_read;
- int err;
-
-@@ -147,20 +153,21 @@ static int nvram_init(void)
- return -ENODEV;
-
- err = mtd_read(mtd, 0, sizeof(header), &bytes_read, (uint8_t *)&header);
-- if (!err && header.magic == NVRAM_MAGIC) {
-- u8 *dst = (uint8_t *)nvram_buf;
-- size_t len = header.len;
--
-- if (len >= NVRAM_SPACE) {
-- len = NVRAM_SPACE - 1;
-+ if (!err && header.magic == NVRAM_MAGIC &&
-+ header.len > sizeof(header)) {
-+ if (header.len >= NVRAM_SPACE) {
- pr_err("nvram on flash (%i bytes) is bigger than the reserved space in memory, will just copy the first %i bytes\n",
-- header.len, len);
-+ header.len, NVRAM_SPACE);
-+ header.len = NVRAM_SPACE - 1;
- }
-
-- err = mtd_read(mtd, 0, len, &bytes_read, dst);
-+ err = mtd_read(mtd, 0, header.len, &bytes_read,
-+ (u8 *)nvram_buf);
- if (err)
- return err;
-
-+ pheader = (struct nvram_header *)nvram_buf;
-+ pheader->len = header.len;
- return 0;
- }
- #endif
-@@ -219,3 +226,26 @@ int bcm47xx_nvram_gpio_pin(const char *name)
- return -ENOENT;
- }
- EXPORT_SYMBOL(bcm47xx_nvram_gpio_pin);
-+
-+char *bcm47xx_nvram_get_contents(size_t *nvram_size)
-+{
-+ int err;
-+ char *nvram;
-+ struct nvram_header *header;
-+
-+ if (!nvram_buf[0]) {
-+ err = nvram_init();
-+ if (err)
-+ return NULL;
-+ }
-+
-+ header = (struct nvram_header *)nvram_buf;
-+ *nvram_size = header->len - sizeof(struct nvram_header);
-+ nvram = vmalloc(*nvram_size);
-+ if (!nvram)
-+ return NULL;
-+ memcpy(nvram, &nvram_buf[sizeof(struct nvram_header)], *nvram_size);
-+
-+ return nvram;
-+}
-+EXPORT_SYMBOL(bcm47xx_nvram_get_contents);
-diff --git a/include/linux/bcm47xx_nvram.h b/include/linux/bcm47xx_nvram.h
-index b12b07e..c73927c 100644
---- a/include/linux/bcm47xx_nvram.h
-+++ b/include/linux/bcm47xx_nvram.h
-@@ -10,11 +10,17 @@
-
- #include <linux/types.h>
- #include <linux/kernel.h>
-+#include <linux/vmalloc.h>
-
- #ifdef CONFIG_BCM47XX
- int bcm47xx_nvram_init_from_mem(u32 base, u32 lim);
- int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len);
- int bcm47xx_nvram_gpio_pin(const char *name);
-+char *bcm47xx_nvram_get_contents(size_t *val_len);
-+static inline void bcm47xx_nvram_release_contents(char *nvram)
-+{
-+ vfree(nvram);
-+};
- #else
- static inline int bcm47xx_nvram_init_from_mem(u32 base, u32 lim)
- {
-@@ -29,6 +35,15 @@ static inline int bcm47xx_nvram_gpio_pin(const char *name)
- {
- return -ENOTSUPP;
- };
-+
-+static inline char *bcm47xx_nvram_get_contents(size_t *val_len)
-+{
-+ return NULL;
-+};
-+
-+static inline void bcm47xx_nvram_release_contents(char *nvram)
-+{
-+};
- #endif
-
- #endif /* __BCM47XX_NVRAM_H */
---
-1.8.4.5
-