[PATCH linux dev-4.17] clk: aspeed: Support HPLL strapping on ast2400

Cédric Le Goater clg at kaod.org
Thu Jun 21 17:23:40 AEST 2018


On 06/21/2018 08:57 AM, Joel Stanley wrote:
> The HPLL can be configured through a register (SCU24), however most
> some platforms chose to configure it through the strapping settings and
> do not use the register. This was not noticed as the logic for bit 18 in
> SCU24 was confused: set means programmed, but the driver read it as set
> means strapped.
> 
> This gives us the correct HPLL value on Palmetto systems, from which
> most of the peripheral clocks are generated.
> 
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> ---
>  drivers/clk/clk-aspeed.c | 22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/clk/clk-aspeed.c b/drivers/clk/clk-aspeed.c
> index c17032bc853a..c4770cbb6f32 100644
> --- a/drivers/clk/clk-aspeed.c
> +++ b/drivers/clk/clk-aspeed.c
> @@ -24,7 +24,7 @@
>  #define ASPEED_MPLL_PARAM	0x20
>  #define ASPEED_HPLL_PARAM	0x24
>  #define  AST2500_HPLL_BYPASS_EN	BIT(20)
> -#define  AST2400_HPLL_STRAPPED	BIT(18)
> +#define  AST2400_HPLL_PROGRAMMED BIT(18)
>  #define  AST2400_HPLL_BYPASS_EN	BIT(17)
>  #define ASPEED_MISC_CTRL	0x2c
>  #define  UART_DIV13_EN		BIT(12)
> @@ -586,8 +586,24 @@ static void __init aspeed_ast2400_cc(struct regmap *map)
>  	 * and we assume that it is enabled
>  	 */
>  	regmap_read(map, ASPEED_HPLL_PARAM, &val);
> -	WARN(val & AST2400_HPLL_STRAPPED, "hpll is strapped not configured");
> -	aspeed_clk_data->hws[ASPEED_CLK_HPLL] = aspeed_ast2400_calc_pll("hpll", val);
> +	if (val & AST2400_HPLL_PROGRAMMED) {
> +		/* hpll is configured by the strap register */
> +		aspeed_clk_data->hws[ASPEED_CLK_HPLL] = aspeed_ast2400_calc_pll("hpll", val);
> +	} else {
> +		/* hpll is configured by the strap register */
> +		regmap_read(map, ASPEED_STRAP, &val);
> +		val = (val >> 8) & 0x3;
> +		if (val == 0x00)
> +			freq = 384000000;
> +		else if (val == 0x01)
> +			freq = 360000000;
> +		else if (val == 0x02)
> +			freq = 336000000;
> +		else if (val == 0x03)
> +			freq = 408000000;
> +		aspeed_clk_data->hws[ASPEED_CLK_HPLL] =

we should try to cover the clkin 25MHz case also. The frequencies are : 

	400Mhz 375Mhz 350Mhz 425Mhz

> +			clk_hw_register_fixed_rate(NULL, "hpll", "clkin", 0, freq);
> +	}
>  
>  	/*
>  	 * Strap bits 11:10 define the CPU/AHB clock frequency ratio (aka HCLK)
> 

On a palmetto system :

	SCU[70] 0x120CE416 /* 408 MHz */
	SCU[24] 0x00000291 /* Freqs are strapped */


but these freqs are set, which is much better, but not correct compared 
to the SCU value. 

root at palmetto:~# cat /sys/kernel/debug/clk/clk_summary 
                                 enable  prepare  protect                               
   clock                          count    count    count        rate   accuracy   phase
----------------------------------------------------------------------------------------
 sdclk-gate                           0        0        0           0          0 0  
 rsaclk-gate                          0        0        0           0          0 0  
 espiclk-gate                         0        0        0           0          0 0  
 usb-port1-gate                       0        0        0           0          0 0  
 yclk-gate                            0        0        0           0          0 0  
 d1clk-gate                           0        0        0           0          0 0  
 usb-uhci-gate                        0        0        0           0          0 0  
 lclk-gate                            1        1        0           0          0 0  
 usb-port2-gate                       0        0        0           0          0 0  
 dclk-gate                            1        1        0           0          0 0  
 vclk-gate                            0        0        0           0          0 0  
 gclk-gate                            0        0        0           0          0 0  
 uart                                 2        2        0    24000000          0 0  
    uart4clk-gate                     0        0        0    24000000          0 0  
    uart3clk-gate                     0        0        0    24000000          0 0  
    uart5clk-gate                     1        1        0    24000000          0 0  
    uart2clk-gate                     0        0        0    24000000          0 0  
    uart1clk-gate                     1        1        0    24000000          0 0  
 clkin                                3        3        0    48000000          0 0  
    refclk-gate                       1        1        0    48000000          0 0  
    fixed-24m                         0        0        0    24000000          0 0  
    mpll                              1        1        0   792000000          0 0  
       mclk-gate                      1        1        0   792000000          0 0  
    hpll                              3        3        0   384000000          0 0  
       bclk                           1        1        0   192000000          0 0  
          bclk-gate                   1        1        0   192000000          0 0  
       lhclk                          0        0        0   192000000          0 0  
          lhclk-gate                  0        0        0   192000000          0 0  
       mac                            1        1        0    38400000          0 0  
          mac2clk-gate                0        0        0    38400000          0 0  
          mac1clk-gate                1        1        0    38400000          0 0  
       sdio                           0        0        0   192000000          0 0  
       apb                            2        2        0    48000000          0 0  
       ahb                            0        0        0   192000000          0 0  
 eclk-gate                            0        0        0           0          0 0  


Thanks,

C.


More information about the openbmc mailing list