[PATCH] common: factor out debugging options into separate files

Ahmad Fatoum a.fatoum at pengutronix.de
Sun Apr 14 22:36:30 PDT 2024


We have a lot of debugging options, especially for DEBUG_LL, which make
common/Kconfig quite a bit crowded. Releive some pressure there by
factoring the debugging options and DEBUG_LL out into separate files.

Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
 common/Kconfig          | 580 +---------------------------------------
 common/Kconfig.debug    | 153 +++++++++++
 common/Kconfig.debug_ll | 430 +++++++++++++++++++++++++++++
 3 files changed, 585 insertions(+), 578 deletions(-)
 create mode 100644 common/Kconfig.debug
 create mode 100644 common/Kconfig.debug_ll

diff --git a/common/Kconfig b/common/Kconfig
index 0000dac8740e..98a5e99b75dc 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -1239,584 +1239,8 @@ endif
 
 endmenu
 
-menu "Debugging"
-
-config COMPILE_LOGLEVEL
-	int "compile loglevel"
-	default 6
-	help
-	  This defines the maximum loglevel compiled into the binary. Less important
-	  messages will be compiled away resulting in a smaller binary.
-
-	  0    system is unusable (emerg)
-	  1    action must be taken immediately (alert)
-	  2    critical conditions (crit)
-	  3    error conditions (err)
-	  4    warning conditions (warn)
-	  5    normal but significant condition (notice)
-	  6    informational (info)
-	  7    debug-level messages (debug)
-	  8    verbose debug messages (vdebug)
-
-config DEFAULT_LOGLEVEL
-	int "default loglevel"
-	default 7
-	help
-	  This defines the default runtime loglevel. It can be changed using the
-	  global.loglevel variable. Available logelevels are:
-
-	  0    system is unusable (emerg)
-	  1    action must be taken immediately (alert)
-	  2    critical conditions (crit)
-	  3    error conditions (err)
-	  4    warning conditions (warn)
-	  5    normal but significant condition (notice)
-	  6    informational (info)
-	  7    debug-level messages (debug)
-	  8    verbose debug messages (vdebug)
-
-config DEBUG_LL
-	bool
-	depends on HAS_DEBUG_LL
-	prompt "Low level debug messages (read help)"
-	help
-	  Enable this to get low level debug messages during barebox
-	  initialization. This is helpful if you are debugging code that
-	  executes before the console is initialized.
-
-	  This requires SoC specific support. Most SoCs require the
-	  debug UART to be initialized by a debugger or first stage
-	  bootloader.
-
-	  Note that selecting this option will limit barebox to a single
-	  UART definition, as specified below under "low-level debugging
-	  port". Attempting to boot the resulting image on a different
-	  platform *will not work*, so this option should not be enabled
-	  for builds that are intended to be portable.
-
-config ARCH_WANT_FRAME_POINTERS
-	bool
-
-config FRAME_POINTER
-	bool "Compile barebox with frame pointers" if COMPILE_TEST
-	default y if ARCH_WANT_FRAME_POINTERS
-	help
-	  Selected by platforms that expect frame pointer usage, e.g.
-	  when stack unwinding is enabled. The resulting barebox image
-	  will be slightly larger and slower, but it can give precise
-	  debugging information when print stack traces.
-
-config DEBUG_IMX_UART
-	bool
-
-config DEBUG_ROCKCHIP_UART
-	bool
-
-config DEBUG_OMAP_UART
-	bool
-
-config DEBUG_BCM283X_UART
-	bool
-
-choice
-	prompt "Kernel low-level debugging port"
-	depends on DEBUG_LL
-
-config DEBUG_IMX1_UART
-	bool "i.MX1 Debug UART"
-	depends on ARCH_IMX1
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX1.
-
-config DEBUG_IMX21_UART
-	bool "i.MX21 Debug UART"
-	depends on ARCH_IMX21
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX21.
-
-config DEBUG_IMX25_UART
-	bool "i.MX25 Debug UART"
-	depends on ARCH_IMX25
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX25.
-
-config DEBUG_IMX27_UART
-	bool "i.MX27 Debug UART"
-	depends on ARCH_IMX27
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX27.
-
-config DEBUG_IMX31_UART
-	bool "i.MX31 Debug UART"
-	depends on ARCH_IMX31
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX31.
-
-config DEBUG_IMX35_UART
-	bool "i.MX35 Debug UART"
-	depends on ARCH_IMX35
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX35.
-
-config DEBUG_IMX50_UART
-	bool "i.MX50 Debug UART"
-	depends on ARCH_IMX50
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX50.
-
-config DEBUG_IMX51_UART
-	bool "i.MX51 Debug UART"
-	depends on ARCH_IMX51
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX51.
-
-config DEBUG_IMX53_UART
-	bool "i.MX53 Debug UART"
-	depends on ARCH_IMX53
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX53.
-
-config DEBUG_IMX6Q_UART
-	bool "i.MX6Q Debug UART"
-	depends on ARCH_IMX6
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on i.MX6Q.
-
-config DEBUG_IMX7D_UART
-	bool "i.MX7D Debug UART"
-	depends on ARCH_IMX7
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want barebox low-level debugging support
-	  on i.MX7D.
-
-config DEBUG_IMX8M_UART
-	bool "i.MX8M Debug UART"
-	depends on ARCH_IMX8M
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want barebox low-level debugging support
-	  on i.MX8M*.
-
-config DEBUG_IMX9_UART
-	bool "i.MX9 Debug UART"
-	depends on ARCH_IMX93
-	select DEBUG_IMX_UART
-
-config DEBUG_VEXPRESS_UART
-	bool "Vexpress Debug UART"
-	depends on ARCH_VEXPRESS
-	help
-	  Say Y here if you want barebox low-level debugging support
-	  on Vexpress.
-
-config DEBUG_VF610_UART
-	bool "VF610 Debug UART"
-	depends on ARCH_VF610
-	select DEBUG_IMX_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on VF610.
-
-config DEBUG_OMAP3_UART
-	bool "OMAP3 Debug UART"
-	depends on ARCH_OMAP3
-	select DEBUG_OMAP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on OMAP3.
-
-config DEBUG_OMAP4_UART
-	bool "OMAP4 Debug UART"
-	depends on ARCH_OMAP4
-	select DEBUG_OMAP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on OMAP4.
-
-config DEBUG_AM33XX_UART
-	bool "AM33XX Debug UART"
-	depends on ARCH_AM33XX
-	select DEBUG_OMAP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on AM33XX.
-
-config DEBUG_ROCKCHIP_RK3188_UART
-	bool "RK3188 Debug UART"
-	depends on ARCH_RK3188
-	select DEBUG_ROCKCHIP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on RK3188.
-
-config DEBUG_ROCKCHIP_RK3288_UART
-	bool "RK3288 Debug UART"
-	depends on ARCH_RK3288
-	select DEBUG_ROCKCHIP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on RK3288.
-
-config DEBUG_ROCKCHIP_RK3568_UART
-	bool "RK3568 Debug UART"
-	depends on ARCH_RK3568
-	select DEBUG_ROCKCHIP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on RK3568.
-
-config DEBUG_ROCKCHIP_RK3588_UART
-	bool "RK3588 Debug UART"
-	depends on ARCH_RK3588
-	select DEBUG_ROCKCHIP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on RK3588.
-
-config DEBUG_ROCKCHIP_RK3399_UART
-	bool "RK3399 Debug UART"
-	depends on ARCH_RK3399
-	select DEBUG_ROCKCHIP_UART
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on RK3399.
-
-config DEBUG_SOCFPGA_UART0
-	bool "Use SOCFPGA UART0 for low-level debug"
-	depends on ARCH_SOCFPGA
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on SOCFPGA(Cyclone 5 and Arria 5) based platforms.
-
-config DEBUG_SOCFPGA_UART1
-	bool "Use SOCFPGA UART1 for low-level debug"
-	depends on ARCH_SOCFPGA
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on SOCFPGA(Arria 10) based platforms.
-
-config DEBUG_STM32MP_UART
-	bool "Use STM32MP UART4 for low-level debug"
-	depends on ARCH_STM32
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on STM32MP.
-
-config DEBUG_RPI1_UART
-	bool "RaspberryPi 1 PL011 UART"
-	depends on ARCH_BCM283X
-	select DEBUG_BCM283X_UART
-	help
-	  Say Y here if you want low-level debugging support on
-	  RaspberryPi 1 boards.
-
-config DEBUG_AT91_UART
-	bool "AT91 Debug UART"
-	depends on ARCH_AT91
-	help
-	  Say Y here if you want barebox low-level debugging support
-	  on AT91 based platforms.
-
-config DEBUG_RPI2_3_UART
-	bool "RaspberryPi 2/3 PL011 UART"
-	depends on ARCH_BCM283X
-	select DEBUG_BCM283X_UART
-	help
-	  Say Y here if you want low-level debugging support on
-	  RaspberryPi 2 and 3 boards.
-
-config DEBUG_RPI3_MINI_UART
-	bool "RaspberryPi 3 mini UART"
-	depends on ARCH_BCM283X
-	select DEBUG_BCM283X_UART
-	help
-	  Say Y here if you want low-level debugging support on
-	  RaspberryPi 3 board mini UART.
-
-config DEBUG_RPI4_MINI_UART
-	bool "RaspberryPi 4 mini UART"
-	depends on ARCH_BCM283X
-	select DEBUG_BCM283X_UART
-	help
-	  Say Y here if you want low-level debugging support on
-	  RaspberryPi 4 board mini UART.
-
-config DEBUG_ZYNQMP_UART
-	bool "Zynqmp Debug UART"
-	depends on ARCH_ZYNQMP
-	help
-	  Say Y here if you want kernel low-level debugging support
-	  on Zynqmp.
-
-config DEBUG_ERIZO
-	bool "Erizo ns16550 port"
-	depends on SOC_ERIZO
-	select DEBUG_LL_NS16550
-
-config DEBUG_STARFIVE
-	bool "Starfive ns16550 serial0 port"
-	depends on SOC_STARFIVE
-	select DEBUG_LL_NS16550
-
-config DEBUG_RISCV_VIRT
-	bool "RISC-V Virt ns16550 port"
-	depends on SOC_VIRT
-	select DEBUG_LL_NS16550
-
-config DEBUG_RISCVEMU_HTIF
-	bool "riscvemu HTIF port"
-	depends on SOC_VIRT
-	help
-	  When run without graphics support, tinyemu will expose access
-	  to the Virt I/O console as HTIF blocking console device as well.
-	  This is useful for low level debugging before Virt I/O DMA is
-	  initialized.
-
-config DEBUG_SIFIVE
-	bool "SiFive serial0 port"
-	depends on SOC_SIFIVE
-
-config DEBUG_LITEX
-	bool "LiteX serial port"
-	depends on SOC_LITEX
-
-config DEBUG_SUN20I
-	bool "Allwinner Sun20i ns16550 serial0 port"
-	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
-
-endchoice
-
-config DEBUG_LL_NS16550
-	bool
-	help
-	  Selected by RISC-V platforms that use ns16550 for debug_ll
-
-config DEBUG_IMX_UART_PORT
-	int "i.MX Debug UART Port Selection" if DEBUG_IMX1_UART || \
-						DEBUG_IMX21_UART || \
-						DEBUG_IMX25_UART || \
-						DEBUG_IMX27_UART || \
-						DEBUG_IMX31_UART || \
-						DEBUG_IMX35_UART || \
-						DEBUG_IMX51_UART || \
-						DEBUG_IMX53_UART || \
-						DEBUG_IMX6Q_UART || \
-						DEBUG_IMX7D_UART || \
-						DEBUG_IMX8M_UART || \
-						DEBUG_IMX9_UART || \
-						DEBUG_VF610_UART
-	default 1
-	depends on ARCH_IMX
-	help
-	  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_AM62X_UART
-	default 1
-	depends on ARCH_OMAP
-	help
-	  Choose UART port on which kernel low-level debug messages
-	  should be output. Possible values are:
-	  OMAP3: 1 - 3
-	  OMAP4: 1 - 3
-	  AM33XX: 0 - 2
-
-config DEBUG_ROCKCHIP_UART_PORT
-	int "RK3xxx UART debug port" if DEBUG_ROCKCHIP_RK3188_UART || \
-				DEBUG_ROCKCHIP_RK3288_UART || \
-				DEBUG_ROCKCHIP_RK3568_UART || \
-				DEBUG_ROCKCHIP_RK3588_UART || \
-				DEBUG_ROCKCHIP_RK3399_UART
-	default 2
-	depends on ARCH_ROCKCHIP
-	help
-	  Choose UART port on which kernel low-level debug messages
-	  should be output.
-
-config DEBUG_SOCFPGA_UART_PHYS_ADDR
-	hex "Physical base address of debug UART" if DEBUG_LL
-	default 0xffc02000 if DEBUG_SOCFPGA_UART0
-	default 0xffc02100 if DEBUG_SOCFPGA_UART1
-	depends on ARCH_SOCFPGA
-
-config DEBUG_SOCFPGA_UART_CLOCK
-	int "SoCFPGA UART debug clock" if DEBUG_LL
-	default 100000000 if ARCH_SOCFPGA_CYCLONE5
-	default  50000000 if ARCH_SOCFPGA_ARRIA10
-	depends on ARCH_SOCFPGA
-	help
-	  Choose UART root clock.
-
-
-config DEBUG_LAYERSCAPE_UART_PORT
-	int "Layerscape UART port selection"
-	depends on ARCH_LAYERSCAPE
-	default 1
-	help
-	  Select the UART port number used for early debugging here. Port
-	  numbers start counting from 1.
-
-config DEBUG_AT91_UART_BASE
-	hex "AT91 Debug UART Port Selection" if DEBUG_AT91_UART
-	default 0xfffff200 if SOC_AT91RM9200  || SOC_AT91SAM9260 \
-	                   || SOC_AT91SAM9261 || SOC_AT91SAM9X5  \
-			   || SOC_AT91SAM9N12
-	default 0xffffee00 if SOC_AT91SAM9263 || SOC_AT91SAM9G45 || SOC_SAMA5D3
-	default 0xfc069000 if SOC_SAMA5D4
-	default 0xf8020000 if SOC_SAMA5D2
-	default 0xfffff200
-	depends on ARCH_AT91
-	help
-	  Specify UART port base address on which barebox low-level
-	  debug messages should be output.
-
-config DEBUG_INITCALLS
-	bool "Trace initcalls"
-	select CONSOLE_FLUSH_LINE_BREAK
-	help
-	  If enabled this will print initcall traces.
-
-config DEBUG_PBL
-	bool "Print PBL debugging information"
-	depends on PBL_CONSOLE
-	help
-	  If enabled this will enable all debug prints in the prebootloader.
-	  For this to work, a console needs to be configured in the
-	  board-specific entry point and configured for either DEBUG_LL
-	  or PBL_CONSOLE.
-
-config DEBUG_PROBES
-	bool "Trace driver probes/removes"
-	select CONSOLE_FLUSH_LINE_BREAK
-	help
-	  If enabled this will log driver probe and remove traces. If DEBUG_LL is enabled,
-	  probes will be printed even before registering consoles. If it's disabled, they
-	  will be collected in the log and written out once a console is active.
-
-	  Removes are written to the log and will be printed as long as consoles exist.
-	  Most consoles do not implement a remove callback to remain operable until
-	  the very end. Consoles using DMA, however, must be removed.
-
-config DMA_API_DEBUG
-	bool "Enable debugging of DMA-API usage"
-	depends on HAS_DMA
-	help
-	  Enable this option to debug the use of the DMA API by device drivers.
-	  With this option you will be able to detect common bugs in device
-	  drivers like double-freeing of DMA mappings or freeing mappings that
-	  were never allocated.
-
-	  This option causes a performance degradation.  Use only if you want to
-	  debug device drivers and dma interactions.
-
-	  If unsure, say N.
-
-config DEBUG_LIST
-	bool "Debug linked list manipulation"
-	help
-	  Enable this to turn on extended checks in the linked-list
-	  walking routines.
-
-	  If unsure, say N.
-
-config PBL_BREAK
-	bool "Execute software break on pbl start"
-	depends on ARM && (!CPU_32v4T && !ARCH_TEGRA)
-	help
-	  If enabled, barebox will be compiled with BKPT instruction
-	  on early pbl init. This option should be used only with JTAG debugger!
-
-config PRINTF_FULL
-	bool "Support all extended printf format specifiers"
-	help
-	  Adds support for lesser used format specifiers like UUIDs and
-	  hex strings. Code requiring them should select it directly,
-	  so this is mainly for debugging. If unsure, say no.
-
-source "lib/Kconfig.ubsan"
-source "lib/kasan/Kconfig"
-
-config ASAN
-	bool "ASAN: runtime memory debugger"
-	depends on HAVE_ARCH_ASAN
-	help
-	  Enables ASAN (AddressSANitizer) - runtime memory debugger,
-	  designed to find out-of-bounds accesses and use-after-free bugs.
-
-config COMPILE_TEST
-	bool "compile-test drivers of other platforms"
-	default n
-	help
-	  Some drivers can be compiled on a different platform than they are
-	  intended to be run on. Despite they cannot be used there due to
-	  missing HW support, developers still, opposing to users, might want
-	  to build such drivers to compile-test them.
-
-	  If you are a developer and want to build as much as currently possible,
-	  say Y here. If you are a user, say N here to avoid being prompted for
-	  inclusion of unrelated drivers.
-
-config WERROR
-	bool "Compile barebox with warnings as errors"
-	default COMPILE_TEST
-	help
-	  A barebox build should not cause any compiler warnings, and this
-	  enables the '-Werror' flags to enforce that rule by default.
-
-	  However, if you have a new (or very old) compiler with odd and
-	  unusual warnings, or you have some architecture with problems,
-	  you may need to disable this config option in order to
-	  successfully build barebox.
-
-	  If in doubt, say Y.
-
-endmenu
-
-config HAS_DEBUG_LL
-	bool
+source "common/Kconfig.debug"
+source "common/boards/Kconfig"
 
 config DDR_SPD
 	bool
