| From 8c38d28ba8da98f7102c31d35359b4dbe9d1f329 Mon Sep 17 00:00:00 2001 |
| From: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> |
| Date: Wed, 22 Oct 2014 03:37:08 +0200 |
| Subject: clocksource: exynos_mct: Fix bitmask regression for exynos4_mct_write |
| |
| From: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> |
| |
| commit 8c38d28ba8da98f7102c31d35359b4dbe9d1f329 upstream. |
| |
| EXYNOS4_MCT_L_MASK is defined as 0xffffff00, so applying this bitmask |
| produces a number outside the range 0x00 to 0xff, which always results |
| in execution of the default switch statement. |
| |
| Obviously this is wrong and git history shows that the bitmask inversion |
| was incorrectly set during a refactoring of the MCT code. |
| |
| Fix this by putting the inversion at the correct position again. |
| |
| Acked-by: Kukjin Kim <kgene.kim@samsung.com> |
| Reported-by: GP Orcullo <kinsamanka@gmail.com> |
| Reviewed-by: Doug Anderson <dianders@chromium.org> |
| Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de> |
| Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/clocksource/exynos_mct.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/clocksource/exynos_mct.c |
| +++ b/drivers/clocksource/exynos_mct.c |
| @@ -94,8 +94,8 @@ static void exynos4_mct_write(unsigned i |
| __raw_writel(value, reg_base + offset); |
| |
| if (likely(offset >= EXYNOS4_MCT_L_BASE(0))) { |
| - stat_addr = (offset & ~EXYNOS4_MCT_L_MASK) + MCT_L_WSTAT_OFFSET; |
| - switch (offset & EXYNOS4_MCT_L_MASK) { |
| + stat_addr = (offset & EXYNOS4_MCT_L_MASK) + MCT_L_WSTAT_OFFSET; |
| + switch (offset & ~EXYNOS4_MCT_L_MASK) { |
| case MCT_L_TCON_OFFSET: |
| mask = 1 << 3; /* L_TCON write status */ |
| break; |