aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2013-04-14 23:53:45 -0400
committerOlof Johansson <olof@lixom.net>2013-04-14 23:53:53 -0400
commit6e527d000f7e49a66618dd98c30e6b8711e91de5 (patch)
tree8ea938c7d99de4bd3bcba1a8b13297f953acfe37
parentaf073c34f3877c6a1e1bc6e820688f6c0084b3d3 (diff)
parent73a8c28f167c9e7bc42eafc0bcbd298031709430 (diff)
Merge tag 'msm-fix-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm into next/fixes-non-critical
From David Brown: Some minor fixes for MSM for 3.10 - Fix a timer problem that causes missed ticks and hangs. - Fix a problem with the decompressor UART dropping characters. * tag 'msm-fix-3.10' of git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm: ARM: msm: Fix uncompess.h tx underrun check ARM: msm: Stop counting before reprogramming clockevent Signed-off-by: Olof Johansson <olof@lixom.net>
-rw-r--r--arch/arm/mach-msm/include/mach/uncompress.h2
-rw-r--r--arch/arm/mach-msm/timer.c5
2 files changed, 5 insertions, 2 deletions
diff --git a/arch/arm/mach-msm/include/mach/uncompress.h b/arch/arm/mach-msm/include/mach/uncompress.h
index fa97a10d8695..94324870fb04 100644
--- a/arch/arm/mach-msm/include/mach/uncompress.h
+++ b/arch/arm/mach-msm/include/mach/uncompress.h
@@ -37,7 +37,7 @@ static void putc(int c)
37 * Wait for TX_READY to be set; but skip it if we have a 37 * Wait for TX_READY to be set; but skip it if we have a
38 * TX underrun. 38 * TX underrun.
39 */ 39 */
40 if (UART_DM_SR & 0x08) 40 if (!(UART_DM_SR & 0x08))
41 while (!(UART_DM_ISR & 0x80)) 41 while (!(UART_DM_ISR & 0x80))
42 cpu_relax(); 42 cpu_relax();
43 43
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
index 2969027f02fa..f9fd77e8f1f5 100644
--- a/arch/arm/mach-msm/timer.c
+++ b/arch/arm/mach-msm/timer.c
@@ -62,7 +62,10 @@ static int msm_timer_set_next_event(unsigned long cycles,
62{ 62{
63 u32 ctrl = readl_relaxed(event_base + TIMER_ENABLE); 63 u32 ctrl = readl_relaxed(event_base + TIMER_ENABLE);
64 64
65 writel_relaxed(0, event_base + TIMER_CLEAR); 65 ctrl &= ~TIMER_ENABLE_EN;
66 writel_relaxed(ctrl, event_base + TIMER_ENABLE);
67
68 writel_relaxed(ctrl, event_base + TIMER_CLEAR);
66 writel_relaxed(cycles, event_base + TIMER_MATCH_VAL); 69 writel_relaxed(cycles, event_base + TIMER_MATCH_VAL);
67 writel_relaxed(ctrl | TIMER_ENABLE_EN, event_base + TIMER_ENABLE); 70 writel_relaxed(ctrl | TIMER_ENABLE_EN, event_base + TIMER_ENABLE);
68 return 0; 71 return 0;