Re: [PATCH v8 05/26] clocksource: Add driver for the Ingenic JZ47xx OST

From: Paul Cercueil
Date: Fri Feb 22 2019 - 22:17:55 EST


Hi,

Le jeu. 24 janv. 2019 à 19:53, Paul Cercueil <paul@xxxxxxxxxxxxxxx> a écrit :


Le jeu. 24 janv. 2019 à 19:46, Stephen Boyd <sboyd@xxxxxxxxxx> a écrit :
Quoting Paul Cercueil (2019-01-24 12:46:28)


Le jeu. 24 janv. 2019 à 16:28, Stephen Boyd <sboyd@xxxxxxxxxx> a
écrit :
> Quoting Guenter Roeck (2019-01-23 10:01:55)
>> On Wed, Jan 23, 2019 at 02:25:53PM -0300, Paul Cercueil wrote:
>> > Hi,
>> >
>> > Le mer. 23 janv. 2019 Ã 11:31, Guenter Roeck
>> <linux@xxxxxxxxxxxx> a écrit :
>> > >On 1/23/19 4:58 AM, Mathieu Malaterre wrote:
>> > >>On Wed, Dec 12, 2018 at 11:09 PM Paul Cercueil
>> <paul@xxxxxxxxxxxxxxx>
>> > >>wrote:
>> > >>>
>> > >>>From: Maarten ter Huurne <maarten@xxxxxxxxxxxxxx>
>> > >>>
>> > >>>OST is the OS Timer, a 64-bit timer/counter with buffered
>> reading.
>> > >>>
>> > >>>SoCs before the JZ4770 had (if any) a 32-bit OST; the JZ4770
>> and
>> > >>>JZ4780 have a 64-bit OST.
>> > >>>
>> > >>>This driver will register both a clocksource and a sched_clock
>> to the
>> > >>>system.
>> > >>>
>> > >>>Signed-off-by: Maarten ter Huurne <maarten@xxxxxxxxxxxxxx>
>> > >>>Signed-off-by: Paul Cercueil <paul@xxxxxxxxxxxxxxx>
>> > >>>---
>> > >>>
>> > >>>Notes:
>> > >>> v5: New patch
>> > >>>
>> > >>> v6: - Get rid of SoC IDs; pass pointer to
>> ingenic_ost_soc_info
>> > >>>as
>> > >>> devicetree match data instead.
>> > >>> - Use device_get_match_data() instead of the of_*
>> variant
>> > >>> - Handle error of dev_get_regmap() properly
>> > >>>
>> > >>> v7: Fix section mismatch by using
>> > >>>builtin_platform_driver_probe()
>> > >>>
>> > >>> v8: builtin_platform_driver_probe() does not work
>> anymore in
>> > >>> 4.20-rc6? The probe function won't be called. Work
>> around
>> > >>>this
>> > >>> for now by using late_initcall.
>> > >>>
>> > >
>> > >Did anyone notice this ? Either something is wrong with the
>> driver, or
>> > >with the kernel core. Hacking around it seems like the worst
>> possible
>> > >"solution".
>> >
>> > I can confirm it still happens on 5.0-rc3.
>> >
>> > Just to explain what I'm doing:
>> >
>> > My ingenic-timer driver probes with builtin_platform_driver_probe
>> (this
>> > works),
>> > and then calls of_platform_populate to probe its children. This
>> driver,
>> > ingenic-ost, is one of them, and will fail to probe with
>> > builtin_platform_driver_probe.
>> >
>>
>> The big question is _why_ it fails to probe.
>>
>
> Are you sharing the device tree node between a 'normal' platform
> device
> driver and something more low level DT that marks the device's backing
> DT node as OF_POPULATED early on? That's my only guess why it's not
> working.

I do, but I clear the OF_POPULATED flag so that it is then probed as a
normal platform device, and it's not on this driver's node but its
parent.


Where do you clear the OF_POPULATED flag?


In the ingenic-timer driver introduced in patch [04/26], inside the probe function.

Anything new on this? It still happens on 5.0-rc7.
It probes with late_initcall, and not with device_initcall.
I have no clue what's going on.

-Paul