Skip to content

Commit

Permalink
MIPS: bcm47xx: separate functions finding flash window addr
Browse files Browse the repository at this point in the history
Also check if parallel flash is present at all before accessing it and
add support for serial flash on BCMA bus.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
Patchwork: http://patchwork.linux-mips.org/patch/4738/
Signed-off-by: John Crispin <blogic@openwrt.org>
  • Loading branch information
Rafał Miłecki authored and John Crispin committed Feb 15, 2013
1 parent 836dc9e commit bb76563
Showing 1 changed file with 60 additions and 27 deletions.
87 changes: 60 additions & 27 deletions arch/mips/bcm47xx/nvram.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,39 +23,13 @@

static char nvram_buf[NVRAM_SPACE];

/* Probe for NVRAM header */
static void early_nvram_init(void)
static void nvram_find_and_copy(u32 base, u32 lim)
{
#ifdef CONFIG_BCM47XX_SSB
struct ssb_mipscore *mcore_ssb;
#endif
#ifdef CONFIG_BCM47XX_BCMA
struct bcma_drv_cc *bcma_cc;
#endif
struct nvram_header *header;
int i;
u32 base = 0;
u32 lim = 0;
u32 off;
u32 *src, *dst;

switch (bcm47xx_bus_type) {
#ifdef CONFIG_BCM47XX_SSB
case BCM47XX_BUS_TYPE_SSB:
mcore_ssb = &bcm47xx_bus.ssb.mipscore;
base = mcore_ssb->pflash.window;
lim = mcore_ssb->pflash.window_size;
break;
#endif
#ifdef CONFIG_BCM47XX_BCMA
case BCM47XX_BUS_TYPE_BCMA:
bcma_cc = &bcm47xx_bus.bcma.bus.drv_cc;
base = bcma_cc->pflash.window;
lim = bcma_cc->pflash.window_size;
break;
#endif
}

off = FLASH_MIN;
while (off <= lim) {
/* Windowed flash access */
Expand Down Expand Up @@ -86,6 +60,65 @@ static void early_nvram_init(void)
*dst++ = le32_to_cpu(*src++);
}

#ifdef CONFIG_BCM47XX_SSB
static void 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;
}

nvram_find_and_copy(base, lim);
}
#endif

#ifdef CONFIG_BCM47XX_BCMA
static void nvram_init_bcma(void)
{
struct bcma_drv_cc *cc = &bcm47xx_bus.bcma.bus.drv_cc;
u32 base;
u32 lim;

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;
#endif
} else {
pr_err("Couldn't find supported flash memory\n");
return;
}

nvram_find_and_copy(base, lim);
}
#endif

static void early_nvram_init(void)
{
switch (bcm47xx_bus_type) {
#ifdef CONFIG_BCM47XX_SSB
case BCM47XX_BUS_TYPE_SSB:
nvram_init_ssb();
break;
#endif
#ifdef CONFIG_BCM47XX_BCMA
case BCM47XX_BUS_TYPE_BCMA:
nvram_init_bcma();
break;
#endif
}
}

int nvram_getenv(char *name, char *val, size_t val_len)
{
char *var, *value, *end, *eq;
Expand Down

0 comments on commit bb76563

Please sign in to comment.