Thread (19 messages) 19 messages, 4 authors, 2015-06-05

Re: [PATCH 2/7] ARM: bcm2835: Add a Raspberry Pi-specific clock driver.

From: Eric Anholt <hidden>
Date: 2015-05-29 19:30:49
Also in: linux-arm-kernel, lkml

Stephen Boyd [off-list ref] writes:
On 05/28, Stephen Warren wrote:
quoted
On 05/18/2015 01:43 PM, Eric Anholt wrote:
quoted
Unfortunately, the clock manager's registers are not accessible by the
ARM, so we have to request that the firmware modify our clocks for us.

This driver only registers the clocks at the point they are requested
by a client driver.  This is partially to support returning
-EPROBE_DEFER when the firmware driver isn't supported yet, but it
also avoids issues with disabling "unused" clocks due to them not yet
being connected to their consumers in the DT.
It looks like you forgot to CC the clock subsystem maintainers:

M:      Mike Turquette [off-list ref]
M:      Stephen Boyd [off-list ref]
Thanks, except I don't have the full patch context here to review
the patch.
quoted
The description above sounds like a neat solution, but has the
disadvantage that the clocks without a client won't show up in debugfs.
I wonder if the clock maintainers know of a better way?
Can you mark them as CLK_IGNORE_UNUSED? The probe defer problem
has a solution in sight (see more below).
quoted
quoted
+	init.flags = CLK_IS_ROOT;
Is it possible to add clock parent information to the driver, so the
clocks are all hooked together into the correct tree, rather than all
looking like root clocks?

One of the many reasons I didn't do anything FW-wise for the kernel was
the hope that such information would be forthcoming, and hence we could
have complete kernel drivers.
quoted
+void __init rpi_firmware_init_clock_provider(struct device_node *node)
+{
+	/* We delay construction of our struct clks until get time,
+	 * because we need to be able to return -EPROBE_DEFER if the
+	 * firmware driver isn't up yet.  clk core doesn't support
+	 * re-probing on -EPROBE_DEFER, but callers of clk_get can.
Oh, that's nasty. What would it take to fix the clock core to support
deferred probe? It really should.
There are patches to support probe defer from clk_get() but they
stalled because sunxi is needs to keep clocks on from their
providing driver (termed "critical clocks"). If we can resolve
the "critical clocks" thing then we should be able to support
probe defer, unless we find other users of orphaned clk
pointers.
Great!  I'm certainly happy to switch to a normal registration of all my
clocks once -EPROBE_DEFER works from the clock provider init.

If those patches aren't landing this release, that also gives us a
release to wire up all the clock consumers in the DT before we get hit
by stable DT ABI, so we'll be able to give a nice limited set of
CLOCK_IGNORE_UNUSED in the flags when we transition.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help