TI K3 SoCs have ns16550 compatible UARTs. Add lowlevel debugging support
for the AM62x SoC from the K3 family.

Signed-off-by: Sascha Hauer <[email protected]>
---
 arch/arm/include/asm/debug_ll.h |  2 ++
 common/Kconfig                  | 16 ++++++++++-
 include/mach/k3/debug_ll.h      | 49 +++++++++++++++++++++++++++++++++
 3 files changed, 66 insertions(+), 1 deletion(-)
 create mode 100644 include/mach/k3/debug_ll.h

diff --git a/arch/arm/include/asm/debug_ll.h b/arch/arm/include/asm/debug_ll.h
index a1d5161ccf..98a7d0d839 100644
--- a/arch/arm/include/asm/debug_ll.h
+++ b/arch/arm/include/asm/debug_ll.h
@@ -64,6 +64,8 @@
 #include <mach/clps711x/debug_ll.h>
 #elif defined CONFIG_ARCH_AT91
 #include <mach/at91/debug_ll.h>
+#elif defined CONFIG_ARCH_K3
+#include <mach/k3/debug_ll.h>
 #endif
 
 #endif
diff --git a/common/Kconfig b/common/Kconfig
index 50f62b9f9a..3938577987 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -1552,6 +1552,10 @@ config DEBUG_SUN20I
        depends on SOC_ALLWINNER_SUN20I
        select DEBUG_LL_NS16550
 
+config DEBUG_AM62X_UART
+       bool "Texas Instruments AM62X debug UART"
+       depends on ARCH_K3
+
 config DEBUG_QEMU_ARM64_VIRT
        bool "QEMU ARM64 Virt PL011 console"
        depends on ARCH_ARM64_VIRT
@@ -1582,10 +1586,20 @@ config DEBUG_IMX_UART_PORT
          Choose UART port on which kernel low-level debug messages
          should be output.
 
+config DEBUG_K3_UART_PORT
+       int "K3 Debug UART Port Selection" if DEBUG_AM62X_UART
+       default 0
+       depends on ARCH_K3
+       help
+         Choose UART port on which kernel low-level debug messages
+         should be output. Possible values are:
+         AM62x: 0 - 6
+
 config DEBUG_OMAP_UART_PORT
        int "OMAP Debug UART Port Selection" if DEBUG_OMAP3_UART || \
                                                DEBUG_OMAP4_UART || \
-                                               DEBUG_AM33XX_UART
+                                               DEBUG_AM33XX_UART || \
+                                               DEBUG_AM62X_UART
        default 1
        depends on ARCH_OMAP
        help
diff --git a/include/mach/k3/debug_ll.h b/include/mach/k3/debug_ll.h
new file mode 100644
index 0000000000..2433bb8f2e
--- /dev/null
+++ b/include/mach/k3/debug_ll.h
@@ -0,0 +1,49 @@
+#ifndef __MACH_K3_DEBUG_LL_H__
+#define __MACH_K3_DEBUG_LL_H__
+#include <io.h>
+
+#define AM62X_UART_UART0_BASE  0x02800000
+#define AM62X_UART_UART1_BASE  0x02810000
+#define AM62X_UART_UART2_BASE  0x02820000
+#define AM62X_UART_UART3_BASE  0x02830000
+#define AM62X_UART_UART4_BASE  0x02840000
+#define AM62X_UART_UART5_BASE  0x02850000
+#define AM62X_UART_UART6_BASE  0x02860000
+
+#if defined CONFIG_DEBUG_AM62X_UART
+#define K3_DEBUG_SOC AM62X_UART
+
+#define __K3_UART_BASE(soc, num) soc##_UART##num##_BASE
+#define K3_UART_BASE(soc, num) __K3_UART_BASE(soc, num)
+
+static inline uint8_t debug_ll_read_reg(int reg)
+{
+       void __iomem *base = (void *)K3_UART_BASE(K3_DEBUG_SOC,
+                                       CONFIG_DEBUG_K3_UART_PORT);
+
+       return readb(base + (reg << 2));
+}
+
+static inline void debug_ll_write_reg(int reg, uint8_t val)
+{
+       void __iomem *base = (void *)K3_UART_BASE(K3_DEBUG_SOC,
+                                       CONFIG_DEBUG_K3_UART_PORT);
+
+       writeb(val, base + (reg << 2));
+}
+
+#include <debug_ll/ns16550.h>
+
+static inline void debug_ll_init(void)
+{
+       /* already configured */
+}
+
+static inline void PUTC_LL(int c)
+{
+       debug_ll_ns16550_putc(c);
+}
+
+#endif
+
+#endif /* __MACH_K3_DEBUG_LL_H__ */
-- 
2.39.2


Reply via email to