[PATCH] stm32mp: fix compilation issue with DEBUG_UART
Patrice CHOTARD
patrice.chotard at foss.st.com
Tue Oct 18 08:38:14 CEST 2022
On 10/11/22 16:44, Patrick Delaunay wrote:
> Fix the compilation issue when CONFIG_DEBUG_UART is activated
>
> drivers/serial/serial_stm32.o: in function `debug_uart_init':
> drivers/serial/serial_stm32.c:291: undefined reference to \
> `board_debug_uart_init'
>
> The board_debug_uart_init is needed for SPL boot, called in
> cpu.c::mach_cpu_init(); it is defined in board/st/stm32mp1/spl.c.
>
> But with the removal #ifdefs patch, the function debug_uart_init() is
> always compiled even if not present in the final U-Boot image.
>
> This patch adds a file to provided this function when DEBUG_UART and SPL
> are activated.
>
> Fixes: c8b2eef52b6c ("stm32mp15: tidy up #ifdefs in cpu.c")
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> ---
>
> arch/arm/mach-stm32mp/Kconfig.15x | 2 +-
> board/engicam/stm32mp1/Makefile | 2 ++
> board/engicam/stm32mp1/spl.c | 25 -------------------------
> board/st/stm32mp1/Makefile | 2 ++
> board/st/stm32mp1/debug_uart.c | 29 +++++++++++++++++++++++++++++
> board/st/stm32mp1/spl.c | 28 ----------------------------
> 6 files changed, 34 insertions(+), 54 deletions(-)
> create mode 100644 board/st/stm32mp1/debug_uart.c
>
> diff --git a/arch/arm/mach-stm32mp/Kconfig.15x b/arch/arm/mach-stm32mp/Kconfig.15x
> index d516270292a..5bd9b53a5d8 100644
> --- a/arch/arm/mach-stm32mp/Kconfig.15x
> +++ b/arch/arm/mach-stm32mp/Kconfig.15x
> @@ -117,7 +117,7 @@ endif
> if DEBUG_UART
>
> config DEBUG_UART_BOARD_INIT
> - default y
> + default y if SPL
>
> # debug on UART4 by default
> config DEBUG_UART_BASE
> diff --git a/board/engicam/stm32mp1/Makefile b/board/engicam/stm32mp1/Makefile
> index 65560df2900..155d33f9eec 100644
> --- a/board/engicam/stm32mp1/Makefile
> +++ b/board/engicam/stm32mp1/Makefile
> @@ -8,3 +8,5 @@ obj-y += spl.o
> else
> obj-y += stm32mp1.o
> endif
> +
> +obj-$(CONFIG_DEBUG_UART_BOARD_INIT) += ../../st/stm32mp1/debug_uart.o
> diff --git a/board/engicam/stm32mp1/spl.c b/board/engicam/stm32mp1/spl.c
> index 3aa738b3faa..2b7779cc01d 100644
> --- a/board/engicam/stm32mp1/spl.c
> +++ b/board/engicam/stm32mp1/spl.c
> @@ -6,7 +6,6 @@
> */
>
> #include <common.h>
> -#include <asm/io.h>
>
> /* board early initialisation in board_f: need to use global variable */
> static u32 opp_voltage_mv __section(".data");
> @@ -22,27 +21,3 @@ int board_early_init_f(void)
> return 0;
> }
>
> -#ifdef CONFIG_DEBUG_UART_BOARD_INIT
> -void board_debug_uart_init(void)
> -{
> -#if (CONFIG_DEBUG_UART_BASE == STM32_UART4_BASE)
> -
> -#define RCC_MP_APB1ENSETR (STM32_RCC_BASE + 0x0A00)
> -#define RCC_MP_AHB4ENSETR (STM32_RCC_BASE + 0x0A28)
> -
> - /* UART4 clock enable */
> - setbits_le32(RCC_MP_APB1ENSETR, BIT(16));
> -
> -#define GPIOG_BASE 0x50008000
> - /* GPIOG clock enable */
> - writel(BIT(6), RCC_MP_AHB4ENSETR);
> - /* GPIO configuration for ST boards: Uart4 TX = G11 */
> - writel(0xffbfffff, GPIOG_BASE + 0x00);
> - writel(0x00006000, GPIOG_BASE + 0x24);
> -#else
> -
> -#error("CONFIG_DEBUG_UART_BASE: not supported value")
> -
> -#endif
> -}
> -#endif
> diff --git a/board/st/stm32mp1/Makefile b/board/st/stm32mp1/Makefile
> index 65560df2900..f2d720b67b3 100644
> --- a/board/st/stm32mp1/Makefile
> +++ b/board/st/stm32mp1/Makefile
> @@ -8,3 +8,5 @@ obj-y += spl.o
> else
> obj-y += stm32mp1.o
> endif
> +
> +obj-$(CONFIG_DEBUG_UART_BOARD_INIT) += debug_uart.o
> diff --git a/board/st/stm32mp1/debug_uart.c b/board/st/stm32mp1/debug_uart.c
> new file mode 100644
> index 00000000000..24e3f9f2201
> --- /dev/null
> +++ b/board/st/stm32mp1/debug_uart.c
> @@ -0,0 +1,29 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause
> +/*
> + * Copyright (C) 2022, STMicroelectronics - All Rights Reserved
> + */
> +
> +#include <config.h>
> +#include <debug_uart.h>
> +#include <asm/io.h>
> +#include <asm/arch/stm32.h>
> +#include <linux/bitops.h>
> +
> +#define RCC_MP_APB1ENSETR (STM32_RCC_BASE + 0x0A00)
> +#define RCC_MP_AHB4ENSETR (STM32_RCC_BASE + 0x0A28)
> +
> +#define GPIOG_BASE 0x50008000
> +
> +void board_debug_uart_init(void)
> +{
> + if (CONFIG_DEBUG_UART_BASE == STM32_UART4_BASE) {
> + /* UART4 clock enable */
> + setbits_le32(RCC_MP_APB1ENSETR, BIT(16));
> +
> + /* GPIOG clock enable */
> + writel(BIT(6), RCC_MP_AHB4ENSETR);
> + /* GPIO configuration for ST boards: Uart4 TX = G11 */
> + writel(0xffbfffff, GPIOG_BASE + 0x00);
> + writel(0x00006000, GPIOG_BASE + 0x24);
> + }
> +}
> diff --git a/board/st/stm32mp1/spl.c b/board/st/stm32mp1/spl.c
> index 8e4549a1b35..747ec7e445a 100644
> --- a/board/st/stm32mp1/spl.c
> +++ b/board/st/stm32mp1/spl.c
> @@ -5,11 +5,7 @@
>
> #include <config.h>
> #include <common.h>
> -#include <init.h>
> -#include <asm/io.h>
> #include <asm/arch/sys_proto.h>
> -#include <linux/bitops.h>
> -#include <linux/delay.h>
> #include "../common/stpmic1.h"
>
> /* board early initialisation in board_f: need to use global variable */
> @@ -29,27 +25,3 @@ int board_early_init_f(void)
> return 0;
> }
>
> -#ifdef CONFIG_DEBUG_UART_BOARD_INIT
> -void board_debug_uart_init(void)
> -{
> -#if (CONFIG_DEBUG_UART_BASE == STM32_UART4_BASE)
> -
> -#define RCC_MP_APB1ENSETR (STM32_RCC_BASE + 0x0A00)
> -#define RCC_MP_AHB4ENSETR (STM32_RCC_BASE + 0x0A28)
> -
> - /* UART4 clock enable */
> - setbits_le32(RCC_MP_APB1ENSETR, BIT(16));
> -
> -#define GPIOG_BASE 0x50008000
> - /* GPIOG clock enable */
> - writel(BIT(6), RCC_MP_AHB4ENSETR);
> - /* GPIO configuration for ST boards: Uart4 TX = G11 */
> - writel(0xffbfffff, GPIOG_BASE + 0x00);
> - writel(0x00006000, GPIOG_BASE + 0x24);
> -#else
> -
> -#error("CONFIG_DEBUG_UART_BASE: not supported value")
> -
> -#endif
> -}
> -#endif
Applied on u-boot-stm32/master
Thanks
Patrice
More information about the U-Boot
mailing list