diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2014-02-27 07:42:37 -0500 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2014-03-21 20:06:58 -0400 |
| commit | 9f3ba4567e8d11de89673afea174d206ca9446f6 (patch) | |
| tree | 633f72622d418c84756b2fc5eaae0832caf2be40 | |
| parent | 1146b600044de64af0ef775025731eeef1fa2189 (diff) | |
ARM: tegra: make debug_ll code build for ARMv6
In a combined ARMv6/v7 kernel, we cannot use the
movt/movw instructions to load an immediate, as they
are not valid on ARMv6.
This changes the file to use an indirect load instead,
as lots of other implementations do.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Tested-by: Stephen Warren <swarren@wwwdotorg.org>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: linux-tegra@vger.kernel.org
| -rw-r--r-- | arch/arm/include/debug/tegra.S | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/arch/arm/include/debug/tegra.S b/arch/arm/include/debug/tegra.S index f98763f0bc17..3bc80599c022 100644 --- a/arch/arm/include/debug/tegra.S +++ b/arch/arm/include/debug/tegra.S | |||
| @@ -53,8 +53,7 @@ | |||
| 53 | 53 | ||
| 54 | #define checkuart(rp, rv, lhu, bit, uart) \ | 54 | #define checkuart(rp, rv, lhu, bit, uart) \ |
| 55 | /* Load address of CLK_RST register */ \ | 55 | /* Load address of CLK_RST register */ \ |
| 56 | movw rp, #TEGRA_CLK_RST_DEVICES_##lhu & 0xffff ; \ | 56 | ldr rp, =TEGRA_CLK_RST_DEVICES_##lhu ; \ |
| 57 | movt rp, #TEGRA_CLK_RST_DEVICES_##lhu >> 16 ; \ | ||
| 58 | /* Load value from CLK_RST register */ \ | 57 | /* Load value from CLK_RST register */ \ |
| 59 | ldr rp, [rp, #0] ; \ | 58 | ldr rp, [rp, #0] ; \ |
| 60 | /* Test UART's reset bit */ \ | 59 | /* Test UART's reset bit */ \ |
| @@ -62,8 +61,7 @@ | |||
| 62 | /* If set, can't use UART; jump to save no UART */ \ | 61 | /* If set, can't use UART; jump to save no UART */ \ |
| 63 | bne 90f ; \ | 62 | bne 90f ; \ |
| 64 | /* Load address of CLK_OUT_ENB register */ \ | 63 | /* Load address of CLK_OUT_ENB register */ \ |
| 65 | movw rp, #TEGRA_CLK_OUT_ENB_##lhu & 0xffff ; \ | 64 | ldr rp, =TEGRA_CLK_OUT_ENB_##lhu ; \ |
| 66 | movt rp, #TEGRA_CLK_OUT_ENB_##lhu >> 16 ; \ | ||
| 67 | /* Load value from CLK_OUT_ENB register */ \ | 65 | /* Load value from CLK_OUT_ENB register */ \ |
| 68 | ldr rp, [rp, #0] ; \ | 66 | ldr rp, [rp, #0] ; \ |
| 69 | /* Test UART's clock enable bit */ \ | 67 | /* Test UART's clock enable bit */ \ |
| @@ -71,8 +69,7 @@ | |||
| 71 | /* If clear, can't use UART; jump to save no UART */ \ | 69 | /* If clear, can't use UART; jump to save no UART */ \ |
| 72 | beq 90f ; \ | 70 | beq 90f ; \ |
| 73 | /* Passed all tests, load address of UART registers */ \ | 71 | /* Passed all tests, load address of UART registers */ \ |
| 74 | movw rp, #TEGRA_UART##uart##_BASE & 0xffff ; \ | 72 | ldr rp, =TEGRA_UART##uart##_BASE ; \ |
| 75 | movt rp, #TEGRA_UART##uart##_BASE >> 16 ; \ | ||
| 76 | /* Jump to save UART address */ \ | 73 | /* Jump to save UART address */ \ |
| 77 | b 91f | 74 | b 91f |
| 78 | 75 | ||
| @@ -90,15 +87,16 @@ | |||
| 90 | 87 | ||
| 91 | #ifdef CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA | 88 | #ifdef CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA |
| 92 | /* Check ODMDATA */ | 89 | /* Check ODMDATA */ |
| 93 | 10: movw \rp, #TEGRA_PMC_SCRATCH20 & 0xffff | 90 | 10: ldr \rp, =TEGRA_PMC_SCRATCH20 |
| 94 | movt \rp, #TEGRA_PMC_SCRATCH20 >> 16 | ||
| 95 | ldr \rp, [\rp, #0] @ Load PMC_SCRATCH20 | 91 | ldr \rp, [\rp, #0] @ Load PMC_SCRATCH20 |
| 96 | ubfx \rv, \rp, #18, #2 @ 19:18 are console type | 92 | lsr \rv, \rp, #18 @ 19:18 are console type |
| 93 | and \rv, \rv, #3 | ||
| 97 | cmp \rv, #2 @ 2 and 3 mean DCC, UART | 94 | cmp \rv, #2 @ 2 and 3 mean DCC, UART |
| 98 | beq 11f @ some boards swap the meaning | 95 | beq 11f @ some boards swap the meaning |
| 99 | cmp \rv, #3 @ so accept either | 96 | cmp \rv, #3 @ so accept either |
| 100 | bne 90f | 97 | bne 90f |
| 101 | 11: ubfx \rv, \rp, #15, #3 @ 17:15 are UART ID | 98 | 11: lsr \rv, \rp, #15 @ 17:15 are UART ID |
| 99 | and \rv, #7 | ||
| 102 | cmp \rv, #0 @ UART 0? | 100 | cmp \rv, #0 @ UART 0? |
| 103 | beq 20f | 101 | beq 20f |
| 104 | cmp \rv, #1 @ UART 1? | 102 | cmp \rv, #1 @ UART 1? |
