diff mbox

[PATCHv8,05/10] irqchip: armada-370-xp: properly request resources

Message ID 1376000268-18397-6-git-send-email-thomas.petazzoni@free-electrons.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Thomas Petazzoni Aug. 8, 2013, 10:17 p.m. UTC
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@free-electrons.com>
Tested-by: Daniel Price <daniel.price@gmail.com>
---
 drivers/irqchip/irq-armada-370-xp.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

Comments

Gregory CLEMENT Aug. 9, 2013, 6:44 a.m. UTC | #1
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@free-electrons.com>
> Tested-by: Daniel Price <daniel.price@gmail.com>

Acked-by: Gregory CLEMENT <gregory.clement@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);
>  
>
diff mbox

Patch

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);