summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
authorJacky Bai <ping.bai@nxp.com>2019-11-27 14:47:28 +0800
committerJacky Bai <ping.bai@nxp.com>2019-11-28 15:13:42 +0800
commit090b431c46bb79bcbc6314fee90e339e89552c82 (patch)
treeba65b9eaae1762f8cadcbd4bf9e2d52515fbfcd0 /arch/arm/mach-imx
parent9bfb9485e27731e02b49b411e53c1d6b65345b58 (diff)
LF-171 ARM: imx: Add cpu type check for imx6ulz in msl code
Add cpu type check for i.MX6ULZ in MSL code to support low power feature. Signed-off-by: Jacky Bai <ping.bai@nxp.com> Reviewed-by: Anson Huang <Anson.Huang@nxp.com>
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/anatop.c10
-rw-r--r--arch/arm/mach-imx/busfreq-imx.c26
-rw-r--r--arch/arm/mach-imx/busfreq_ddr3.c4
-rw-r--r--arch/arm/mach-imx/busfreq_lpddr2.c3
-rw-r--r--arch/arm/mach-imx/gpc.c20
-rw-r--r--arch/arm/mach-imx/pm-imx6.c14
6 files changed, 40 insertions, 37 deletions
diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c
index c674ab94cc3f..a9ec0159b8f0 100644
--- a/arch/arm/mach-imx/anatop.c
+++ b/arch/arm/mach-imx/anatop.c
@@ -63,8 +63,8 @@ static void imx_anatop_enable_weak2p5(bool enable)
regmap_read(anatop, ANADIG_ANA_MISC0, &val);
- if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull()
- || cpu_is_imx6sll())
+ if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz() || cpu_is_imx6sll())
mask = BM_ANADIG_ANA_MISC0_V3_STOP_MODE_CONFIG;
else if (cpu_is_imx6sl())
mask = BM_ANADIG_ANA_MISC0_V2_STOP_MODE_CONFIG;
@@ -92,7 +92,7 @@ static inline void imx_anatop_enable_2p5_pulldown(bool enable)
static inline void imx_anatop_disconnect_high_snvs(bool enable)
{
if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
- cpu_is_imx6sll())
+ cpu_is_imx6ulz() || cpu_is_imx6sll())
regmap_write(anatop, ANADIG_ANA_MISC0 +
(enable ? REG_SET : REG_CLR),
BM_ANADIG_ANA_MISC0_V2_DISCON_HIGH_SNVS);
@@ -147,7 +147,7 @@ void imx_anatop_pre_suspend(void)
imx_anatop_enable_fet_odrive(true);
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul() ||
- cpu_is_imx6ull() || cpu_is_imx6sll())
+ cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll())
imx_anatop_disconnect_high_snvs(true);
}
@@ -172,7 +172,7 @@ void imx_anatop_post_resume(void)
imx_anatop_enable_fet_odrive(false);
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul() ||
- cpu_is_imx6ull() || cpu_is_imx6sll())
+ cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll())
imx_anatop_disconnect_high_snvs(false);
}
diff --git a/arch/arm/mach-imx/busfreq-imx.c b/arch/arm/mach-imx/busfreq-imx.c
index 57fd6de9cf5a..1efaef308ebe 100644
--- a/arch/arm/mach-imx/busfreq-imx.c
+++ b/arch/arm/mach-imx/busfreq-imx.c
@@ -258,7 +258,7 @@ static void enter_lpm_imx6_up(void)
clk_set_rate(mmdc_clk, HIGH_AUDIO_CLK);
}
- if ((cpu_is_imx6ull() | cpu_is_imx6sll()) && low_bus_freq_mode)
+ if ((cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll()) && low_bus_freq_mode)
imx6ull_lower_cpu_rate(false);
audio_bus_freq_mode = 1;
@@ -273,7 +273,7 @@ static void enter_lpm_imx6_up(void)
if (audio_bus_freq_mode)
clk_disable_unprepare(pll2_400_clk);
- if (cpu_is_imx6ull() | cpu_is_imx6sll())
+ if (cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll())
imx6ull_lower_cpu_rate(true);
low_bus_freq_mode = 1;
@@ -337,7 +337,7 @@ static void enter_lpm_imx6_smp(void)
static void exit_lpm_imx6_up(void)
{
- if ((cpu_is_imx6ull() | cpu_is_imx6sll()) && low_bus_freq_mode)
+ if ((cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll()) && low_bus_freq_mode)
imx6ull_lower_cpu_rate(false);
clk_prepare_enable(pll2_400_clk);
@@ -346,14 +346,15 @@ static void exit_lpm_imx6_up(void)
* lower ahb/ocram's freq first to avoid too high
* freq during parent switch from OSC to pll3.
*/
- if (cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6sll())
+ if (cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6ulz()
+ || cpu_is_imx6sll())
clk_set_rate(ahb_clk, LPAPM_CLK / 4);
else
clk_set_rate(ahb_clk, LPAPM_CLK / 3);
clk_set_rate(ocram_clk, LPAPM_CLK / 2);
/* set periph clk to from pll2_bus on i.MX6UL */
- if (cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6sll())
+ if (cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll())
clk_set_parent(periph_pre_clk, pll2_bus_clk);
/* set periph clk to from pll2_400 */
else
@@ -675,7 +676,7 @@ static void reduce_bus_freq(void)
if (cpu_is_imx7d())
enter_lpm_imx7d();
else if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
- cpu_is_imx6sll())
+ cpu_is_imx6ulz() || cpu_is_imx6sll())
enter_lpm_imx6_up();
else if (cpu_is_imx6q() || cpu_is_imx6dl())
enter_lpm_imx6_smp();
@@ -780,7 +781,7 @@ static int set_high_bus_freq(int high_bus_freq)
if (cpu_is_imx7d())
exit_lpm_imx7d();
else if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
- cpu_is_imx6sll())
+ cpu_is_imx6ulz() || cpu_is_imx6sll())
exit_lpm_imx6_up();
else if (cpu_is_imx6q() || cpu_is_imx6dl())
exit_lpm_imx6_smp();
@@ -1138,8 +1139,8 @@ static int busfreq_probe(struct platform_device *pdev)
}
}
- if (cpu_is_imx6sx() || cpu_is_imx6sl() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
- cpu_is_imx6sll()) {
+ if (cpu_is_imx6sx() || cpu_is_imx6sl() || cpu_is_imx6ul() ||
+ cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll()) {
ahb_clk = devm_clk_get(&pdev->dev, "ahb");
ocram_clk = devm_clk_get(&pdev->dev, "ocram");
periph2_clk = devm_clk_get(&pdev->dev, "periph2");
@@ -1157,7 +1158,8 @@ static int busfreq_probe(struct platform_device *pdev)
}
}
- if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6sll()) {
+ if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz() || cpu_is_imx6sll()) {
mmdc_clk = devm_clk_get(&pdev->dev, "mmdc");
if (IS_ERR(mmdc_clk)) {
dev_err(busfreq_dev,
@@ -1193,7 +1195,7 @@ static int busfreq_probe(struct platform_device *pdev)
}
}
- if (cpu_is_imx6sl() || cpu_is_imx6ull() || cpu_is_imx6sll()) {
+ if (cpu_is_imx6sl() || cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll()) {
arm_clk = devm_clk_get(&pdev->dev, "arm");
step_clk = devm_clk_get(&pdev->dev, "step");
pll1_clk = devm_clk_get(&pdev->dev, "pll1");
@@ -1298,7 +1300,7 @@ static int busfreq_probe(struct platform_device *pdev)
}
busfreq_func.init = &init_ddrc_ddr_settings;
busfreq_func.update = &update_ddr_freq_imx_smp;
- } else if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ } else if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6ulz() ||
cpu_is_imx6sll()) {
ddr_type = imx_mmdc_get_ddr_type();
if (ddr_type == IMX_DDR_TYPE_DDR3) {
diff --git a/arch/arm/mach-imx/busfreq_ddr3.c b/arch/arm/mach-imx/busfreq_ddr3.c
index 24ce49d2d540..0088a5d80736 100644
--- a/arch/arm/mach-imx/busfreq_ddr3.c
+++ b/arch/arm/mach-imx/busfreq_ddr3.c
@@ -540,7 +540,7 @@ int init_mmdc_ddr3_settings_imx6_up(struct platform_device *busfreq_pdev)
+ normal_mmdc_settings[i][0]);
}
- if (cpu_is_imx6ul() || cpu_is_imx6ull())
+ if (cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6ulz())
iomux_settings_size = ARRAY_SIZE(iomux_offsets_mx6ul);
else
iomux_settings_size = ARRAY_SIZE(iomux_offsets_mx6sx);
@@ -566,7 +566,7 @@ int init_mmdc_ddr3_settings_imx6_up(struct platform_device *busfreq_pdev)
}
for (i = 0; i < iomux_settings_size; i++) {
- if (cpu_is_imx6ul() || cpu_is_imx6ull()) {
+ if (cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6ulz()) {
iomux_offsets_mx6ul[i][1] =
readl_relaxed(iomux_base +
iomux_offsets_mx6ul[i][0]);
diff --git a/arch/arm/mach-imx/busfreq_lpddr2.c b/arch/arm/mach-imx/busfreq_lpddr2.c
index dc6d4ce9b685..f5b3caa43645 100644
--- a/arch/arm/mach-imx/busfreq_lpddr2.c
+++ b/arch/arm/mach-imx/busfreq_lpddr2.c
@@ -167,7 +167,8 @@ int init_mmdc_lpddr2_settings(struct platform_device *busfreq_pdev)
mx6_change_lpddr2_freq = (void *)fncpy(
(void *)ddr_freq_change_iram_base,
&mx6_lpddr2_freq_change, ddr_code_size);
- if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull())
+ if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz())
mx6_change_lpddr2_freq = (void *)fncpy(
(void *)ddr_freq_change_iram_base,
&imx6_up_lpddr2_freq_change, ddr_code_size);
diff --git a/arch/arm/mach-imx/gpc.c b/arch/arm/mach-imx/gpc.c
index 5007a3b96c6f..838d93381c07 100644
--- a/arch/arm/mach-imx/gpc.c
+++ b/arch/arm/mach-imx/gpc.c
@@ -115,8 +115,8 @@ unsigned int imx_gpc_is_m4_sleeping(void)
bool imx_gpc_usb_wakeup_enabled(void)
{
- if (!(cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull()
- || cpu_is_imx6sll()))
+ if (!(cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz() || cpu_is_imx6sll()))
return false;
/*
@@ -196,8 +196,8 @@ void imx_gpc_pre_suspend(bool arm_power_off)
int i;
/* power down the mega-fast power domain */
- if ((cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull()
- || cpu_is_imx6sll()) && arm_power_off)
+ if ((cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz() || cpu_is_imx6sll()) && arm_power_off)
imx_gpc_mf_mix_off();
/* Tell GPC to power off ARM core when suspend */
@@ -218,8 +218,8 @@ void imx_gpc_post_resume(void)
/* Keep ARM core powered on for other low-power modes */
imx_gpc_set_arm_power_in_lpm(false);
/* Keep M/F mix powered on for other low-power modes */
- if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull()
- || cpu_is_imx6sll())
+ if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz() || cpu_is_imx6sll())
writel_relaxed(0x0, gpc_base + GPC_PGC_MF_PDN);
for (i = 0; i < IMR_NUM; i++)
@@ -386,8 +386,8 @@ int imx_gpc_mf_power_on(unsigned int irq, unsigned int on)
int imx_gpc_mf_request_on(unsigned int irq, unsigned int on)
{
- if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull()
- || cpu_is_imx6sll())
+ if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz() || cpu_is_imx6sll())
return imx_gpc_mf_power_on(irq, on);
else if (cpu_is_imx7d())
return imx_gpcv2_mf_power_on(irq, on);
@@ -469,8 +469,8 @@ static int __init imx_gpc_init(struct device_node *node,
writel_relaxed(~0, gpc_base + GPC_IMR1 + i * 4);
/* Read supported wakeup source in M/F domain */
- if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull()
- || cpu_is_imx6sll()) {
+ if (cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() ||
+ cpu_is_imx6ulz() || cpu_is_imx6sll()) {
of_property_read_u32_index(node, "fsl,mf-mix-wakeup-irq", 0,
&gpc_mf_irqs[0]);
of_property_read_u32_index(node, "fsl,mf-mix-wakeup-irq", 1,
diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c
index 6681973ee9b5..9f44f0fa121f 100644
--- a/arch/arm/mach-imx/pm-imx6.c
+++ b/arch/arm/mach-imx/pm-imx6.c
@@ -680,7 +680,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6sll())
val |= BM_CLPCR_BYPASS_PMIC_READY;
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul() ||
- cpu_is_imx6ull() || cpu_is_imx6sll())
+ cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll())
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
else if (cpu_is_imx6q() &&
imx_mmdc_get_ddr_type() == IMX_DDR_TYPE_LPDDR2 &&
@@ -705,7 +705,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6sll())
val |= BM_CLPCR_BYPASS_PMIC_READY;
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul() ||
- cpu_is_imx6ull() || cpu_is_imx6sll())
+ cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll())
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
else if (cpu_is_imx6q() &&
imx_mmdc_get_ddr_type() == IMX_DDR_TYPE_LPDDR2 &&
@@ -887,7 +887,7 @@ static int imx6q_pm_enter(suspend_state_t state)
imx6_enable_rbc(true);
imx_gpc_pre_suspend(true);
imx_anatop_pre_suspend();
- if ((cpu_is_imx6ull() || cpu_is_imx6sll()) &&
+ if ((cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll()) &&
imx_gpc_is_mf_mix_off())
imx6_console_save(console_saved_reg);
if (cpu_is_imx6sx() && imx_gpc_is_mf_mix_off()) {
@@ -928,7 +928,7 @@ static int imx6q_pm_enter(suspend_state_t state)
sizeof(qspi_regs_imx6sx) /
sizeof(struct qspi_regs));
}
- if ((cpu_is_imx6ull() || cpu_is_imx6sll()) &&
+ if ((cpu_is_imx6ull() || cpu_is_imx6ulz() || cpu_is_imx6sll()) &&
imx_gpc_is_mf_mix_off())
imx6_console_restore(console_saved_reg);
if (cpu_is_imx6q() || cpu_is_imx6dl())
@@ -1193,7 +1193,7 @@ static int __init imx6q_suspend_init(const struct imx6_pm_socdata *socdata)
}
/* need to overwrite the value for some mmdc registers */
- if ((cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull()) &&
+ if ((cpu_is_imx6sx() || cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6ulz()) &&
pm_info->ddr_type != IMX_DDR_TYPE_LPDDR2) {
pm_info->mmdc_val[20][1] = (pm_info->mmdc_val[20][1]
& 0xffff0000) | 0x0202;
@@ -1212,7 +1212,7 @@ static int __init imx6q_suspend_init(const struct imx6_pm_socdata *socdata)
pm_info->mmdc_val[32][1] = 0xa1310003;
}
- if ((cpu_is_imx6ul() || cpu_is_imx6ull()) &&
+ if ((cpu_is_imx6ul() || cpu_is_imx6ull() || cpu_is_imx6ulz()) &&
pm_info->ddr_type == IMX_DDR_TYPE_LPDDR2) {
pm_info->mmdc_val[0][1] = 0x8000;
pm_info->mmdc_val[2][1] = 0xa1390003;
@@ -1385,7 +1385,7 @@ void __init imx6ul_pm_init(void)
else
imx6_pm_common_init(&imx6ul_pm_data);
- if (cpu_is_imx6ull()) {
+ if (cpu_is_imx6ull() || cpu_is_imx6ulz()) {
np = of_find_node_by_path(
"/soc/aips-bus@02000000/spba-bus@02000000/serial@02020000");
if (np)