123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- From 21400f252a97755579b43a4dc95dd02cd7f0ca75 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
- Date: Wed, 3 Sep 2014 22:59:45 +0200
- Subject: [PATCH 155/158] MIPS: BCM47XX: Make ssb init NVRAM instead of bcm47xx
- polling it
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- This makes NVRAM code less bcm47xx/ssb specific allowing it to become a
- standalone driver in the future. A similar patch for bcma will follow
- when it's ready.
- Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
- Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
- Cc: linux-mips@linux-mips.org
- Patchwork: https://patchwork.linux-mips.org/patch/7612/
- Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
- ---
- arch/mips/bcm47xx/nvram.c | 30 +++++++---------------
- arch/mips/include/asm/mach-bcm47xx/bcm47xx_nvram.h | 1 +
- drivers/ssb/driver_mipscore.c | 14 +++++++++-
- 3 files changed, 23 insertions(+), 22 deletions(-)
- --- a/arch/mips/bcm47xx/nvram.c
- +++ b/arch/mips/bcm47xx/nvram.c
- @@ -98,7 +98,14 @@ found:
- return 0;
- }
-
- -static int bcm47xx_nvram_init_from_mem(u32 base, u32 lim)
- +/*
- + * On bcm47xx we need access to the NVRAM very early, so we can't use mtd
- + * subsystem to access flash. We can't even use platform device / driver to
- + * store memory offset.
- + * To handle this we provide following symbol. It's supposed to be called as
- + * soon as we get info about flash device, before any NVRAM entry is needed.
- + */
- +int bcm47xx_nvram_init_from_mem(u32 base, u32 lim)
- {
- void __iomem *iobase;
- int err;
- @@ -114,25 +121,6 @@ static int bcm47xx_nvram_init_from_mem(u
- return err;
- }
-
- -#ifdef CONFIG_BCM47XX_SSB
- -static int nvram_init_ssb(void)
- -{
- - struct ssb_mipscore *mcore = &bcm47xx_bus.ssb.mipscore;
- - u32 base;
- - u32 lim;
- -
- - if (mcore->pflash.present) {
- - base = mcore->pflash.window;
- - lim = mcore->pflash.window_size;
- - } else {
- - pr_err("Couldn't find supported flash memory\n");
- - return -ENXIO;
- - }
- -
- - return bcm47xx_nvram_init_from_mem(base, lim);
- -}
- -#endif
- -
- #ifdef CONFIG_BCM47XX_BCMA
- static int nvram_init_bcma(void)
- {
- @@ -168,7 +156,7 @@ static int nvram_init(void)
- switch (bcm47xx_bus_type) {
- #ifdef CONFIG_BCM47XX_SSB
- case BCM47XX_BUS_TYPE_SSB:
- - return nvram_init_ssb();
- + break;
- #endif
- #ifdef CONFIG_BCM47XX_BCMA
- case BCM47XX_BUS_TYPE_BCMA:
- --- a/arch/mips/include/asm/mach-bcm47xx/bcm47xx_nvram.h
- +++ b/arch/mips/include/asm/mach-bcm47xx/bcm47xx_nvram.h
- @@ -32,6 +32,7 @@ struct nvram_header {
- #define NVRAM_MAX_VALUE_LEN 255
- #define NVRAM_MAX_PARAM_LEN 64
-
- +int bcm47xx_nvram_init_from_mem(u32 base, u32 lim);
- 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])
- --- a/drivers/ssb/driver_mipscore.c
- +++ b/drivers/ssb/driver_mipscore.c
- @@ -15,6 +15,9 @@
- #include <linux/serial_core.h>
- #include <linux/serial_reg.h>
- #include <linux/time.h>
- +#ifdef CONFIG_BCM47XX
- +#include <bcm47xx_nvram.h>
- +#endif
-
- #include "ssb_private.h"
-
- @@ -210,6 +213,7 @@ static void ssb_mips_serial_init(struct
- static void ssb_mips_flash_detect(struct ssb_mipscore *mcore)
- {
- struct ssb_bus *bus = mcore->dev->bus;
- + struct ssb_sflash *sflash = &mcore->sflash;
- struct ssb_pflash *pflash = &mcore->pflash;
-
- /* When there is no chipcommon on the bus there is 4MB flash */
- @@ -242,7 +246,15 @@ static void ssb_mips_flash_detect(struct
- }
-
- ssb_pflash:
- - if (pflash->present) {
- + if (sflash->present) {
- +#ifdef CONFIG_BCM47XX
- + bcm47xx_nvram_init_from_mem(sflash->window, sflash->size);
- +#endif
- + } else if (pflash->present) {
- +#ifdef CONFIG_BCM47XX
- + bcm47xx_nvram_init_from_mem(pflash->window, pflash->window_size);
- +#endif
- +
- ssb_pflash_data.width = pflash->buswidth;
- ssb_pflash_resource.start = pflash->window;
- ssb_pflash_resource.end = pflash->window + pflash->window_size;
|