mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: BAREBOX <barebox@lists.infradead.org>
Subject: [PATCH 16/27] ARM: pxa: add DEBUG_LL support
Date: Sun, 16 Aug 2026 19:56:36 +0200	[thread overview]
Message-ID: <20260816-pxa3xx-v1-16-f3c3d7a6c43f@pengutronix.de> (raw)
In-Reply-To: <20260816-pxa3xx-v1-0-f3c3d7a6c43f@pengutronix.de>

The PXA UARTs are NS16550 compatible, so the generic ns16550 debug_ll
helpers can be reused. Two things differ from a plain ns16550: the
registers are 32bit wide and thus spaced four bytes apart, and the unit
has to be enabled explicitly with the UUE bit in the IER register.

The latter needs care as debug_ll_ns16550_init() clears IER to disable
the interrupts, which on PXA disables the unit as well, so UUE has to be
set again afterwards.

The UART clock is a fixed 14.857MHz on all PXA variants, so the divisor
can be calculated without any clock support.

Assisted-by: Claude Opus 5
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/Kconfig                |  1 +
 arch/arm/include/asm/debug_ll.h |  2 ++
 common/Kconfig.debug_ll         | 17 ++++++++++
 include/mach/pxa/debug_ll.h     | 74 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 94 insertions(+)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 2f2ab5d76d..292b9cfe66 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -122,6 +122,7 @@ config ARCH_PXA
 	bool "Intel/Marvell PXA based"
 	depends on 32BIT
 	select GPIOLIB
+	select HAS_DEBUG_LL
 
 config ARCH_SOCFPGA
 	bool "Altera SOCFPGA"
diff --git a/arch/arm/include/asm/debug_ll.h b/arch/arm/include/asm/debug_ll.h
index a645a6e910..e7e98ced0a 100644
--- a/arch/arm/include/asm/debug_ll.h
+++ b/arch/arm/include/asm/debug_ll.h
@@ -42,6 +42,8 @@
 #include <mach/zynq/debug_ll.h>
 #elif defined CONFIG_DEBUG_SOCFPGA_UART
 #include <mach/socfpga/debug_ll.h>
+#elif defined CONFIG_DEBUG_PXA_UART
+#include <mach/pxa/debug_ll.h>
 #endif
 
 #endif
diff --git a/common/Kconfig.debug_ll b/common/Kconfig.debug_ll
index 8445b4be08..8ae3bbb172 100644
--- a/common/Kconfig.debug_ll
+++ b/common/Kconfig.debug_ll
@@ -393,6 +393,14 @@ config DEBUG_TEGRA_UART
 	bool "Tegra debug UART"
 	depends on ARCH_TEGRA
 
+config DEBUG_SOCFPGA_UART
+	bool "SoCFPGA debug UART"
+	depends on ARCH_SOCFPGA
+
+config DEBUG_PXA_UART
+	bool "PXA debug UART"
+	depends on ARCH_PXA
+
 endchoice
 
 config DEBUG_LL_NS16550
@@ -400,6 +408,15 @@ config DEBUG_LL_NS16550
 	help
 	  Selected by RISC-V and PowerPC platforms that use ns16550 for debug_ll
 
+config DEBUG_PXA_UART_PORT
+	int "PXA Debug UART Port Selection" if DEBUG_PXA_UART
+	default 0
+	depends on ARCH_PXA
+	help
+	  Choose UART port on which barebox low-level debug messages
+	  should be output. Possible values are:
+	  0 - FFUART, 1 - BTUART, 2 - STUART
+
 config DEBUG_IMX_UART_PORT
 	int "i.MX Debug UART Port Selection" if DEBUG_IMX1_UART || \
 						DEBUG_IMX21_UART || \
diff --git a/include/mach/pxa/debug_ll.h b/include/mach/pxa/debug_ll.h
new file mode 100644
index 0000000000..3a9ec3b6b6
--- /dev/null
+++ b/include/mach/pxa/debug_ll.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __MACH_PXA_DEBUG_LL_H__
+#define __MACH_PXA_DEBUG_LL_H__
+
+#include <io.h>
+#include <linux/bits.h>
+
+/*
+ * The PXA UARTs are NS16550 compatible, but the registers are 32bit
+ * wide and thus spaced four bytes apart. In addition to that the unit
+ * has to be enabled explicitly with the UUE bit in the IER register.
+ */
+#define PXA_UART_IER_UUE	BIT(6)
+
+#define PXA_FFUART_BASE		0x40100000
+#define PXA_BTUART_BASE		0x40200000
+#define PXA_STUART_BASE		0x40700000
+
+#ifdef CONFIG_DEBUG_PXA_UART
+
+#if CONFIG_DEBUG_PXA_UART_PORT == 0
+#define PXA_DEBUG_UART_BASE	PXA_FFUART_BASE
+#elif CONFIG_DEBUG_PXA_UART_PORT == 1
+#define PXA_DEBUG_UART_BASE	PXA_BTUART_BASE
+#elif CONFIG_DEBUG_PXA_UART_PORT == 2
+#define PXA_DEBUG_UART_BASE	PXA_STUART_BASE
+#else
+#error "Invalid CONFIG_DEBUG_PXA_UART_PORT"
+#endif
+
+static inline uint8_t debug_ll_read_reg(void __iomem *base, int reg)
+{
+	return readl(base + (reg << 2));
+}
+
+static inline void debug_ll_write_reg(void __iomem *base, int reg, uint8_t val)
+{
+	writel(val, base + (reg << 2));
+}
+
+#include <debug_ll/ns16550.h>
+
+static inline void pxa_debug_ll_init(void)
+{
+	void __iomem *base = IOMEM(PXA_DEBUG_UART_BASE);
+	uint16_t divisor;
+
+	/* The UART clock is a fixed 14.857MHz on all PXA variants */
+	divisor = debug_ll_ns16550_calc_divisor(14857000);
+	debug_ll_ns16550_init(base, divisor);
+
+	/*
+	 * debug_ll_ns16550_init() has cleared IER to disable the
+	 * interrupts, which on PXA also disabled the unit. Enable it
+	 * again, interrupts stay disabled.
+	 */
+	debug_ll_write_reg(base, NS16550_IER, PXA_UART_IER_UUE);
+}
+
+static inline void PUTC_LL(char c)
+{
+	debug_ll_ns16550_putc(IOMEM(PXA_DEBUG_UART_BASE), c);
+}
+
+#else
+
+static inline void pxa_debug_ll_init(void)
+{
+}
+
+#endif /* CONFIG_DEBUG_PXA_UART */
+
+#endif /* __MACH_PXA_DEBUG_LL_H__ */

-- 
2.47.3




  parent reply	other threads:[~2026-08-16 18:02 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-16 17:56 [PATCH 00/27] ARM: Add pxa3xx and Raumfeld Speaker support Sascha Hauer
2026-08-16 17:56 ` [PATCH 01/27] ARM: pxa: remove PXA25x and PXA27x support Sascha Hauer
2026-08-16 17:56 ` [PATCH 02/27] video: remove the PXA framebuffer driver Sascha Hauer
2026-08-16 17:56 ` [PATCH 03/27] ARM: cache: drive the XSC3 cache with the ARMv4 functions Sascha Hauer
2026-08-16 17:56 ` [PATCH 04/27] mci: pxamci: get the clock from the clk API Sascha Hauer
2026-08-16 17:56 ` [PATCH 05/27] pwm: pxa: " Sascha Hauer
2026-08-16 17:56 ` [PATCH 06/27] serial: " Sascha Hauer
2026-08-16 17:56 ` [PATCH 07/27] clk: pxa: add a device tree clock driver for PXA3xx Sascha Hauer
2026-08-16 17:56 ` [PATCH 08/27] mtd: nand: nand_mrvl_nfc: honour marvell,nand-keep-config Sascha Hauer
2026-08-16 17:56 ` [PATCH 09/27] mtd: nand: nand_mrvl_nfc: support the nand-controller bindings Sascha Hauer
2026-08-16 17:56 ` [PATCH 10/27] mtd: nand: mrvl_nfc: keep the ready latch across a STATUS command Sascha Hauer
2026-08-16 17:56 ` [PATCH 11/27] mtd: nand: mrvl_nfc: do not report a command timeout as an error Sascha Hauer
2026-08-16 17:56 ` [PATCH 12/27] mci: pxamci: probe from the device tree Sascha Hauer
2026-08-16 17:56 ` [PATCH 13/27] serial: pxa: add device tree support Sascha Hauer
2026-08-16 17:56 ` [PATCH 14/27] serial: pxa: provide the Linux console name Sascha Hauer
2026-08-16 17:56 ` [PATCH 15/27] gpio: pxa: add a driver and switch the architecture to GPIOLIB Sascha Hauer
2026-08-16 17:56 ` Sascha Hauer [this message]
2026-08-16 17:56 ` [PATCH 17/27] ARM: pxa: let the board select the SoC Sascha Hauer
2026-08-16 17:56 ` [PATCH 18/27] ARM: pxa: enable device tree support Sascha Hauer
2026-08-16 17:56 ` [PATCH 19/27] scripts: add pxa-image Sascha Hauer
2026-08-16 17:56 ` [PATCH 20/27] ARM: pxa: add a NAND first stage loader Sascha Hauer
2026-08-16 17:56 ` [PATCH 21/27] filetype: detect PXA3xx NTIM images Sascha Hauer
2026-08-16 17:56 ` [PATCH 22/27] ARM: pxa: add a barebox update handler for NAND Sascha Hauer
2026-08-16 17:56 ` [PATCH 23/27] clocksource: add a driver for the PXA OS timer and its watchdog Sascha Hauer
2026-08-16 17:56 ` [PATCH 24/27] ARM: pxa: move over to MULTIARCH Sascha Hauer
2026-08-16 17:56 ` [PATCH 25/27] ARM: pxa: reset straight away and without complaining Sascha Hauer
2026-08-16 17:56 ` [PATCH 26/27] ARM: pxa: add Raumfeld Speaker board support Sascha Hauer
2026-08-16 17:56 ` [PATCH 27/27] ARM: multi_v5_v6_defconfig: enable PXA support Sascha Hauer
2026-08-17  7:35 ` [PATCH 00/27] ARM: Add pxa3xx and Raumfeld Speaker support Ahmad Fatoum
2026-08-19  9:26 ` Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260816-pxa3xx-v1-16-f3c3d7a6c43f@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox