From: skannan@codeaurora.org (Saravana Kannan)
To: linux-arm-kernel@lists.infradead.org
Subject: RFC: A better clock rounding API?
Date: Tue, 17 Aug 2010 23:31:34 -0700 [thread overview]
Message-ID: <4C6B7E46.6090708@codeaurora.org> (raw)
In-Reply-To: <4C6B7213.3030808@codeaurora.org>
Btw, if we are going to pass a rate range from the driver, we might as
well make it clk_set_rate_range(). By passing the range, we rule out the
possibility of any catastrophic rates -- so clk_find_rate() seems less
useful.
Thanks,
Sarav
P.S: murphy++;
Found a correction just after I sent the email but not on any of the
several iterations of proof reading that preceded it.
Saravana Kannan wrote:
> I'm mostly familiar with ARM. So I will limit the discussion to ARM
> boards/machines. But I think the points raised in this email would
> apply for most architectures.
>
> I'm sending this to the ARM mailing list first to see if I can get a
> consensus within the ARM community before I propose this to the wider
> audience in LKML.
>
> The meaning of clk_round_rate() is very ambiguous since the nature of
> the rounding is architecture and platform specific. In the case of ARM,
> it's up to each ARM mach's clock driver to determine how it wants to
> round the rate.
>
> To quote Russel King from an email about a month ago:
> "clk_round_rate() returns the clock rate which will be set if you ask
> clk_set_rate() to set that rate. It provides a way to query from the
> implementation exactly what rate you'll get if you use clk_set_rate()
> with that same argument."
>
> So when someone writes a device driver for a device that's external to
> the SoC or is integrated into more than one SoC, they currently have the
> following options to deal with clock rates differences:
>
> 1. Use clk_round_rate() to get clock rates and test their driver on the
> one/few board(s) they have at hand and hope it works on boards using
> different SoCs.
>
> 2. Add each and every needed clock rate (low power rate, high
> performance rate, handshake rate, etc) as fields to their platform data
> and have it populated in every board file that uses the device.
>
> 3. Do a search of the frequency space of the clock by making several
> clk_round_rate() calls at various intervals between their minimum and
> maximum acceptable rates and hope to find one of the supported rates.
> If clk_round_rate() does a +/- N percentage rounding and the interval is
> larger, even this searching might not find an existing rate that's
> supported between the driver's min and max acceptable rates.
>
> IMHO, each of these options have short comings that could be alleviated
> by adding a more definitive "rounding" API. Also, considering that it's
> the consumer of each clock that knows best what amount of rounding and
> in which direction is acceptable, IMHO the current approach of hiding
> the rounding inside the clock drivers seems counter intuitive.
>
> I would like to propose the addition of either:
>
> long clk_find_rate(struct clk *clk,
> unsigned long min_rate,
> long max_rate);
>
> or
>
> long clk_find_rate(struct clk *clk,
> unsigned long start_rate,
> long end_rate);
>
> The advantage of the 2nd suggestion is that it allows a driver to
> specify which end of a frequency range it prefers. But I'm not sure how
> important of an advantage that is. So, proposing both and having the
> community decide which one, if any, is acceptable.
>
> If the clk_find_rate() API is available, the driver developer wouldn't
> have to worry about figuring out a way for the clk_set_rate() to work on
> different platforms/machs/SoCs. If a platform/mach/SoC can provide a
> clock rate that's acceptable to their hardware and software
> requirements, then they can be assured to find it without having to jump
> through hoops or having a driver not work when it could have.
>
> Does the addition of one of the suggested APIs sound reasonable? If not,
> can someone explain what the right/better solution is? If the addition
> of a new API is reasonable, what's the community preference between the
> two suggestion? If I submit a patch that will add one of the APIs is it
> likely to be accepted?
>
> Thanks for your time.
>
> -Sarav
>
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
next prev parent reply other threads:[~2010-08-18 6:31 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-18 5:39 RFC: A better clock rounding API? Saravana Kannan
2010-08-18 6:31 ` Saravana Kannan [this message]
2010-08-20 21:20 ` Rob Herring
2010-08-20 22:01 ` Saravana Kannan
2010-08-23 1:14 ` Rob Herring
2010-08-23 22:57 ` Saravana Kannan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C6B7E46.6090708@codeaurora.org \
--to=skannan@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).