Patchwork [U-Boot,RFC,2/3] tegra2: Fix conflicting pinmux for UARTA

login
register
mail settings
Submitter Stephen Warren
Date Nov. 19, 2011, 8:47 p.m.
Message ID <1321735649-27138-3-git-send-email-swarren@nvidia.com>
Download mbox | patch
Permalink /patch/126616/
State RFC
Headers show

Comments

Stephen Warren - Nov. 19, 2011, 8:47 p.m.
Tegra appears to boot with function UARTA pre-selected on mux
group SDB. If two mux groups are both set to the same function,
it's unclear which group's pins drive the RX signals into the
HW module. For UARTA, SDB certainly overrides group IRTX in
practice. To solve this, configure some alternative function on
SDB to avoid the conflict. Also, tri-state the group to avoid
driving any signal onto it until we know what's connected.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 board/nvidia/common/board.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

Patch

diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c
index c806a6b..13742d7 100644
--- a/board/nvidia/common/board.c
+++ b/board/nvidia/common/board.c
@@ -88,6 +88,18 @@  static void pin_mux_uart(void)
 
 	pinmux_tristate_disable(PINGRP_IRRX);
 	pinmux_tristate_disable(PINGRP_IRTX);
+
+	/*
+	 * Tegra appears to boot with function UARTA pre-selected on mux
+	 * group SDB. If two mux groups are both set to the same function,
+	 * it's unclear which group's pins drive the RX signals into the
+	 * HW module. For UARTA, SDB certainly overrides group IRTX in
+	 * practice. To solve this, configure some alternative function on
+	 * SDB to avoid the conflict. Also, tri-state the group to avoid
+	 * driving any signal onto it until we know what's connected.
+	 */
+	pinmux_tristate_enable(PINGRP_SDB);
+	pinmux_set_func(PINGRP_SDB,  PMUX_FUNC_SDIO3);
 #endif	/* CONFIG_TEGRA2_ENABLE_UARTA */
 #if defined(CONFIG_TEGRA2_ENABLE_UARTD)
 	pinmux_set_func(PINGRP_GMC, PMUX_FUNC_UARTD);