aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorKumar Gala <galak@kernel.crashing.org>2009-08-18 15:08:32 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-08-28 00:24:13 -0400
commit4b98d9e713a03bd79ced8800e24a56359f9effbf (patch)
tree3c1ca441b80f907241a6dd065feb0879436d40e2 /arch/powerpc
parent6c188829d2c20a1d02aedb13db34b3ca2a8f0dc4 (diff)
powerpc/book3e-64: Add helper function to setup IVORs
Not all 64-bit Book-3E parts will have fixed IVORs so add a function that cpusetup code can call to setup the base IVORs (0..15) to match the fixed offsets. We need to 'or' part of interrupt_base_book3e into the IVORs since on parts that have them the IVPR doesn't extend as far down. Signed-off-by: Kumar Gala <galak@kernel.crashing.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/include/asm/exception-64e.h4
-rw-r--r--arch/powerpc/kernel/exceptions-64e.S19
2 files changed, 23 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/exception-64e.h b/arch/powerpc/include/asm/exception-64e.h
index 94cb3d79d125..6d53f311d942 100644
--- a/arch/powerpc/include/asm/exception-64e.h
+++ b/arch/powerpc/include/asm/exception-64e.h
@@ -196,6 +196,10 @@ exc_##label##_book3e:
196#define TLB_MISS_STATS_SAVE_INFO 196#define TLB_MISS_STATS_SAVE_INFO
197#endif 197#endif
198 198
199#define SET_IVOR(vector_number, vector_offset) \
200 li r3,vector_offset@l; \
201 ori r3,r3,interrupt_base_book3e@l; \
202 mtspr SPRN_IVOR##vector_number,r3;
199 203
200#endif /* _ASM_POWERPC_EXCEPTION_64E_H */ 204#endif /* _ASM_POWERPC_EXCEPTION_64E_H */
201 205
diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
index 3611b0e7d46d..662236c72244 100644
--- a/arch/powerpc/kernel/exceptions-64e.S
+++ b/arch/powerpc/kernel/exceptions-64e.S
@@ -782,5 +782,24 @@ _STATIC(init_thread_book3e)
782 782
783 blr 783 blr
784 784
785_GLOBAL(__setup_base_ivors)
786 SET_IVOR(0, 0x020) /* Critical Input */
787 SET_IVOR(1, 0x000) /* Machine Check */
788 SET_IVOR(2, 0x060) /* Data Storage */
789 SET_IVOR(3, 0x080) /* Instruction Storage */
790 SET_IVOR(4, 0x0a0) /* External Input */
791 SET_IVOR(5, 0x0c0) /* Alignment */
792 SET_IVOR(6, 0x0e0) /* Program */
793 SET_IVOR(7, 0x100) /* FP Unavailable */
794 SET_IVOR(8, 0x120) /* System Call */
795 SET_IVOR(9, 0x140) /* Auxiliary Processor Unavailable */
796 SET_IVOR(10, 0x160) /* Decrementer */
797 SET_IVOR(11, 0x180) /* Fixed Interval Timer */
798 SET_IVOR(12, 0x1a0) /* Watchdog Timer */
799 SET_IVOR(13, 0x1c0) /* Data TLB Error */
800 SET_IVOR(14, 0x1e0) /* Instruction TLB Error */
801 SET_IVOR(15, 0x040) /* Debug */
785 802
803 sync
786 804
805 blr