aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm63xx/patches-3.9/317-MIPS-BCM63XX-use-a-helper-for-getting-the-right-regi.patch
blob: 3931b218c9524f1f515b25912234beba87af5b46 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
From 7c9d3fe01034adbb890aab7c44534658f89c211b Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Thu, 25 Apr 2013 15:35:12 +0200
Subject: [PATCH 08/13] MIPS: BCM63XX: use a helper for getting the right
 register address

Signed-off-by: Jonas Gorski <jogo@openwrt.org>
---
 arch/mips/bcm63xx/irq.c |   30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

--- a/arch/mips/bcm63xx/irq.c
+++ b/arch/mips/bcm63xx/irq.c
@@ -251,6 +251,20 @@ static inline u32 get_ext_irq_perf_reg(i
 	return ext_irq_cfg_reg2;
 }
 
+static inline u32 get_irq_stat_addr(int cpu)
+{
+	if (cpu == 0)
+		return irq_stat_addr0;
+	return irq_stat_addr1;
+}
+
+static inline u32 get_irq_mask_addr(int cpu)
+{
+	if (cpu == 0)
+		return irq_mask_addr0;
+	return irq_mask_addr1;
+}
+
 static inline void handle_internal(int intbit)
 {
 	if (is_ext_irq_cascaded &&
@@ -274,13 +288,15 @@ void __dispatch_internal_##width(void)
 	unsigned int src, tgt;						\
 	bool irqs_pending = false;					\
 	static int i;							\
+	u32 irq_stat_addr = get_irq_stat_addr(0);			\
+	u32 irq_mask_addr = get_irq_mask_addr(0);			\
 									\
 	/* read registers in reverse order */				\
 	for (src = 0, tgt = (width / 32); src < (width / 32); src++) {	\
 		u32 val;						\
 									\
-		val = bcm_readl(irq_stat_addr0 + src * sizeof(u32));	\
-		val &= bcm_readl(irq_mask_addr0 + src * sizeof(u32));	\
+		val = bcm_readl(irq_stat_addr + src * sizeof(u32));	\
+		val &= bcm_readl(irq_mask_addr + src * sizeof(u32));	\
 		pending[--tgt] = val;					\
 									\
 		if (val)						\
@@ -306,10 +322,11 @@ static void __internal_irq_mask_##width(
 	u32 val;							\
 	unsigned reg = (irq / 32) ^ (width/32 - 1);			\
 	unsigned bit = irq & 0x1f;					\
+	u32 irq_mask_addr = get_irq_mask_addr(0);			\
 									\
-	val = bcm_readl(irq_mask_addr0 + reg * sizeof(u32));		\
+	val = bcm_readl(irq_mask_addr + reg * sizeof(u32));		\
 	val &= ~(1 << bit);						\
-	bcm_writel(val, irq_mask_addr0 + reg * sizeof(u32));		\
+	bcm_writel(val, irq_mask_addr + reg * sizeof(u32));		\
 }									\
 									\
 static void __internal_irq_unmask_##width(unsigned int irq)		\
@@ -317,10 +334,11 @@ static void __internal_irq_unmask_##widt
 	u32 val;							\
 	unsigned reg = (irq / 32) ^ (width/32 - 1);			\
 	unsigned bit = irq & 0x1f; 					\
+	u32 irq_mask_addr = get_irq_mask_addr(0);			\
 									\
-	val = bcm_readl(irq_mask_addr0 + reg * sizeof(u32));		\
+	val = bcm_readl(irq_mask_addr + reg * sizeof(u32));		\
 	val |= (1 << bit); 						\
-	bcm_writel(val, irq_mask_addr0 + reg * sizeof(u32));		\
+	bcm_writel(val, irq_mask_addr + reg * sizeof(u32));		\
 }
 
 BUILD_IPIC_INTERNAL(32);