• Martin Blumenstingl's avatar
    clk: meson: add a driver for the Meson8/8b/8m2 DDR clock controller · 64aa7008
    Martin Blumenstingl authored
    The Meson8/Meson8b/Meson8m2 SoCs embed a DDR clock controller in the
    MMCBUS registers. There is no public documentation, but the u-boot GPL
    sources from the Amlogic BSP show that the DDR clock controller is
    identical on all three SoCs:
      #define CFG_DDR_CLK 792
      #define CFG_PLL_M (((CFG_DDR_CLK/12)*12)/24)
      #define CFG_PLL_N 1
      #define CFG_PLL_OD 1
    
      // from set_ddr_clock:
      t_ddr_pll_cntl= (CFG_PLL_OD << 16)|(CFG_PLL_N<<9)|(CFG_PLL_M<<0)
      writel(timing_reg->t_ddr_pll_cntl|(1<<29),AM_DDR_PLL_CNTL);
      writel(readl(AM_DDR_PLL_CNTL) & (~(1<<29)),AM_DDR_PLL_CNTL);
    
      // from hx_ddr_power_down_enter: shut down DDR PLL
      writel(readl(AM_DDR_PLL_CNTL)|(1<<30),AM_DDR_PLL_CNTL);
    
      do { ... } while((readl(AM_DDR_PLL_CNTL)&(1<<31))==0)
    
    This translates to:
    - AM_DDR_PLL_CNTL[29] is the reset bit
    - AM_DDR_PLL_CNTL[30] is the enable bit
    - AM_DDR_PLL_CNTL[31] is the lock bit
    - AM_DDR_PLL_CNTL[8:0] is the m value (assuming the width is 9 bits
      based on the start of the n value)
    - AM_DDR_PLL_CNTL[13:9] is the n value (assuming the width is 5 bits
      based on the start of the od)
    - AM_DDR_PLL_CNTL[17:16] is the od (assuming the width is 2 bits based
      on other PLLs on this SoC)
    
    Add a driver for this PLL setup because it's used as one of the inputs
    of the audio clocks. There may be more clocks inside that clock
    controller - those can be added in subsequent patches.
    Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
    Signed-off-by: default avatarJerome Brunet <jbrunet@baylibre.com>
    64aa7008
meson8-ddr.c 3.33 KB