summaryrefslogtreecommitdiffstats
path: root/target/linux/atheros/patches-2.6.32/002-mips_clocksource_init_war.patch
blob: 3f9970f99066e92c3d49de4e8fbdef24e6c1b3d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Index: linux-2.6.32.7/arch/mips/kernel/cevt-r4k.c
===================================================================
--- linux-2.6.32.7.orig/arch/mips/kernel/cevt-r4k.c	2010-02-03 16:59:28.310430064 +0100
+++ linux-2.6.32.7/arch/mips/kernel/cevt-r4k.c	2010-02-03 16:59:54.578430015 +0100
@@ -16,6 +16,22 @@
 #include <asm/cevt-r4k.h>
 
 /*
+ * Compare interrupt can be routed and latched outside the core,
+ * so a single execution hazard barrier may not be enough to give
+ * it time to clear as seen in the Cause register.  4 time the
+ * pipeline depth seems reasonably conservative, and empirically
+ * works better in configurations with high CPU/bus clock ratios.
+ */
+
+#define compare_change_hazard() \
+	do { \
+		irq_disable_hazard(); \
+		irq_disable_hazard(); \
+		irq_disable_hazard(); \
+		irq_disable_hazard(); \
+	} while (0)
+
+/*
  * The SMTC Kernel for the 34K, 1004K, et. al. replaces several
  * of these routines with SMTC-specific variants.
  */
@@ -31,6 +47,7 @@
 	cnt = read_c0_count();
 	cnt += delta;
 	write_c0_compare(cnt);
+	compare_change_hazard();
 	res = ((int)(read_c0_count() - cnt) > 0) ? -ETIME : 0;
 	return res;
 }
@@ -100,22 +117,6 @@
 	return (read_c0_cause() >> cp0_compare_irq) & 0x100;
 }
 
-/*
- * Compare interrupt can be routed and latched outside the core,
- * so a single execution hazard barrier may not be enough to give
- * it time to clear as seen in the Cause register.  4 time the
- * pipeline depth seems reasonably conservative, and empirically
- * works better in configurations with high CPU/bus clock ratios.
- */
-
-#define compare_change_hazard() \
-	do { \
-		irq_disable_hazard(); \
-		irq_disable_hazard(); \
-		irq_disable_hazard(); \
-		irq_disable_hazard(); \
-	} while (0)
-
 int c0_compare_int_usable(void)
 {
 	unsigned int delta;