[PATCH v4 08/11] ARM: imx: add gpt system timer support for imx7d

Zhi Li lznuaa at gmail.com
Tue Apr 21 07:17:02 PDT 2015


On Tue, Apr 21, 2015 at 5:02 AM, Russell King - ARM Linux
<linux at arm.linux.org.uk> wrote:
> On Tue, Apr 21, 2015 at 05:05:30AM +0800, Frank.Li at freescale.com wrote:
>> From: Frank Li <Frank.Li at freescale.com>
>>
>> Add GPT system timer support for i.MX7D, it has same hardware
>> as i.MX6DL.
>>
>> Signed-off-by: Frank Li <Frank.Li at freescale.com>
>> Signed-off-by: Anson Huang <b20788 at freescale.com>
>> ---
>>  arch/arm/mach-imx/time.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c
>> index 15d18e1..7c1d8a3 100644
>> --- a/arch/arm/mach-imx/time.c
>> +++ b/arch/arm/mach-imx/time.c
>> @@ -321,7 +321,7 @@ static void __init _mxc_timer_init(int irq,
>>               tctl_val = V2_TCTL_FRR | V2_TCTL_WAITEN | MXC_TCTL_TEN;
>>               if (clk_get_rate(clk_per) == V2_TIMER_RATE_OSC_DIV8) {
>>                       tctl_val |= V2_TCTL_CLK_OSC_DIV8;
>> -                     if (cpu_is_imx6dl() || cpu_is_imx6sx()) {
>> +                     if (cpu_is_imx6dl() || cpu_is_imx6sx() || cpu_is_imx7d()) {
>>                               /* 24 / 8 = 3 MHz */
>>                               __raw_writel(7 << V2_TPRER_PRE24M,
>>                                       timer_base + MXC_TPRER);
>> @@ -383,3 +383,4 @@ CLOCKSOURCE_OF_DECLARE(mx53_timer, "fsl,imx53-gpt", mxc_timer_init_dt);
>>  CLOCKSOURCE_OF_DECLARE(mx6q_timer, "fsl,imx6q-gpt", mxc_timer_init_dt);
>>  CLOCKSOURCE_OF_DECLARE(mx6sl_timer, "fsl,imx6sl-gpt", mxc_timer_init_dt);
>>  CLOCKSOURCE_OF_DECLARE(mx6sx_timer, "fsl,imx6sx-gpt", mxc_timer_init_dt);
>> +CLOCKSOURCE_OF_DECLARE(mx7d_timer, "fsl,imx7d-gpt", mxc_timer_init_dt);
>
> Hmm, this suggests to me that something is very wrong here, especially
> those cpu_is_imx*() things.
>
> Several questions crop up:
>
> * Shouldn't the code be split between a timer v1 and timer v2 driver,
>   and the appropriate one be selected via the DT compatible?
>
> * Shouldn't the clock source for the v2 timer be determined from DT?
>   (It looks to me like the v2 timer can be clocked by the perclk or
>   by a 24MHz clock with a built-in prescaler.)
>
> * Shouldn't the prescaler for the timer be calculated in the driver and
>   the associated divisor automatically set, or specified via DT?
>
> Had these been fixed, you probably wouldn't need to modify the driver to
> add iMX7 support here - which is really what DT is supposed to be about.
>
> I'm not expecting you to fix them - but it would be good to get this
> properly sorted out so that when iMX8 comes along, the same process
> doesn't happen again.

Thank you for your suggestion. I will do that after this patches.

>
> --
> FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
> according to speedtest.net.



More information about the linux-arm-kernel mailing list