Re: [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks

2013-05-13 Thread Tom Warren
Allen,

 -Original Message-
 From: s...@google.com [mailto:s...@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 amar...@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 amar...@nvidia.com
 
 Seems right to me,
 
 Acked-by: Simon Glass s...@chromium.org

--
nvpublic
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks

2013-05-13 Thread Allen Martin
On Mon, May 13, 2013 at 10:24:17AM -0700, Tom Warren wrote:
 Allen,
 
  -Original Message-
  From: s...@google.com [mailto:s...@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 amar...@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
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks

2013-05-13 Thread Allen Martin
On Mon, May 13, 2013 at 10:24:17AM -0700, Tom Warren wrote:
 Allen,
 
  -Original Message-
  From: s...@google.com [mailto:s...@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 amar...@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
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks

2013-05-13 Thread Tom Warren
Allen,

 -Original Message-
 From: Allen Martin [mailto:amar...@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: s...@google.com [mailto:s...@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 amar...@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
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks

2013-05-10 Thread Allen Martin
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 amar...@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,
 divider_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

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] Tegra: clk: always use find_best_divider() for periph clocks

2013-05-10 Thread Simon Glass
On Fri, May 10, 2013 at 8:56 PM, Allen Martin amar...@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 amar...@nvidia.com

Seems right to me,

Acked-by: Simon Glass s...@chromium.org
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot