[PATCH] arm: am33xx: Fix early debug UART initialization

Simon Glass sjg at chromium.org
Wed Feb 23 23:58:52 CET 2022


Hi Felix,

On Mon, 14 Feb 2022 at 09:57, Felix Brack <fb at ltec.ch> wrote:
>
> The changes from commit 0dba45864b2a ("arm: Init the debug UART")
> prevent the early debug UART from being initialized correctly.
> By adding a new SoC specific early UART initialization function this

SoC-specific

You need the hyphen for this to make sense, since you are creating an adjective.

> patch provides a generic location to add the required code. This code
> has to be SoC and not board specific.

board-specific

> For the am33xx SoCs the fix consist of configuring early clocks.
>
> Signed-off-by: Felix Brack <fb at ltec.ch>
> ---
>
>  arch/arm/mach-omap2/am33xx/board.c |  7 +++++++
>  drivers/serial/Kconfig             | 13 +++++++++++++
>  include/debug_uart.h               | 15 +++++++++++++++
>  3 files changed, 35 insertions(+)

More nits below.

Reviewed-by: Simon Glass <sjg at chromium.org>

>
> diff --git a/arch/arm/mach-omap2/am33xx/board.c b/arch/arm/mach-omap2/am33xx/board.c
> index c44667668e..a7f0445b93 100644
> --- a/arch/arm/mach-omap2/am33xx/board.c
> +++ b/arch/arm/mach-omap2/am33xx/board.c
> @@ -604,3 +604,10 @@ int arch_cpu_init_dm(void)
>  #endif
>         return 0;
>  }
> +
> +#if IS_ENABLED(CONFIG_DEBUG_UART_SOC_INIT)
> +void soc_debug_uart_init(void)
> +{
> +       setup_early_clocks();
> +}
> +#endif
> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
> index 345d1881f5..3da4064d35 100644
> --- a/drivers/serial/Kconfig
> +++ b/drivers/serial/Kconfig
> @@ -490,6 +490,19 @@ config DEBUG_UART_SHIFT
>           value. Use this value to specify the shift to use, where 0=byte
>           registers, 2=32-bit word registers, etc.
>
> +config DEBUG_UART_SOC_INIT
> +       bool "Enable SoC-specific debug UART init"
> +       depends on DEBUG_UART
> +       help
> +         Boards using the same SoC might require some common settings before
> +         the debug UART can be used. The board specific board_debug_uart_init()
> +         is not the right place for such common settings as they would apply
> +         to a specific board only instead of all boards using the same SoC.
> +         When this option is enabled, the SoC specific function
> +         soc_debug_uart_init() will be called when debug_uart_init() is called.
> +         You can put any code here that is needed to set up the UART ready for
> +         use.

Please mention the order in which the board and SoC functions are called.

> +
>  config DEBUG_UART_BOARD_INIT
>         bool "Enable board-specific debug UART init"
>         depends on DEBUG_UART
> diff --git a/include/debug_uart.h b/include/debug_uart.h
> index 714b369e6f..ebc84c44cd 100644
> --- a/include/debug_uart.h
> +++ b/include/debug_uart.h
> @@ -42,6 +42,12 @@
>   * - Immediately afterwards, add DEBUG_UART_FUNCS to define the rest of the
>   *     functionality (printch(), etc.)
>   *
> + * If your SoC needs additional init for the UART to work, enable
> + * CONFIG_DEBUG_UART_SOC_INIT and write a function called
> + * soc_debug_uart_init() to perform that init. When debug_uart_init() is
> + * called, the init will happen automatically. Board specific code does not
> + * go here, see board_debug_uart_init() below.

Again please fix your specifics.


> + *
>   * If your board needs additional init for the UART to work, enable
>   * CONFIG_DEBUG_UART_BOARD_INIT and write a function called
>   * board_debug_uart_init() to perform that init. When debug_uart_init() is
> @@ -61,6 +67,14 @@
>   */
>  void debug_uart_init(void);
>
> +#ifdef CONFIG_DEBUG_UART_SOC_INIT
> +void soc_debug_uart_init(void);
> +#else
> +static inline void soc_debug_uart_init(void)
> +{
> +}
> +#endif
> +
>  #ifdef CONFIG_DEBUG_UART_BOARD_INIT
>  void board_debug_uart_init(void);
>  #else
> @@ -192,6 +206,7 @@ void printdec(unsigned int value);
>  \
>         void debug_uart_init(void) \
>         { \
> +               soc_debug_uart_init(); \
>                 board_debug_uart_init(); \
>                 _debug_uart_init(); \
>                 _DEBUG_UART_ANNOUNCE \
> --
> 2.25.1
>


More information about the U-Boot mailing list