aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/lockdown.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/lockdown.c')
-rw-r--r--litmus/lockdown.c83
1 files changed, 56 insertions, 27 deletions
diff --git a/litmus/lockdown.c b/litmus/lockdown.c
index f1da7b4145d..bd24b5839bc 100644
--- a/litmus/lockdown.c
+++ b/litmus/lockdown.c
@@ -9,16 +9,70 @@
9#include <linux/math64.h> 9#include <linux/math64.h>
10#include <linux/vmalloc.h> 10#include <linux/vmalloc.h>
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/sched.h>
12 13
14#include <litmus/litmus.h>
13#include <litmus/clock.h> 15#include <litmus/clock.h>
14 16
17#ifdef CONFIG_CPU_V7
15#include <asm/hardware/cache-l2x0.h> 18#include <asm/hardware/cache-l2x0.h>
16#include <asm/cacheflush.h> 19#include <asm/cacheflush.h>
20#endif
17 21
18#include <litmus/color.h> 22#include <litmus/color.h>
19#include <litmus/debug_trace.h> 23#include <litmus/debug_trace.h>
20#include <litmus/lockdown.h> 24#include <litmus/lockdown.h>
21 25
26
27#define MAX_NR_WAYS 16
28
29/*
30 * unlocked_way[i] : allocation can occur in way i
31 *
32 * 0 = allocation can occur in the corresponding way
33 * 1 = allocation cannot occur in the corresponding way
34 */
35u32 unlocked_way[MAX_NR_WAYS] = {
36 0xFFFFFFFE, /* way 0 unlocked */
37 0xFFFFFFFD,
38 0xFFFFFFFB,
39 0xFFFFFFF7,
40 0xFFFFFFEF, /* way 4 unlocked */
41 0xFFFFFFDF,
42 0xFFFFFFBF,
43 0xFFFFFF7F,
44 0xFFFFFEFF, /* way 8 unlocked */
45 0xFFFFFDFF,
46 0xFFFFFBFF,
47 0xFFFFF7FF,
48 0xFFFFEFFF, /* way 12 unlocked */
49 0xFFFFDFFF,
50 0xFFFFBFFF,
51 0xFFFF7FFF,
52};
53
54#ifndef CONFIG_CPU_V7
55u32 color_read_in_mem(u32 lock_val, u32 unlock_val, void *start, void *end)
56{
57 TRACE_CUR("Dummy read_in_mem: lock_val: 0x%x unlock_val: 0x%x "
58 "start: 0x%p end: 0x%p\n", lock_val, unlock_val,
59 start, end);
60 return 0;
61}
62
63void set_lockdown(u32 lockdown_state)
64{
65 TRACE_CUR("Dummy set_lockdown function lockdown_state: 0x%x\n",
66 lockdown_state);
67}
68
69void litmus_setup_lockdown(void __iomem *base, u32 id)
70{
71 printk("LITMUS^RT Dummy Lockdown\n");
72}
73
74#else
75
22static void __iomem *cache_base; 76static void __iomem *cache_base;
23static void __iomem *lockreg_d; 77static void __iomem *lockreg_d;
24static void __iomem *lockreg_i; 78static void __iomem *lockreg_i;
@@ -38,8 +92,6 @@ struct mutex lockdown_proc;
38 void __iomem *__v = cache_base + L2X0_LOCKDOWN_WAY_I_BASE + \ 92 void __iomem *__v = cache_base + L2X0_LOCKDOWN_WAY_I_BASE + \
39 __cpu * L2X0_LOCKDOWN_STRIDE; __v; }) 93 __cpu * L2X0_LOCKDOWN_STRIDE; __v; })
40 94
41#define MAX_NR_WAYS 16
42
43void set_lockdown(u32 lockdown_state) 95void set_lockdown(u32 lockdown_state)
44{ 96{
45 writel_relaxed(lockdown_state, lockreg_d); 97 writel_relaxed(lockdown_state, lockreg_d);
@@ -91,31 +143,6 @@ void color_flush_page(void *vaddr)
91 v7_flush_kern_dcache_area(vaddr, PAGE_SIZE); 143 v7_flush_kern_dcache_area(vaddr, PAGE_SIZE);
92} 144}
93 145
94/*
95 * unlocked_way[i] : allocation can occur in way i
96 *
97 * 0 = allocation can occur in the corresponding way
98 * 1 = allocation cannot occur in the corresponding way
99 */
100u32 unlocked_way[MAX_NR_WAYS] = {
101 0xFFFFFFFE, /* way 0 unlocked */
102 0xFFFFFFFD,
103 0xFFFFFFFB,
104 0xFFFFFFF7,
105 0xFFFFFFEF, /* way 4 unlocked */
106 0xFFFFFFDF,
107 0xFFFFFFBF,
108 0xFFFFFF7F,
109 0xFFFFFEFF, /* way 8 unlocked */
110 0xFFFFFDFF,
111 0xFFFFFBFF,
112 0xFFFFF7FF,
113 0xFFFFEFFF, /* way 12 unlocked */
114 0xFFFFDFFF,
115 0xFFFFBFFF,
116 0xFFFF7FFF,
117};
118
119static void print_lockdown_registers(void) 146static void print_lockdown_registers(void)
120{ 147{
121 int i; 148 int i;
@@ -641,3 +668,5 @@ void litmus_setup_lockdown(void __iomem *base, u32 id)
641 668
642 test_lockdown(NULL); 669 test_lockdown(NULL);
643} 670}
671
672#endif