Re: [PATCH] drivers: clocksource: Use ttc driver as platform driver

From: Michal Simek
Date: Tue Dec 17 2019 - 10:00:43 EST


On 05. 12. 19 17:24, Daniel Lezcano wrote:
> On 26/11/2019 12:53, Rajan Vaja wrote:
>> Request for review.
>
> Waiting from Michal Simek review ...
>
>
>>> -----Original Message-----
>>> From: Rajan Vaja <rajan.vaja@xxxxxxxxxx>
>>> Sent: 07 November 2019 04:06 PM
>>> To: Michal Simek <michals@xxxxxxxxxx>; daniel.lezcano@xxxxxxxxxx;
>>> tglx@xxxxxxxxxxxxx
>>> Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; Jolly Shah <JOLLYS@xxxxxxxxxx>; linux-
>>> kernel@xxxxxxxxxxxxxxx; Rajan Vaja <RAJANV@xxxxxxxxxx>
>>> Subject: [PATCH] drivers: clocksource: Use ttc driver as platform driver
>>>
>>> Currently TTC driver is TIMER_OF_DECLARE type driver. Because of
>>> that, TTC driver may be initialized before other clock drivers. If
>>> TTC driver is dependent on that clock driver then initialization of
>>> TTC driver will failed.
>>>
>>> So use TTC driver as platform driver instead of using
>>> TIMER_OF_DECLARE.
>>>
>>> Signed-off-by: Rajan Vaja <rajan.vaja@xxxxxxxxxx>
>>> ---
>>> drivers/clocksource/timer-cadence-ttc.c | 26 ++++++++++++++++++--------
>>> 1 file changed, 18 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/clocksource/timer-cadence-ttc.c b/drivers/clocksource/timer-
>>> cadence-ttc.c
>>> index 88fe2e9..38858e1 100644
>>> --- a/drivers/clocksource/timer-cadence-ttc.c
>>> +++ b/drivers/clocksource/timer-cadence-ttc.c
>>> @@ -15,6 +15,8 @@
>>> #include <linux/of_irq.h>
>>> #include <linux/slab.h>
>>> #include <linux/sched_clock.h>
>>> +#include <linux/module.h>
>>> +#include <linux/of_platform.h>
>>>
>>> /*
>>> * This driver configures the 2 16/32-bit count-up timers as follows:
>>> @@ -464,13 +466,7 @@ static int __init ttc_setup_clockevent(struct clk *clk,
>>> return 0;
>>> }
>>>
>>> -/**
>>> - * ttc_timer_init - Initialize the timer
>>> - *
>>> - * Initializes the timer hardware and register the clock source and clock event
>>> - * timers with Linux kernal timer framework
>>> - */
>>> -static int __init ttc_timer_init(struct device_node *timer)
>>> +static int __init ttc_timer_probe(struct platform_device *pdev)
>>> {
>>> unsigned int irq;
>>> void __iomem *timer_baseaddr;
>>> @@ -478,6 +474,7 @@ static int __init ttc_timer_init(struct device_node *timer)
>>> static int initialized;
>>> int clksel, ret;
>>> u32 timer_width = 16;
>>> + struct device_node *timer = pdev->dev.of_node;
>>>
>>> if (initialized)
>>> return 0;
>>> @@ -532,4 +529,17 @@ static int __init ttc_timer_init(struct device_node *timer)
>>> return 0;
>>> }
>>>
>>> -TIMER_OF_DECLARE(ttc, "cdns,ttc", ttc_timer_init);
>>> +static const struct of_device_id ttc_timer_of_match[] = {
>>> + {.compatible = "cdns,ttc"},
>>> + {},
>>> +};
>>> +
>>> +MODULE_DEVICE_TABLE(of, ttc_timer_of_match);
>>> +
>>> +static struct platform_driver ttc_timer_driver = {
>>> + .driver = {
>>> + .name = "cdns_ttc_timer",
>>> + .of_match_table = ttc_timer_of_match,
>>> + },
>>> +};
>>> +builtin_platform_driver_probe(ttc_timer_driver, ttc_timer_probe);
>>> --
>>> 2.7.4
>>

Looks good. I have also tested it on zc706.

Tested-by: Michal Simek <michal.simek@xxxxxxxxxx>
Acked-by: Michal Simek <michal.simek@xxxxxxxxxx>

Note: headers are not sorted but they weren't even before this patch.

Thanks,
Michal