]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
Tegra30: Add funcmux for UART over SD slot
authorJonas Schwöbel <jonasschwoebel@yahoo.de>
Mon, 22 Jan 2024 12:40:27 +0000 (14:40 +0200)
committerSvyatoslav Ryhel <clamor95@gmail.com>
Sun, 13 Oct 2024 14:20:26 +0000 (17:20 +0300)
Tegra 3 has UART-E exposable via SD card slot which may be
handy for debugging. This change only adds funcmux part, to
use UART-E on the device you additionally would need:
- set stdout-path to serial@70006400 (uarte)
- configure sdmmc1_dat3_py4 and sdmmc1_dat2_py5 pinmux for
  uarte
- disable or remove sdhci@7800000 node
- enable CONFIG_TEGRA_ENABLE_UARTE in defconfig
- set CFG_SYS_NS16550_COM to NV_PA_APB_UARTE_BASE in device
  header

Signed-off-by: Jonas Schwöbel <jonasschwoebel@yahoo.de>
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
arch/arm/include/asm/arch-tegra30/funcmux.h
arch/arm/mach-tegra/board.c
drivers/pinctrl/tegra/funcmux-tegra30.c

index 2e8b3359161e153a72e92fc5115411e9886e9d27..05414061a23911268612ad98e8796da45ab9b125 100644 (file)
@@ -16,5 +16,6 @@ enum {
 
        /* UART configs */
        FUNCMUX_UART1_ULPI = 0,
+       FUNCMUX_UART5_SDMMC1 = 1,
 };
 #endif /* _TEGRA30_FUNCMUX_H_ */
index c382e0428603f6c6bc1134cc606de2b0c59dd8f6..be739c758771afc37a04a66b559c9a7aaa0e6bef 100644 (file)
@@ -181,7 +181,7 @@ static int uart_configs[] = {
        -1,
        -1,
        -1,
-       -1,
+       FUNCMUX_UART5_SDMMC1,  /* UARTE */
 #elif defined(CONFIG_TEGRA114)
        -1,
        -1,
index e31b859beb8aca0e8980d038723e06556f9d5357..5d3403ae441697ecfc7d1e5ad461a7f9f4604635 100644 (file)
@@ -33,6 +33,22 @@ int funcmux_select(enum periph_id id, int config)
                        break;
                }
                break;
+       case PERIPH_ID_UART5:
+               switch (config) {
+               case FUNCMUX_UART5_SDMMC1:
+                       pinmux_set_func(PMUX_PINGRP_SDMMC1_DAT3_PY4,
+                                       PMUX_FUNC_UARTE);
+                       pinmux_set_func(PMUX_PINGRP_SDMMC1_DAT2_PY5,
+                                       PMUX_FUNC_UARTE);
+
+                       pinmux_set_io(PMUX_PINGRP_SDMMC1_DAT3_PY4, PMUX_PIN_OUTPUT);
+                       pinmux_set_io(PMUX_PINGRP_SDMMC1_DAT2_PY5, PMUX_PIN_INPUT);
+
+                       pinmux_tristate_disable(PMUX_PINGRP_SDMMC1_DAT3_PY4);
+                       pinmux_tristate_disable(PMUX_PINGRP_SDMMC1_DAT2_PY5);
+                       break;
+               }
+               break;
 
        /* Add other periph IDs here as needed */