[PATCHv8 05/10] irqchip: armada-370-xp: properly request resources
Gregory CLEMENT
gregory.clement at free-electrons.com
Fri Aug 9 02:44:00 EDT 2013
On 09/08/2013 00:17, Thomas Petazzoni wrote:
> Instead of using of_iomap(), we now use of_address_to_resource(),
> request_mem_region() and ioremap(). This allows the corresponding I/O
> regions to be properly requested and visible in /proc/iomem.
>
> The main motivation for this change is that the introduction of the
> MSI support requires us to get the physical address of the main
> interrupt controller registers, so we will need the corresponding
> 'struct resource' anyway.
>
> We also take this opportunity to change a panic() to BUG_ON(), in
> order to be consistent with the rest of the driver.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> Tested-by: Daniel Price <daniel.price at gmail.com>
Acked-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
> ---
> drivers/irqchip/irq-armada-370-xp.c | 20 ++++++++++++++++----
> 1 file changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
> index bb328a3..26adc74 100644
> --- a/drivers/irqchip/irq-armada-370-xp.c
> +++ b/drivers/irqchip/irq-armada-370-xp.c
> @@ -248,12 +248,25 @@ armada_370_xp_handle_irq(struct pt_regs *regs)
> static int __init armada_370_xp_mpic_of_init(struct device_node *node,
> struct device_node *parent)
> {
> + struct resource main_int_res, per_cpu_int_res;
> u32 control;
>
> - main_int_base = of_iomap(node, 0);
> - per_cpu_int_base = of_iomap(node, 1);
> + BUG_ON(of_address_to_resource(node, 0, &main_int_res));
> + BUG_ON(of_address_to_resource(node, 1, &per_cpu_int_res));
>
> + BUG_ON(!request_mem_region(main_int_res.start,
> + resource_size(&main_int_res),
> + node->full_name));
> + BUG_ON(!request_mem_region(per_cpu_int_res.start,
> + resource_size(&per_cpu_int_res),
> + node->full_name));
> +
> + main_int_base = ioremap(main_int_res.start,
> + resource_size(&main_int_res));
> BUG_ON(!main_int_base);
> +
> + per_cpu_int_base = ioremap(per_cpu_int_res.start,
> + resource_size(&per_cpu_int_res));
> BUG_ON(!per_cpu_int_base);
>
> control = readl(main_int_base + ARMADA_370_XP_INT_CONTROL);
> @@ -262,8 +275,7 @@ static int __init armada_370_xp_mpic_of_init(struct device_node *node,
> irq_domain_add_linear(node, (control >> 2) & 0x3ff,
> &armada_370_xp_mpic_irq_ops, NULL);
>
> - if (!armada_370_xp_mpic_domain)
> - panic("Unable to add Armada_370_Xp MPIC irq domain (DT)\n");
> + BUG_ON(!armada_370_xp_mpic_domain);
>
> irq_set_default_host(armada_370_xp_mpic_domain);
>
>
--
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
More information about the linux-arm-kernel
mailing list