Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: tegra: don't include iomap.h from debug-macro.S

In order to move Tegra's debug-macro.S to a common location for single
zImage, it must not rely on any machine-specific header files such as
<mach/iomap.h>. Duplicate the few physical address definitions that
debug-macro.S relies upon directly into the file.

To avoid tegra_io_desc[] requiring shared knowledge of the UART
mapping's virtual address, use a virtual address outside the ranges
in tegra_io_desc[]. Call debug_ll_io_init() to propagate the mapping
beyond the early pages tables.

Signed-off-by: Stephen Warren <swarren@nvidia.com>

+20 -5
+19 -5
arch/arm/mach-tegra/include/mach/debug-macro.S
··· 26 26 27 27 #include <linux/serial_reg.h> 28 28 29 - #include "../../iomap.h" 30 - 31 29 #define UART_SHIFT 2 30 + 31 + /* Physical addresses */ 32 + #define TEGRA_CLK_RESET_BASE 0x60006000 33 + #define TEGRA_APB_MISC_BASE 0x70000000 34 + #define TEGRA_UARTA_BASE 0x70006000 35 + #define TEGRA_UARTB_BASE 0x70006040 36 + #define TEGRA_UARTC_BASE 0x70006200 37 + #define TEGRA_UARTD_BASE 0x70006300 38 + #define TEGRA_UARTE_BASE 0x70006400 39 + #define TEGRA_PMC_BASE 0x7000e400 32 40 33 41 #define TEGRA_CLK_RST_DEVICES_L (TEGRA_CLK_RESET_BASE + 0x04) 34 42 #define TEGRA_CLK_RST_DEVICES_H (TEGRA_CLK_RESET_BASE + 0x08) ··· 46 38 #define TEGRA_CLK_OUT_ENB_U (TEGRA_CLK_RESET_BASE + 0x18) 47 39 #define TEGRA_PMC_SCRATCH20 (TEGRA_PMC_BASE + 0xa0) 48 40 #define TEGRA_APB_MISC_GP_HIDREV (TEGRA_APB_MISC_BASE + 0x804) 41 + 42 + /* 43 + * Must be 1MB-aligned since a 1MB mapping is used early on. 44 + * Must not overlap with regions in mach-tegra/io.c:tegra_io_desc[]. 45 + */ 46 + #define UART_VIRTUAL_BASE 0xfe100000 49 47 50 48 #define checkuart(rp, rv, lhu, bit, uart) \ 51 49 /* Load address of CLK_RST register */ \ ··· 153 139 91: str \rp, [\tmp, #4] @ Store in tegra_uart_phys 154 140 cmp \rp, #0 @ Valid UART address? 155 141 bne 92f @ Yes, go process it 156 - str \rp, [\tmp, #8] @ Store 0 in tegra_uart_phys 142 + str \rp, [\tmp, #8] @ Store 0 in tegra_uart_virt 157 143 b 100f @ Done 158 - 92: sub \rv, \rp, #IO_APB_PHYS @ Calculate virt address 159 - add \rv, \rv, #IO_APB_VIRT 144 + 92: and \rv, \rp, #0xffffff @ offset within 1MB section 145 + add \rv, \rv, #UART_VIRTUAL_BASE 160 146 str \rv, [\tmp, #8] @ Store in tegra_uart_virt 161 147 movw \rv, #TEGRA_APB_MISC_GP_HIDREV & 0xffff 162 148 movt \rv, #TEGRA_APB_MISC_GP_HIDREV >> 16
+1
arch/arm/mach-tegra/io.c
··· 59 59 60 60 void __init tegra_map_common_io(void) 61 61 { 62 + debug_ll_io_init(); 62 63 iotable_init(tegra_io_desc, ARRAY_SIZE(tegra_io_desc)); 63 64 }