imx: mx6: use simpler runtime cpu dection macros

Use simpler runtime cpu dection macros.
i.MX6DL and i.MX6SOLO work the same, so use is_mx6sdl.

Signed-off-by: Peng Fan <van.freenix@gmail.com>
Cc: Stefano Babic <sbabic@denx.de>
This commit is contained in:
Peng Fan
2016-05-23 18:35:54 +08:00
committed by Stefano Babic
parent dea572379e
commit b949fd2ccb
3 changed files with 29 additions and 36 deletions

View File

@@ -97,7 +97,7 @@ void enable_enet_clk(unsigned char enable)
{ {
u32 mask, *addr; u32 mask, *addr;
if (is_cpu_type(MXC_CPU_MX6UL)) { if (is_mx6ul()) {
mask = MXC_CCM_CCGR3_ENET_MASK; mask = MXC_CCM_CCGR3_ENET_MASK;
addr = &imx_ccm->CCGR3; addr = &imx_ccm->CCGR3;
} else { } else {
@@ -117,7 +117,7 @@ void enable_uart_clk(unsigned char enable)
{ {
u32 mask; u32 mask;
if (is_cpu_type(MXC_CPU_MX6UL)) if (is_mx6ul())
mask = MXC_CCM_CCGR5_UART_MASK; mask = MXC_CCM_CCGR5_UART_MASK;
else else
mask = MXC_CCM_CCGR5_UART_MASK | MXC_CCM_CCGR5_UART_SERIAL_MASK; mask = MXC_CCM_CCGR5_UART_MASK | MXC_CCM_CCGR5_UART_SERIAL_MASK;
@@ -168,7 +168,7 @@ int enable_i2c_clk(unsigned char enable, unsigned i2c_num)
reg &= ~mask; reg &= ~mask;
__raw_writel(reg, &imx_ccm->CCGR2); __raw_writel(reg, &imx_ccm->CCGR2);
} else { } else {
if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) { if (is_mx6sx() || is_mx6ul()) {
mask = MXC_CCM_CCGR6_I2C4_MASK; mask = MXC_CCM_CCGR6_I2C4_MASK;
addr = &imx_ccm->CCGR6; addr = &imx_ccm->CCGR6;
} else { } else {
@@ -279,7 +279,7 @@ static u32 mxc_get_pll_pfd(enum pll_clocks pll, int pfd_num)
switch (pll) { switch (pll) {
case PLL_BUS: case PLL_BUS:
if (!is_cpu_type(MXC_CPU_MX6UL)) { if (!is_mx6ul()) {
if (pfd_num == 3) { if (pfd_num == 3) {
/* No PFD3 on PPL2 */ /* No PFD3 on PPL2 */
return 0; return 0;
@@ -379,8 +379,8 @@ static u32 get_ipg_per_clk(void)
u32 reg, perclk_podf; u32 reg, perclk_podf;
reg = __raw_readl(&imx_ccm->cscmr1); reg = __raw_readl(&imx_ccm->cscmr1);
if (is_cpu_type(MXC_CPU_MX6SL) || is_cpu_type(MXC_CPU_MX6SX) || if (is_mx6sl() || is_mx6sx() ||
is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) { is_mx6dqp() || is_mx6ul()) {
if (reg & MXC_CCM_CSCMR1_PER_CLK_SEL_MASK) if (reg & MXC_CCM_CSCMR1_PER_CLK_SEL_MASK)
return MXC_HCLK; /* OSC 24Mhz */ return MXC_HCLK; /* OSC 24Mhz */
} }
@@ -396,8 +396,7 @@ static u32 get_uart_clk(void)
u32 freq = decode_pll(PLL_USBOTG, MXC_HCLK) / 6; /* static divider */ u32 freq = decode_pll(PLL_USBOTG, MXC_HCLK) / 6; /* static divider */
reg = __raw_readl(&imx_ccm->cscdr1); reg = __raw_readl(&imx_ccm->cscdr1);
if (is_cpu_type(MXC_CPU_MX6SL) || is_cpu_type(MXC_CPU_MX6SX) || if (is_mx6sl() || is_mx6sx() || is_mx6dqp() || is_mx6ul()) {
is_mx6dqp() || is_cpu_type(MXC_CPU_MX6UL)) {
if (reg & MXC_CCM_CSCDR1_UART_CLK_SEL) if (reg & MXC_CCM_CSCDR1_UART_CLK_SEL)
freq = MXC_HCLK; freq = MXC_HCLK;
} }
@@ -416,8 +415,7 @@ static u32 get_cspi_clk(void)
cspi_podf = (reg & MXC_CCM_CSCDR2_ECSPI_CLK_PODF_MASK) >> cspi_podf = (reg & MXC_CCM_CSCDR2_ECSPI_CLK_PODF_MASK) >>
MXC_CCM_CSCDR2_ECSPI_CLK_PODF_OFFSET; MXC_CCM_CSCDR2_ECSPI_CLK_PODF_OFFSET;
if (is_mx6dqp() || is_cpu_type(MXC_CPU_MX6SL) || if (is_mx6dqp() || is_mx6sl() || is_mx6sx() || is_mx6ul()) {
is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) {
if (reg & MXC_CCM_CSCDR2_ECSPI_CLK_SEL_MASK) if (reg & MXC_CCM_CSCDR2_ECSPI_CLK_SEL_MASK)
return MXC_HCLK / (cspi_podf + 1); return MXC_HCLK / (cspi_podf + 1);
} }
@@ -479,14 +477,13 @@ static u32 get_mmdc_ch0_clk(void)
u32 freq, podf, per2_clk2_podf, pmu_misc2_audio_div; u32 freq, podf, per2_clk2_podf, pmu_misc2_audio_div;
if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL) || if (is_mx6sx() || is_mx6ul() || is_mx6sl()) {
is_cpu_type(MXC_CPU_MX6SL)) {
podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) >> podf = (cbcdr & MXC_CCM_CBCDR_MMDC_CH1_PODF_MASK) >>
MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET; MXC_CCM_CBCDR_MMDC_CH1_PODF_OFFSET;
if (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK_SEL) { if (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK_SEL) {
per2_clk2_podf = (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_MASK) >> per2_clk2_podf = (cbcdr & MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_MASK) >>
MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_OFFSET; MXC_CCM_CBCDR_PERIPH2_CLK2_PODF_OFFSET;
if (is_cpu_type(MXC_CPU_MX6SL)) { if (is_mx6sl()) {
if (cbcmr & MXC_CCM_CBCMR_PERIPH2_CLK2_SEL) if (cbcmr & MXC_CCM_CBCMR_PERIPH2_CLK2_SEL)
freq = MXC_HCLK; freq = MXC_HCLK;
else else
@@ -618,7 +615,7 @@ void mxs_set_lcdclk(u32 base_addr, u32 freq)
debug("mxs_set_lcdclk, freq = %dKHz\n", freq); debug("mxs_set_lcdclk, freq = %dKHz\n", freq);
if ((!is_cpu_type(MXC_CPU_MX6SX)) && !is_cpu_type(MXC_CPU_MX6UL)) { if (!is_mx6sx() && !is_mx6ul()) {
debug("This chip not support lcd!\n"); debug("This chip not support lcd!\n");
return; return;
} }
@@ -630,7 +627,7 @@ void mxs_set_lcdclk(u32 base_addr, u32 freq)
return; return;
} }
if (is_cpu_type(MXC_CPU_MX6SX)) { if (is_mx6sx()) {
reg = readl(&imx_ccm->cscdr2); reg = readl(&imx_ccm->cscdr2);
/* Can't change clocks when clock not from pre-mux */ /* Can't change clocks when clock not from pre-mux */
if ((reg & MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_MASK) != 0) if ((reg & MXC_CCM_CSCDR2_LCDIF2_CLK_SEL_MASK) != 0)
@@ -711,7 +708,7 @@ void mxs_set_lcdclk(u32 base_addr, u32 freq)
MXC_CCM_CBCMR_LCDIF1_PODF_MASK, MXC_CCM_CBCMR_LCDIF1_PODF_MASK,
((postd - 1) << ((postd - 1) <<
MXC_CCM_CBCMR_LCDIF1_PODF_OFFSET)); MXC_CCM_CBCMR_LCDIF1_PODF_OFFSET));
} else if (is_cpu_type(MXC_CPU_MX6SX)) { } else if (is_mx6sx()) {
/* Setting LCDIF2 for i.MX6SX */ /* Setting LCDIF2 for i.MX6SX */
if (enable_pll_video(pll_div, pll_num, pll_denom, post_div)) if (enable_pll_video(pll_div, pll_num, pll_denom, post_div))
return; return;
@@ -737,7 +734,7 @@ int enable_lcdif_clock(u32 base_addr)
u32 reg = 0; u32 reg = 0;
u32 lcdif_clk_sel_mask, lcdif_ccgr3_mask; u32 lcdif_clk_sel_mask, lcdif_ccgr3_mask;
if (is_cpu_type(MXC_CPU_MX6SX)) { if (is_mx6sx()) {
if ((base_addr != LCDIF1_BASE_ADDR) && if ((base_addr != LCDIF1_BASE_ADDR) &&
(base_addr != LCDIF2_BASE_ADDR)) { (base_addr != LCDIF2_BASE_ADDR)) {
puts("Wrong LCD interface!\n"); puts("Wrong LCD interface!\n");
@@ -752,7 +749,7 @@ int enable_lcdif_clock(u32 base_addr)
MXC_CCM_CCGR3_DISP_AXI_MASK) : MXC_CCM_CCGR3_DISP_AXI_MASK) :
(MXC_CCM_CCGR3_LCDIF1_PIX_MASK | (MXC_CCM_CCGR3_LCDIF1_PIX_MASK |
MXC_CCM_CCGR3_DISP_AXI_MASK); MXC_CCM_CCGR3_DISP_AXI_MASK);
} else if (is_cpu_type(MXC_CPU_MX6UL)) { } else if (is_mx6ul()) {
if (base_addr != LCDIF1_BASE_ADDR) { if (base_addr != LCDIF1_BASE_ADDR) {
puts("Wrong LCD interface!\n"); puts("Wrong LCD interface!\n");
return -EINVAL; return -EINVAL;
@@ -850,8 +847,7 @@ int enable_fec_anatop_clock(int fec_id, enum enet_freq freq)
reg |= BF_ANADIG_PLL_ENET_DIV_SELECT(freq); reg |= BF_ANADIG_PLL_ENET_DIV_SELECT(freq);
} else if (fec_id == 1) { } else if (fec_id == 1) {
/* Only i.MX6SX/UL support ENET2 */ /* Only i.MX6SX/UL support ENET2 */
if (!(is_cpu_type(MXC_CPU_MX6SX) || if (!(is_mx6sx() || is_mx6ul()))
is_cpu_type(MXC_CPU_MX6UL)))
return -EINVAL; return -EINVAL;
reg &= ~BM_ANADIG_PLL_ENET2_DIV_SELECT; reg &= ~BM_ANADIG_PLL_ENET2_DIV_SELECT;
reg |= BF_ANADIG_PLL_ENET2_DIV_SELECT(freq); reg |= BF_ANADIG_PLL_ENET2_DIV_SELECT(freq);
@@ -1044,7 +1040,7 @@ int enable_pcie_clock(void)
#define ANADIG_ANA_MISC1_LVDS1_CLK_SEL_PCIE_REF 0xa #define ANADIG_ANA_MISC1_LVDS1_CLK_SEL_PCIE_REF 0xa
#define ANADIG_ANA_MISC1_LVDS1_CLK_SEL_SATA_REF 0xb #define ANADIG_ANA_MISC1_LVDS1_CLK_SEL_SATA_REF 0xb
if (is_cpu_type(MXC_CPU_MX6SX)) if (is_mx6sx())
lvds1_clk_sel = ANADIG_ANA_MISC1_LVDS1_CLK_SEL_PCIE_REF; lvds1_clk_sel = ANADIG_ANA_MISC1_LVDS1_CLK_SEL_PCIE_REF;
else else
lvds1_clk_sel = ANADIG_ANA_MISC1_LVDS1_CLK_SEL_SATA_REF; lvds1_clk_sel = ANADIG_ANA_MISC1_LVDS1_CLK_SEL_SATA_REF;
@@ -1228,7 +1224,7 @@ static void disable_ldb_di_clock_sources(void)
/* Make sure PFDs are disabled at boot. */ /* Make sure PFDs are disabled at boot. */
reg = readl(&mxc_ccm->analog_pfd_528); reg = readl(&mxc_ccm->analog_pfd_528);
/* Cannot disable pll2_pfd2_396M, as it is the MMDC clock in iMX6DL */ /* Cannot disable pll2_pfd2_396M, as it is the MMDC clock in iMX6DL */
if (is_cpu_type(MXC_CPU_MX6DL) || is_cpu_type(MXC_CPU_MX6SOLO)) if (is_mx6sdl())
reg |= 0x80008080; reg |= 0x80008080;
else else
reg |= 0x80808080; reg |= 0x80808080;
@@ -1251,7 +1247,7 @@ static void enable_ldb_di_clock_sources(void)
int reg; int reg;
reg = readl(&mxc_ccm->analog_pfd_528); reg = readl(&mxc_ccm->analog_pfd_528);
if (is_cpu_type(MXC_CPU_MX6DL) || is_cpu_type(MXC_CPU_MX6SOLO)) if (is_mx6sdl())
reg &= ~(0x80008080); reg &= ~(0x80008080);
else else
reg &= ~(0x80808080); reg &= ~(0x80808080);

View File

@@ -888,8 +888,7 @@ void mx6sdl_dram_iocfg(unsigned width,
#define MR(val, ba, cmd, cs1) \ #define MR(val, ba, cmd, cs1) \
((val << 16) | (1 << 15) | (cmd << 4) | (cs1 << 3) | ba) ((val << 16) | (1 << 15) | (cmd << 4) | (cs1 << 3) | ba)
#define MMDC1(entry, value) do { \ #define MMDC1(entry, value) do { \
if (!is_cpu_type(MXC_CPU_MX6SX) && !is_cpu_type(MXC_CPU_MX6UL) && \ if (!is_mx6sx() && !is_mx6ul() && !is_mx6sl()) \
!is_cpu_type(MXC_CPU_MX6SL)) \
mmdc1->entry = value; \ mmdc1->entry = value; \
} while (0) } while (0)
@@ -1197,12 +1196,11 @@ void mx6_ddr3_cfg(const struct mx6_ddr_sysinfo *sysinfo,
u16 mem_speed = ddr3_cfg->mem_speed; u16 mem_speed = ddr3_cfg->mem_speed;
mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR; mmdc0 = (struct mmdc_p_regs *)MMDC_P0_BASE_ADDR;
if (!is_cpu_type(MXC_CPU_MX6SX) && !is_cpu_type(MXC_CPU_MX6UL) && if (!is_mx6sx() && !is_mx6ul() && !is_mx6sl())
!is_cpu_type(MXC_CPU_MX6SL))
mmdc1 = (struct mmdc_p_regs *)MMDC_P1_BASE_ADDR; mmdc1 = (struct mmdc_p_regs *)MMDC_P1_BASE_ADDR;
/* Limit mem_speed for MX6D/MX6Q */ /* Limit mem_speed for MX6D/MX6Q */
if (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) { if (is_mx6dq()) {
if (mem_speed > 1066) if (mem_speed > 1066)
mem_speed = 1066; /* 1066 MT/s */ mem_speed = 1066; /* 1066 MT/s */
@@ -1221,7 +1219,7 @@ void mx6_ddr3_cfg(const struct mx6_ddr_sysinfo *sysinfo,
* Data rate of 1066 MT/s requires 533 MHz DDR3 clock, but MX6D/Q supports * Data rate of 1066 MT/s requires 533 MHz DDR3 clock, but MX6D/Q supports
* up to 528 MHz, so reduce the clock to fit chip specs * up to 528 MHz, so reduce the clock to fit chip specs
*/ */
if (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) { if (is_mx6dq()) {
if (clock > 528) if (clock > 528)
clock = 528; /* 528 MHz */ clock = 528; /* 528 MHz */
} }

View File

@@ -126,7 +126,7 @@ u32 get_cpu_speed_grade_hz(void)
val >>= OCOTP_CFG3_SPEED_SHIFT; val >>= OCOTP_CFG3_SPEED_SHIFT;
val &= 0x3; val &= 0x3;
if (is_cpu_type(MXC_CPU_MX6UL)) { if (is_mx6ul()) {
if (val == OCOTP_CFG3_SPEED_528MHZ) if (val == OCOTP_CFG3_SPEED_528MHZ)
return 528000000; return 528000000;
else if (val == OCOTP_CFG3_SPEED_696MHZ) else if (val == OCOTP_CFG3_SPEED_696MHZ)
@@ -138,14 +138,14 @@ u32 get_cpu_speed_grade_hz(void)
switch (val) { switch (val) {
/* Valid for IMX6DQ */ /* Valid for IMX6DQ */
case OCOTP_CFG3_SPEED_1P2GHZ: case OCOTP_CFG3_SPEED_1P2GHZ:
if (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) if (is_mx6dq())
return 1200000000; return 1200000000;
/* Valid for IMX6SX/IMX6SDL/IMX6DQ */ /* Valid for IMX6SX/IMX6SDL/IMX6DQ */
case OCOTP_CFG3_SPEED_1GHZ: case OCOTP_CFG3_SPEED_1GHZ:
return 996000000; return 996000000;
/* Valid for IMX6DQ */ /* Valid for IMX6DQ */
case OCOTP_CFG3_SPEED_850MHZ: case OCOTP_CFG3_SPEED_850MHZ:
if (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) if (is_mx6dq())
return 852000000; return 852000000;
/* Valid for IMX6SX/IMX6SDL/IMX6DQ */ /* Valid for IMX6SX/IMX6SDL/IMX6DQ */
case OCOTP_CFG3_SPEED_800MHZ: case OCOTP_CFG3_SPEED_800MHZ:
@@ -293,7 +293,7 @@ static void clear_mmdc_ch_mask(void)
reg = readl(&mxc_ccm->ccdr); reg = readl(&mxc_ccm->ccdr);
/* Clear MMDC channel mask */ /* Clear MMDC channel mask */
if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL) || is_cpu_type(MXC_CPU_MX6SL)) if (is_mx6sx() || is_mx6ul() || is_mx6sl())
reg &= ~(MXC_CCM_CCDR_MMDC_CH1_HS_MASK); reg &= ~(MXC_CCM_CCDR_MMDC_CH1_HS_MASK);
else else
reg &= ~(MXC_CCM_CCDR_MMDC_CH1_HS_MASK | MXC_CCM_CCDR_MMDC_CH0_HS_MASK); reg &= ~(MXC_CCM_CCDR_MMDC_CH1_HS_MASK | MXC_CCM_CCDR_MMDC_CH0_HS_MASK);
@@ -459,8 +459,7 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
struct fuse_bank4_regs *fuse = struct fuse_bank4_regs *fuse =
(struct fuse_bank4_regs *)bank->fuse_regs; (struct fuse_bank4_regs *)bank->fuse_regs;
if ((is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) && if ((is_mx6sx() || is_mx6ul()) && dev_id == 1) {
dev_id == 1) {
u32 value = readl(&fuse->mac_addr2); u32 value = readl(&fuse->mac_addr2);
mac[0] = value >> 24 ; mac[0] = value >> 24 ;
mac[1] = value >> 16 ; mac[1] = value >> 16 ;
@@ -524,7 +523,7 @@ void s_init(void)
u32 mask528; u32 mask528;
u32 reg, periph1, periph2; u32 reg, periph1, periph2;
if (is_cpu_type(MXC_CPU_MX6SX) || is_cpu_type(MXC_CPU_MX6UL)) if (is_mx6sx() || is_mx6ul())
return; return;
/* Due to hardware limitation, on MX6Q we need to gate/ungate all PFDs /* Due to hardware limitation, on MX6Q we need to gate/ungate all PFDs