diff options
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_q | 110 |
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 @@ | |||
1 | Add extra debug for the q_d_w_o() when work fn is already active. | ||
2 | |||
3 | From: 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 | |||
14 | diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c | ||
15 | index 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) | ||
35 | diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c | ||
36 | index 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; | ||
66 | diff --git a/include/asm-arm/arch-omap/dmtimer.h b/include/asm-arm/arch-omap/dmtimer.h | ||
67 | index 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); | ||
78 | diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c | ||
79 | index 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 | |||