[U-Boot] [PATCH v3 07/15] imx:mx6ul add clock support
Stefano Babic
sbabic at denx.de
Sun Aug 2 11:17:05 CEST 2015
On 20/07/2015 13:28, Peng Fan wrote:
> 1. Add enet, uart, i2c, ipg clock support for i.MX6UL.
> 2. Correct get_periph_clk, it should account for
> MXC_CCM_CBCDR_PERIPH_CLK2_PODF_MASK.
> 3. Refactor get_mmdc_ch0_clk to make all i.MX6 share one function,
> but not use 'ifdef'.
> 4. Use CONFIG_FSL_QSPI for enable_qspi_clk, but not #ifdef CONFIG_MX6SX.
> 5. Use CONFIG_PCIE_IMX for pcie clock settings, use CONFIG_CMD_SATA for
> sata clock settings. In this way, we not need "#if defined(CONFIG_MX6Q)
> || defined....", only need one CONFIG_PCIE_IMX in header file.
>
> Signed-off-by: Ye.Li <B37916 at freescale.com>
> Signed-off-by: Peng Fan <Peng.Fan at freescale.com>
> ---
>
> Changes v3:
> fix possible assembler usage for MXC_CCM_CS2CDR_ENFC_CLKxx
>
> Changes v2:
> none
>
> arch/arm/cpu/armv7/mx6/clock.c | 151 +++++++++++++++++++------------
> arch/arm/include/asm/arch-mx6/crm_regs.h | 98 +++++++++++++-------
> 2 files changed, 159 insertions(+), 90 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/mx6/clock.c b/arch/arm/cpu/armv7/mx6/clock.c
> index 3e94472..9cf4eec 100644
> --- a/arch/arm/cpu/armv7/mx6/clock.c
> +++ b/arch/arm/cpu/armv7/mx6/clock.c
> @@ -81,19 +81,32 @@ void enable_usboh3_clk(unsigned char enable)
> #if defined(CONFIG_FEC_MXC) && !defined(CONFIG_MX6SX)
> void enable_enet_clk(unsigned char enable)
> {
> - u32 mask = MXC_CCM_CCGR1_ENET_CLK_ENABLE_MASK;
> + u32 mask, *addr;
> +
> + if (is_cpu_type(MXC_CPU_MX6UL)) {
> + mask = MXC_CCM_CCGR3_ENET_MASK;
> + addr = &imx_ccm->CCGR3;
> + } else {
> + mask = MXC_CCM_CCGR1_ENET_MASK;
> + addr = &imx_ccm->CCGR1;
> + }
>
> if (enable)
> - setbits_le32(&imx_ccm->CCGR1, mask);
> + setbits_le32(addr, mask);
> else
> - clrbits_le32(&imx_ccm->CCGR1, mask);
> + clrbits_le32(addr, mask);
> }
> #endif
>
> #ifdef CONFIG_MXC_UART
> void enable_uart_clk(unsigned char enable)
> {
> - u32 mask = MXC_CCM_CCGR5_UART_MASK | MXC_CCM_CCGR5_UART_SERIAL_MASK;
> + u32 mask;
> +
> + if (is_cpu_type(MXC_CPU_MX6UL))
> + mask = MXC_CCM_CCGR5_UART_MASK;
> + else
> + mask = MXC_CCM_CCGR5_UART_MASK | MXC_CCM_CCGR5_UART_SERIAL_MASK;
>
> if (enable)
> setbits_le32(&imx_ccm->CCGR5, mask);
> @@ -141,7 +154,7 @@ int enable_i2c_clk(unsigned char enable, unsigned i2c_num)
> reg &= ~mask;
> __raw_writel(reg, &imx_ccm->CCGR2);
> } else {
> - if (is_cpu_type(MXC_CPU_MX6SX)) {
> + if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) {
> mask = MXC_CCM_CCGR6_I2C4_MASK;
> addr = &imx_ccm->CCGR6;
> } else {
> @@ -214,9 +227,11 @@ static u32 mxc_get_pll_pfd(enum pll_clocks pll, int pfd_num)
>
> switch (pll) {
> case PLL_BUS:
> - if (pfd_num == 3) {
> - /* No PFD3 on PPL2 */
> - return 0;
> + if (!is_cpu_type(MXC_CPU_MX6UL)) {
> + if (pfd_num == 3) {
> + /* No PFD3 on PPL2 */
> + return 0;
> + }
> }
> div = __raw_readl(&imx_ccm->analog_pfd_528);
> freq = (u64)decode_pll(PLL_BUS, MXC_HCLK);
> @@ -248,10 +263,12 @@ static u32 get_mcu_main_clk(void)
>
> u32 get_periph_clk(void)
> {
> - u32 reg, freq = 0;
> + u32 reg, div = 0, freq = 0;
>
> reg = __raw_readl(&imx_ccm->cbcdr);
> if (reg & MXC_CCM_CBCDR_PERIPH_CLK_SEL) {
> + div = (reg & MXC_CCM_CBCDR_PERIPH_CLK2_PODF_MASK) >>
> + MXC_CCM_CBCDR_PERIPH_CLK2_PODF_OFFSET;
> reg = __raw_readl(&imx_ccm->cbcmr);
> reg &= MXC_CCM_CBCMR_PERIPH_CLK2_SEL_MASK;
> reg >>= MXC_CCM_CBCMR_PERIPH_CLK2_SEL_OFFSET;
> @@ -291,7 +308,7 @@ u32 get_periph_clk(void)
> }
> }
>
> - return freq;
> + return freq / (div + 1);
> }
>
> static u32 get_ipg_clk(void)
> @@ -311,7 +328,7 @@ static u32 get_ipg_per_clk(void)
>
> reg = __raw_readl(&imx_ccm->cscmr1);
> if (is_cpu_type(MXC_CPU_MX6SL) || is_cpu_type(MXC_CPU_MX6SX) ||
> - is_mx6dqp()) {
> + is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) {
> if (reg & MXC_CCM_CSCMR1_PER_CLK_SEL_MASK)
> return MXC_HCLK; /* OSC 24Mhz */
> }
> @@ -328,7 +345,7 @@ static u32 get_uart_clk(void)
> reg = __raw_readl(&imx_ccm->cscdr1);
>
> if (is_cpu_type(MXC_CPU_MX6SL) || is_cpu_type(MXC_CPU_MX6SX) ||
> - is_mx6dqp()) {
> + is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) {
> if (reg & MXC_CCM_CSCDR1_UART_CLK_SEL)
> freq = MXC_HCLK;
> }
> @@ -347,7 +364,8 @@ static u32 get_cspi_clk(void)
> cspi_podf = (reg & MXC_CCM_CSCDR2_ECSPI_CLK_PODF_MASK) >>
> MXC_CCM_CSCDR2_ECSPI_CLK_PODF_OFFSET;
>
> - if (is_mx6dqp()) {
> + if (is_mx6dqp() || is_cpu_type(MXC_CPU_MX6SL) ||
> + is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) {
> if (reg & MXC_CCM_CSCDR2_ECSPI_CLK_SEL_MASK)
> return MXC_HCLK / (cspi_podf + 1);
> }
> @@ -402,47 +420,60 @@ static u32 get_emi_slow_clk(void)
> return root_freq / (emi_slow_podf + 1);
> }
>
> -#if (defined(CONFIG_MX6SL) || defined(CONFIG_MX6SX))
> static u32 get_mmdc_ch0_clk(void)
> {
> u32 cbcmr = __raw_readl(&imx_ccm->cbcmr);
> u32 cbcdr = __raw_readl(&imx_ccm->cbcdr);
> - u32 freq, podf;
>
> - podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) \
> - >> MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET;
> -
> - switch ((cbcmr & MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_MASK) >>
> - MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_OFFSET) {
> - case 0:
> - freq = decode_pll(PLL_BUS, MXC_HCLK);
> - break;
> - case 1:
> - freq = mxc_get_pll_pfd(PLL_BUS, 2);
> - break;
> - case 2:
> - freq = mxc_get_pll_pfd(PLL_BUS, 0);
> - break;
> - case 3:
> - /* static / 2 divider */
> - freq = mxc_get_pll_pfd(PLL_BUS, 2) / 2;
> + u32 freq, podf, per2_clk2_podf;
> +
> + if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL) ||
> + is_cpu_type(MXC_CPU_MX6SL)) {
> + podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) >>
> + MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET;
> + if (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK_SEL) {
> + per2_clk2_podf = (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_MASK) >>
> + MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_OFFSET;
> + if (is_cpu_type(MXC_CPU_MX6SL)) {
> + if (cbcmr & MXC_CCM_CBCMR_PERIPH2_CLK2_SEL)
> + freq = MXC_HCLK;
> + else
> + freq = decode_pll(PLL_USBOTG, MXC_HCLK);
> + } else {
> + if (cbcmr & MXC_CCM_CBCMR_PERIPH2_CLK2_SEL)
> + freq = decode_pll(PLL_BUS, MXC_HCLK);
> + else
> + freq = decode_pll(PLL_USBOTG, MXC_HCLK);
> + }
> + } else {
> + per2_clk2_podf = 0;
> + switch ((cbcmr &
> + MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_MASK) >>
> + MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_OFFSET) {
> + case 0:
> + freq = decode_pll(PLL_BUS, MXC_HCLK);
> + break;
> + case 1:
> + freq = mxc_get_pll_pfd(PLL_BUS, 2);
> + break;
> + case 2:
> + freq = mxc_get_pll_pfd(PLL_BUS, 0);
> + break;
> + case 3:
> + /* static / 2 divider */
> + freq = mxc_get_pll_pfd(PLL_BUS, 2) / 2;
> + break;
> + }
> + }
> + return freq / (podf + 1) / (per2_clk2_podf + 1);
> + } else {
> + podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH0_PODF_MASK) >>
> + MXC_CCM_CBCDR_MMDC_CH0_PODF_OFFSET;
> + return get_periph_clk() / (podf + 1);
> }
> -
> - return freq / (podf + 1);
> -
> }
> -#else
> -static u32 get_mmdc_ch0_clk(void)
> -{
> - u32 cbcdr = __raw_readl(&imx_ccm->cbcdr);
> - u32 mmdc_ch0_podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH0_PODF_MASK) >>
> - MXC_CCM_CBCDR_MMDC_CH0_PODF_OFFSET;
>
> - return get_periph_clk() / (mmdc_ch0_podf + 1);
> -}
> -#endif
> -
> -#ifdef CONFIG_MX6SX
> +#ifdef CONFIG_FSL_QSPI
> /* qspi_num can be from 0 - 1 */
> void enable_qspi_clk(int qspi_num)
> {
> @@ -603,6 +634,7 @@ u32 imx_get_fecclk(void)
> return mxc_get_clock(MXC_IPG_CLK);
> }
>
> +#if defined(CONFIG_CMD_SATA) || defined(CONFIG_PCIE_IMX)
> static int enable_enet_pll(uint32_t en)
> {
> struct mxc_ccm_reg *const imx_ccm
> @@ -627,8 +659,9 @@ static int enable_enet_pll(uint32_t en)
> writel(reg, &imx_ccm->analog_pll_enet);
> return 0;
> }
> +#endif
>
> -#ifndef CONFIG_MX6SX
> +#ifdef CONFIG_CMD_SATA
> static void ungate_sata_clock(void)
> {
> struct mxc_ccm_reg *const imx_ccm =
> @@ -637,18 +670,7 @@ static void ungate_sata_clock(void)
> /* Enable SATA clock. */
> setbits_le32(&imx_ccm->CCGR5, MXC_CCM_CCGR5_SATA_MASK);
> }
> -#endif
> -
> -static void ungate_pcie_clock(void)
> -{
> - struct mxc_ccm_reg *const imx_ccm =
> - (struct mxc_ccm_reg *)CCM_BASE_ADDR;
>
> - /* Enable PCIe clock. */
> - setbits_le32(&imx_ccm->CCGR4, MXC_CCM_CCGR4_PCIE_MASK);
> -}
> -
> -#ifndef CONFIG_MX6SX
> int enable_sata_clock(void)
> {
> ungate_sata_clock();
> @@ -664,6 +686,16 @@ void disable_sata_clock(void)
> }
> #endif
>
> +#ifdef CONFIG_PCIE_IMX
> +static void ungate_pcie_clock(void)
> +{
> + struct mxc_ccm_reg *const imx_ccm =
> + (struct mxc_ccm_reg *)CCM_BASE_ADDR;
> +
> + /* Enable PCIe clock. */
> + setbits_le32(&imx_ccm->CCGR4, MXC_CCM_CCGR4_PCIE_MASK);
> +}
> +
> int enable_pcie_clock(void)
> {
> struct anatop_regs *anatop_regs =
> @@ -703,7 +735,7 @@ int enable_pcie_clock(void)
> clrbits_le32(&ccm_regs->cbcmr, MXC_CCM_CBCMR_PCIE_AXI_CLK_SEL);
>
> /* Party time! Ungate the clock to the PCIe. */
> -#ifndef CONFIG_MX6SX
> +#ifdef CONFIG_CMD_SATA
> ungate_sata_clock();
> #endif
> ungate_pcie_clock();
> @@ -711,6 +743,7 @@ int enable_pcie_clock(void)
> return enable_enet_pll(BM_ANADIG_PLL_ENET_ENABLE_SATA |
> BM_ANADIG_PLL_ENET_ENABLE_PCIE);
> }
> +#endif
>
> #ifdef CONFIG_SECURE_BOOT
> void hab_caam_clock_enable(unsigned char enable)
> diff --git a/arch/arm/include/asm/arch-mx6/crm_regs.h b/arch/arm/include/asm/arch-mx6/crm_regs.h
> index 7d9fe73..fe75da4 100644
> --- a/arch/arm/include/asm/arch-mx6/crm_regs.h
> +++ b/arch/arm/include/asm/arch-mx6/crm_regs.h
> @@ -110,6 +110,7 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CCR_RBC_EN (1 << 27)
> #define MXC_CCM_CCR_REG_BYPASS_CNT_MASK (0x3F << 21)
> #define MXC_CCM_CCR_REG_BYPASS_CNT_OFFSET 21
> +/* CCR_WB does not exist on i.MX6SX/UL */
> #define MXC_CCM_CCR_WB_COUNT_MASK 0x7
> #define MXC_CCM_CCR_WB_COUNT_OFFSET (1 << 16)
> #define MXC_CCM_CCR_COSC_EN (1 << 12)
> @@ -150,12 +151,11 @@ struct mxc_ccm_reg {
> /* Define the bits in register CBCDR */
> #define MXC_CCM_CBCDR_PERIPH_CLK2_PODF_MASK (0x7 << 27)
> #define MXC_CCM_CBCDR_PERIPH_CLK2_PODF_OFFSET 27
> -#define MXC_CCM_CBCDR_PERIPH2_CLK2_SEL (1 << 26)
> +#define MXC_CCM_CBCDR_PERIPH2_CLK_SEL (1 << 26)
> #define MXC_CCM_CBCDR_PERIPH_CLK_SEL (1 << 25)
> -#ifndef CONFIG_MX6SX
> +/* MMDC_CH0 not exists on i.MX6SX */
> #define MXC_CCM_CBCDR_MMDC_CH0_PODF_MASK (0x7 << 19)
> #define MXC_CCM_CBCDR_MMDC_CH0_PODF_OFFSET 19
> -#endif
> #define MXC_CCM_CBCDR_AXI_PODF_MASK (0x7 << 16)
> #define MXC_CCM_CBCDR_AXI_PODF_OFFSET 16
> #define MXC_CCM_CBCDR_AHB_PODF_MASK (0x7 << 10)
> @@ -178,7 +178,7 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CBCMR_GPU2D_CORE_PODF_OFFSET 23
> #define MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_MASK (0x3 << 21)
> #define MXC_CCM_CBCMR_PRE_PERIPH2_CLK_SEL_OFFSET 21
> -#define MXC_CCM_CBCMR_PRE_PERIPH2_CLK2_SEL (1 << 20)
> +#define MXC_CCM_CBCMR_PERIPH2_CLK2_SEL (1 << 20)
> #define MXC_CCM_CBCMR_PRE_PERIPH_CLK_SEL_MASK (0x3 << 18)
> #define MXC_CCM_CBCMR_PRE_PERIPH_CLK_SEL_OFFSET 18
> #ifndef CONFIG_MX6SX
> @@ -203,18 +203,19 @@ struct mxc_ccm_reg {
> /* Define the bits in register CSCMR1 */
> #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_MASK (0x3 << 29)
> #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_OFFSET 29
> -#ifdef CONFIG_MX6SX
> +/* QSPI1 exist on i.MX6SX/UL */
> #define MXC_CCM_CSCMR1_QSPI1_PODF_MASK (0x7 << 26)
> #define MXC_CCM_CSCMR1_QSPI1_PODF_OFFSET 26
> -#else
> #define MXC_CCM_CSCMR1_ACLK_EMI_MASK (0x3 << 27)
> #define MXC_CCM_CSCMR1_ACLK_EMI_OFFSET 27
> -#endif
> #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_MASK (0x7 << 23)
> #define MXC_CCM_CSCMR1_ACLK_EMI_SLOW_PODF_OFFSET 23
> /* ACLK_EMI_PODF is LCFIF2_PODF on MX6SX */
> #define MXC_CCM_CSCMR1_ACLK_EMI_PODF_MASK (0x7 << 20)
> #define MXC_CCM_CSCMR1_ACLK_EMI_PODF_OFFSET 20
> +/* CSCMR1_GPMI/BCH exist on i.MX6UL */
> +#define MXC_CCM_CSCMR1_GPMI_CLK_SEL (1 << 19)
> +#define MXC_CCM_CSCMR1_BCH_CLK_SEL (1 << 18)
> #define MXC_CCM_CSCMR1_USDHC4_CLK_SEL (1 << 19)
> #define MXC_CCM_CSCMR1_USDHC3_CLK_SEL (1 << 18)
> #define MXC_CCM_CSCMR1_USDHC2_CLK_SEL (1 << 17)
> @@ -225,10 +226,9 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CSCMR1_SSI2_CLK_SEL_OFFSET 12
> #define MXC_CCM_CSCMR1_SSI1_CLK_SEL_MASK (0x3 << 10)
> #define MXC_CCM_CSCMR1_SSI1_CLK_SEL_OFFSET 10
> -#ifdef CONFIG_MX6SX
> +/* QSPI1 exist on i.MX6SX/UL */
> #define MXC_CCM_CSCMR1_QSPI1_CLK_SEL_MASK (0x7 << 7)
> #define MXC_CCM_CSCMR1_QSPI1_CLK_SEL_OFFSET 7
> -#endif
> /* CSCMR1_PER_CLK exists on i.MX6SX/SL/QP */
> #define MXC_CCM_CSCMR1_PER_CLK_SEL_MASK (1 << 6)
> #define MXC_CCM_CSCMR1_PER_CLK_SEL_OFFSET 6
> @@ -256,6 +256,12 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CSCDR1_VPU_AXI_PODF_MASK (0x7 << 25)
> #define MXC_CCM_CSCDR1_VPU_AXI_PODF_OFFSET 25
> #endif
> +/* CSCDR1_GPMI/BCH exist on i.MX6UL */
> +#define MXC_CCM_CSCDR1_GPMI_PODF_MASK (0x7 << 22)
> +#define MXC_CCM_CSCDR1_GPMI_PODF_OFFSET 22
> +#define MXC_CCM_CSCDR1_BCH_PODF_MASK (0x7 << 19)
> +#define MXC_CCM_CSCDR1_BCH_PODF_OFFSET 19
> +
> #define MXC_CCM_CSCDR1_USDHC4_PODF_MASK (0x7 << 22)
> #define MXC_CCM_CSCDR1_USDHC4_PODF_OFFSET 22
> #define MXC_CCM_CSCDR1_USDHC3_PODF_MASK (0x7 << 19)
> @@ -290,7 +296,7 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CS1CDR_SSI1_CLK_PODF_OFFSET 0
>
> /* Define the bits in register CS2CDR */
> -#ifdef CONFIG_MX6SX
> +/* QSPI2 on i.MX6SX */
> #define MXC_CCM_CS2CDR_QSPI2_CLK_PODF_MASK (0x3F << 21)
> #define MXC_CCM_CS2CDR_QSPI2_CLK_PODF_OFFSET 21
> #define MXC_CCM_CS2CDR_QSPI2_CLK_PODF(v) (((v) & 0x3f) << 21)
> @@ -300,7 +306,7 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CS2CDR_QSPI2_CLK_SEL_MASK (0x7 << 15)
> #define MXC_CCM_CS2CDR_QSPI2_CLK_SEL_OFFSET 15
> #define MXC_CCM_CS2CDR_QSPI2_CLK_SEL(v) (((v) & 0x7) << 15)
> -#else
> +
> #define MXC_CCM_CS2CDR_ENFC_CLK_PODF_MASK (0x3F << 21)
> #define MXC_CCM_CS2CDR_ENFC_CLK_PODF_OFFSET 21
> #define MXC_CCM_CS2CDR_ENFC_CLK_PODF(v) (((v) & 0x3f) << 21)
> @@ -308,14 +314,26 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CS2CDR_ENFC_CLK_PRED_OFFSET 18
> #define MXC_CCM_CS2CDR_ENFC_CLK_PRED(v) (((v) & 0x7) << 18)
>
> -#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK \
> - (is_mx6dqp() ? (0x7 << 15) : (0x3 << 16))
> -#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_OFFSET \
> - (is_mx6dqp() ? 15 : 16)
> -#define MXC_CCM_CS2CDR_ENFC_CLK_SEL(v) \
> - (is_mx6dqp() ? (((v) & 0x7) << 15) : (((v) & 0x3) << 16))
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK_DQP (0x7 << 15)
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_OFFSET_DQP 15
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_DQP(v) (((v) & 0x7) << 15)
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK_DQ (0x3 << 16)
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_OFFSET_DQ 16
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_DQ(v) (((v) & 0x3) << 16)
> +
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK \
> + ((is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) ? \
> + MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK_DQP : \
> + MXC_CCM_CS2CDR_ENFC_CLK_SEL_MASK_DQ)
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL_OFFSET \
> + ((is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) ? \
> + MXC_CCM_CS2CDR_ENFC_CLK_SEL_OFFSET_DQP : \
> + MXC_CCM_CS2CDR_ENFC_CLK_SEL_OFFSET_DQ)
> +#define MXC_CCM_CS2CDR_ENFC_CLK_SEL(v) \
> + ((is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) ? \
> + MXC_CCM_CS2CDR_ENFC_CLK_SEL_DQP(v) : \
> + MXC_CCM_CS2CDR_ENFC_CLK_SEL_DQ(v))
>
> -#endif
> #define MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_MASK (0x7 << 12)
> #define MXC_CCM_CS2CDR_LDB_DI1_CLK_SEL_OFFSET 12
> #define MXC_CCM_CS2CDR_LDB_DI0_CLK_SEL_MASK (0x7 << 9)
> @@ -543,10 +561,9 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CCGR1_ECSPI4S_MASK (3 << MXC_CCM_CCGR1_ECSPI4S_OFFSET)
> #define MXC_CCM_CCGR1_ECSPI5S_OFFSET 8
> #define MXC_CCM_CCGR1_ECSPI5S_MASK (3 << MXC_CCM_CCGR1_ECSPI5S_OFFSET)
> -#ifndef CONFIG_MX6SX
> -#define MXC_CCM_CCGR1_ENET_CLK_ENABLE_OFFSET 10
> -#define MXC_CCM_CCGR1_ENET_CLK_ENABLE_MASK (3 << MXC_CCM_CCGR1_ENET_CLK_ENABLE_OFFSET)
> -#endif
> +/* CCGR1_ENET does not exist on i.MX6SX/UL */
> +#define MXC_CCM_CCGR1_ENET_OFFSET 10
> +#define MXC_CCM_CCGR1_ENET_MASK (3 << MXC_CCM_CCGR1_ENET_OFFSET)
> #define MXC_CCM_CCGR1_EPIT1S_OFFSET 12
> #define MXC_CCM_CCGR1_EPIT1S_MASK (3 << MXC_CCM_CCGR1_EPIT1S_OFFSET)
> #define MXC_CCM_CCGR1_EPIT2S_OFFSET 14
> @@ -617,21 +634,21 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CCGR2_IPSYNC_VDOA_IPG_MASTER_CLK_MASK (3 << MXC_CCM_CCGR2_IPSYNC_VDOA_IPG_MASTER_CLK_OFFSET)
> #endif
>
> -#ifdef CONFIG_MX6SX
> +/* Exist on i.MX6SX */
> #define MXC_CCM_CCGR3_M4_OFFSET 2
> #define MXC_CCM_CCGR3_M4_MASK (3 << MXC_CCM_CCGR3_M4_OFFSET)
> #define MXC_CCM_CCGR3_ENET_OFFSET 4
> #define MXC_CCM_CCGR3_ENET_MASK (3 << MXC_CCM_CCGR3_ENET_OFFSET)
> #define MXC_CCM_CCGR3_QSPI_OFFSET 14
> #define MXC_CCM_CCGR3_QSPI_MASK (3 << MXC_CCM_CCGR3_QSPI_OFFSET)
> -#else
> +
> #define MXC_CCM_CCGR3_IPU1_IPU_OFFSET 0
> #define MXC_CCM_CCGR3_IPU1_IPU_MASK (3 << MXC_CCM_CCGR3_IPU1_IPU_OFFSET)
> #define MXC_CCM_CCGR3_IPU1_IPU_DI0_OFFSET 2
> #define MXC_CCM_CCGR3_IPU1_IPU_DI0_MASK (3 << MXC_CCM_CCGR3_IPU1_IPU_DI0_OFFSET)
> #define MXC_CCM_CCGR3_IPU1_IPU_DI1_OFFSET 4
> #define MXC_CCM_CCGR3_IPU1_IPU_DI1_MASK (3 << MXC_CCM_CCGR3_IPU1_IPU_DI1_OFFSET)
> -#endif
> +
> #define MXC_CCM_CCGR3_IPU2_IPU_OFFSET 6
> #define MXC_CCM_CCGR3_IPU2_IPU_MASK (3 << MXC_CCM_CCGR3_IPU2_IPU_OFFSET)
> #define MXC_CCM_CCGR3_IPU2_IPU_DI0_OFFSET 8
> @@ -640,15 +657,22 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CCGR3_IPU2_IPU_DI1_MASK (3 << MXC_CCM_CCGR3_IPU2_IPU_DI1_OFFSET)
> #define MXC_CCM_CCGR3_LDB_DI0_OFFSET 12
> #define MXC_CCM_CCGR3_LDB_DI0_MASK (3 << MXC_CCM_CCGR3_LDB_DI0_OFFSET)
> -#ifdef CONFIG_MX6SX
> +
> +/* QSPI1 exists on i.MX6SX/UL */
> #define MXC_CCM_CCGR3_QSPI1_OFFSET 14
> #define MXC_CCM_CCGR3_QSPI1_MASK (3 << MXC_CCM_CCGR3_QSPI1_OFFSET)
> -#else
> +
> #define MXC_CCM_CCGR3_LDB_DI1_OFFSET 14
> #define MXC_CCM_CCGR3_LDB_DI1_MASK (3 << MXC_CCM_CCGR3_LDB_DI1_OFFSET)
> #define MXC_CCM_CCGR3_MIPI_CORE_CFG_OFFSET 16
> #define MXC_CCM_CCGR3_MIPI_CORE_CFG_MASK (3 << MXC_CCM_CCGR3_MIPI_CORE_CFG_OFFSET)
> -#endif
> +
> +/* A7_CLKDIV/WDOG1 on i.MX6UL */
> +#define MXC_CCM_CCGR3_WDOG1_CLK_ENABLE_OFFSET 16
> +#define MXC_CCM_CCGR3_WDOG1_CLK_ENABLE_MASK (3 << MXC_CCM_CCGR3_WDOG1_CLK_ENABLE_OFFSET)
> +#define MXC_CCM_CCGR3_A7_CLKDIV_PATCH_OFFSET 18
> +#define MXC_CCM_CCGR3_A7_CLKDIV_PATCH_MASK (3 << MXC_CCM_CCGR3_A7_CLKDIV_PATCH_OFFSET)
> +
> #define MXC_CCM_CCGR3_MLB_OFFSET 18
> #define MXC_CCM_CCGR3_MLB_MASK (3 << MXC_CCM_CCGR3_MLB_OFFSET)
> #define MXC_CCM_CCGR3_MMDC_CORE_ACLK_FAST_CORE_P0_OFFSET 20
> @@ -661,8 +685,16 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CCGR3_MMDC_CORE_IPG_CLK_P0_MASK (3 << MXC_CCM_CCGR3_MMDC_CORE_IPG_CLK_P0_OFFSET)
> #define MXC_CCM_CCGR3_MMDC_CORE_IPG_CLK_P1_OFFSET 26
> #define MXC_CCM_CCGR3_MMDC_CORE_IPG_CLK_P1_MASK (3 << MXC_CCM_CCGR3_MMDC_CORE_IPG_CLK_P1_OFFSET)
> +/* AXI on i.MX6UL */
> +#define MXC_CCM_CCGR3_AXI_CLK_OFFSET 28
> +#define MXC_CCM_CCGR3_AXI_CLK_MASK (3 << MXC_CCM_CCGR3_AXI_CLK_OFFSET)
> #define MXC_CCM_CCGR3_OCRAM_OFFSET 28
> #define MXC_CCM_CCGR3_OCRAM_MASK (3 << MXC_CCM_CCGR3_OCRAM_OFFSET)
> +
> +/* GPIO4 on i.MX6UL */
> +#define MXC_CCM_CCGR3_GPIO4_CLK_OFFSET 30
> +#define MXC_CCM_CCGR3_GPIO4_CLK_MASK (3 << MXC_CCM_CCGR3_GPIO4_CLK_OFFSET)
> +
> #ifndef CONFIG_MX6SX
> #define MXC_CCM_CCGR3_OPENVGAXICLK_OFFSET 30
> #define MXC_CCM_CCGR3_OPENVGAXICLK_MASK (3 << MXC_CCM_CCGR3_OPENVGAXICLK_OFFSET)
> @@ -670,13 +702,11 @@ struct mxc_ccm_reg {
>
> #define MXC_CCM_CCGR4_PCIE_OFFSET 0
> #define MXC_CCM_CCGR4_PCIE_MASK (3 << MXC_CCM_CCGR4_PCIE_OFFSET)
> -#ifdef CONFIG_MX6SX
> +/* QSPI2 on i.MX6SX */
> #define MXC_CCM_CCGR4_QSPI2_ENFC_OFFSET 10
> #define MXC_CCM_CCGR4_QSPI2_ENFC_MASK (3 << MXC_CCM_CCGR4_QSPI2_ENFC_OFFSET)
> -#else
> #define MXC_CCM_CCGR4_PL301_MX6QFAST1_S133_OFFSET 8
> #define MXC_CCM_CCGR4_PL301_MX6QFAST1_S133_MASK (3 << MXC_CCM_CCGR4_PL301_MX6QFAST1_S133_OFFSET)
> -#endif
> #define MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_OFFSET 12
> #define MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_MASK (3 << MXC_CCM_CCGR4_PL301_MX6QPER1_BCH_OFFSET)
> #define MXC_CCM_CCGR4_PL301_MX6QPER2_MAINCLK_ENABLE_OFFSET 14
> @@ -736,6 +766,12 @@ struct mxc_ccm_reg {
> #define MXC_CCM_CCGR6_USDHC1_MASK (3 << MXC_CCM_CCGR6_USDHC1_OFFSET)
> #define MXC_CCM_CCGR6_USDHC2_OFFSET 4
> #define MXC_CCM_CCGR6_USDHC2_MASK (3 << MXC_CCM_CCGR6_USDHC2_OFFSET)
> +/* GPMI/BCH on i.MX6UL */
> +#define MXC_CCM_CCGR6_BCH_OFFSET 6
> +#define MXC_CCM_CCGR6_BCH_MASK (3 << MXC_CCM_CCGR6_BCH_OFFSET)
> +#define MXC_CCM_CCGR6_GPMI_OFFSET 8
> +#define MXC_CCM_CCGR6_GPMI_MASK (3 << MXC_CCM_CCGR6_GPMI_OFFSET)
> +
> #define MXC_CCM_CCGR6_USDHC3_OFFSET 6
> #define MXC_CCM_CCGR6_USDHC3_MASK (3 << MXC_CCM_CCGR6_USDHC3_OFFSET)
> #define MXC_CCM_CCGR6_USDHC4_OFFSET 8
>
Applied to u-boot-imx, thanks !
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
More information about the U-Boot
mailing list