diff options
author | Kumar Gala <galak@kernel.crashing.org> | 2009-08-18 15:08:32 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-08-28 00:24:13 -0400 |
commit | 4b98d9e713a03bd79ced8800e24a56359f9effbf (patch) | |
tree | 3c1ca441b80f907241a6dd065feb0879436d40e2 /arch/powerpc | |
parent | 6c188829d2c20a1d02aedb13db34b3ca2a8f0dc4 (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.h | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/exceptions-64e.S | 19 |
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 | ||