bcma: only map wrapper if its address is available

The Chipcommon B core does not have a wrap address and it would fail here.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Hauke Mehrtens 2014-08-22 08:44:52 +02:00 committed by John W. Linville
parent 89be7ceb80
commit ecf47e9bb7
2 changed files with 11 additions and 4 deletions

View File

@ -134,12 +134,16 @@ static void bcma_host_soc_block_write(struct bcma_device *core,
static u32 bcma_host_soc_aread32(struct bcma_device *core, u16 offset) static u32 bcma_host_soc_aread32(struct bcma_device *core, u16 offset)
{ {
if (WARN_ONCE(!core->io_wrap, "Accessed core has no wrapper/agent\n"))
return ~0;
return readl(core->io_wrap + offset); return readl(core->io_wrap + offset);
} }
static void bcma_host_soc_awrite32(struct bcma_device *core, u16 offset, static void bcma_host_soc_awrite32(struct bcma_device *core, u16 offset,
u32 value) u32 value)
{ {
if (WARN_ONCE(!core->io_wrap, "Accessed core has no wrapper/agent\n"))
return;
writel(value, core->io_wrap + offset); writel(value, core->io_wrap + offset);
} }

View File

@ -421,10 +421,13 @@ static int bcma_get_next_core(struct bcma_bus *bus, u32 __iomem **eromptr,
core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE); core->io_addr = ioremap_nocache(core->addr, BCMA_CORE_SIZE);
if (!core->io_addr) if (!core->io_addr)
return -ENOMEM; return -ENOMEM;
core->io_wrap = ioremap_nocache(core->wrap, BCMA_CORE_SIZE); if (core->wrap) {
if (!core->io_wrap) { core->io_wrap = ioremap_nocache(core->wrap,
iounmap(core->io_addr); BCMA_CORE_SIZE);
return -ENOMEM; if (!core->io_wrap) {
iounmap(core->io_addr);
return -ENOMEM;
}
} }
} }
return 0; return 0;