[PATCH v3 2/6] apq8016: Add support for UART1 clocks and pinmux
Caleb Connolly
caleb.connolly at linaro.org
Mon Apr 8 15:17:04 CEST 2024
On 05/04/2024 11:07, Sumit Garg wrote:
> SE HMIBSC board uses UART1 as the main debug console, so add
> corresponding clocks and pinmux support. Along with that update
> instructions to enable clocks for debug UART support.
>
> Signed-off-by: Sumit Garg <sumit.garg at linaro.org>
Reviewed-by: Caleb Connolly <caleb.connolly at linaro.org>
> ---
> drivers/clk/qcom/clock-apq8016.c | 38 ++++++++++++++++++--------
> drivers/pinctrl/qcom/pinctrl-apq8016.c | 1 +
> drivers/serial/serial_msm.c | 11 ++++++--
> 3 files changed, 35 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/clk/qcom/clock-apq8016.c b/drivers/clk/qcom/clock-apq8016.c
> index 5a5868169c8..9556b94774a 100644
> --- a/drivers/clk/qcom/clock-apq8016.c
> +++ b/drivers/clk/qcom/clock-apq8016.c
> @@ -31,7 +31,8 @@
> #define BLSP1_AHB_CBCR 0x1008
>
> /* Uart clock control registers */
> -#define BLSP1_UART2_BCR (0x3028)
> +#define BLSP1_UART1_APPS_CBCR (0x203C)
> +#define BLSP1_UART1_APPS_CMD_RCGR (0x2044)
> #define BLSP1_UART2_APPS_CBCR (0x302C)
> #define BLSP1_UART2_APPS_CMD_RCGR (0x3034)
>
> @@ -52,7 +53,7 @@ static struct vote_clk gcc_blsp1_ahb_clk = {
> };
>
> /* SDHCI */
> -static int clk_init_sdc(struct msm_clk_priv *priv, int slot, uint rate)
> +static int apq8016_clk_init_sdc(struct msm_clk_priv *priv, int slot, uint rate)
> {
> int div = 15; /* 100MHz default */
>
> @@ -70,20 +71,35 @@ static int clk_init_sdc(struct msm_clk_priv *priv, int slot, uint rate)
> }
>
> /* UART: 115200 */
> -int apq8016_clk_init_uart(phys_addr_t base)
> +int apq8016_clk_init_uart(phys_addr_t base, unsigned long id)
> {
> + u32 cmd_rcgr, apps_cbcr;
> +
> + switch (id) {
> + case GCC_BLSP1_UART1_APPS_CLK:
> + cmd_rcgr = BLSP1_UART1_APPS_CMD_RCGR;
> + apps_cbcr = BLSP1_UART1_APPS_CBCR;
> + break;
> + case GCC_BLSP1_UART2_APPS_CLK:
> + cmd_rcgr = BLSP1_UART2_APPS_CMD_RCGR;
> + apps_cbcr = BLSP1_UART2_APPS_CBCR;
> + break;
> + default:
> + return 0;
> + }
> +
> /* Enable AHB clock */
> clk_enable_vote_clk(base, &gcc_blsp1_ahb_clk);
>
> /* 7372800 uart block clock @ GPLL0 */
> - clk_rcg_set_rate_mnd(base, BLSP1_UART2_APPS_CMD_RCGR, 1, 144, 15625,
> - CFG_CLK_SRC_GPLL0, 16);
> + clk_rcg_set_rate_mnd(base, cmd_rcgr, 1, 144, 15625, CFG_CLK_SRC_GPLL0,
> + 16);
>
> /* Vote for gpll0 clock */
> clk_enable_gpll0(base, &gpll0_vote_clk);
>
> /* Enable core clk */
> - clk_enable_cbc(base + BLSP1_UART2_APPS_CBCR);
> + clk_enable_cbc(base + apps_cbcr);
>
> return 0;
> }
> @@ -94,14 +110,12 @@ static ulong apq8016_clk_set_rate(struct clk *clk, ulong rate)
>
> switch (clk->id) {
> case GCC_SDCC1_APPS_CLK: /* SDC1 */
> - return clk_init_sdc(priv, 0, rate);
> - break;
> + return apq8016_clk_init_sdc(priv, 0, rate);
> case GCC_SDCC2_APPS_CLK: /* SDC2 */
> - return clk_init_sdc(priv, 1, rate);
> - break;
> + return apq8016_clk_init_sdc(priv, 1, rate);
> + case GCC_BLSP1_UART1_APPS_CLK: /* UART1 */
> case GCC_BLSP1_UART2_APPS_CLK: /* UART2 */
> - return apq8016_clk_init_uart(priv->base);
> - break;
> + return apq8016_clk_init_uart(priv->base, clk->id);
> default:
> return 0;
> }
> diff --git a/drivers/pinctrl/qcom/pinctrl-apq8016.c b/drivers/pinctrl/qcom/pinctrl-apq8016.c
> index a9a00f4b081..1ee8b7db1a2 100644
> --- a/drivers/pinctrl/qcom/pinctrl-apq8016.c
> +++ b/drivers/pinctrl/qcom/pinctrl-apq8016.c
> @@ -29,6 +29,7 @@ static const char * const msm_pinctrl_pins[] = {
> };
>
> static const struct pinctrl_function msm_pinctrl_functions[] = {
> + {"blsp_uart1", 2},
> {"blsp_uart2", 2},
> };
>
> diff --git a/drivers/serial/serial_msm.c b/drivers/serial/serial_msm.c
> index ac4280c6c4c..4de10e75191 100644
> --- a/drivers/serial/serial_msm.c
> +++ b/drivers/serial/serial_msm.c
> @@ -248,12 +248,17 @@ static struct msm_serial_data init_serial_data = {
> #include <debug_uart.h>
>
> /* Uncomment to turn on UART clocks when debugging U-Boot as aboot on MSM8916 */
> -//int apq8016_clk_init_uart(phys_addr_t gcc_base);
> +//int apq8016_clk_init_uart(phys_addr_t gcc_base, unsigned long id);
>
> static inline void _debug_uart_init(void)
> {
> - /* Uncomment to turn on UART clocks when debugging U-Boot as aboot on MSM8916 */
> - //apq8016_clk_init_uart(0x1800000);
> + /*
> + * Uncomment to turn on UART clocks when debugging U-Boot as aboot
> + * on MSM8916. Supported debug UART clock IDs:
> + * - db410c: GCC_BLSP1_UART2_APPS_CLK
> + * - HMIBSC: GCC_BLSP1_UART1_APPS_CLK
> + */
> + //apq8016_clk_init_uart(0x1800000, <uart_clk_id>);
> uart_dm_init(&init_serial_data);
> }
>
--
// Caleb (they/them)
More information about the U-Boot
mailing list