* [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks
@ 2013-05-11 2:56 Allen Martin
2013-05-11 3:05 ` Simon Glass
0 siblings, 1 reply; 6+ messages in thread
From: Allen Martin @ 2013-05-11 2:56 UTC (permalink / raw)
To: u-boot
When adjusting peripheral clocks always use find_best_divider()
instead of clk_get_divider() even when a secondary divider is not
available. In the case where is requested clock is too slow to be
derived from the parent clock this allows a best effort to get close
to the requested clock.
This comes up for commands like "sf" where the user can pass a clock
speed on the command line or "sspi" where the clock is hardcoded to
1MHz, but the Tegra114 SPI controller can't go that low.
Signed-off-by: Allen Martin <amartin@nvidia.com>
---
arch/arm/cpu/tegra-common/clock.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/arm/cpu/tegra-common/clock.c b/arch/arm/cpu/tegra-common/clock.c
index 9156d00..268fb91 100644
--- a/arch/arm/cpu/tegra-common/clock.c
+++ b/arch/arm/cpu/tegra-common/clock.c
@@ -321,17 +321,17 @@ unsigned clock_adjust_periph_pll_div(enum periph_id periph_id,
unsigned effective_rate;
int mux_bits, divider_bits, source;
int divider;
+ int xdiv = 0;
/* work out the source clock and set it */
source = get_periph_clock_source(periph_id, parent, &mux_bits,
÷r_bits);
+ divider = find_best_divider(divider_bits, pll_rate[parent],
+ rate, &xdiv);
if (extra_div)
- divider = find_best_divider(divider_bits, pll_rate[parent],
- rate, extra_div);
- else
- divider = clk_get_divider(divider_bits, pll_rate[parent],
- rate);
+ *extra_div = xdiv;
+
assert(divider >= 0);
if (adjust_periph_pll(periph_id, source, mux_bits, divider))
return -1U;
--
1.8.1.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks
2013-05-11 2:56 [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks Allen Martin
@ 2013-05-11 3:05 ` Simon Glass
2013-05-13 17:24 ` Tom Warren
0 siblings, 1 reply; 6+ messages in thread
From: Simon Glass @ 2013-05-11 3:05 UTC (permalink / raw)
To: u-boot
On Fri, May 10, 2013 at 8:56 PM, Allen Martin <amartin@nvidia.com> wrote:
> When adjusting peripheral clocks always use find_best_divider()
> instead of clk_get_divider() even when a secondary divider is not
> available. In the case where is requested clock is too slow to be
> derived from the parent clock this allows a best effort to get close
> to the requested clock.
>
> This comes up for commands like "sf" where the user can pass a clock
> speed on the command line or "sspi" where the clock is hardcoded to
> 1MHz, but the Tegra114 SPI controller can't go that low.
>
> Signed-off-by: Allen Martin <amartin@nvidia.com>
Seems right to me,
Acked-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks
2013-05-11 3:05 ` Simon Glass
@ 2013-05-13 17:24 ` Tom Warren
2013-05-13 18:22 ` Allen Martin
2013-05-14 2:11 ` Allen Martin
0 siblings, 2 replies; 6+ messages in thread
From: Tom Warren @ 2013-05-13 17:24 UTC (permalink / raw)
To: u-boot
Allen,
> -----Original Message-----
> From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
> Sent: Friday, May 10, 2013 8:06 PM
> To: Allen Martin
> Cc: Tom Warren; Stephen Warren; U-Boot Mailing List
> Subject: Re: [PATCH] Tegra: clk: always use find_best_divider() for periph
> clocks
>
> On Fri, May 10, 2013 at 8:56 PM, Allen Martin <amartin@nvidia.com> wrote:
> > When adjusting peripheral clocks always use find_best_divider()
> > instead of clk_get_divider() even when a secondary divider is not
> > available. In the case where is requested clock is too slow to be
> > derived from the parent clock this allows a best effort to get close
> > to the requested clock.
> >
> > This comes up for commands like "sf" where the user can pass a clock
> > speed on the command line or "sspi" where the clock is hardcoded to
> > 1MHz, but the Tegra114 SPI controller can't go that low.
Did you test all other periphs and check their config'd clocks to make sure this doesn't affect anything else negatively? This proc is pretty universal (called by clock_start_periph_pll, which is used by MMC/I2C/USB/display drivers).
Tom
> >
> > Signed-off-by: Allen Martin <amartin@nvidia.com>
>
> Seems right to me,
>
> Acked-by: Simon Glass <sjg@chromium.org>
--
nvpublic
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks
2013-05-13 17:24 ` Tom Warren
@ 2013-05-13 18:22 ` Allen Martin
2013-05-14 2:11 ` Allen Martin
1 sibling, 0 replies; 6+ messages in thread
From: Allen Martin @ 2013-05-13 18:22 UTC (permalink / raw)
To: u-boot
On Mon, May 13, 2013 at 10:24:17AM -0700, Tom Warren wrote:
> Allen,
>
> > -----Original Message-----
> > From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
> > Sent: Friday, May 10, 2013 8:06 PM
> > To: Allen Martin
> > Cc: Tom Warren; Stephen Warren; U-Boot Mailing List
> > Subject: Re: [PATCH] Tegra: clk: always use find_best_divider() for periph
> > clocks
> >
> > On Fri, May 10, 2013 at 8:56 PM, Allen Martin <amartin@nvidia.com> wrote:
> > > When adjusting peripheral clocks always use find_best_divider()
> > > instead of clk_get_divider() even when a secondary divider is not
> > > available. In the case where is requested clock is too slow to be
> > > derived from the parent clock this allows a best effort to get close
> > > to the requested clock.
> > >
> > > This comes up for commands like "sf" where the user can pass a clock
> > > speed on the command line or "sspi" where the clock is hardcoded to
> > > 1MHz, but the Tegra114 SPI controller can't go that low.
>
> Did you test all other periphs and check their config'd clocks to make sure this doesn't affect anything else negatively? This proc is pretty universal (called by clock_start_periph_pll, which is used by MMC/I2C/USB/display drivers).
>
I tested a handful of peripherals on dalmore, but you're right this is
generic enough that it warrants a more thorough test scrubbing. I'll
try to hit all the peripherals I can across all chipsets and report
back.
-Allen
--
nvpublic
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks
2013-05-13 17:24 ` Tom Warren
2013-05-13 18:22 ` Allen Martin
@ 2013-05-14 2:11 ` Allen Martin
2013-05-14 2:22 ` Tom Warren
1 sibling, 1 reply; 6+ messages in thread
From: Allen Martin @ 2013-05-14 2:11 UTC (permalink / raw)
To: u-boot
On Mon, May 13, 2013 at 10:24:17AM -0700, Tom Warren wrote:
> Allen,
>
> > -----Original Message-----
> > From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
> > Sent: Friday, May 10, 2013 8:06 PM
> > To: Allen Martin
> > Cc: Tom Warren; Stephen Warren; U-Boot Mailing List
> > Subject: Re: [PATCH] Tegra: clk: always use find_best_divider() for periph
> > clocks
> >
> > On Fri, May 10, 2013 at 8:56 PM, Allen Martin <amartin@nvidia.com> wrote:
> > > When adjusting peripheral clocks always use find_best_divider()
> > > instead of clk_get_divider() even when a secondary divider is not
> > > available. In the case where is requested clock is too slow to be
> > > derived from the parent clock this allows a best effort to get close
> > > to the requested clock.
> > >
> > > This comes up for commands like "sf" where the user can pass a clock
> > > speed on the command line or "sspi" where the clock is hardcoded to
> > > 1MHz, but the Tegra114 SPI controller can't go that low.
>
> Did you test all other periphs and check their config'd clocks to make sure this doesn't affect anything else negatively? This proc is pretty universal (called by clock_start_periph_pll, which is used by MMC/I2C/USB/display drivers).
>
Testing done:
tegra20 seaboard:
usb read/write
i2c read
emmc read
sdcard read/write
lcd
uart read/write
tegra20 trimslice:
spi read
uart read/write
tegra30 cardhu:
spi read/write
uart read/write
i2c read
sdcard read/write
emmc read
tegra114 dalmore:
iwc read
sdcard read/write
emmc read
uart read/write
-Allen
--
nvpublic
^ permalink raw reply [flat|nested] 6+ messages in thread
* [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks
2013-05-14 2:11 ` Allen Martin
@ 2013-05-14 2:22 ` Tom Warren
0 siblings, 0 replies; 6+ messages in thread
From: Tom Warren @ 2013-05-14 2:22 UTC (permalink / raw)
To: u-boot
Allen,
> -----Original Message-----
> From: Allen Martin [mailto:amartin at nvidia.com]
> Sent: Monday, May 13, 2013 7:12 PM
> To: Tom Warren
> Cc: Simon Glass; Stephen Warren; U-Boot Mailing List
> Subject: Re: [PATCH] Tegra: clk: always use find_best_divider() for periph
> clocks
>
> On Mon, May 13, 2013 at 10:24:17AM -0700, Tom Warren wrote:
> > Allen,
> >
> > > -----Original Message-----
> > > From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon
> > > Glass
> > > Sent: Friday, May 10, 2013 8:06 PM
> > > To: Allen Martin
> > > Cc: Tom Warren; Stephen Warren; U-Boot Mailing List
> > > Subject: Re: [PATCH] Tegra: clk: always use find_best_divider() for
> > > periph clocks
> > >
> > > On Fri, May 10, 2013 at 8:56 PM, Allen Martin <amartin@nvidia.com>
> wrote:
> > > > When adjusting peripheral clocks always use find_best_divider()
> > > > instead of clk_get_divider() even when a secondary divider is not
> > > > available. In the case where is requested clock is too slow to be
> > > > derived from the parent clock this allows a best effort to get
> > > > close to the requested clock.
> > > >
> > > > This comes up for commands like "sf" where the user can pass a
> > > > clock speed on the command line or "sspi" where the clock is
> > > > hardcoded to 1MHz, but the Tegra114 SPI controller can't go that low.
> >
> > Did you test all other periphs and check their config'd clocks to make sure
> this doesn't affect anything else negatively? This proc is pretty universal
> (called by clock_start_periph_pll, which is used by MMC/I2C/USB/display
> drivers).
> >
>
> Testing done:
>
> tegra20 seaboard:
> usb read/write
> i2c read
> emmc read
> sdcard read/write
> lcd
> uart read/write
>
> tegra20 trimslice:
> spi read
> uart read/write
>
> tegra30 cardhu:
> spi read/write
> uart read/write
> i2c read
> sdcard read/write
> emmc read
>
> tegra114 dalmore:
> iwc read
> sdcard read/write
> emmc read
> uart read/write
Nice. Thanks. I'll add it to u-boot-tegra/next tomorrow or Weds.
Tom
>
> -Allen
--
nvpublic
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-05-14 2:22 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-11 2:56 [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks Allen Martin
2013-05-11 3:05 ` Simon Glass
2013-05-13 17:24 ` Tom Warren
2013-05-13 18:22 ` Allen Martin
2013-05-14 2:11 ` Allen Martin
2013-05-14 2:22 ` Tom Warren
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox