diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2008-05-21 16:59:23 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-05-23 01:27:26 -0400 |
commit | 475ca391b490a683d66bf19999a8a7a24913f139 (patch) | |
tree | e7818dcd25169b9d9c9ed35723b3cafd2be455fd /arch/powerpc/sysdev | |
parent | 2ca7633dc73405ee775a2e9b7961b47a38bc882d (diff) |
[POWERPC] mpic: Deal with bogus NIRQ in Feature Reporting Register
Some chips (like the SoCs from Freescale) report the wrong value in NIRQ
and this causes issues if its doesn't match or exceed the value of
irq_count.
Add a flag that board code can set to just use irq_count instead of
FRR[NIRQ]. Eventually we'll add a device tree property with the number
of sources.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/sysdev')
-rw-r--r-- | arch/powerpc/sysdev/mpic.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index 8619f2a3f1f6..466e2183e86c 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c | |||
@@ -1144,9 +1144,12 @@ struct mpic * __init mpic_alloc(struct device_node *node, | |||
1144 | mpic->num_cpus = ((greg_feature & MPIC_GREG_FEATURE_LAST_CPU_MASK) | 1144 | mpic->num_cpus = ((greg_feature & MPIC_GREG_FEATURE_LAST_CPU_MASK) |
1145 | >> MPIC_GREG_FEATURE_LAST_CPU_SHIFT) + 1; | 1145 | >> MPIC_GREG_FEATURE_LAST_CPU_SHIFT) + 1; |
1146 | if (isu_size == 0) | 1146 | if (isu_size == 0) |
1147 | mpic->num_sources = | 1147 | if (flags & MPIC_BROKEN_FRR_NIRQS) |
1148 | ((greg_feature & MPIC_GREG_FEATURE_LAST_SRC_MASK) | 1148 | mpic->num_sources = mpic->irq_count; |
1149 | >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1; | 1149 | else |
1150 | mpic->num_sources = | ||
1151 | ((greg_feature & MPIC_GREG_FEATURE_LAST_SRC_MASK) | ||
1152 | >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1; | ||
1150 | 1153 | ||
1151 | /* Map the per-CPU registers */ | 1154 | /* Map the per-CPU registers */ |
1152 | for (i = 0; i < mpic->num_cpus; i++) { | 1155 | for (i = 0; i < mpic->num_cpus; i++) { |