linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
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.

  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).