mirror of https://gitee.com/openkylin/linux.git
i.MX SoC update for 4.19:
- A series from Anson Huang to add power management for i.MX6SLL, including standby and mem mode suspend, cpuidle support, and bus clock auto gating function, etc. - A couple of fix-ups on i.MX6SLL cpuidle random build issues. - A couple of cleanups on stale EPIT timer initialization and RNGA platform device registration function. - Configure i.MX51 SoC M4IF to avoid visual artifacts during video playback. - Set up i.MX51 and i.MX53 DBGEN bit of ARM_GPC register, so that clocks within the debug system can be activated. - Add a Cortex-M4 platform support which will be useful for running a Linux instance on Cortex-M4 core integrated in i.MX7D SoC. - Flag of_iomap failure in imx_aips_allow_unprivileged_access() function by giving a warning in there. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJbUeD9AAoJEFBXWFqHsHzO8XQH/jeNhPnOwYa+iAWqTwsdQjka CY6rfgj/1YQjxlO6uWgbWta+m7D3XxeudCMHFBCGUpcWvEGIR/w/uThQN6N4GlTc SlXGolvs+kgorCRpIiDb+F5NU8cC6dwdD9qJOCRi5GqN3IlSjs9DnEn8Bm7Bi0qw mhExhDY/MNMHbUYNTEbig+8pn/74dQfcvKYb2VCnTTIOtJ3PJly3LXSQBJin1yPB gdMiyl/g348ZO15a02gxyGzDdY9nrYG6erJ4DCxkJhU7cat0TRUFMkON+5KP6DjD 5DWMNtwjfbbjub++jJmp6KO86ZUIPO+H9D1ATOAyqQVm8gxPDBm3fK48OFJycXU= =owQ6 -----END PGP SIGNATURE----- Merge tag 'imx-soc-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/soc i.MX SoC update for 4.19: - A series from Anson Huang to add power management for i.MX6SLL, including standby and mem mode suspend, cpuidle support, and bus clock auto gating function, etc. - A couple of fix-ups on i.MX6SLL cpuidle random build issues. - A couple of cleanups on stale EPIT timer initialization and RNGA platform device registration function. - Configure i.MX51 SoC M4IF to avoid visual artifacts during video playback. - Set up i.MX51 and i.MX53 DBGEN bit of ARM_GPC register, so that clocks within the debug system can be activated. - Add a Cortex-M4 platform support which will be useful for running a Linux instance on Cortex-M4 core integrated in i.MX7D SoC. - Flag of_iomap failure in imx_aips_allow_unprivileged_access() function by giving a warning in there. * tag 'imx-soc-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: ARM: mx5: Set the DBGEN bit in ARM_GPC register ARM: imx51: Configure M4IF to avoid visual artifacts ARM: imx: call imx6sx_cpuidle_init() conditionally for 6sll ARM: imx: fix i.MX6SLL build ARM: imx: flag failure of of_iomap ARM: i.MX31: remove rnga registration as a platform device ARM: imx: Provide support for NXP i.MX7D Cortex-M4 ARM: imx: enable bus auto clock gating function for i.mx6sll ARM: imx: remove i.MX6SLL support in i.MX6SL cpu idle driver ARM: imx: add cpu idle support for i.MX6SLL ARM: imx: add L2 page power control for GPC ARM: imx: add mem mode suspend for i.MX6SLL ARM: imx: add standby mode suspend for i.MX6SLL ARM: imx: remove inexistant EPIT timer init Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
f0ad841230
|
@ -523,18 +523,6 @@ config SOC_IMX6UL
|
|||
help
|
||||
This enables support for Freescale i.MX6 UltraLite processor.
|
||||
|
||||
config SOC_IMX7D
|
||||
bool "i.MX7 Dual support"
|
||||
select PINCTRL_IMX7D
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
select HAVE_IMX_ANATOP
|
||||
select HAVE_IMX_MMDC
|
||||
select HAVE_IMX_SRC
|
||||
select IMX_GPCV2
|
||||
help
|
||||
This enables support for Freescale i.MX7 Dual processor.
|
||||
|
||||
config SOC_LS1021A
|
||||
bool "Freescale LS1021A support"
|
||||
select ARM_GIC
|
||||
|
@ -549,6 +537,27 @@ comment "Cortex-A/Cortex-M asymmetric multiprocessing platforms"
|
|||
|
||||
if ARCH_MULTI_V7 || ARM_SINGLE_ARMV7M
|
||||
|
||||
config SOC_IMX7D_CA7
|
||||
bool
|
||||
select ARM_GIC
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
select HAVE_IMX_ANATOP
|
||||
select HAVE_IMX_MMDC
|
||||
select HAVE_IMX_SRC
|
||||
select IMX_GPCV2
|
||||
|
||||
config SOC_IMX7D_CM4
|
||||
bool
|
||||
select ARMV7M_SYSTICK
|
||||
|
||||
config SOC_IMX7D
|
||||
bool "i.MX7 Dual support"
|
||||
select PINCTRL_IMX7D
|
||||
select SOC_IMX7D_CA7 if ARCH_MULTI_V7
|
||||
select SOC_IMX7D_CM4 if ARM_SINGLE_ARMV7M
|
||||
help
|
||||
This enables support for Freescale i.MX7 Dual processor.
|
||||
|
||||
config SOC_VF610
|
||||
bool "Vybrid Family VF610 support"
|
||||
select ARM_GIC if ARCH_MULTI_V7
|
||||
|
|
|
@ -26,7 +26,7 @@ ifeq ($(CONFIG_CPU_IDLE),y)
|
|||
obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o
|
||||
obj-$(CONFIG_SOC_IMX6Q) += cpuidle-imx6q.o
|
||||
obj-$(CONFIG_SOC_IMX6SL) += cpuidle-imx6sl.o
|
||||
obj-$(CONFIG_SOC_IMX6SLL) += cpuidle-imx6sl.o
|
||||
obj-$(CONFIG_SOC_IMX6SLL) += cpuidle-imx6sx.o
|
||||
obj-$(CONFIG_SOC_IMX6SX) += cpuidle-imx6sx.o
|
||||
obj-$(CONFIG_SOC_IMX6UL) += cpuidle-imx6sx.o
|
||||
endif
|
||||
|
@ -81,7 +81,8 @@ obj-$(CONFIG_SOC_IMX6SL) += mach-imx6sl.o
|
|||
obj-$(CONFIG_SOC_IMX6SLL) += mach-imx6sl.o
|
||||
obj-$(CONFIG_SOC_IMX6SX) += mach-imx6sx.o
|
||||
obj-$(CONFIG_SOC_IMX6UL) += mach-imx6ul.o
|
||||
obj-$(CONFIG_SOC_IMX7D) += mach-imx7d.o
|
||||
obj-$(CONFIG_SOC_IMX7D_CA7) += mach-imx7d.o
|
||||
obj-$(CONFIG_SOC_IMX7D_CM4) += mach-imx7d-cm4.o
|
||||
|
||||
ifeq ($(CONFIG_SUSPEND),y)
|
||||
AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
|
||||
|
|
|
@ -38,7 +38,6 @@ void imx21_soc_init(void);
|
|||
void imx27_soc_init(void);
|
||||
void imx31_soc_init(void);
|
||||
void imx35_soc_init(void);
|
||||
void epit_timer_init(void __iomem *base, int irq);
|
||||
int mx21_clocks_init(unsigned long lref, unsigned long fref);
|
||||
int mx27_clocks_init(unsigned long fref);
|
||||
int mx31_clocks_init(unsigned long fref);
|
||||
|
@ -58,10 +57,12 @@ struct device *imx_soc_device_init(void);
|
|||
void imx6_enable_rbc(bool enable);
|
||||
void imx_gpc_check_dt(void);
|
||||
void imx_gpc_set_arm_power_in_lpm(bool power_off);
|
||||
void imx_gpc_set_l2_mem_power_in_lpm(bool power_off);
|
||||
void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw);
|
||||
void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw);
|
||||
void imx25_pm_init(void);
|
||||
void imx27_pm_init(void);
|
||||
void imx5_pmu_init(void);
|
||||
|
||||
enum mxc_cpu_pwr_mode {
|
||||
WAIT_CLOCKED, /* wfi only */
|
||||
|
|
|
@ -117,3 +117,48 @@ int mx53_revision(void)
|
|||
return mx5_cpu_rev;
|
||||
}
|
||||
EXPORT_SYMBOL(mx53_revision);
|
||||
|
||||
#define ARM_GPC 0x4
|
||||
#define DBGEN BIT(16)
|
||||
|
||||
/*
|
||||
* This enables the DBGEN bit in ARM_GPC register, which is
|
||||
* required for accessing some performance counter features.
|
||||
* Technically it is only required while perf is used, but to
|
||||
* keep the source code simple we just enable it all the time
|
||||
* when the kernel configuration allows using the feature.
|
||||
*/
|
||||
void __init imx5_pmu_init(void)
|
||||
{
|
||||
void __iomem *tigerp_base;
|
||||
struct device_node *np;
|
||||
u32 gpc;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_ARM_PMU))
|
||||
return;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "arm,cortex-a8-pmu");
|
||||
if (!np)
|
||||
return;
|
||||
|
||||
if (!of_property_read_bool(np, "secure-reg-access"))
|
||||
goto exit;
|
||||
|
||||
of_node_put(np);
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx51-tigerp");
|
||||
if (!np)
|
||||
return;
|
||||
|
||||
tigerp_base = of_iomap(np, 0);
|
||||
if (!tigerp_base)
|
||||
goto exit;
|
||||
|
||||
gpc = readl_relaxed(tigerp_base + ARM_GPC);
|
||||
gpc |= DBGEN;
|
||||
writel_relaxed(gpc, tigerp_base + ARM_GPC);
|
||||
iounmap(tigerp_base);
|
||||
exit:
|
||||
of_node_put(np);
|
||||
|
||||
}
|
||||
|
|
|
@ -68,6 +68,7 @@ void __init imx_aips_allow_unprivileged_access(
|
|||
|
||||
for_each_compatible_node(np, NULL, compat) {
|
||||
aips_base_addr = of_iomap(np, 0);
|
||||
WARN_ON(!aips_base_addr);
|
||||
imx_set_aips(aips_base_addr);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
|
||||
#include "common.h"
|
||||
#include "cpuidle.h"
|
||||
#include "hardware.h"
|
||||
|
||||
static int imx6sl_enter_wait(struct cpuidle_device *dev,
|
||||
struct cpuidle_driver *drv, int index)
|
||||
|
@ -22,11 +21,9 @@ static int imx6sl_enter_wait(struct cpuidle_device *dev,
|
|||
* Software workaround for ERR005311, see function
|
||||
* description for details.
|
||||
*/
|
||||
if (cpu_is_imx6sl())
|
||||
imx6sl_set_wait_clk(true);
|
||||
imx6sl_set_wait_clk(true);
|
||||
cpu_do_idle();
|
||||
if (cpu_is_imx6sl())
|
||||
imx6sl_set_wait_clk(false);
|
||||
imx6sl_set_wait_clk(false);
|
||||
imx6_set_lpm(WAIT_CLOCKED);
|
||||
|
||||
return index;
|
||||
|
|
|
@ -103,6 +103,7 @@ int __init imx6sx_cpuidle_init(void)
|
|||
{
|
||||
imx6_set_int_mem_clk_lpm(true);
|
||||
imx6_enable_rbc(false);
|
||||
imx_gpc_set_l2_mem_power_in_lpm(false);
|
||||
/*
|
||||
* set ARM power up/down timing to the fastest,
|
||||
* sw2iso and sw can be set to one 32K cycle = 31us
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "common.h"
|
||||
#include "hardware.h"
|
||||
|
||||
#define GPC_CNTR 0x0
|
||||
#define GPC_IMR1 0x008
|
||||
#define GPC_PGC_CPU_PDN 0x2a0
|
||||
#define GPC_PGC_CPU_PUPSCR 0x2a4
|
||||
|
@ -27,6 +28,8 @@
|
|||
#define GPC_PGC_SW2ISO_SHIFT 0x8
|
||||
#define GPC_PGC_SW_SHIFT 0x0
|
||||
|
||||
#define GPC_CNTR_L2_PGE_SHIFT 22
|
||||
|
||||
#define IMR_NUM 4
|
||||
#define GPC_MAX_IRQS (IMR_NUM * 32)
|
||||
|
||||
|
@ -51,6 +54,17 @@ void imx_gpc_set_arm_power_in_lpm(bool power_off)
|
|||
writel_relaxed(power_off, gpc_base + GPC_PGC_CPU_PDN);
|
||||
}
|
||||
|
||||
void imx_gpc_set_l2_mem_power_in_lpm(bool power_off)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = readl_relaxed(gpc_base + GPC_CNTR);
|
||||
val &= ~(1 << GPC_CNTR_L2_PGE_SHIFT);
|
||||
if (power_off)
|
||||
val |= 1 << GPC_CNTR_L2_PGE_SHIFT;
|
||||
writel_relaxed(val, gpc_base + GPC_CNTR);
|
||||
}
|
||||
|
||||
void imx_gpc_pre_suspend(bool arm_power_off)
|
||||
{
|
||||
void __iomem *reg_imr1 = gpc_base + GPC_IMR1;
|
||||
|
|
|
@ -9,35 +9,17 @@
|
|||
* http://www.gnu.org/copyleft/gpl.html
|
||||
*/
|
||||
|
||||
#include <linux/irq.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "mx31.h"
|
||||
|
||||
static const char * const imx31_dt_board_compat[] __initconst = {
|
||||
"fsl,imx31",
|
||||
NULL
|
||||
};
|
||||
|
||||
/* FIXME: replace with DT binding */
|
||||
static const struct resource imx31_rnga_res[] __initconst = {
|
||||
DEFINE_RES_MEM(MX31_RNGA_BASE_ADDR, SZ_16K),
|
||||
};
|
||||
|
||||
static void __init imx31_dt_mach_init(void)
|
||||
{
|
||||
platform_device_register_simple("mxc_rnga", -1, imx31_rnga_res,
|
||||
ARRAY_SIZE(imx31_rnga_res));
|
||||
}
|
||||
|
||||
DT_MACHINE_START(IMX31_DT, "Freescale i.MX31 (Device Tree Support)")
|
||||
.map_io = mx31_map_io,
|
||||
.init_early = imx31_init_early,
|
||||
.init_irq = mx31_init_irq,
|
||||
.init_machine = imx31_dt_mach_init,
|
||||
.dt_compat = imx31_dt_board_compat,
|
||||
MACHINE_END
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_irq.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -48,11 +49,38 @@ static void __init imx51_ipu_mipi_setup(void)
|
|||
iounmap(hsc_addr);
|
||||
}
|
||||
|
||||
static void __init imx51_m4if_setup(void)
|
||||
{
|
||||
void __iomem *m4if_base;
|
||||
struct device_node *np;
|
||||
|
||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx51-m4if");
|
||||
if (!np)
|
||||
return;
|
||||
|
||||
m4if_base = of_iomap(np, 0);
|
||||
if (!m4if_base) {
|
||||
pr_err("Unable to map M4IF registers\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Configure VPU and IPU with higher priorities
|
||||
* in order to avoid artifacts during video playback
|
||||
*/
|
||||
writel_relaxed(0x00000203, m4if_base + 0x40);
|
||||
writel_relaxed(0x00000000, m4if_base + 0x44);
|
||||
writel_relaxed(0x00120125, m4if_base + 0x9c);
|
||||
writel_relaxed(0x001901A3, m4if_base + 0x48);
|
||||
iounmap(m4if_base);
|
||||
}
|
||||
|
||||
static void __init imx51_dt_init(void)
|
||||
{
|
||||
imx51_ipu_mipi_setup();
|
||||
imx_src_init();
|
||||
|
||||
imx51_m4if_setup();
|
||||
imx5_pmu_init();
|
||||
imx_aips_allow_unprivileged_access("fsl,imx51-aipstz");
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ static void __init imx53_init_early(void)
|
|||
static void __init imx53_dt_init(void)
|
||||
{
|
||||
imx_src_init();
|
||||
|
||||
imx5_pmu_init();
|
||||
imx_aips_allow_unprivileged_access("fsl,imx53-aipstz");
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,10 @@ static void __init imx6sl_init_late(void)
|
|||
if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ))
|
||||
platform_device_register_simple("imx6q-cpufreq", -1, NULL, 0);
|
||||
|
||||
imx6sl_cpuidle_init();
|
||||
if (IS_ENABLED(CONFIG_SOC_IMX6SL) && cpu_is_imx6sl())
|
||||
imx6sl_cpuidle_init();
|
||||
else if (IS_ENABLED(CONFIG_SOC_IMX6SLL))
|
||||
imx6sx_cpuidle_init();
|
||||
}
|
||||
|
||||
static void __init imx6sl_init_machine(void)
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* Copyright (c) 2018 Pengutronix, Oleksij Rempel <o.rempel@pengutronix.de>
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/v7m.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
static const char * const imx7d_cm4_dt_compat[] __initconst = {
|
||||
"fsl,imx7d-cm4",
|
||||
NULL,
|
||||
};
|
||||
|
||||
DT_MACHINE_START(IMX7D, "Freescale i.MX7 Dual Cortex-M4 (Device Tree)")
|
||||
.dt_compat = imx7d_cm4_dt_compat,
|
||||
.restart = armv7m_restart,
|
||||
MACHINE_END
|
|
@ -130,6 +130,13 @@ static const u32 imx6sl_mmdc_io_offset[] __initconst = {
|
|||
0x330, 0x334, 0x320, /* SDCKE0, SDCKE1, RESET */
|
||||
};
|
||||
|
||||
static const u32 imx6sll_mmdc_io_offset[] __initconst = {
|
||||
0x294, 0x298, 0x29c, 0x2a0, /* DQM0 ~ DQM3 */
|
||||
0x544, 0x54c, 0x554, 0x558, /* GPR_B0DS ~ GPR_B3DS */
|
||||
0x530, 0x540, 0x2ac, 0x52c, /* MODE_CTL, MODE, SDCLK_0, GPR_ADDDS */
|
||||
0x2a4, 0x2a8, /* SDCKE0, SDCKE1*/
|
||||
};
|
||||
|
||||
static const u32 imx6sx_mmdc_io_offset[] __initconst = {
|
||||
0x2ec, 0x2f0, 0x2f4, 0x2f8, /* DQM0 ~ DQM3 */
|
||||
0x60c, 0x610, 0x61c, 0x620, /* GPR_B0DS ~ GPR_B3DS */
|
||||
|
@ -175,6 +182,16 @@ static const struct imx6_pm_socdata imx6sl_pm_data __initconst = {
|
|||
.mmdc_io_offset = imx6sl_mmdc_io_offset,
|
||||
};
|
||||
|
||||
static const struct imx6_pm_socdata imx6sll_pm_data __initconst = {
|
||||
.mmdc_compat = "fsl,imx6sll-mmdc",
|
||||
.src_compat = "fsl,imx6sll-src",
|
||||
.iomuxc_compat = "fsl,imx6sll-iomuxc",
|
||||
.gpc_compat = "fsl,imx6sll-gpc",
|
||||
.pl310_compat = "arm,pl310-cache",
|
||||
.mmdc_io_num = ARRAY_SIZE(imx6sll_mmdc_io_offset),
|
||||
.mmdc_io_offset = imx6sll_mmdc_io_offset,
|
||||
};
|
||||
|
||||
static const struct imx6_pm_socdata imx6sx_pm_data __initconst = {
|
||||
.mmdc_compat = "fsl,imx6sx-mmdc",
|
||||
.src_compat = "fsl,imx6sx-src",
|
||||
|
@ -296,7 +313,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
|
|||
if (cpu_is_imx6sl())
|
||||
val |= BM_CLPCR_BYPASS_PMIC_READY;
|
||||
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul() ||
|
||||
cpu_is_imx6ull())
|
||||
cpu_is_imx6ull() || cpu_is_imx6sll())
|
||||
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
|
||||
else
|
||||
val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
|
||||
|
@ -314,7 +331,7 @@ int imx6_set_lpm(enum mxc_cpu_pwr_mode mode)
|
|||
if (cpu_is_imx6sl() || cpu_is_imx6sx())
|
||||
val |= BM_CLPCR_BYPASS_PMIC_READY;
|
||||
if (cpu_is_imx6sl() || cpu_is_imx6sx() || cpu_is_imx6ul() ||
|
||||
cpu_is_imx6ull())
|
||||
cpu_is_imx6ull() || cpu_is_imx6sll())
|
||||
val |= BM_CLPCR_BYP_MMDC_CH0_LPM_HS;
|
||||
else
|
||||
val |= BM_CLPCR_BYP_MMDC_CH1_LPM_HS;
|
||||
|
@ -631,7 +648,17 @@ void __init imx6dl_pm_init(void)
|
|||
|
||||
void __init imx6sl_pm_init(void)
|
||||
{
|
||||
imx6_pm_common_init(&imx6sl_pm_data);
|
||||
struct regmap *gpr;
|
||||
|
||||
if (cpu_is_imx6sl()) {
|
||||
imx6_pm_common_init(&imx6sl_pm_data);
|
||||
} else {
|
||||
imx6_pm_common_init(&imx6sll_pm_data);
|
||||
gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
|
||||
if (!IS_ERR(gpr))
|
||||
regmap_update_bits(gpr, IOMUXC_GPR5,
|
||||
IMX6SLL_GPR5_AFCG_X_BYPASS_MASK, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void __init imx6sx_pm_init(void)
|
||||
|
|
|
@ -457,4 +457,7 @@
|
|||
#define MCLK_DIR(x) (x == 1 ? IMX6UL_GPR1_SAI1_MCLK_DIR : x == 2 ? \
|
||||
IMX6UL_GPR1_SAI2_MCLK_DIR : IMX6UL_GPR1_SAI3_MCLK_DIR)
|
||||
|
||||
/* For imx6sll iomux gpr register field define */
|
||||
#define IMX6SLL_GPR5_AFCG_X_BYPASS_MASK (0x1f << 11)
|
||||
|
||||
#endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */
|
||||
|
|
Loading…
Reference in New Issue