linux/arch/arm/mach-tegra
Stephen Warren 80881dae52 ARM: tegra: uncompress.h: Implement TEGRA_DEBUG_UART_AUTO_ODMDATA
Tegra has 5 UARTS which could be used for low-level debug output. Commit
fe26398 "ARM: tegra: uncompress.h: Choose a UART at runtime" implemented
one method for the kernel to automatically determine which of these to
use at run-time, so that the same DEBUG_LL-enabled kernel image could be
used across multiple Tegra boards. The required bootloader-side setup for
that option is implemented in NVIDIA's various downstream U-Boot branches,
but the U-Boot maintainers have refused to accept it upstream.

This change implements an alternative automatic UART selection option
using ODMDATA. This is a 32-bit value programmed into Tegra's boot memory
which provides a few pieces of basic board-specific information, including
a field that indicates the console UART. Setting up this value is part of
the standard Tegra boot architecture, and so requires no Tegra-specific
hacks in the bootloader's UART driver.

Note that in theory, the format of ODMDATA is board-specific. However, in
practice all boards use the same location/size/values for the UART field.
ODMDATA[19:18] (which drive the type of debug console) is more problematic,
since some boards use value 2 for UART and others use 3. This patch just
accepts either value; if this doesn't work well for a given board, I'd
suggest simply not enabling this debug option when building for that board.

