[PATCH v5 03/19] clk: at91: sam9x60: Register the required clocks for USB

Sean Anderson seanga2 at gmail.com
Wed Jan 4 18:49:26 CET 2023


On 12/22/22 05:53, Sergiu Moga wrote:
> Register into DM the clocks required to properly enable USB functionality
> within the bootloader.
> 
> Signed-off-by: Sergiu Moga <sergiu.moga at microchip.com>
> ---
> 
> 
> v1 -> v2:
> - No change
> 
> 
> v2 -> v3:
> - Remove the no longer required #if CONFIG_IS_ENABLED(AT91_SAM9X60_USB)
> 
> 
> v3 -> v5:
> - No change
> 
> 
> 
>   drivers/clk/at91/sam9x60.c | 33 +++++++++++++++++++++++++++++++++
>   1 file changed, 33 insertions(+)
> 
> diff --git a/drivers/clk/at91/sam9x60.c b/drivers/clk/at91/sam9x60.c
> index 6b5486c6c9..14c2ffcac1 100644
> --- a/drivers/clk/at91/sam9x60.c
> +++ b/drivers/clk/at91/sam9x60.c
> @@ -76,6 +76,8 @@ enum pmc_clk_ids {
>   	ID_QSPI			= 18,
>   
>   	ID_MCK_PRES		= 19,
> +	ID_USBCK		= 20,
> +	ID_UHPCK		= 21,
>   
>   	ID_MAX,
>   };
> @@ -99,6 +101,7 @@ static const char *clk_names[] = {
>   	[ID_PLL_A_DIV]		= "plla_divpmcck",
>   	[ID_MCK_PRES]		= "mck_pres",
>   	[ID_MCK_DIV]		= "mck_div",
> +	[ID_USBCK]		= "usbck",
>   };
>   
>   /* Fractional PLL output range. */
> @@ -171,6 +174,13 @@ static const struct clk_pcr_layout pcr_layout = {
>   	.pid_mask = GENMASK(6, 0),
>   };
>   
> +/* USB clock layout */
> +static const struct clk_usbck_layout usbck_layout = {
> +	.offset = 0x38,
> +	.usbs_mask = GENMASK(1, 0),
> +	.usbdiv_mask = GENMASK(11, 8),
> +};
> +
>   /**
>    * PLL clocks description
>    * @n:		clock name
> @@ -266,6 +276,7 @@ static const struct {
>   	u8 cid;
>   } sam9x60_systemck[] = {
>   	{ .n = "ddrck",		.p = "mck_div",  .id = 2, .cid = ID_DDR, },
> +	{ .n = "uhpck",		.p = "usbck",    .id = 6, .cid = ID_UHPCK },
>   	{ .n = "pck0",		.p = "prog0",    .id = 8, .cid = ID_PCK0, },
>   	{ .n = "pck1",		.p = "prog1",    .id = 9, .cid = ID_PCK1, },
>   	{ .n = "qspick",	.p = "mck_div",  .id = 19, .cid = ID_QSPI, },
> @@ -543,6 +554,28 @@ static int sam9x60_clk_probe(struct udevice *dev)
>   	}
>   	clk_dm(AT91_TO_CLK_ID(PMC_TYPE_CORE, ID_MCK_DIV), c);
>   
> +	/* Register usbck. */
> +	p[0] = clk_names[ID_PLL_A_DIV];
> +	p[1] = clk_names[ID_PLL_U_DIV];
> +	p[2] = clk_names[ID_MAIN_XTAL];
> +	m[0] = 0;
> +	m[1] = 1;
> +	m[2] = 2;
> +	cm[0] = AT91_TO_CLK_ID(PMC_TYPE_CORE, ID_PLL_A_DIV);
> +	cm[1] = AT91_TO_CLK_ID(PMC_TYPE_CORE, ID_PLL_U_DIV);
> +	cm[2] = AT91_TO_CLK_ID(PMC_TYPE_CORE, ID_MAIN_XTAL);
> +	prepare_mux_table(clkmuxallocs, clkmuxallocindex, tmpclkmux, cm,
> +			  3, fail);
> +	prepare_mux_table(muxallocs, muxallocindex, tmpmux, m, 3, fail);
> +	c = sam9x60_clk_register_usb(base, clk_names[ID_USBCK], p, 3,
> +				     &usbck_layout, tmpclkmux, tmpmux,
> +				     ID_USBCK);
> +	if (IS_ERR(c)) {
> +		ret = PTR_ERR(c);
> +		goto fail;
> +	}
> +	clk_dm(AT91_TO_CLK_ID(PMC_TYPE_CORE, ID_USBCK), c);
> +
>   	/* Register programmable clocks. */
>   	p[0] = clk_names[ID_MD_SLCK];
>   	p[1] = clk_names[ID_TD_SLCK];

Acked-by: Sean Anderson <seanga2 at gmail.com>


More information about the U-Boot mailing list