I think this patch is roughly what's needed to fix the ARM cache coherency 
problem.

Branden, could you also turn loader debugging off again for arm in the next 
package version?

Thanks

p.

--- xc/programs/Xserver/hw/xfree86/common/compiler.h.old        Wed Oct 31 
11:08:16 2001
+++ xc/programs/Xserver/hw/xfree86/common/compiler.h    Wed Oct 31 11:15:43 2001
@@ -1211,6 +1211,16 @@
     outl(val, port);
 }
 
+#define arm_flush_cache(addr)                                          \
+do {                                                                   \
+  register unsigned long _beg __asm ("a1") = (unsigned long) (addr);   \
+  register unsigned long _end __asm ("a2") = (unsigned long) (addr) + 4;\
+  register unsigned long _flg __asm ("a3") = 0;                                
\
+  __asm __volatile ("swi 0x9f0002              @ sys_cacheflush"       \
+    : "=r" (_beg)                                                      \
+    : "0" (_beg), "r" (_end), "r" (_flg));                             \
+} while (0)
+
 #else /* ix86 */
 
 #define ldq_u(p)       (*((unsigned long  *)(p)))
--- xc/programs/Xserver/hw/xfree86/loader/elfloader.c.old       Wed Oct 31 
11:08:17 2001
+++ xc/programs/Xserver/hw/xfree86/loader/elfloader.c   Wed Oct 31 11:15:38 2001
@@ -2077,6 +2077,7 @@
             val = symval - (unsigned long)dest32 + val;        
             val >>= 2;
            *dest32 = (*dest32 & 0xff000000) | (val & 0x00ffffff); 
+           arm_flush_cache(dest32);
            }
            break;
 


Reply via email to