On Seaboard the UART and SPI interfere with each other. This causes the UART to receive spurious zero bytes after SPI transactions and also means that SPI can corrupt a few output characters when it starts up if they are still in the UART buffer.
This updates the board to use the SPI/UART switch to avoid the problem. For now this feature is turned off since it needs changes to the NS16550 UART to operate. Signed-off-by: Simon Glass <s...@chromium.org> --- board/nvidia/common/board.c | 8 ++++++++ board/nvidia/common/board.h | 1 + board/nvidia/seaboard/seaboard.c | 3 +++ 3 files changed, 12 insertions(+), 0 deletions(-) diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index 2591ebc..0403645 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -112,9 +112,13 @@ static void pin_mux_uart(int uart_ids) */ int board_init(void) { + /* Do clocks and UART first so that printf() works */ clock_init(); clock_verify(); +#ifdef CONFIG_SPI_UART_SWITCH + gpio_config_uart(); +#endif #ifdef CONFIG_TEGRA2_SPI spi_init(); #endif @@ -149,7 +153,11 @@ int board_early_init_f(void) pin_mux_uart(uart_ids); /* Initialize periph GPIOs */ +#ifdef CONFIG_SPI_UART_SWITCH + gpio_early_init_uart(); +#else gpio_config_uart(); +#endif /* Init UART, scratch regs, and start CPU */ tegra2_start(); diff --git a/board/nvidia/common/board.h b/board/nvidia/common/board.h index 35acbca..2c89ff4 100644 --- a/board/nvidia/common/board.h +++ b/board/nvidia/common/board.h @@ -27,5 +27,6 @@ void tegra2_start(void); void gpio_config_uart(void); int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio); +void gpio_early_init_uart(void); #endif /* BOARD_H */ diff --git a/board/nvidia/seaboard/seaboard.c b/board/nvidia/seaboard/seaboard.c index 7f2827b..0b779f6 100644 --- a/board/nvidia/seaboard/seaboard.c +++ b/board/nvidia/seaboard/seaboard.c @@ -31,6 +31,8 @@ #endif #include "../common/board.h" +/* TODO: Remove this code when the SPI switch is working */ +#ifndef CONFIG_SPI_UART_SWITCH /* * Routine: gpio_config_uart_seaboard * Description: Force GPIO_PI3 low on Seaboard so UART4 works. @@ -48,6 +50,7 @@ void gpio_config_uart(void) return; gpio_config_uart_seaboard(); } +#endif #ifdef CONFIG_TEGRA2_MMC /* -- 1.7.3.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot