[U-Boot] [PATCH 1/2] tegra: add alternate UART1 funcmux entry
Simon Glass
sjg at chromium.org
Tue May 22 02:47:51 CEST 2012
Hi Stephen,
On Mon, May 14, 2012 at 4:13 PM, Stephen Warren <swarren at wwwdotorg.org>wrote:
> From: Stephen Warren <swarren at nvidia.com>
>
> (In at least some configurations) Whistler uses UART1 on pingroups
> UAA, UAB.
>
> Signed-off-by: Stephen Warren <swarren at 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
>
We really shouldn't be using configs to deal with this. It should be a
run-time check.
I recall you saying that we could use the ODM bits for this?
> + 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
>
>
Regards,
Simon
More information about the U-Boot
mailing list