diff options
| -rw-r--r-- | arch/arm/Kconfig | 19 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/Kconfig | 27 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/Makefile.boot | 3 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/include/mach/timex.h | 26 | ||||
| -rw-r--r-- | arch/arm/mach-tegra/include/mach/uncompress.h | 175 |
5 files changed, 20 insertions, 230 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 59b7be794582..f6dfe23eb57d 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -663,25 +663,6 @@ config ARCH_LPC32XX | |||
| 663 | help | 663 | help |
| 664 | Support for the NXP LPC32XX family of processors | 664 | Support for the NXP LPC32XX family of processors |
| 665 | 665 | ||
| 666 | config ARCH_TEGRA | ||
| 667 | bool "NVIDIA Tegra" | ||
| 668 | select ARCH_HAS_CPUFREQ | ||
| 669 | select ARCH_REQUIRE_GPIOLIB | ||
| 670 | select CLKDEV_LOOKUP | ||
| 671 | select CLKSRC_MMIO | ||
| 672 | select CLKSRC_OF | ||
| 673 | select COMMON_CLK | ||
| 674 | select GENERIC_CLOCKEVENTS | ||
| 675 | select HAVE_CLK | ||
| 676 | select HAVE_SMP | ||
| 677 | select MIGHT_HAVE_CACHE_L2X0 | ||
| 678 | select SOC_BUS | ||
| 679 | select SPARSE_IRQ | ||
| 680 | select USE_OF | ||
| 681 | help | ||
| 682 | This enables support for NVIDIA Tegra based systems (Tegra APX, | ||
| 683 | Tegra 6xx and Tegra 2 series). | ||
| 684 | |||
| 685 | config ARCH_PXA | 666 | config ARCH_PXA |
| 686 | bool "PXA2xx/PXA3xx-based" | 667 | bool "PXA2xx/PXA3xx-based" |
| 687 | depends on MMU | 668 | depends on MMU |
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig index d1c4893894ce..df99ee93030a 100644 --- a/arch/arm/mach-tegra/Kconfig +++ b/arch/arm/mach-tegra/Kconfig | |||
| @@ -1,13 +1,28 @@ | |||
| 1 | if ARCH_TEGRA | 1 | config ARCH_TEGRA |
| 2 | bool "NVIDIA Tegra" if ARCH_MULTI_V7 | ||
| 3 | select ARCH_HAS_CPUFREQ | ||
| 4 | select ARCH_REQUIRE_GPIOLIB | ||
| 5 | select CLKDEV_LOOKUP | ||
| 6 | select CLKSRC_MMIO | ||
| 7 | select CLKSRC_OF | ||
| 8 | select COMMON_CLK | ||
| 9 | select GENERIC_CLOCKEVENTS | ||
| 10 | select HAVE_CLK | ||
| 11 | select HAVE_SMP | ||
| 12 | select MIGHT_HAVE_CACHE_L2X0 | ||
| 13 | select SOC_BUS | ||
| 14 | select SPARSE_IRQ | ||
| 15 | select USE_OF | ||
| 16 | help | ||
| 17 | This enables support for NVIDIA Tegra based systems. | ||
| 2 | 18 | ||
| 3 | comment "NVIDIA Tegra options" | 19 | menu "NVIDIA Tegra options" |
| 20 | depends on ARCH_TEGRA | ||
| 4 | 21 | ||
| 5 | config ARCH_TEGRA_2x_SOC | 22 | config ARCH_TEGRA_2x_SOC |
| 6 | bool "Enable support for Tegra20 family" | 23 | bool "Enable support for Tegra20 family" |
| 7 | select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP | 24 | select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP |
| 8 | select ARM_ERRATA_720789 | 25 | select ARM_ERRATA_720789 |
| 9 | select ARM_ERRATA_742230 if SMP | ||
| 10 | select ARM_ERRATA_751472 | ||
| 11 | select ARM_ERRATA_754327 if SMP | 26 | select ARM_ERRATA_754327 if SMP |
| 12 | select ARM_ERRATA_764369 if SMP | 27 | select ARM_ERRATA_764369 if SMP |
| 13 | select ARM_GIC | 28 | select ARM_GIC |
| @@ -26,8 +41,6 @@ config ARCH_TEGRA_2x_SOC | |||
| 26 | 41 | ||
| 27 | config ARCH_TEGRA_3x_SOC | 42 | config ARCH_TEGRA_3x_SOC |
| 28 | bool "Enable support for Tegra30 family" | 43 | bool "Enable support for Tegra30 family" |
| 29 | select ARM_ERRATA_743622 | ||
| 30 | select ARM_ERRATA_751472 | ||
| 31 | select ARM_ERRATA_754322 | 44 | select ARM_ERRATA_754322 |
| 32 | select ARM_ERRATA_764369 if SMP | 45 | select ARM_ERRATA_764369 if SMP |
| 33 | select ARM_GIC | 46 | select ARM_GIC |
| @@ -71,4 +84,4 @@ config TEGRA_AHB | |||
| 71 | config TEGRA_EMC_SCALING_ENABLE | 84 | config TEGRA_EMC_SCALING_ENABLE |
| 72 | bool "Enable scaling the memory frequency" | 85 | bool "Enable scaling the memory frequency" |
| 73 | 86 | ||
| 74 | endif | 87 | endmenu |
diff --git a/arch/arm/mach-tegra/Makefile.boot b/arch/arm/mach-tegra/Makefile.boot deleted file mode 100644 index 29433816233c..000000000000 --- a/arch/arm/mach-tegra/Makefile.boot +++ /dev/null | |||
| @@ -1,3 +0,0 @@ | |||
| 1 | zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC) += 0x00008000 | ||
| 2 | params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00000100 | ||
| 3 | initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC) := 0x00800000 | ||
diff --git a/arch/arm/mach-tegra/include/mach/timex.h b/arch/arm/mach-tegra/include/mach/timex.h deleted file mode 100644 index a44ccbdb7dbf..000000000000 --- a/arch/arm/mach-tegra/include/mach/timex.h +++ /dev/null | |||
| @@ -1,26 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-tegra/include/mach/timex.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Google, Inc. | ||
| 5 | * | ||
| 6 | * Author: | ||
| 7 | * Colin Cross <ccross@google.com> | ||
| 8 | * Erik Gilling <konkers@google.com> | ||
| 9 | * | ||
| 10 | * This software is licensed under the terms of the GNU General Public | ||
| 11 | * License version 2, as published by the Free Software Foundation, and | ||
| 12 | * may be copied, distributed, and modified under those terms. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, | ||
| 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 17 | * GNU General Public License for more details. | ||
| 18 | * | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef __MACH_TEGRA_TIMEX_H | ||
| 22 | #define __MACH_TEGRA_TIMEX_H | ||
| 23 | |||
| 24 | #define CLOCK_TICK_RATE 1000000 | ||
| 25 | |||
| 26 | #endif | ||
diff --git a/arch/arm/mach-tegra/include/mach/uncompress.h b/arch/arm/mach-tegra/include/mach/uncompress.h deleted file mode 100644 index 08386418196f..000000000000 --- a/arch/arm/mach-tegra/include/mach/uncompress.h +++ /dev/null | |||
| @@ -1,175 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-tegra/include/mach/uncompress.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2010 Google, Inc. | ||
| 5 | * Copyright (C) 2011 Google, Inc. | ||
| 6 | * Copyright (C) 2011-2012 NVIDIA CORPORATION. All Rights Reserved. | ||
| 7 | * | ||
| 8 | * Author: | ||
| 9 | * Colin Cross <ccross@google.com> | ||
| 10 | * Erik Gilling <konkers@google.com> | ||
| 11 | * Doug Anderson <dianders@chromium.org> | ||
| 12 | * Stephen Warren <swarren@nvidia.com> | ||
| 13 | * | ||
| 14 | * This software is licensed under the terms of the GNU General Public | ||
| 15 | * License version 2, as published by the Free Software Foundation, and | ||
| 16 | * may be copied, distributed, and modified under those terms. | ||
| 17 | * | ||
| 18 | * This program is distributed in the hope that it will be useful, | ||
| 19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 21 | * GNU General Public License for more details. | ||
| 22 | * | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef __MACH_TEGRA_UNCOMPRESS_H | ||
| 26 | #define __MACH_TEGRA_UNCOMPRESS_H | ||
| 27 | |||
| 28 | #include <linux/types.h> | ||
| 29 | #include <linux/serial_reg.h> | ||
| 30 | |||
| 31 | #include "../../iomap.h" | ||
| 32 | |||
| 33 | #define BIT(x) (1 << (x)) | ||
| 34 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) | ||
| 35 | |||
| 36 | #define DEBUG_UART_SHIFT 2 | ||
| 37 | |||
| 38 | volatile u8 *uart; | ||
| 39 | |||
| 40 | static void putc(int c) | ||
| 41 | { | ||
| 42 | if (uart == NULL) | ||
| 43 | return; | ||
| 44 | |||
| 45 | while (!(uart[UART_LSR << DEBUG_UART_SHIFT] & UART_LSR_THRE)) | ||
| 46 | barrier(); | ||
| 47 | uart[UART_TX << DEBUG_UART_SHIFT] = c; | ||
| 48 | } | ||
| 49 | |||
| 50 | static inline void flush(void) | ||
| 51 | { | ||
| 52 | } | ||
| 53 | |||
| 54 | static const struct { | ||
| 55 | u32 base; | ||
| 56 | u32 reset_reg; | ||
| 57 | u32 clock_reg; | ||
| 58 | u32 bit; | ||
| 59 | } uarts[] = { | ||
| 60 | { | ||
| 61 | TEGRA_UARTA_BASE, | ||
| 62 | TEGRA_CLK_RESET_BASE + 0x04, | ||
| 63 | TEGRA_CLK_RESET_BASE + 0x10, | ||
| 64 | 6, | ||
| 65 | }, | ||
| 66 | { | ||
| 67 | TEGRA_UARTB_BASE, | ||
| 68 | TEGRA_CLK_RESET_BASE + 0x04, | ||
| 69 | TEGRA_CLK_RESET_BASE + 0x10, | ||
| 70 | 7, | ||
| 71 | }, | ||
| 72 | { | ||
| 73 | TEGRA_UARTC_BASE, | ||
| 74 | TEGRA_CLK_RESET_BASE + 0x08, | ||
| 75 | TEGRA_CLK_RESET_BASE + 0x14, | ||
| 76 | 23, | ||
| 77 | }, | ||
| 78 | { | ||
| 79 | TEGRA_UARTD_BASE, | ||
| 80 | TEGRA_CLK_RESET_BASE + 0x0c, | ||
| 81 | TEGRA_CLK_RESET_BASE + 0x18, | ||
| 82 | 1, | ||
| 83 | }, | ||
| 84 | { | ||
| 85 | TEGRA_UARTE_BASE, | ||
| 86 | TEGRA_CLK_RESET_BASE + 0x0c, | ||
| 87 | TEGRA_CLK_RESET_BASE + 0x18, | ||
| 88 | 2, | ||
| 89 | }, | ||
| 90 | }; | ||
| 91 | |||
| 92 | static inline bool uart_clocked(int i) | ||
| 93 | { | ||
| 94 | if (*(u8 *)uarts[i].reset_reg & BIT(uarts[i].bit)) | ||
| 95 | return false; | ||
| 96 | |||
| 97 | if (!(*(u8 *)uarts[i].clock_reg & BIT(uarts[i].bit))) | ||
| 98 | return false; | ||
| 99 | |||
| 100 | return true; | ||
| 101 | } | ||
| 102 | |||
| 103 | #ifdef CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA | ||
| 104 | int auto_odmdata(void) | ||
| 105 | { | ||
| 106 | volatile u32 *pmc = (volatile u32 *)TEGRA_PMC_BASE; | ||
| 107 | u32 odmdata = pmc[0xa0 / 4]; | ||
| 108 | |||
| 109 | /* | ||
| 110 | * Bits 19:18 are the console type: 0=default, 1=none, 2==DCC, 3==UART | ||
| 111 | * Some boards apparently swap the last two values, but we don't have | ||
| 112 | * any way of catering for that here, so we just accept either. If this | ||
| 113 | * doesn't make sense for your board, just don't enable this feature. | ||
| 114 | * | ||
| 115 | * Bits 17:15 indicate the UART to use, 0/1/2/3/4 are UART A/B/C/D/E. | ||
| 116 | */ | ||
| 117 | |||
| 118 | switch ((odmdata >> 18) & 3) { | ||
| 119 | case 2: | ||
| 120 | case 3: | ||
| 121 | break; | ||
| 122 | default: | ||
| 123 | return -1; | ||
| 124 | } | ||
| 125 | |||
| 126 | return (odmdata >> 15) & 7; | ||
| 127 | } | ||
| 128 | #endif | ||
| 129 | |||
| 130 | /* | ||
| 131 | * Setup before decompression. This is where we do UART selection for | ||
| 132 | * earlyprintk and init the uart_base register. | ||
| 133 | */ | ||
| 134 | static inline void arch_decomp_setup(void) | ||
| 135 | { | ||
| 136 | int uart_id; | ||
| 137 | volatile u32 *apb_misc = (volatile u32 *)TEGRA_APB_MISC_BASE; | ||
| 138 | u32 chip, div; | ||
| 139 | |||
| 140 | #if defined(CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA) | ||
| 141 | uart_id = auto_odmdata(); | ||
| 142 | #elif defined(CONFIG_TEGRA_DEBUG_UARTA) | ||
| 143 | uart_id = 0; | ||
| 144 | #elif defined(CONFIG_TEGRA_DEBUG_UARTB) | ||
| 145 | uart_id = 1; | ||
| 146 | #elif defined(CONFIG_TEGRA_DEBUG_UARTC) | ||
| 147 | uart_id = 2; | ||
| 148 | #elif defined(CONFIG_TEGRA_DEBUG_UARTD) | ||
| 149 | uart_id = 3; | ||
| 150 | #elif defined(CONFIG_TEGRA_DEBUG_UARTE) | ||
| 151 | uart_id = 4; | ||
| 152 | #endif | ||
| 153 | |||
| 154 | if (uart_id < 0 || uart_id >= ARRAY_SIZE(uarts) || | ||
| 155 | !uart_clocked(uart_id)) | ||
| 156 | uart = NULL; | ||
| 157 | else | ||
| 158 | uart = (volatile u8 *)uarts[uart_id].base; | ||
| 159 | |||
| 160 | if (uart == NULL) | ||
| 161 | return; | ||
| 162 | |||
| 163 | chip = (apb_misc[0x804 / 4] >> 8) & 0xff; | ||
| 164 | if (chip == 0x20) | ||
| 165 | div = 0x0075; | ||
| 166 | else | ||
| 167 | div = 0x00dd; | ||
| 168 | |||
| 169 | uart[UART_LCR << DEBUG_UART_SHIFT] |= UART_LCR_DLAB; | ||
| 170 | uart[UART_DLL << DEBUG_UART_SHIFT] = div & 0xff; | ||
| 171 | uart[UART_DLM << DEBUG_UART_SHIFT] = div >> 8; | ||
| 172 | uart[UART_LCR << DEBUG_UART_SHIFT] = 3; | ||
| 173 | } | ||
| 174 | |||
| 175 | #endif | ||
