Dne nedelja, 23. marec 2025 ob 12:35:39 Srednjeevropski standardni čas je Andre 
Przywara napisal(a):
> From: Jernej Skrabec <jernej.skra...@gmail.com>

I'm sure you can take credit for this as it's just making definitions and
putting them in place. But I can also provide SoB if you want.

> 
> ---
>  .../include/asm/arch-sunxi/clock_sun50i_h6.h  | 10 ++++++
>  arch/arm/mach-sunxi/clock_sun50i_h6.c         | 32 ++++++++++++++-----
>  2 files changed, 34 insertions(+), 8 deletions(-)
> 
> diff --git a/arch/arm/include/asm/arch-sunxi/clock_sun50i_h6.h 
> b/arch/arm/include/asm/arch-sunxi/clock_sun50i_h6.h
> index c95f2b39e64..d251ed49798 100644
> --- a/arch/arm/include/asm/arch-sunxi/clock_sun50i_h6.h
> +++ b/arch/arm/include/asm/arch-sunxi/clock_sun50i_h6.h
> @@ -101,6 +101,13 @@
>  #define CCM_PLL6_DEFAULT             0xe8216300
>  #define CCM_PSI_AHB1_AHB2_DEFAULT    0x03000002
>  #define CCM_APB1_DEFAULT             0x03000102
> +
> +#elif CONFIG_MACH_SUN55I_A523                                /* A523 */
> +
> +#define CCM_PLL6_DEFAULT             0xe8116310          /* 1200 MHz */
> +#define CCM_PSI_AHB1_AHB2_DEFAULT    0x03000002          /* 200 MHz */
> +#define CCM_APB1_DEFAULT             0x03000005          /* APB0 really */
> +#define CCM_APB2_DEFAULT             0x03000005          /* APB1 really */
>  #endif
>  
>  /* apb2 bit field */
> @@ -120,6 +127,7 @@
>  /* MBUS clock bit field */
>  #define MBUS_ENABLE                  BIT(31)
>  #define MBUS_RESET                   BIT(30)
> +#define MBUS_UPDATE                  BIT(27)
>  #define MBUS_CLK_SRC_MASK            GENMASK(25, 24)
>  #define MBUS_CLK_SRC_OSCM24          (0 << 24)
>  #define MBUS_CLK_SRC_PLL6X2          (1 << 24)
> @@ -132,10 +140,12 @@
>  #define GATE_SHIFT                   (0)
>  
>  /* DRAM clock bit field */
> +#define DRAM_CLK_ENABLE                      BIT(31)
>  #define DRAM_MOD_RESET                       BIT(30)
>  #define DRAM_CLK_UPDATE                      BIT(27)
>  #define DRAM_CLK_SRC_MASK            GENMASK(25, 24)
>  #define DRAM_CLK_SRC_PLL5            (0 << 24)
> +#define DRAM_CLK_M_MASK                      (0x1f)
>  #define DRAM_CLK_M(m)                        (((m)-1) << 0)
>  
>  /* MMC clock bit field */
> diff --git a/arch/arm/mach-sunxi/clock_sun50i_h6.c 
> b/arch/arm/mach-sunxi/clock_sun50i_h6.c
> index f76d1b83883..2ba144a6ac3 100644
> --- a/arch/arm/mach-sunxi/clock_sun50i_h6.c
> +++ b/arch/arm/mach-sunxi/clock_sun50i_h6.c
> @@ -14,15 +14,22 @@ void clock_init_safe(void)
>       void *const ccm = (void *)SUNXI_CCM_BASE;
>       void *const prcm = (void *)SUNXI_PRCM_BASE;
>  
> -     if (IS_ENABLED(CONFIG_MACH_SUN50I_H616)) {
> -             /* this seems to enable PLLs on H616 */
> +     if (IS_ENABLED(CONFIG_MACH_SUN50I_H616))
>               setbits_le32(prcm + CCU_PRCM_SYS_PWROFF_GATING, 0x10);
> +     if (IS_ENABLED(CONFIG_MACH_SUN55I_A523))
> +             setbits_le32(prcm + CCU_PRCM_SYS_PWROFF_GATING, 0x200);
> +     udelay(1);
> +
> +     if (IS_ENABLED(CONFIG_MACH_SUN50I_H616) ||
> +         IS_ENABLED(CONFIG_MACH_SUN55I_A523))
>               setbits_le32(prcm + CCU_PRCM_RES_CAL_CTRL, 2);
> -     }
> +     udelay(1);
>  
>       if (IS_ENABLED(CONFIG_MACH_SUN50I_H616) ||
> -         IS_ENABLED(CONFIG_MACH_SUN50I_H6)) {
> +         IS_ENABLED(CONFIG_MACH_SUN50I_H6) ||
> +         IS_ENABLED(CONFIG_MACH_SUN55I_A523)) {
>               clrbits_le32(prcm + CCU_PRCM_RES_CAL_CTRL, 1);
> +             udelay(1);
>               setbits_le32(prcm + CCU_PRCM_RES_CAL_CTRL, 1);
>       }
>  
> @@ -39,9 +46,10 @@ void clock_init_safe(void)
>       while (!(readl(ccm + CCU_H6_PLL6_CFG) & CCM_PLL_LOCK))
>               ;
>  
> -     clrsetbits_le32(ccm + CCU_H6_CPU_AXI_CFG,
> -                     CCM_CPU_AXI_APB_MASK | CCM_CPU_AXI_AXI_MASK,
> -                     CCM_CPU_AXI_DEFAULT_FACTORS);
> +     if (!IS_ENABLED(CONFIG_MACH_SUN55I_A523))
> +             clrsetbits_le32(ccm + CCU_H6_CPU_AXI_CFG,
> +                             CCM_CPU_AXI_APB_MASK | CCM_CPU_AXI_AXI_MASK,
> +                             CCM_CPU_AXI_DEFAULT_FACTORS);
>  
>       writel(CCM_PSI_AHB1_AHB2_DEFAULT, ccm + CCU_H6_PSI_AHB1_AHB2_CFG);
>  #ifdef CCM_AHB3_DEFAULT
> @@ -53,7 +61,15 @@ void clock_init_safe(void)
>        * The mux and factor are set, but the clock will be enabled in
>        * DRAM initialization code.
>        */
> -     writel(MBUS_CLK_SRC_PLL6X2 | MBUS_CLK_M(3), ccm + CCU_H6_MBUS_CFG);
> +     if (IS_ENABLED(CONFIG_MACH_SUN55I_A523)) {
> +             writel(MBUS_RESET, ccm + CCU_H6_MBUS_CFG);
> +             udelay(1);
> +             writel(MBUS_UPDATE | MBUS_CLK_SRC_OSCM24 | MBUS_CLK_M(4),
> +                    ccm + CCU_H6_MBUS_CFG);
> +     } else {
> +             writel(MBUS_CLK_SRC_PLL6X2 | MBUS_CLK_M(3),
> +                    ccm + CCU_H6_MBUS_CFG);
> +     }

While this is in BSP boot0, I don't think it's needed at all. Full reset is
done later in DRAM driver anyway.

Best regards,
Jernej

>  }
>  
>  void clock_init_uart(void)
> 




Reply via email to