]> git.wh0rd.org Git - patches.git/blob - bfin-traps-update.patch
scummvm random work
[patches.git] / bfin-traps-update.patch
1 Index: arch/blackfin/kernel/traps.c
2 ===================================================================
3 RCS file: /usr/local/src/blackfin/rsync/uclinux533/uClinux-dist/linux-2.6.x/arch/blackfin/kernel/traps.c,v
4 retrieving revision 1.60
5 diff -u -p -r1.60 traps.c
6 --- arch/blackfin/kernel/traps.c        21 Aug 2006 10:31:28 -0000      1.60
7 +++ arch/blackfin/kernel/traps.c        29 Aug 2006 22:48:11 -0000
8 @@ -45,24 +45,26 @@
9   * >2 for various levels of hopefully increasingly useless information
10   */
11  
12 -#define TRAPS_DEBUG 1          /* Must be defined here or in in Makefile */
13 +#ifndef TRAPS_DEBUG
14 +# define TRAPS_DEBUG 0
15 +#endif
16  
17  #if (TRAPS_DEBUG > 2 )
18 -#define DPRINTK3(args...) printk(args)
19 +# define DPRINTK3(args...) printk(KERN_DEBUG args)
20  #else
21 -#define DPRINTK3(args...)
22 +# define DPRINTK3(args...)
23  #endif
24  
25 -#if TRAPS_DEBUG > 1
26 -#define DPRINTK2(args...) printk(args)
27 +#if (TRAPS_DEBUG > 1)
28 +# define DPRINTK2(args...) printk(KERN_DEBUG args)
29  #else
30 -#define DPRINTK2(args...)
31 +# define DPRINTK2(args...)
32  #endif
33  
34  #ifdef TRAPS_DEBUG
35 -#define DPRINTK(args...) printk(args)
36 +# define DPRINTK1(args...) printk(KERN_DEBUG args)
37  #else
38 -#define DPRINTK(args...)
39 +# define DPRINTK1(args...)
40  #endif
41  
42  /* assembler routines */
43 @@ -145,12 +147,12 @@ asmlinkage void trap_c(struct pt_regs *f
44         fp->orig_pc = fp->retx;
45  
46         /* send the appropriate signal to the user program */
47 -       switch (fp->seqstat & 0x3f) {
48 +       switch (fp->seqstat & SEQSTAT_EXCAUSE) {
49         case VEC_STEP:
50                 info.si_code = TRAP_STEP;
51                 sig = SIGTRAP;
52                 /* Check if this is a single step in kernel space */
53 -               if(fp->ipend & 0xffc0)
54 +               if (fp->ipend & 0xffc0)
55                         return;
56                 else
57                         break;
58 @@ -158,14 +160,14 @@ asmlinkage void trap_c(struct pt_regs *f
59                 info.si_code = TRAP_ILLTRAP;
60                 sig = SIGTRAP;
61                 /* Check if this is a breakpoint in kernel space */
62 -               if(fp->ipend & 0xffc0)
63 +               if (fp->ipend & 0xffc0)
64                         return;
65                 else
66                         break;
67         case VEC_EXCPT03:       /* Atomic test and set service */
68                 info.si_code = SEGV_STACKFLOW;
69                 sig = SIGSEGV;
70 -               DPRINTK(EXC_0x03);
71 +               printk(KERN_EMERG EXC_0x03);
72                 break;
73         case VEC_EXCPT04:       /* Atomic test and set service */
74                 panic("Exception 4");
75 @@ -173,52 +175,53 @@ asmlinkage void trap_c(struct pt_regs *f
76         case VEC_UNDEF_I:
77                 info.si_code = ILL_ILLOPC;
78                 sig = SIGILL;
79 -               DPRINTK(EXC_0x21);
80 +               printk(KERN_EMERG EXC_0x21);
81                 break;
82         case VEC_OVFLOW:
83                 info.si_code = TRAP_TRACEFLOW;
84                 sig = SIGTRAP;
85 -               DPRINTK(EXC_0x11);
86 +               printk(KERN_EMERG EXC_0x11);
87                 break;
88         case VEC_ILGAL_I:
89                 info.si_code = ILL_ILLPARAOP;
90                 sig = SIGILL;
91 -               DPRINTK(EXC_0x22);
92 +               printk(KERN_EMERG EXC_0x22);
93                 break;
94         case VEC_ILL_RES:
95                 info.si_code = ILL_PRVOPC;
96                 sig = SIGILL;
97 -               DPRINTK(EXC_0x2E);
98 +               printk(KERN_EMERG EXC_0x2E);
99                 break;
100         case VEC_MISALI_D:
101                 info.si_code = BUS_ADRALN;
102                 sig = SIGBUS;
103 -               DPRINTK(EXC_0x24);
104 -               DPRINTK("DCPLB_FAULT_ADDR=%p\n", (void*)bfin_read_DCPLB_FAULT_ADDR());
105 +               printk(KERN_EMERG EXC_0x24);
106 +               printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void*)bfin_read_DCPLB_FAULT_ADDR());
107                 break;
108         case VEC_MISALI_I:
109                 info.si_code = BUS_ADRALN;
110                 sig = SIGBUS;
111 -               DPRINTK(EXC_0x2A);
112 -               DPRINTK("ICPLB_FAULT_ADDR=%p\n", (void*)bfin_read_ICPLB_FAULT_ADDR());
113 +               printk(KERN_EMERG EXC_0x2A);
114 +               printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void*)bfin_read_ICPLB_FAULT_ADDR());
115                 break;
116         case VEC_UNCOV:
117                 info.si_code = ILL_ILLEXCPT;
118                 sig = SIGILL;
119 -               DPRINTK(EXC_0x25);
120 +               printk(KERN_EMERG EXC_0x25);
121                 break;
122         case VEC_WATCH:
123                 info.si_code = TRAP_WATCHPT;
124                 sig = SIGTRAP;
125                 DPRINTK3(EXC_0x28);
126                 /* Check if this is a watchpoint in kernel space */
127 -               if(fp->ipend & 0xffc0)
128 +               if (fp->ipend & 0xffc0)
129                         return;
130                 else
131                         break;
132         case VEC_ISTRU_VL:      /* ADSP-BF535 only (MH) */
133                 info.si_code = BUS_OPFETCH;
134                 sig = SIGBUS;
135 +               printk(KERN_EMERG "BF535: VEC_ISTRU_VL\n");
136                 break;
137         case VEC_CPLB_I_VL:
138                 DPRINTK2(EXC_0x2B);
139 @@ -229,8 +232,6 @@ asmlinkage void trap_c(struct pt_regs *f
140                 DPRINTK3("DCPLB_FAULT_ADDR=%p\n", (void*)bfin_read_DCPLB_FAULT_ADDR());
141                 _cplb_hdr();
142                 goto nsig;
143 -               sig = SIGILL;
144 -               break;
145         case VEC_CPLB_I_M:
146                 DPRINTK3(EXC_0x2C);
147                 DPRINTK3("ICPLB_FAULT_ADDR=%p\n", (void*)bfin_read_ICPLB_FAULT_ADDR());
148 @@ -244,18 +245,19 @@ asmlinkage void trap_c(struct pt_regs *f
149         case VEC_CPLB_I_MHIT:
150                 info.si_code = ILL_CPLB_MULHIT;
151                 sig = SIGILL;
152 -               DPRINTK3(EXC_0x2D);
153 -               DPRINTK3("ICPLB_FAULT_ADDR=%p\n", (void*)bfin_read_ICPLB_FAULT_ADDR());
154 +               printk(KERN_EMERG EXC_0x2D);
155 +               printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void*)bfin_read_ICPLB_FAULT_ADDR());
156                 break;
157         case VEC_CPLB_MHIT:
158                 info.si_code = ILL_CPLB_MULHIT;
159  #ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
160                 sig = SIGSEGV;
161 +               printk(KERN_EMERG "\n\nNULL pointer access (probably)\n");
162  #else
163                 sig = SIGILL;
164 +               printk(KERN_EMERG EXC_0x27);
165  #endif
166 -               DPRINTK3(EXC_0x27);
167 -               DPRINTK3("DCPLB_FAULT_ADDR=%p\n", (void*)bfin_read_DCPLB_FAULT_ADDR());
168 +               printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void*)bfin_read_DCPLB_FAULT_ADDR());
169                 break;
170         default:
171                 info.si_code = TRAP_ILLTRAP;
172 @@ -270,6 +272,8 @@ asmlinkage void trap_c(struct pt_regs *f
173                 unsigned long stack;
174                 dump_bfin_regs(fp, (void *)fp->retx);
175                 show_stack(current, &stack);
176 +               if (current == NULL)
177 +                       panic("Kernel exception");
178         }
179        nsig:
180         trace_buffer_restore(j);
181 Index: arch/blackfin/mach-common/irqpanic.c
182 ===================================================================
183 RCS file: /usr/local/src/blackfin/rsync/uclinux533/uClinux-dist/linux-2.6.x/arch/blackfin/mach-common/irqpanic.c,v
184 retrieving revision 1.17
185 diff -u -p -r1.17 irqpanic.c
186 --- arch/blackfin/mach-common/irqpanic.c        3 Aug 2006 17:37:12 -0000       1.17
187 +++ arch/blackfin/mach-common/irqpanic.c        29 Aug 2006 20:35:23 -0000
188 @@ -36,15 +36,15 @@
189  
190  #include "../oprofile/op_blackfin.h"
191  
192 -/*********
193 - * irq_panic - calls panic with string setup
194 - *********/
195  #ifdef CONFIG_DEBUG_ICACHE_CHECK
196  #define L1_ICACHE_START 0xffa10000
197  #define L1_ICACHE_END   0xffa13fff
198  void irq_panic(int reason, struct pt_regs *regs) __attribute__ ((section (".text.l1")));
199  #endif
200  
201 +/*
202 + * irq_panic - calls panic with string setup
203 + */
204  asmlinkage void irq_panic(int reason, struct pt_regs *regs)
205  {
206         int sig = 0;
207 @@ -135,31 +135,30 @@ asmlinkage void irq_panic(int reason, st
208         printk(" stack frame=0x%04x,  ", (unsigned int)(unsigned long)regs);
209         printk(" bad PC=0x%04x\n", (unsigned int)regs->pc);
210         if (reason == 0x5) {
211 -
212                 printk("\n----------- HARDWARE ERROR -----------\n\n");
213  
214                 /* There is only need to check for Hardware Errors, since other
215                  * EXCEPTIONS are handled in TRAPS.c (MH)
216                  */
217 -               switch (((unsigned int)regs->seqstat) >> 14) {
218 -               case (0x2):     /* System MMR Error */
219 +               switch (regs->seqstat & SEQSTAT_HWERRCAUSE) {
220 +               case (SEQSTAT_HWERRCAUSE_SYSTEM_MMR):   /* System MMR Error */
221                         info.si_code = BUS_ADRALN;
222                         sig = SIGBUS;
223                         printk(HWC_x2);
224                         break;
225 -               case (0x3):     /* External Memory Addressing Error */
226 +               case (SEQSTAT_HWERRCAUSE_EXTERN_ADDR):  /* External Memory Addressing Error */
227                         info.si_code = BUS_ADRERR;
228                         sig = SIGBUS;
229 -                       printk(HWC_x3);
230 +                       printk(KERN_EMERG HWC_x3);
231                         break;
232 -               case (0x12):    /* Performance Monitor Overflow */
233 -                       printk(HWC_x12);
234 +               case (SEQSTAT_HWERRCAUSE_PERF_FLOW):    /* Performance Monitor Overflow */
235 +                       printk(KERN_EMERG HWC_x12);
236                         break;
237 -               case (0x18):    /* RAISE 5 instruction */
238 -                       printk(HWC_x18);
239 +               case (SEQSTAT_HWERRCAUSE_RAISE_5):      /* RAISE 5 instruction */
240 +                       printk(KERN_EMERG HWC_x18);
241                         break;
242                 default:        /* Reserved */
243 -                       printk(HWC_default);
244 +                       printk(KERN_EMERG HWC_default);
245                         break;
246                 }
247         }
248 @@ -176,11 +175,11 @@ asmlinkage void irq_panic(int reason, st
249  }
250  
251  #ifdef CONFIG_HARDWARE_PM
252 -/****
253 - *
254 - *   call the handler of Performance overflow
255 - ****/
256 -asmlinkage void pm_overflow(int irq, struct pt_regs *regs){
257 -       pm_overflow_handler(irq , regs);
258 +/*
259 + * call the handler of Performance overflow
260 + */
261 +asmlinkage void pm_overflow(int irq, struct pt_regs *regs)
262 +{
263 +       pm_overflow_handler(irq, regs);
264  }
265  #endif
266 Index: include/asm-blackfin/mach-common/def_LPBlackfin.h
267 ===================================================================
268 RCS file: /usr/local/src/blackfin/rsync/uclinux533/uClinux-dist/linux-2.6.x/include/asm-blackfin/mach-common/def_LPBlackfin.h,v
269 retrieving revision 1.11
270 diff -u -p -r1.11 def_LPBlackfin.h
271 --- include/asm-blackfin/mach-common/def_LPBlackfin.h   3 Aug 2006 14:36:27 -0000       1.11
272 +++ include/asm-blackfin/mach-common/def_LPBlackfin.h   29 Aug 2006 21:18:13 -0000
273 @@ -182,29 +182,35 @@
274  #define SEQSTAT_HWERRCAUSE2_P   0x00000010     /* Last hw error cause bit 2 */
275  #define SEQSTAT_HWERRCAUSE3_P   0x00000011     /* Last hw error cause bit 3 */
276  #define SEQSTAT_HWERRCAUSE4_P   0x00000012     /* Last hw error cause bit 4 */
277 -#define SEQSTAT_HWERRCAUSE5_P   0x00000013     /* Last hw error cause bit 5 */
278 -#define SEQSTAT_HWERRCAUSE6_P   0x00000014     /* Last hw error cause bit 6 */
279 -#define SEQSTAT_HWERRCAUSE7_P   0x00000015     /* Last hw error cause bit 7 */
280  /* Masks */
281  /* Exception cause */
282 -#define SEQSTAT_EXCAUSE        MK_BMSK_(SEQSTAT_EXCAUSE0_P ) | \
283 -                               MK_BMSK_(SEQSTAT_EXCAUSE1_P ) | \
284 -                               MK_BMSK_(SEQSTAT_EXCAUSE2_P ) | \
285 -                               MK_BMSK_(SEQSTAT_EXCAUSE3_P ) | \
286 -                               MK_BMSK_(SEQSTAT_EXCAUSE4_P ) | \
287 -                               MK_BMSK_(SEQSTAT_EXCAUSE5_P ) | \
288 -                               0
289 +#define SEQSTAT_EXCAUSE        (MK_BMSK_(SEQSTAT_EXCAUSE0_P) | \
290 +                                MK_BMSK_(SEQSTAT_EXCAUSE1_P) | \
291 +                                MK_BMSK_(SEQSTAT_EXCAUSE2_P) | \
292 +                                MK_BMSK_(SEQSTAT_EXCAUSE3_P) | \
293 +                                MK_BMSK_(SEQSTAT_EXCAUSE4_P) | \
294 +                                MK_BMSK_(SEQSTAT_EXCAUSE5_P) | \
295 +                                0)
296  
297  /* Indicates whether the last reset was a software reset (=1) */
298 -#define SEQSTAT_SFTRESET       MK_BMSK_(SEQSTAT_SFTRESET_P )
299 +#define SEQSTAT_SFTRESET       (MK_BMSK_(SEQSTAT_SFTRESET_P))
300  
301  /* Last hw error cause */
302 -#define SEQSTAT_HWERRCAUSE     MK_BMSK_(SEQSTAT_HWERRCAUSE0_P ) | \
303 -                               MK_BMSK_(SEQSTAT_HWERRCAUSE1_P ) | \
304 -                               MK_BMSK_(SEQSTAT_HWERRCAUSE2_P ) | \
305 -                               MK_BMSK_(SEQSTAT_HWERRCAUSE3_P ) | \
306 -                               MK_BMSK_(SEQSTAT_HWERRCAUSE4_P ) | \
307 -                               0
308 +#define SEQSTAT_HWERRCAUSE     (MK_BMSK_(SEQSTAT_HWERRCAUSE0_P) | \
309 +                                MK_BMSK_(SEQSTAT_HWERRCAUSE1_P) | \
310 +                                MK_BMSK_(SEQSTAT_HWERRCAUSE2_P) | \
311 +                                MK_BMSK_(SEQSTAT_HWERRCAUSE3_P) | \
312 +                                MK_BMSK_(SEQSTAT_HWERRCAUSE4_P) | \
313 +                                0)
314 +
315 +/* Translate bits to something useful */
316 +
317 +/* Last hw error cause */
318 +#define SEQSTAT_HWERRCAUSE_SHIFT         (14)
319 +#define SEQSTAT_HWERRCAUSE_SYSTEM_MMR    (0x02 << SEQSTAT_HWERRCAUSE_SHIFT)
320 +#define SEQSTAT_HWERRCAUSE_EXTERN_ADDR   (0x03 << SEQSTAT_HWERRCAUSE_SHIFT)
321 +#define SEQSTAT_HWERRCAUSE_PERF_FLOW     (0x12 << SEQSTAT_HWERRCAUSE_SHIFT)
322 +#define SEQSTAT_HWERRCAUSE_RAISE_5       (0x18 << SEQSTAT_HWERRCAUSE_SHIFT)
323  
324  /**************************************************
325   *   SYSCFG register