diff --git a/common/Kconfig.debug b/common/Kconfig.debug
new file mode 100644
index 000000000000..5d245de23c07
--- /dev/null
+++ b/common/Kconfig.debug
@@ -0,0 +1,153 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+menu "Debugging"
+
+config COMPILE_LOGLEVEL
+	int "compile loglevel"
+	default 6
+	help
+	  This defines the maximum loglevel compiled into the binary. Less important
+	  messages will be compiled away resulting in a smaller binary.
+
+	  0    system is unusable (emerg)
+	  1    action must be taken immediately (alert)
+	  2    critical conditions (crit)
+	  3    error conditions (err)
+	  4    warning conditions (warn)
+	  5    normal but significant condition (notice)
+	  6    informational (info)
+	  7    debug-level messages (debug)
+	  8    verbose debug messages (vdebug)
+
+config DEFAULT_LOGLEVEL
+	int "default loglevel"
+	default 7
+	help
+	  This defines the default runtime loglevel. It can be changed using the
+	  global.loglevel variable. Available logelevels are:
+
+	  0    system is unusable (emerg)
+	  1    action must be taken immediately (alert)
+	  2    critical conditions (crit)
+	  3    error conditions (err)
+	  4    warning conditions (warn)
+	  5    normal but significant condition (notice)
+	  6    informational (info)
+	  7    debug-level messages (debug)
+	  8    verbose debug messages (vdebug)
+
+source "common/Kconfig.debug_ll"
+
+config ARCH_WANT_FRAME_POINTERS
+	bool
+
+config FRAME_POINTER
+	bool "Compile barebox with frame pointers" if COMPILE_TEST
+	default y if ARCH_WANT_FRAME_POINTERS
+	help
+	  Selected by platforms that expect frame pointer usage, e.g.
+	  when stack unwinding is enabled. The resulting barebox image
+	  will be slightly larger and slower, but it can give precise
+	  debugging information when print stack traces.
+
+config DEBUG_INITCALLS
+	bool "Trace initcalls"
+	select CONSOLE_FLUSH_LINE_BREAK
+	help
+	  If enabled this will print initcall traces.
+
+config DEBUG_PBL
+	bool "Print PBL debugging information"
+	depends on PBL_CONSOLE
+	help
+	  If enabled this will enable all debug prints in the prebootloader.
+	  For this to work, a console needs to be configured in the
+	  board-specific entry point and configured for either DEBUG_LL
+	  or PBL_CONSOLE.
+
+config DEBUG_PROBES
+	bool "Trace driver probes/removes"
+	select CONSOLE_FLUSH_LINE_BREAK
+	help
+	  If enabled this will log driver probe and remove traces. If DEBUG_LL is enabled,
+	  probes will be printed even before registering consoles. If it's disabled, they
+	  will be collected in the log and written out once a console is active.
+
+	  Removes are written to the log and will be printed as long as consoles exist.
+	  Most consoles do not implement a remove callback to remain operable until
+	  the very end. Consoles using DMA, however, must be removed.
+
+config DMA_API_DEBUG
+	bool "Enable debugging of DMA-API usage"
+	depends on HAS_DMA
+	help
+	  Enable this option to debug the use of the DMA API by device drivers.
+	  With this option you will be able to detect common bugs in device
+	  drivers like double-freeing of DMA mappings or freeing mappings that
+	  were never allocated.
+
+	  This option causes a performance degradation.  Use only if you want to
+	  debug device drivers and dma interactions.
+
+	  If unsure, say N.
+
+config DEBUG_LIST
+	bool "Debug linked list manipulation"
+	help
+	  Enable this to turn on extended checks in the linked-list
+	  walking routines.
+
+	  If unsure, say N.
+
+config PBL_BREAK
+	bool "Execute software break on pbl start"
+	depends on ARM && (!CPU_32v4T && !ARCH_TEGRA)
+	help
+	  If enabled, barebox will be compiled with BKPT instruction
+	  on early pbl init. This option should be used only with JTAG debugger!
+
+config PRINTF_FULL
+	bool "Support all extended printf format specifiers"
+	help
+	  Adds support for lesser used format specifiers like UUIDs and
+	  hex strings. Code requiring them should select it directly,
+	  so this is mainly for debugging. If unsure, say no.
+
+source "lib/Kconfig.ubsan"
+source "lib/kasan/Kconfig"
+
+config ASAN
+	bool "ASAN: runtime memory debugger"
+	depends on HAVE_ARCH_ASAN
+	help
+	  Enables ASAN (AddressSANitizer) - runtime memory debugger,
+	  designed to find out-of-bounds accesses and use-after-free bugs.
+
+config COMPILE_TEST
+	bool "compile-test drivers of other platforms"
+	default n
+	help
+	  Some drivers can be compiled on a different platform than they are
+	  intended to be run on. Despite they cannot be used there due to
+	  missing HW support, developers still, opposing to users, might want
+	  to build such drivers to compile-test them.
+
+	  If you are a developer and want to build as much as currently possible,
+	  say Y here. If you are a user, say N here to avoid being prompted for
+	  inclusion of unrelated drivers.
+
+config WERROR
+	bool "Compile barebox with warnings as errors"
+	default COMPILE_TEST
+	help
+	  A barebox build should not cause any compiler warnings, and this
+	  enables the '-Werror' flags to enforce that rule by default.
+
+	  However, if you have a new (or very old) compiler with odd and
+	  unusual warnings, or you have some architecture with problems,
+	  you may need to disable this config option in order to
+	  successfully build barebox.
+
+	  If in doubt, say Y.
+
+endmenu
diff --git a/common/Kconfig.debug_ll b/common/Kconfig.debug_ll
new file mode 100644
index 000000000000..bdc1a7f3a6dc
--- /dev/null
+++ b/common/Kconfig.debug_ll
@@ -0,0 +1,430 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+config HAS_DEBUG_LL
+	bool
+
+config DEBUG_LL
+	bool
+	depends on HAS_DEBUG_LL
+	prompt "Low level debug messages (read help)"
+	help
+	  Enable this to get low level debug messages during barebox
+	  initialization. This is helpful if you are debugging code that
+	  executes before the console is initialized.
+
+	  This requires SoC specific support. Most SoCs require the
+	  debug UART to be initialized by a debugger or first stage
+	  bootloader.
+
+	  Note that selecting this option will limit barebox to a single
+	  UART definition, as specified below under "low-level debugging
+	  port". Attempting to boot the resulting image on a different
+	  platform *will not work*, so this option should not be enabled
+	  for builds that are intended to be portable.
+
+config DEBUG_IMX_UART
+	bool
+
+config DEBUG_ROCKCHIP_UART
+	bool
+
+config DEBUG_OMAP_UART
+	bool
+
+config DEBUG_BCM283X_UART
+	bool
+
+choice
+	prompt "Kernel low-level debugging port"
+	depends on DEBUG_LL
+
+config DEBUG_IMX1_UART
+	bool "i.MX1 Debug UART"
+	depends on ARCH_IMX1
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX1.
+
+config DEBUG_IMX21_UART
+	bool "i.MX21 Debug UART"
+	depends on ARCH_IMX21
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX21.
+
+config DEBUG_IMX25_UART
+	bool "i.MX25 Debug UART"
+	depends on ARCH_IMX25
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX25.
+
+config DEBUG_IMX27_UART
+	bool "i.MX27 Debug UART"
+	depends on ARCH_IMX27
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX27.
+
+config DEBUG_IMX31_UART
+	bool "i.MX31 Debug UART"
+	depends on ARCH_IMX31
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX31.
+
+config DEBUG_IMX35_UART
+	bool "i.MX35 Debug UART"
+	depends on ARCH_IMX35
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX35.
+
+config DEBUG_IMX50_UART
+	bool "i.MX50 Debug UART"
+	depends on ARCH_IMX50
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX50.
+
+config DEBUG_IMX51_UART
+	bool "i.MX51 Debug UART"
+	depends on ARCH_IMX51
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX51.
+
+config DEBUG_IMX53_UART
+	bool "i.MX53 Debug UART"
+	depends on ARCH_IMX53
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX53.
+
+config DEBUG_IMX6Q_UART
+	bool "i.MX6Q Debug UART"
+	depends on ARCH_IMX6
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on i.MX6Q.
+
+config DEBUG_IMX7D_UART
+	bool "i.MX7D Debug UART"
+	depends on ARCH_IMX7
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want barebox low-level debugging support
+	  on i.MX7D.
+
+config DEBUG_IMX8M_UART
+	bool "i.MX8M Debug UART"
+	depends on ARCH_IMX8M
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want barebox low-level debugging support
+	  on i.MX8M*.
+
+config DEBUG_IMX9_UART
+	bool "i.MX9 Debug UART"
+	depends on ARCH_IMX93
+	select DEBUG_IMX_UART
+
+config DEBUG_VEXPRESS_UART
+	bool "Vexpress Debug UART"
+	depends on ARCH_VEXPRESS
+	help
+	  Say Y here if you want barebox low-level debugging support
+	  on Vexpress.
+
+config DEBUG_VF610_UART
+	bool "VF610 Debug UART"
+	depends on ARCH_VF610
+	select DEBUG_IMX_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on VF610.
+
+config DEBUG_OMAP3_UART
+	bool "OMAP3 Debug UART"
+	depends on ARCH_OMAP3
+	select DEBUG_OMAP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on OMAP3.
+
+config DEBUG_OMAP4_UART
+	bool "OMAP4 Debug UART"
+	depends on ARCH_OMAP4
+	select DEBUG_OMAP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on OMAP4.
+
+config DEBUG_AM33XX_UART
+	bool "AM33XX Debug UART"
+	depends on ARCH_AM33XX
+	select DEBUG_OMAP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on AM33XX.
+
+config DEBUG_ROCKCHIP_RK3188_UART
+	bool "RK3188 Debug UART"
+	depends on ARCH_RK3188
+	select DEBUG_ROCKCHIP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on RK3188.
+
+config DEBUG_ROCKCHIP_RK3288_UART
+	bool "RK3288 Debug UART"
+	depends on ARCH_RK3288
+	select DEBUG_ROCKCHIP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on RK3288.
+
+config DEBUG_ROCKCHIP_RK3568_UART
+	bool "RK3568 Debug UART"
+	depends on ARCH_RK3568
+	select DEBUG_ROCKCHIP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on RK3568.
+
+config DEBUG_ROCKCHIP_RK3588_UART
+	bool "RK3588 Debug UART"
+	depends on ARCH_RK3588
+	select DEBUG_ROCKCHIP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on RK3588.
+
+config DEBUG_ROCKCHIP_RK3399_UART
+	bool "RK3399 Debug UART"
+	depends on ARCH_RK3399
+	select DEBUG_ROCKCHIP_UART
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on RK3399.
+
+config DEBUG_SOCFPGA_UART0
+	bool "Use SOCFPGA UART0 for low-level debug"
+	depends on ARCH_SOCFPGA
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on SOCFPGA(Cyclone 5 and Arria 5) based platforms.
+
+config DEBUG_SOCFPGA_UART1
+	bool "Use SOCFPGA UART1 for low-level debug"
+	depends on ARCH_SOCFPGA
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on SOCFPGA(Arria 10) based platforms.
+
+config DEBUG_STM32MP_UART
+	bool "Use STM32MP UART4 for low-level debug"
+	depends on ARCH_STM32
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on STM32MP.
+
+config DEBUG_RPI1_UART
+	bool "RaspberryPi 1 PL011 UART"
+	depends on ARCH_BCM283X
+	select DEBUG_BCM283X_UART
+	help
+	  Say Y here if you want low-level debugging support on
+	  RaspberryPi 1 boards.
+
+config DEBUG_AT91_UART
+	bool "AT91 Debug UART"
+	depends on ARCH_AT91
+	help
+	  Say Y here if you want barebox low-level debugging support
+	  on AT91 based platforms.
+
+config DEBUG_RPI2_3_UART
+	bool "RaspberryPi 2/3 PL011 UART"
+	depends on ARCH_BCM283X
+	select DEBUG_BCM283X_UART
+	help
+	  Say Y here if you want low-level debugging support on
+	  RaspberryPi 2 and 3 boards.
+
+config DEBUG_RPI3_MINI_UART
+	bool "RaspberryPi 3 mini UART"
+	depends on ARCH_BCM283X
+	select DEBUG_BCM283X_UART
+	help
+	  Say Y here if you want low-level debugging support on
+	  RaspberryPi 3 board mini UART.
+
+config DEBUG_RPI4_MINI_UART
+	bool "RaspberryPi 4 mini UART"
+	depends on ARCH_BCM283X
+	select DEBUG_BCM283X_UART
+	help
+	  Say Y here if you want low-level debugging support on
+	  RaspberryPi 4 board mini UART.
+
+config DEBUG_ZYNQMP_UART
+	bool "Zynqmp Debug UART"
+	depends on ARCH_ZYNQMP
+	help
+	  Say Y here if you want kernel low-level debugging support
+	  on Zynqmp.
+
+config DEBUG_ERIZO
+	bool "Erizo ns16550 port"
+	depends on SOC_ERIZO
+	select DEBUG_LL_NS16550
+
+config DEBUG_STARFIVE
+	bool "Starfive ns16550 serial0 port"
+	depends on SOC_STARFIVE
+	select DEBUG_LL_NS16550
+
+config DEBUG_RISCV_VIRT
+	bool "RISC-V Virt ns16550 port"
+	depends on SOC_VIRT
+	select DEBUG_LL_NS16550
+
+config DEBUG_RISCVEMU_HTIF
+	bool "riscvemu HTIF port"
+	depends on SOC_VIRT
+	help
+	  When run without graphics support, tinyemu will expose access
+	  to the Virt I/O console as HTIF blocking console device as well.
+	  This is useful for low level debugging before Virt I/O DMA is
+	  initialized.
+
+config DEBUG_SIFIVE
+	bool "SiFive serial0 port"
+	depends on SOC_SIFIVE
+
+config DEBUG_LITEX
+	bool "LiteX serial port"
+	depends on SOC_LITEX
+
+config DEBUG_SUN20I
+	bool "Allwinner Sun20i ns16550 serial0 port"
+	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
+
+endchoice
+
+config DEBUG_LL_NS16550
+	bool
+	help
+	  Selected by RISC-V platforms that use ns16550 for debug_ll
+
+config DEBUG_IMX_UART_PORT
+	int "i.MX Debug UART Port Selection" if DEBUG_IMX1_UART || \
+						DEBUG_IMX21_UART || \
+						DEBUG_IMX25_UART || \
+						DEBUG_IMX27_UART || \
+						DEBUG_IMX31_UART || \
+						DEBUG_IMX35_UART || \
+						DEBUG_IMX51_UART || \
+						DEBUG_IMX53_UART || \
+						DEBUG_IMX6Q_UART || \
+						DEBUG_IMX7D_UART || \
+						DEBUG_IMX8M_UART || \
+						DEBUG_IMX9_UART || \
+						DEBUG_VF610_UART
+	default 1
+	depends on ARCH_IMX
+	help
+	  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_AM62X_UART
+	default 1
+	depends on ARCH_OMAP
+	help
+	  Choose UART port on which kernel low-level debug messages
+	  should be output. Possible values are:
+	  OMAP3: 1 - 3
+	  OMAP4: 1 - 3
+	  AM33XX: 0 - 2
+
+config DEBUG_ROCKCHIP_UART_PORT
+	int "RK3xxx UART debug port" if DEBUG_ROCKCHIP_RK3188_UART || \
+				DEBUG_ROCKCHIP_RK3288_UART || \
+				DEBUG_ROCKCHIP_RK3568_UART || \
+				DEBUG_ROCKCHIP_RK3588_UART || \
+				DEBUG_ROCKCHIP_RK3399_UART
+	default 2
+	depends on ARCH_ROCKCHIP
+	help
+	  Choose UART port on which kernel low-level debug messages
+	  should be output.
+
+config DEBUG_SOCFPGA_UART_PHYS_ADDR
+	hex "Physical base address of debug UART" if DEBUG_LL
+	default 0xffc02000 if DEBUG_SOCFPGA_UART0
+	default 0xffc02100 if DEBUG_SOCFPGA_UART1
+	depends on ARCH_SOCFPGA
+
+config DEBUG_SOCFPGA_UART_CLOCK
+	int "SoCFPGA UART debug clock" if DEBUG_LL
+	default 100000000 if ARCH_SOCFPGA_CYCLONE5
+	default  50000000 if ARCH_SOCFPGA_ARRIA10
+	depends on ARCH_SOCFPGA
+	help
+	  Choose UART root clock.
+
+
+config DEBUG_LAYERSCAPE_UART_PORT
+	int "Layerscape UART port selection"
+	depends on ARCH_LAYERSCAPE
+	default 1
+	help
+	  Select the UART port number used for early debugging here. Port
+	  numbers start counting from 1.
+
+config DEBUG_AT91_UART_BASE
+	hex "AT91 Debug UART Port Selection" if DEBUG_AT91_UART
+	default 0xfffff200 if SOC_AT91RM9200  || SOC_AT91SAM9260 \
+	                   || SOC_AT91SAM9261 || SOC_AT91SAM9X5  \
+			   || SOC_AT91SAM9N12
+	default 0xffffee00 if SOC_AT91SAM9263 || SOC_AT91SAM9G45 || SOC_SAMA5D3
+	default 0xfc069000 if SOC_SAMA5D4
+	default 0xf8020000 if SOC_SAMA5D2
+	default 0xfffff200
+	depends on ARCH_AT91
+	help
+	  Specify UART port base address on which barebox low-level
+	  debug messages should be output.
-- 
2.39.2




More information about the barebox mailing list