Hi Quentin,

On 2024-04-22 18:41, Quentin Schulz wrote:
> From: Quentin Schulz <quentin.sch...@theobroma-systems.com>
> 
> UART2 controller is the controller in the reference design for debug
> console. The default mux is M0 in that reference design. Until now, all
> boards seemed to be using UART2M0 but RK3588 Tiger for example will be
> using UART2M2 instead.
> 
> Therefore, let's add support for UART2M1 and M2 as possible muxes for
> the UART2 controller used as debug console. UART2M1 support was not
> tested.
> 
> The default value is M0 to match the one used currently by all devices
> and the reference design.

Is this really necessary?

Use of board_debug_uart_init() should typically only be needed in TPL on
Rockchip platform, and with ROCKCHIP_TPL being used it should be enough
to use rkbin/ddrbin_tool to change uart config and just ensure correct
pinctrl is used for uart node, and that the uart node is included in SPL
for correct serial console use.

May I suggest you try adding following to defconfig and drop this patch?

  # CONFIG_DEBUG_UART_BOARD_INIT is not set

I would expect that should result in same/working behavior without
having to add any new code.

Regards,
Jonas

> 
> Cc: Quentin Schulz <foss+ub...@0leil.net>
> Signed-off-by: Quentin Schulz <quentin.sch...@theobroma-systems.com>
> ---
>  arch/arm/mach-rockchip/rk3588/Kconfig  | 10 ++++++++++
>  arch/arm/mach-rockchip/rk3588/rk3588.c | 36 
> ++++++++++++++++++++++++++++++++++
>  2 files changed, 46 insertions(+)
> 
> diff --git a/arch/arm/mach-rockchip/rk3588/Kconfig 
> b/arch/arm/mach-rockchip/rk3588/Kconfig
> index d7e4af31f24..cacdb0459c9 100644
> --- a/arch/arm/mach-rockchip/rk3588/Kconfig
> +++ b/arch/arm/mach-rockchip/rk3588/Kconfig
> @@ -221,6 +221,16 @@ config ROCKCHIP_COMMON_STACK_ADDR
>  config TEXT_BASE
>       default 0x00a00000
>  
> +config DEBUG_UART_CHANNEL
> +     int "Mux channel to use for debug UART2"
> +     depends on DEBUG_UART_BOARD_INIT
> +     default 0
> +     range 0 2
> +     help
> +       UART2 can use three different set of pins to route the output.
> +       For using the UART for early debugging the route to use needs
> +       to be declared (0, 1 or 2).
> +
>  source board/edgeble/neural-compute-module-6/Kconfig
>  source board/friendlyelec/nanopc-t6-rk3588/Kconfig
>  source board/pine64/quartzpro64-rk3588/Kconfig
> diff --git a/arch/arm/mach-rockchip/rk3588/rk3588.c 
> b/arch/arm/mach-rockchip/rk3588/rk3588.c
> index eb65dafe3a2..e330ad6a697 100644
> --- a/arch/arm/mach-rockchip/rk3588/rk3588.c
> +++ b/arch/arm/mach-rockchip/rk3588/rk3588.c
> @@ -94,9 +94,32 @@ enum {
>       GPIO0B6_UART2_RX_M0     = 10,
>  };
>  
> +/* GPIO3B_IOMUX_SEL_L */
> +enum {
> +     GPIO3B1_SHIFT           = 4,
> +     GPIO3B1_MASK            = GENMASK(7, 4),
> +     GPIO3B1_UART2_TX_M2     = 10,
> +
> +     GPIO3B2_SHIFT           = 8,
> +     GPIO3B2_MASK            = GENMASK(11, 8),
> +     GPIO3B2_UART2_RX_M2     = 10,
> +};
> +
> +/* GPIO4D_IOMUX_SEL_L */
> +enum {
> +     GPIO4D0_SHIFT           = 0,
> +     GPIO4D0_MASK            = GENMASK(3, 0),
> +     GPIO4D0_UART2_TX_M1     = 10,
> +
> +     GPIO4D1_SHIFT           = 4,
> +     GPIO4D1_MASK            = GENMASK(7, 4),
> +     GPIO4D1_UART2_RX_M1     = 10,
> +};
> +
>  void board_debug_uart_init(void)
>  {
>       __maybe_unused static struct rk3588_bus_ioc * const bus_ioc = (void 
> *)BUS_IOC_BASE;
> +#if (CONFIG_DEBUG_UART_CHANNEL == 0)
>       static struct rk3588_pmu2_ioc * const pmu2_ioc = (void *)PMU2_IOC_BASE;
>  
>       /* Refer to BUS_IOC */
> @@ -110,6 +133,19 @@ void board_debug_uart_init(void)
>                    GPIO0B6_MASK | GPIO0B5_MASK,
>                    GPIO0B6_UART2_RX_M0 << GPIO0B6_SHIFT |
>                    GPIO0B5_UART2_TX_M0 << GPIO0B5_SHIFT);
> +#elif (CONFIG_DEBUG_UART_CHANNEL == 1)
> +     /* UART2_M1 Switch iomux */
> +     rk_clrsetreg(&bus_ioc->gpio4d_iomux_sel_l,
> +                  GPIO4D0_MASK | GPIO4D1_MASK,
> +                  GPIO4D0_UART2_TX_M1 << GPIO4D0_UART2_TX_M1 |
> +                  GPIO4D1_UART2_RX_M1 << GPIO4D1_SHIFT);
> +#else
> +     /* UART2_M2 Switch iomux */
> +     rk_clrsetreg(&bus_ioc->gpio3b_iomux_sel_l,
> +                  GPIO3B1_MASK | GPIO3B2_MASK,
> +                  GPIO3B1_UART2_TX_M2 << GPIO3B1_SHIFT |
> +                  GPIO3B2_UART2_RX_M2 << GPIO3B2_SHIFT);
> +#endif /* CONFIG_DEBUG_UART_CHANNEL */
>  }
>  
>  #ifdef CONFIG_SPL_BUILD
> 

Reply via email to