From: Stephen Warren <swar...@nvidia.com>

(In at least some configurations) Whistler uses UART1 on pingroups
UAA, UAB.

Signed-off-by: Stephen Warren <swar...@nvidia.com>
---
 arch/arm/cpu/armv7/tegra2/board.c          |   14 +++++++++++++-
 arch/arm/cpu/armv7/tegra2/funcmux.c        |   13 ++++++++++++-
 arch/arm/include/asm/arch-tegra2/funcmux.h |    1 +
 3 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/arch/arm/cpu/armv7/tegra2/board.c 
b/arch/arm/cpu/armv7/tegra2/board.c
index a50b1b9..629ad5d 100644
--- a/arch/arm/cpu/armv7/tegra2/board.c
+++ b/arch/arm/cpu/armv7/tegra2/board.c
@@ -101,6 +101,18 @@ int arch_cpu_init(void)
 }
 #endif
 
+static int uart_configs[] = {
+#ifdef CONFIG_TEGRA2_UARTA_UAA_UAB
+       FUNCMUX_UART1_UAA_UAB,
+#else
+       FUNCMUX_UART1_IRRX_IRTX,
+#endif
+       FUNCMUX_UART2_IRDA,
+       -1,
+       FUNCMUX_UART4_GMC,
+       -1,
+};
+
 /**
  * Set up the specified uarts
  *
@@ -120,7 +132,7 @@ static void setup_uarts(int uart_ids)
                if (uart_ids & (1 << i)) {
                        enum periph_id id = id_for_uart[i];
 
-                       funcmux_select(id, FUNCMUX_DEFAULT);
+                       funcmux_select(id, uart_configs[i]);
                        clock_ll_start_uart(id);
                }
        }
diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c 
b/arch/arm/cpu/armv7/tegra2/funcmux.c
index 0ef7753..e2d1273 100644
--- a/arch/arm/cpu/armv7/tegra2/funcmux.c
+++ b/arch/arm/cpu/armv7/tegra2/funcmux.c
@@ -31,11 +31,22 @@ int funcmux_select(enum periph_id id, int config)
 
        switch (id) {
        case PERIPH_ID_UART1:
-               if (config == FUNCMUX_UART1_IRRX_IRTX) {
+               switch (config) {
+               case FUNCMUX_UART1_IRRX_IRTX:
                        pinmux_set_func(PINGRP_IRRX, PMUX_FUNC_UARTA);
                        pinmux_set_func(PINGRP_IRTX, PMUX_FUNC_UARTA);
                        pinmux_tristate_disable(PINGRP_IRRX);
                        pinmux_tristate_disable(PINGRP_IRTX);
+                       break;
+               case FUNCMUX_UART1_UAA_UAB:
+                       pinmux_set_func(PINGRP_UAA, PMUX_FUNC_UARTA);
+                       pinmux_set_func(PINGRP_UAB, PMUX_FUNC_UARTA);
+                       pinmux_tristate_disable(PINGRP_UAA);
+                       pinmux_tristate_disable(PINGRP_UAB);
+                       bad_config = 0;
+                       break;
+               }
+               if (!bad_config) {
                        /*
                         * Tegra appears to boot with function UARTA pre-
                         * selected on mux group SDB. If two mux groups are
diff --git a/arch/arm/include/asm/arch-tegra2/funcmux.h 
b/arch/arm/include/asm/arch-tegra2/funcmux.h
index ae73c72..b455122 100644
--- a/arch/arm/include/asm/arch-tegra2/funcmux.h
+++ b/arch/arm/include/asm/arch-tegra2/funcmux.h
@@ -30,6 +30,7 @@ enum {
 
        /* UART configs */
        FUNCMUX_UART1_IRRX_IRTX = 0,
+       FUNCMUX_UART1_UAA_UAB,
        FUNCMUX_UART2_IRDA = 0,
        FUNCMUX_UART4_GMC = 0,
 
-- 
1.7.0.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to