From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 07/15] imx:mx6ul add clock support
Date: Sun, 02 Aug 2015 11:17:05 +0200 [thread overview]
Message-ID: <55BDE011.1050703@denx.de> (raw)
In-Reply-To: <1437391715-1344-8-git-send-email-Peng.Fan@freescale.com>
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@freescale.com>
> Signed-off-by: Peng Fan <Peng.Fan@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
=====================================================================
next prev parent reply other threads:[~2015-08-02 9:17 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-20 11:28 [U-Boot] [PATCH v3 00/15] imx: Add i.MX6UL and basic board support Peng Fan
2015-07-20 11:28 ` [U-Boot] [PATCH v3 01/15] imx: mx6ul: Add i.MX6UL CPU type Peng Fan
2015-08-02 9:05 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 02/15] imx: mx6ul: Add pins IOMUX head file Peng Fan
2015-08-02 9:06 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 03/15] imx: mx6ul: Update imx registers " Peng Fan
2015-07-20 18:39 ` Marek Vasut
2015-08-02 9:07 ` Stefano Babic
2015-08-02 9:15 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 04/15] imx: mx6ul Add CONFIG_SYS_CACHELINE_SIZE for i.MX6UL Peng Fan
2015-08-02 9:15 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 05/15] imx-common: timer: add i.MX6UL support Peng Fan
2015-08-02 9:16 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 06/15] imx: mx6ul remove errata for i.MX6UL Peng Fan
2015-08-02 9:16 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 07/15] imx:mx6ul add clock support Peng Fan
2015-08-02 9:17 ` Stefano Babic [this message]
2015-07-20 11:28 ` [U-Boot] [PATCH v3 08/15] imx: mx6ul select SYS_L2CACHE_OFF Peng Fan
2015-08-02 9:17 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 09/15] imx: mx6ul update soc related settings Peng Fan
2015-08-02 9:17 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 10/15] imx: mx6 add PAD_CTL_SPEED_LOW for i.MX6SX/UL Peng Fan
2015-08-02 9:17 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 11/15] mxc: gpio add i.MX6UL support Peng Fan
2015-08-02 9:17 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 12/15] mx6_common: Fix LOADADDR and SYS_TEXT_BASE for i.MX6UL Peng Fan
2015-08-02 9:17 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 13/15] imx:mx6ul add dram spl configuration and header file Peng Fan
2015-08-02 9:18 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 14/15] imx: imx6_spl add mx6ul support Peng Fan
2015-08-02 9:18 ` Stefano Babic
2015-07-20 11:28 ` [U-Boot] [PATCH v3 15/15] imx: mx6ul_14x14_evk add basic board support Peng Fan
2015-08-02 9:18 ` Stefano Babic
2015-08-10 16:22 ` Fabio Estevam
2015-08-11 0:13 ` Peng Fan
2015-08-11 10:31 ` Fabio Estevam
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55BDE011.1050703@denx.de \
--to=sbabic@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.