[PATCH v2 05/12] ARM: imx: setup tctl register in device specific function
Shawn Guo
shawnguo at kernel.org
Tue Jun 2 23:16:48 PDT 2015
On Tue, Jun 02, 2015 at 08:56:02AM -0700, Kevin Hilman wrote:
> I'm just using multi_v7_defconfig, and BROKEN is not set, but that
> driver is still built because it's explicitly selected by ARCH_MXC:
>
> $ git describe
> next-20150601
> $ rm build/.config
> $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- O=build multi_v7_defconfig
> make[1]: Entering directory `/work/kernel/next/build'
> GEN ./Makefile
> arch/arm/configs/multi_v7_defconfig:603:warning: override: reassigning
> to symbol COMMON_CLK_QCOM
> warning: (ARCH_MXC) selects CLKSRC_IMX_GPT which has unmet direct
> dependencies (OF && BROKEN)
> warning: (ARCH_MXC) selects CLKSRC_IMX_GPT which has unmet direct
> dependencies (OF && BROKEN)
> #
> # configuration written to .config
> #
> make[1]: Leaving directory `/work/kernel/next/build'
> $ grep CLKSRC_IMX_GPT build/.config
> CONFIG_CLKSRC_IMX_GPT=y
> $
Yes, you're right. It's broken on i.MX6DL/S indeed. The cause is that
i.MX6DL/S DTBs are using the same GPT compatible string as i.MX6Q. It
effectively makes kernel select an incorrect GPT device type on
i.MX6DL/S. We will need to update i.MX6DL/S device tree to use
a correct compatible string. But to keep the existing DTBs continue
working, we need the following change. As I'm asked by Arnd to rebase
my branch, I would like fold the changes into the original patch to
save the git bisect issue.
Thanks for the bug report, and sorry for the breakage.
Shawn
-----8<------------------
diff --git a/drivers/clocksource/timer-imx-gpt.c b/drivers/clocksource/timer-imx-gpt.c
index a98d1104b3fd..e41b021b9d62 100644
--- a/drivers/clocksource/timer-imx-gpt.c
+++ b/drivers/clocksource/timer-imx-gpt.c
@@ -508,7 +508,18 @@ static void __init imx21_timer_init_dt(struct device_node *np)
static void __init imx31_timer_init_dt(struct device_node *np)
{
- mxc_timer_init_dt(np, GPT_TYPE_IMX31);
+ enum imx_gpt_type type = GPT_TYPE_IMX31;
+
+ /*
+ * We were using the same compatible string for i.MX6Q/D and i.MX6DL/S
+ * GPT device, while they actually have different programming model.
+ * This is a workaround to keep the existing i.MX6DL/S DTBs continue
+ * working with the new kernel.
+ */
+ if (of_machine_is_compatible("fsl,imx6dl"))
+ type = GPT_TYPE_IMX6DL;
+
+ mxc_timer_init_dt(np, type);
}
static void __init imx6dl_timer_init_dt(struct device_node *np)
More information about the linux-arm-kernel
mailing list