summaryrefslogtreecommitdiffstats
path: root/meta/recipes-kernel/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug_to_sysrq_q
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-kernel/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug_to_sysrq_q')
-rw-r--r--meta/recipes-kernel/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug_to_sysrq_q110
1 files changed, 110 insertions, 0 deletions
diff --git a/meta/recipes-kernel/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug_to_sysrq_q b/meta/recipes-kernel/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug_to_sysrq_q
new file mode 100644
index 0000000000..aa9f09811a
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-omap2-git/beagleboard/04-gptimer_add_debug_to_sysrq_q
@@ -0,0 +1,110 @@
1Add extra debug for the q_d_w_o() when work fn is already active.
2
3From: Paul Walmsley <paul@pwsan.com>
4
5
6---
7
8 arch/arm/mach-omap2/timer-gp.c | 3 ++-
9 arch/arm/plat-omap/dmtimer.c | 20 ++++++++++++++++++++
10 include/asm-arm/arch-omap/dmtimer.h | 1 +
11 kernel/time/timer_list.c | 8 ++++++++
12 4 files changed, 31 insertions(+), 1 deletions(-)
13
14diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
15index ce5c2b4..e3ed368 100644
16--- a/arch/arm/mach-omap2/timer-gp.c
17+++ b/arch/arm/mach-omap2/timer-gp.c
18@@ -50,6 +50,7 @@
19 #define GPTIMER_MATCH_VAL (0xffffffff - (32768/2))
20
21 static struct omap_dm_timer *gptimer;
22+struct omap_dm_timer *gptimer_pub;
23 static struct clock_event_device clockevent_gpt;
24
25 static u32 last_load;
26@@ -111,7 +112,7 @@ static void __init omap2_gp_clockevent_init(void)
27 {
28 u32 tick_rate;
29
30- gptimer = omap_dm_timer_request_specific(1);
31+ gptimer = gptimer_pub = omap_dm_timer_request_specific(1);
32 BUG_ON(gptimer == NULL);
33
34 #if defined(CONFIG_OMAP_32K_TIMER)
35diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
36index e38a11e..b10f8ac 100644
37--- a/arch/arm/plat-omap/dmtimer.c
38+++ b/arch/arm/plat-omap/dmtimer.c
39@@ -614,6 +614,26 @@ void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer,
40 omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG, value);
41 }
42
43+void omap_dm_timer_dump_int_enable(struct omap_dm_timer *timer)
44+{
45+ u32 l;
46+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_COUNTER_REG);
47+ pr_err("GPT TCRR: %08x\n", l);
48+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_MATCH_REG);
49+ pr_err("GPT TMAT: %08x\n", l);
50+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_STAT_REG);
51+ pr_err("GPT TISR: %08x\n", l);
52+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_INT_EN_REG);
53+ pr_err("GPT TIER: %08x\n", l);
54+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
55+ pr_err("GPT TCLR: %08x\n", l);
56+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_TICK_INT_MASK_SET_REG);
57+ pr_err("GPT TOCR: %08x\n", l);
58+ l = omap_dm_timer_read_reg(timer, OMAP_TIMER_TICK_INT_MASK_COUNT_REG);
59+ pr_err("GPT TOWR: %08x\n", l);
60+}
61+
62+
63 unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer)
64 {
65 unsigned int l;
66diff --git a/include/asm-arm/arch-omap/dmtimer.h b/include/asm-arm/arch-omap/dmtimer.h
67index 02b29e8..a8123e9 100644
68--- a/include/asm-arm/arch-omap/dmtimer.h
69+++ b/include/asm-arm/arch-omap/dmtimer.h
70@@ -73,6 +73,7 @@ void omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler);
71
72 void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value);
73
74+void omap_dm_timer_dump_int_enable(struct omap_dm_timer *timer);
75 unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer);
76 void omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value);
77 unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer);
78diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
79index a40e20f..452eab7 100644
80--- a/kernel/time/timer_list.c
81+++ b/kernel/time/timer_list.c
82@@ -18,6 +18,8 @@
83 #include <linux/kallsyms.h>
84 #include <linux/tick.h>
85
86+#include <asm/arch/dmtimer.h>
87+
88 #include <asm/uaccess.h>
89
90 typedef void (*print_fn_t)(struct seq_file *m, unsigned int *classes);
91@@ -239,6 +241,8 @@ static void timer_list_show_tickdevices(struct seq_file *m)
92 static void timer_list_show_tickdevices(struct seq_file *m) { }
93 #endif
94
95+extern struct omap_dm_timer *gptimer_pub;
96+
97 static int timer_list_show(struct seq_file *m, void *v)
98 {
99 u64 now = ktime_to_ns(ktime_get());
100@@ -254,6 +258,10 @@ static int timer_list_show(struct seq_file *m, void *v)
101 SEQ_printf(m, "\n");
102 timer_list_show_tickdevices(m);
103
104+ SEQ_printf(m, "\n");
105+
106+ omap_dm_timer_dump_int_enable(gptimer_pub);
107+
108 return 0;
109 }
110