diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2014-09-03 16:59:45 -0400 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-11-24 01:44:59 -0500 |
commit | 21400f252a97755579b43a4dc95dd02cd7f0ca75 (patch) | |
tree | 54b4dad7d552e2f2840ca5f8c0ec88ee9747368d /arch/mips/bcm47xx | |
parent | 8d602dd0f984e8488ab891344ebdb6e1f3128c4a (diff) |
MIPS: BCM47XX: Make ssb init NVRAM instead of bcm47xx polling it
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>
Diffstat (limited to 'arch/mips/bcm47xx')
-rw-r--r-- | arch/mips/bcm47xx/nvram.c | 30 |
1 files changed, 9 insertions, 21 deletions
diff --git a/arch/mips/bcm47xx/nvram.c b/arch/mips/bcm47xx/nvram.c index e07976bbb739..fecc5aeddd46 100644 --- a/arch/mips/bcm47xx/nvram.c +++ b/arch/mips/bcm47xx/nvram.c | |||
@@ -98,7 +98,14 @@ found: | |||
98 | return 0; | 98 | return 0; |
99 | } | 99 | } |
100 | 100 | ||
101 | static int bcm47xx_nvram_init_from_mem(u32 base, u32 lim) | 101 | /* |
102 | * On bcm47xx we need access to the NVRAM very early, so we can't use mtd | ||
103 | * subsystem to access flash. We can't even use platform device / driver to | ||
104 | * store memory offset. | ||
105 | * To handle this we provide following symbol. It's supposed to be called as | ||
106 | * soon as we get info about flash device, before any NVRAM entry is needed. | ||
107 | */ | ||
108 | int bcm47xx_nvram_init_from_mem(u32 base, u32 lim) | ||
102 | { | 109 | { |
103 | void __iomem *iobase; | 110 | void __iomem *iobase; |
104 | int err; | 111 | int err; |
@@ -114,25 +121,6 @@ static int bcm47xx_nvram_init_from_mem(u32 base, u32 lim) | |||
114 | return err; | 121 | return err; |
115 | } | 122 | } |
116 | 123 | ||
117 | #ifdef CONFIG_BCM47XX_SSB | ||
118 | static int nvram_init_ssb(void) | ||
119 | { | ||
120 | struct ssb_mipscore *mcore = &bcm47xx_bus.ssb.mipscore; | ||
121 | u32 base; | ||
122 | u32 lim; | ||
123 | |||
124 | if (mcore->pflash.present) { | ||
125 | base = mcore->pflash.window; | ||
126 | lim = mcore->pflash.window_size; | ||
127 | } else { | ||
128 | pr_err("Couldn't find supported flash memory\n"); | ||
129 | return -ENXIO; | ||
130 | } | ||
131 | |||
132 | return bcm47xx_nvram_init_from_mem(base, lim); | ||
133 | } | ||
134 | #endif | ||
135 | |||
136 | #ifdef CONFIG_BCM47XX_BCMA | 124 | #ifdef CONFIG_BCM47XX_BCMA |
137 | static int nvram_init_bcma(void) | 125 | static int nvram_init_bcma(void) |
138 | { | 126 | { |
@@ -168,7 +156,7 @@ static int nvram_init(void) | |||
168 | switch (bcm47xx_bus_type) { | 156 | switch (bcm47xx_bus_type) { |
169 | #ifdef CONFIG_BCM47XX_SSB | 157 | #ifdef CONFIG_BCM47XX_SSB |
170 | case BCM47XX_BUS_TYPE_SSB: | 158 | case BCM47XX_BUS_TYPE_SSB: |
171 | return nvram_init_ssb(); | 159 | break; |
172 | #endif | 160 | #endif |
173 | #ifdef CONFIG_BCM47XX_BCMA | 161 | #ifdef CONFIG_BCM47XX_BCMA |
174 | case BCM47XX_BUS_TYPE_BCMA: | 162 | case BCM47XX_BUS_TYPE_BCMA: |