Skip to content

Commit

Permalink
rapidio: remove mport resource reservation from common RIO code
Browse files Browse the repository at this point in the history
Removes resource reservation from the common sybsystem initialization code
and make it part of mport driver initialization.  This resolves conflict
with resource reservation by device specific mport drivers.

Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com>
Cc: Kumar Gala <galak@kernel.crashing.org>
Cc: Matt Porter <mporter@kernel.crashing.org>
Cc: Li Yang <leoli@freescale.com>
Cc: Thomas Moll <thomas.moll@sysgo.com>
Cc: Micha Nelissen <micha@neli.hopto.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Alexandre Bounine authored and Linus Torvalds committed Mar 24, 2011
1 parent 569fccb commit c1256eb
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 13 deletions.
9 changes: 9 additions & 0 deletions arch/powerpc/sysdev/fsl_rio.c
Original file line number Diff line number Diff line change
Expand Up @@ -1432,6 +1432,14 @@ int fsl_rio_setup(struct platform_device *dev)
port->iores.flags = IORESOURCE_MEM;
port->iores.name = "rio_io_win";

if (request_resource(&iomem_resource, &port->iores) < 0) {
dev_err(&dev->dev, "RIO: Error requesting master port region"
" 0x%016llx-0x%016llx\n",
(u64)port->iores.start, (u64)port->iores.end);
rc = -ENOMEM;
goto err_res;
}

priv->pwirq = irq_of_parse_and_map(dev->dev.of_node, 0);
priv->bellirq = irq_of_parse_and_map(dev->dev.of_node, 2);
priv->txirq = irq_of_parse_and_map(dev->dev.of_node, 3);
Expand Down Expand Up @@ -1536,6 +1544,7 @@ int fsl_rio_setup(struct platform_device *dev)
return 0;
err:
iounmap(priv->regs_win);
err_res:
kfree(priv);
err_priv:
kfree(port);
Expand Down
14 changes: 1 addition & 13 deletions drivers/rapidio/rio.c
Original file line number Diff line number Diff line change
Expand Up @@ -1137,20 +1137,9 @@ static int __devinit rio_init(void)

int __devinit rio_init_mports(void)
{
int rc = 0;
struct rio_mport *port;

list_for_each_entry(port, &rio_mports, node) {
if (!request_mem_region(port->iores.start,
resource_size(&port->iores),
port->name)) {
printk(KERN_ERR
"RIO: Error requesting master port region 0x%016llx-0x%016llx\n",
(u64)port->iores.start, (u64)port->iores.end);
rc = -ENOMEM;
goto out;
}

if (port->host_deviceid >= 0)
rio_enum_mport(port);
else
Expand All @@ -1159,8 +1148,7 @@ int __devinit rio_init_mports(void)

rio_init();

out:
return rc;
return 0;
}

device_initcall_sync(rio_init_mports);
Expand Down

0 comments on commit c1256eb

Please sign in to comment.