[U-Boot] [PATCH 1/3] tegra2: Fix conflicting pinmux for UARTA

Simon Glass
2012-01-09T19:35:09Z

On Fri, Jan 6, 2012 at 2:14 PM, Stephen Warren <swarren@nvidia.com> wrote:
> 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>

Tested on Seaboard.

Acked-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>

> ---
> ?arch/arm/cpu/armv7/tegra2/funcmux.c | ? 12 ++++++++++++
> ?1 files changed, 12 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c
> index 0878f51..140f8a7 100644
> --- a/arch/arm/cpu/armv7/tegra2/funcmux.c
> +++ b/arch/arm/cpu/armv7/tegra2/funcmux.c
> @@ -37,6 +37,18 @@ int funcmux_select(enum periph_id id, int config)
> ? ? ? ? ? ? ? ?pinmux_set_func(PINGRP_IRTX, PMUX_FUNC_UARTA);
> ? ? ? ? ? ? ? ?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);
> ? ? ? ? ? ? ? ?break;
>
> ? ? ? ?case PERIPH_ID_UART2:
> --
> 1.7.0.4
>