Note that the kernel assumes the bootloader has already set up any required
pinmux settings for the UART; there is no way the kernel can do this for
itself prior to knowing which board it's running on. In practice, people
using this feature are highly likely to be using bootloaders that have
indeed configured the pinmux. This assumption existed prior to this patch.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
2012-04-10 13:41:36 -06:00
..
include/mach ARM: tegra: uncompress.h: Implement TEGRA_DEBUG_UART_AUTO_ODMDATA 2012-04-10 13:41:36 -06:00
apbio.c ARM: tegra: use APB DMA for accessing APB devices 2012-02-06 18:24:58 -08:00
apbio.h ARM: tegra: use APB DMA for accessing APB devices 2012-02-06 18:24:58 -08:00
board-dt-tegra20.c Merge branch 'for-3.4/fixes-for-rc1-and-v3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/swarren/linux-tegra into fixes 2012-03-29 11:00:56 -07:00
board-dt-tegra30.c ARM: More SoC support updates 2012-03-28 12:24:40 -07:00
board-harmony-pcie.c arm/tegra: Harmony PCIe: Don't touch pinmux 2011-12-19 18:03:10 -08:00
board-harmony-pinmux.c arm/tegra: fix harmony pinmux for PCIe 2012-03-07 14:39:34 -08:00
board-harmony-power.c ARM: driver specific updates 2012-03-27 16:41:24 -07:00
board-harmony.c ARM: tegra: Remove use of TEGRA_GPIO_TO_IRQ 2012-02-06 18:25:00 -08:00
board-harmony.h ARM: 7101/1: arm/tegra: Replace <mach/gpio.h> with <mach/gpio-tegra.h> 2011-09-27 00:20:53 +01:00
board-paz00-pinmux.c Merge branch 'tegra/soc' into next/boards 2012-01-06 23:09:14 +00:00
board-paz00.c ARM: tegra: paz00: fix wrong UART port on mini-pcie plug 2012-02-06 18:32:51 -08:00
board-paz00.h ARM: tegra: paz00: fix wrong SD1 power gpio 2012-02-06 18:32:50 -08:00
board-pinmux.c arm/tegra: Use bus notifiers to trigger pinmux setup 2011-12-19 18:03:11 -08:00
board-pinmux.h arm/tegra: Refactor board-*-pinmux.c to share code 2011-12-19 18:03:11 -08:00
board-seaboard-pinmux.c Merge branch 'tegra/soc' into next/boards 2012-01-06 23:09:14 +00:00
board-seaboard.c ARM: tegra: Remove use of TEGRA_GPIO_TO_IRQ 2012-02-06 18:25:00 -08:00
board-seaboard.h Merge branch 'depends/rmk/gpio' into next/board 2011-10-21 16:46:26 +02:00
board-trimslice-pinmux.c Merge branch 'tegra/soc' into next/boards 2012-01-06 23:09:14 +00:00
board-trimslice.c Merge branch 'samsung/cleanup' into next/boards 2012-01-09 17:06:36 +00:00
board-trimslice.h ARM: 7101/1: arm/tegra: Replace <mach/gpio.h> with <mach/gpio-tegra.h> 2011-09-27 00:20:53 +01:00
board.h arm/tegra: Delete tegra_init_clock() 2011-12-19 18:06:05 -08:00
clock.c ARM: tegra: add support for new clock framework features 2012-02-06 09:16:15 -08:00
clock.h ARM: tegra: enable tegra30 clock framework 2012-02-06 09:16:15 -08:00
common.c ARM: More SoC support updates 2012-03-28 12:24:40 -07:00
cpu-tegra.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
cpuidle.c ARM: tegra: cpuidle driver for tegra 2012-02-06 09:16:16 -08:00
devices.c ARM: tegra: Fix device tree AUXDATA for USB/EHCI 2012-03-21 11:56:58 -06:00
devices.h ARM: tegra: Fix device tree AUXDATA for USB/EHCI 2012-03-21 11:56:58 -06:00
dma.c ARM: tegra: dma: not required to move requestor when stopping. 2012-02-06 18:25:01 -08:00
flowctrl.c ARM: tegra: functions to access the flowcontroller 2012-02-26 14:44:42 -08:00
flowctrl.h ARM: tegra: functions to access the flowcontroller 2012-02-26 14:44:42 -08:00
fuse.c ARM: More SoC support updates 2012-03-28 12:24:40 -07:00
fuse.h ARM: tegra: export Tegra chipid 2012-02-26 14:44:19 -08:00
gpio-names.h [ARM] tegra: add GPIO support 2010-08-05 14:57:02 -07:00
headsmp.S ARM: tegra: support for secondary cores on Tegra30 2012-02-26 14:44:46 -08:00
hotplug.c ARM: move CP15 definitions to separate header file 2012-03-28 18:30:01 +01:00
io.c ARM: tegra: clean-up mach/io.h 2012-03-06 21:34:41 -06:00
irq.c ARM: tegra: add support for tegra30 interrupts 2012-02-06 09:16:14 -08:00
Kconfig ARM: tegra: uncompress.h: Implement TEGRA_DEBUG_UART_AUTO_ODMDATA 2012-04-10 13:41:36 -06:00
Makefile ARM: More SoC support updates 2012-03-28 12:24:40 -07:00
Makefile.boot arm/tegra: add support for tegra30 based board cardhu 2011-12-17 20:15:38 -08:00
pcie.c ARM: timer cleanup work 2012-03-27 16:06:17 -07:00
pinmux-tegra20-tables.c arm/tegra: Fix section mismatch errors in tegra20 pinmux 2011-12-19 18:04:41 -08:00
pinmux-tegra30-tables.c arm/tegra: Fix section mismatch errors in tegra30 pinmux 2011-12-19 18:04:41 -08:00
pinmux.c arm/tegra: pinmux tables and definitions for tegra30 2011-12-17 20:15:33 -08:00
platsmp.c ARM: tegra: support for secondary cores on Tegra30 2012-02-26 14:44:46 -08:00
pmc.c ARM: tegra: Add a simple PMC driver 2012-02-06 18:25:01 -08:00
pmc.h ARM: tegra: Add a simple PMC driver 2012-02-06 18:25:01 -08:00
powergate.c ARM: tegra: support for Tegra30 CPU powerdomains 2012-02-26 14:44:45 -08:00
reset.c ARM: tegra: rework Tegra secondary CPU core bringup 2012-02-26 14:44:44 -08:00
reset.h ARM: tegra: rework Tegra secondary CPU core bringup 2012-02-26 14:44:44 -08:00
sleep.S ARM: tegra: Include assembler.h in sleep.S to fix build break 2012-03-26 09:55:22 -06:00
tegra2_clocks.c ARM: driver specific updates 2012-03-27 16:41:24 -07:00
tegra2_emc.c ARM: tegra: Fix EMC pdata initialization from registers 2012-02-06 18:25:01 -08:00
tegra2_emc.h ARM: tegra: emc: convert tegra2_emc to a platform driver 2012-02-06 18:24:59 -08:00
tegra30_clocks.c ARM: tegra: implement basic tegra30 clock framework 2012-02-06 09:16:15 -08:00
timer.c ARM: tegra: convert to twd_local_timer_register() interface 2012-03-13 13:30:30 +00:00
usb_phy.c ARM: global cleanups 2012-03-27 16:03:32 -07:00