Tegra20 has mux allowing to repurpose microSD as UART on boards which
use sdmmc3 controller for microSD. Add TEGRA_UARTA_MICROSD to enable
this feature. It is currently supported on Transformer T20, support for
other boards may require Device Tree changes.

Update Transformer T20 DTS to select correct pinmux and stdout-path
based on TEGRA_UARTA_MICROSD.

Signed-off-by: Artur Kowalski <[email protected]>
---

Changes in v2:
- added TEGRA_UARTA_MICROSD Kconfig option
- removed .dtsi for enabling UART over microSD
- modified transformer DT to use UARTA and correct pinmux when
  TEGRA_UARTA_MICROSD is enabled; it is enough to flip a single
  switch to enable/disable UART over microSD

 arch/arm/dts/tegra20-asus-transformer.dtsi | 24 ++++++++++++++++++++++
 arch/arm/mach-tegra/tegra20/Kconfig        | 15 ++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/arch/arm/dts/tegra20-asus-transformer.dtsi 
b/arch/arm/dts/tegra20-asus-transformer.dtsi
index 49efabbfd92..9ea323c81f3 100644
--- a/arch/arm/dts/tegra20-asus-transformer.dtsi
+++ b/arch/arm/dts/tegra20-asus-transformer.dtsi
@@ -5,7 +5,13 @@
 
 / {
        chosen {
+#if CONFIG_IS_ENABLED(TEGRA_ENABLE_UARTA)
+               stdout-path = &uarta;
+#elif CONFIG_IS_ENABLED(TEGRA_ENABLE_UARTD)
                stdout-path = &uartd;
+#else
+#error Unsupported UART
+#endif
        };
 
        aliases {
@@ -195,10 +201,17 @@
                                nvidia,function = "i2c1";
                        };
 
+#if CONFIG_IS_ENABLED(TEGRA_UARTA_SDB_SDD)
+                       dbguart {
+                               nvidia,pins = "sdb", "sdd";
+                               nvidia,function = "uarta";
+                       };
+#else
                        sdb {
                                nvidia,pins = "sdb", "sdc", "sdd", "slxc", 
"slxk";
                                nvidia,function = "sdio3";
                        };
+#endif
 
                        sdio1 {
                                nvidia,pins = "sdio1";
@@ -376,7 +389,13 @@
                };
        };
 
+#if CONFIG_IS_ENABLED(TEGRA_ENABLE_UARTA)
+       uarta: serial@70006000 {
+#elif CONFIG_IS_ENABLED(TEGRA_ENABLE_UARTD)
        uartd: serial@70006300 {
+#else
+#error Unsupported UART
+#endif
                status = "okay";
                clock-frequency = <216000000>;
        };
@@ -434,7 +453,12 @@
        };
 
        sdmmc3: sdhci@c8000400 {
+#if CONFIG_IS_ENABLED(TEGRA_UARTA_MICROSD)
+               /* Can't use both at the same time */
+               status = "disabled";
+#else
                status = "okay";
+#endif
                bus-width = <4>;
 
                cd-gpios = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
diff --git a/arch/arm/mach-tegra/tegra20/Kconfig 
b/arch/arm/mach-tegra/tegra20/Kconfig
index 3349f1e2786..c2c51660216 100644
--- a/arch/arm/mach-tegra/tegra20/Kconfig
+++ b/arch/arm/mach-tegra/tegra20/Kconfig
@@ -77,6 +77,21 @@ endchoice
 config SYS_SOC
        default "tegra20"
 
+config TEGRA_UARTA_MICROSD
+       bool "UARTA on MicroSD breakout board"
+       default n
+       depends on TEGRA_ENABLE_UARTA && TARGET_TRANSFORMER_T20
+       select TEGRA_UARTA_SDB_SDD
+       help
+         Repurpose the SD card slot for getting access to the UARTA serial
+         console. Primarily useful only for low level u-boot debugging on
+         tablets, where normal UARTD is difficult to access and requires
+         device disassembly and/or soldering. Enabling this option causes
+         UARTA TX to become exposed on SDD and RX on SDB pins which correspond
+         to microSD CLK and CMD pins respectively. Currently this is supported
+         only on Transformer T20, support for other platforms may require DT
+         and configs (from include/configs/*) updates.
+
 source "board/nvidia/harmony/Kconfig"
 source "board/avionic-design/medcom-wide/Kconfig"
 source "board/compal/paz00/Kconfig"
-- 
2.48.1

Reply via email to