[PATCH v1 05/24] clk: wrap I/O access for improved portability
Mike Turquette
mturquette at linaro.org
Fri Aug 2 18:09:35 EDT 2013
Quoting Nicolas Pitre (2013-07-18 10:47:22)
> On Thu, 18 Jul 2013, Russell King - ARM Linux wrote:
>
> > 1. clk_get() and clk_put() are NOT part of the common clock API.
> > They're separate - they're part of the clk API, and the infrastructure
> > behind that is clkdev, which is a separately owned thing (by me.)
> >
> > 2. The "contract" of the clk API is defined by the clk API, not by some
> > random implementation like the common clock API. The clk API is
> > maintained by myself, and is described in include/linux/clk.h
> >
> > 3. clk_prepare() and clk_unprepare() are functions MUST only be called
> > from contexts where sleeping is permitted. These functions MAY sleep
> > for whatever reason they require to, and as long as they require to.
> > (This is the whole reason these two functions were created in the
> > first place.)
> >
> > 4. clk_enable() and clk_disable() MAY be called from any context, but
> > MUST never sleep. If you need to talk over a non-atomic bus for these,
> > then these functions should be no-ops, and the code which does that
> > must be executed from the clk_prepare()/clk_unprepare() operations.
>
> Could the above be included in some form in Documentation/clk.txt (this
> is likely one of the first location people look for information) and
> elsewhere if appropriate please?
>
> A *lot* of people are confused by the prepare-enable-disable-unprepare
> sequence and when I try to find some rational for the prepare/enable
> split I can only direct them to mail archive posts since this is nowhere
> to be found in the kernel.
>
> The comments in include/linux/clk.h, while correct, are very terse and
> don't provide any insight to the reason why there is a split in the API.
>
> The content of Documentation/clk.txt does refer to prepare and enable
> (and their counterparts) but again doesn't provide any clue about the
> reason for their existence.
>
> Since there've been several good posts with usage example now buried
> into list archives, I think this would go a long way helping people get
> it right if those were part of the kernel documentation as well.
I'll update Documentation/clk.txt with more verbosity. The document was
originally intended as a "porting guide" to help migrate from legacy
frameworks to the common struct clk implementation. However the scope of
the document should probably be generalized a bit more.
Regards,
Mike
>
>
> Nicolas
More information about the linux-arm-kernel
mailing list