diff options
author | matteo <matteo@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-09-17 12:45:38 +0000 |
---|---|---|
committer | matteo <matteo@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-09-17 12:45:38 +0000 |
commit | 351a3d1a648a3fe6a50b9c44d9408f5672e859d7 (patch) | |
tree | 6a4d9d8edee878995941013c507ba35d1cd69e4d /target/linux/ar7/patches-2.6.22 | |
parent | f07284d46fc35d17d545f4e041b36bf0507a8933 (diff) |
detect ar7 at runtime in set_except_vector and remove useless volatile
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8824 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ar7/patches-2.6.22')
-rw-r--r-- | target/linux/ar7/patches-2.6.22/100-board_support.patch | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/target/linux/ar7/patches-2.6.22/100-board_support.patch b/target/linux/ar7/patches-2.6.22/100-board_support.patch index 0297ef651..c7ea6cc2a 100644 --- a/target/linux/ar7/patches-2.6.22/100-board_support.patch +++ b/target/linux/ar7/patches-2.6.22/100-board_support.patch @@ -26,31 +26,35 @@ diff -urN linux-2.6.22/arch/mips/Kconfig linux-2.6.22.new/arch/mips/Kconfig diff -urN linux-2.6.22/arch/mips/kernel/traps.c linux-2.6.22.new/arch/mips/kernel/traps.c --- linux-2.6.22/arch/mips/kernel/traps.c 2007-07-09 01:32:17.000000000 +0200 +++ linux-2.6.22.new/arch/mips/kernel/traps.c 2007-07-11 02:32:39.000000000 +0200 -@@ -1075,9 +1075,23 @@ void *set_except_vector(int n, void *addr) +@@ -1074,11 +1074,23 @@ void *set_except_vector(int n, void *addr) + unsigned long old_handler = exception_handlers[n]; exception_handlers[n] = handler; - if (n == 0 && cpu_has_divec) { -+#ifdef CONFIG_AR7 -+ /* lui k0, 0x0000 */ -+ *(volatile u32 *)(ebase + 0x200) = -+ 0x3c1a0000 | (handler >> 16); -+ /* ori k0, 0x0000 */ -+ *(volatile u32 *)(ebase + 0x204) = -+ 0x375a0000 | (handler & 0xffff); -+ /* jr k0 */ -+ *(volatile u32 *)(ebase + 0x208) = 0x03400008; -+ /* nop */ -+ *(volatile u32 *)(ebase + 0x20C) = 0x00000000; -+ flush_icache_range(ebase + 0x200, ebase + 0x210); -+#else - *(volatile u32 *)(ebase + 0x200) = 0x08000000 | - (0x03ffffff & (handler >> 2)); - flush_icache_range(ebase + 0x200, ebase + 0x204); -+#endif - } +- if (n == 0 && cpu_has_divec) { +- *(volatile u32 *)(ebase + 0x200) = 0x08000000 | +- (0x03ffffff & (handler >> 2)); +- flush_icache_range(ebase + 0x200, ebase + 0x204); +- } ++ if (n == 0 && cpu_has_divec) ++ if ((handler ^ (ebase + 4)) & 0xfc000000) { ++ /* lui k0, 0x0000 */ ++ *(u32 *)(ebase + 0x200) = 0x3c1a0000 | (handler >> 16); ++ /* ori k0, 0x0000 */ ++ *(u32 *)(ebase + 0x204) = ++ 0x375a0000 | (handler & 0xffff); ++ /* jr k0 */ ++ *(u32 *)(ebase + 0x208) = 0x03400008; ++ /* nop */ ++ *(u32 *)(ebase + 0x20C) = 0x00000000; ++ flush_icache_range(ebase + 0x200, ebase + 0x210); ++ } else { ++ *(volatile u32 *)(ebase + 0x200) = ++ 0x08000000 | (0x03ffffff & (handler >> 2)); ++ flush_icache_range(ebase + 0x200, ebase + 0x204); ++ } return (void *)old_handler; } - + diff -urN linux-2.6.22/arch/mips/Makefile linux-2.6.22.new/arch/mips/Makefile --- linux-2.6.22/arch/mips/Makefile 2007-07-09 01:32:17.000000000 +0200 +++ linux-2.6.22.new/arch/mips/Makefile 2007-07-11 02:32:39.000000000 +0200 |