65 lines
2.4 KiB
Diff
65 lines
2.4 KiB
Diff
|
From c8efa45217cbd780dafe12d87b61554c2e19a010 Mon Sep 17 00:00:00 2001
|
||
|
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||
|
Date: Thu, 6 Jun 2013 18:22:51 +0200
|
||
|
Subject: [PATCH 074/203] irqchip: armada-370-xp: properly request resources
|
||
|
|
||
|
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(-)
|
||
|
|
||
|
--- 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
|
||
|
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_
|
||
|
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);
|
||
|
|