Changeset 8824


Ignore:
Timestamp:
2007-09-17T14:45:38+02:00 (10 years ago)
Author:
matteo
Message:

detect ar7 at runtime in set_except_vector and remove useless volatile

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar7/patches-2.6.22/100-board_support.patch

    r8770 r8824  
    2727--- linux-2.6.22/arch/mips/kernel/traps.c       2007-07-09 01:32:17.000000000 +0200 
    2828+++ linux-2.6.22.new/arch/mips/kernel/traps.c   2007-07-11 02:32:39.000000000 +0200 
    29 @@ -1075,9 +1075,23 @@ void *set_except_vector(int n, void *addr) 
     29@@ -1074,11 +1074,23 @@ void *set_except_vector(int n, void *addr) 
     30        unsigned long old_handler = exception_handlers[n]; 
    3031  
    3132        exception_handlers[n] = handler; 
    32         if (n == 0 && cpu_has_divec) { 
    33 +#ifdef CONFIG_AR7 
    34 +               /* lui k0, 0x0000 */ 
    35 +               *(volatile u32 *)(ebase + 0x200) = 
    36 +                               0x3c1a0000 | (handler >> 16); 
    37 +               /* ori k0, 0x0000 */ 
    38 +               *(volatile u32 *)(ebase + 0x204) = 
    39 +                               0x375a0000 | (handler & 0xffff); 
    40 +               /* jr k0 */ 
    41 +               *(volatile u32 *)(ebase + 0x208) = 0x03400008; 
    42 +               /* nop */ 
    43 +               *(volatile u32 *)(ebase + 0x20C) = 0x00000000; 
    44 +               flush_icache_range(ebase + 0x200, ebase + 0x210); 
    45 +#else 
    46                 *(volatile u32 *)(ebase + 0x200) = 0x08000000 | 
    47                                                  (0x03ffffff & (handler >> 2)); 
    48                 flush_icache_range(ebase + 0x200, ebase + 0x204); 
    49 +#endif 
    50         } 
     33-       if (n == 0 && cpu_has_divec) { 
     34-               *(volatile u32 *)(ebase + 0x200) = 0x08000000 | 
     35-                                                (0x03ffffff & (handler >> 2)); 
     36-               flush_icache_range(ebase + 0x200, ebase + 0x204); 
     37-       } 
     38+       if (n == 0 && cpu_has_divec) 
     39+               if ((handler ^ (ebase + 4)) & 0xfc000000) { 
     40+                       /* lui k0, 0x0000 */ 
     41+                       *(u32 *)(ebase + 0x200) = 0x3c1a0000 | (handler >> 16); 
     42+                       /* ori k0, 0x0000 */ 
     43+                       *(u32 *)(ebase + 0x204) = 
     44+                                       0x375a0000 | (handler & 0xffff); 
     45+                       /* jr k0 */ 
     46+                       *(u32 *)(ebase + 0x208) = 0x03400008; 
     47+                       /* nop */ 
     48+                       *(u32 *)(ebase + 0x20C) = 0x00000000; 
     49+                       flush_icache_range(ebase + 0x200, ebase + 0x210); 
     50+               } else { 
     51+                       *(volatile u32 *)(ebase + 0x200) = 
     52+                               0x08000000 | (0x03ffffff & (handler >> 2)); 
     53+                       flush_icache_range(ebase + 0x200, ebase + 0x204); 
     54+               } 
    5155        return (void *)old_handler; 
    5256 } 
    53  
     57  
    5458diff -urN linux-2.6.22/arch/mips/Makefile linux-2.6.22.new/arch/mips/Makefile 
    5559--- linux-2.6.22/arch/mips/Makefile     2007-07-09 01:32:17.000000000 +0200 
Note: See TracChangeset for help on using the changeset viewer.