Re: [U-Boot] [PATCH] ARM: tegra: use a CPU freq that all SKUs can support

2014-05-07 Thread Lucas Stach
Hi Stephen,

I was just porting this change to barebox and stumbled upon a few errors
here.

Am Donnerstag, den 24.04.2014, 13:30 -0600 schrieb Stephen Warren:
 From: Stephen Warren swar...@nvidia.com
 
[...]
 diff --git a/arch/arm/cpu/arm720t/tegra30/cpu.c 
 b/arch/arm/cpu/arm720t/tegra30/cpu.c
 index 85a945bc7918..0f52e54239e1 100644
 --- a/arch/arm/cpu/arm720t/tegra30/cpu.c
 +++ b/arch/arm/cpu/arm720t/tegra30/cpu.c
 @@ -41,10 +41,18 @@ void tegra_i2c_ll_write_data(uint data, uint config)
   writel(config, reg-cnfg);
  }
  
 +#define TPS62366A_I2C_ADDR   0x60

The I2C address for this chip on Beaver is 0xc0, not 0x60. I don't know
about Cardhu.

 +#define TPS62366A_SET1_REG   0x01
 +#define TPS62366A_SET1_DATA  (0x46 | TPS62366A_SET1_REG)

This should be (0x4600 | TPS62366A_SET1_REG).

 +
 +#define TPS62361B_I2C_ADDR   0x60
 +#define TPS62361B_SET3_REG   0x03
 +#define TPS62361B_SET3_DATA  (0x46 | TPS62361B_SET3_REG)
Same here.

Only with those fixed I can verify vdd_core to ramp up to 1,2V on
Beaver. Without the changes vdd_core stays at the default 1,16V.

Regards,
Lucas

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


Re: [U-Boot] [PATCH] ARM: tegra: use a CPU freq that all SKUs can support

2014-05-07 Thread Stephen Warren
On 05/07/2014 01:57 PM, Lucas Stach wrote:
 Hi Stephen,
 
 I was just porting this change to barebox and stumbled upon a few errors
 here.

Wow, I suck. Thanks for the heads up. I'll repost a fixed up version soon.

 Am Donnerstag, den 24.04.2014, 13:30 -0600 schrieb Stephen Warren:

 diff --git a/arch/arm/cpu/arm720t/tegra30/cpu.c 
 b/arch/arm/cpu/arm720t/tegra30/cpu.c

 +#define TPS62366A_I2C_ADDR  0x60
 
 The I2C address for this chip on Beaver is 0xc0, not 0x60. I don't know
 about Cardhu.

That's a confusion about 7-bit vs 8-bit I2C addresses.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH] ARM: tegra: use a CPU freq that all SKUs can support

2014-04-24 Thread Stephen Warren
From: Stephen Warren swar...@nvidia.com

U-Boot on Tegra30 currently selects a main CPU frequency that cannot be
supported at all on some SKUs, and needs higher VDD_CPU/VDD_CORE values
on some others. This can result in unreliable operation of the main CPUs.

Resolve this by switching to a CPU frequency that can be supported by any
SKU. According to the following link, the maximum supported CPU frequency
of the slowest Tegra30 SKU is 600MHz:

repo http://nv-tegra.nvidia.com/gitweb/?p=linux-2.6.git;a=summary
branch l4t/l4t-r16-r2
path arch/arm/mach-tegra/tegra3_dvfs.c
table cpu_dvfs_table[]

According to that same table, the minimum VDD_CPU required to operate at
that frequency across all SKUs is 1.007V. Given the adjustment resolution
of the TPS65911 PMIC that's used on all Tegra30-based boards we support,
we'll end up using 1.0125V instead.

At that VDD_CPU, tegra3_get_core_floor_mv() in that same file dictates
that VDD_CORE must be at least 1.2V on all SKUs. According to
tegra_core_speedo_mv() (in tegra3_speedo.c in the same source tree),
that voltage is safe for all SKUs.

An alternative would be to port much of the code from tegra3_dvfs.c and
tegra3_speedo.c in the kernel tree mentioned above. That's more work
than I want to take on right now.

While all the currently supported boards use the same regulator chip for
VDD_CPU, different types of regulators are used for VDD_CORE. Hence, we
add some small conditional code to select how VDD_CORE is programmed. If
this becomes more complex in the future as new boards are added, or we
end up adding code to detect the SoC SKU and dynamically determine the
allowed frequency and required voltages, we should probably make this a
runtime call into a function provided by the board file and/or relevant
PMIC driver.

Cc: Alban Bedel alban.be...@avionic-design.de
Cc: Marcel Ziswiler mar...@ziswiler.com
Cc: Bard Liao bardl...@realtek.com
Signed-off-by: Stephen Warren swar...@nvidia.com
---
Alban, I don't know which regulator is used for VDD_CORE on Tec-NG. If
could you find this out, I can adjust tec-ng.h too. Thanks.
---
 arch/arm/cpu/arm720t/tegra-common/cpu.c | 10 +-
 arch/arm/cpu/arm720t/tegra30/cpu.c  | 23 +--
 include/configs/beaver.h|  3 +++
 include/configs/cardhu.h|  3 +++
 4 files changed, 32 insertions(+), 7 deletions(-)

diff --git a/arch/arm/cpu/arm720t/tegra-common/cpu.c 
b/arch/arm/cpu/arm720t/tegra-common/cpu.c
index 168f525ec7c8..c6f3b029a16e 100644
--- a/arch/arm/cpu/arm720t/tegra-common/cpu.c
+++ b/arch/arm/cpu/arm720t/tegra-common/cpu.c
@@ -82,7 +82,7 @@ struct clk_pll_table 
tegra_pll_x_table[TEGRA_SOC_CNT][CLOCK_OSC_FREQ_COUNT] = {
{ .n = 600, .m = 13, .p = 0, .cpcon = 12 }, /* OSC: 26.0 MHz */
},
/*
-* T30: 1.4 GHz
+* T30: 600 MHz
 *
 * Register   Field  Bits   Width
 * --
@@ -92,10 +92,10 @@ struct clk_pll_table 
tegra_pll_x_table[TEGRA_SOC_CNT][CLOCK_OSC_FREQ_COUNT] = {
 * PLLX_MISC  cpcon  11: 84
 */
{
-   { .n = 862, .m =  8, .p = 0, .cpcon = 8 }, /* OSC: 13.0 MHz */
-   { .n = 583, .m =  8, .p = 0, .cpcon = 4 }, /* OSC: 19.2 MHz */
-   { .n = 700, .m =  6, .p = 0, .cpcon = 8 }, /* OSC: 12.0 MHz */
-   { .n = 700, .m = 13, .p = 0, .cpcon = 8 }, /* OSC: 26.0 MHz */
+   { .n = 600, .m = 13, .p = 0, .cpcon = 8 }, /* OSC: 13.0 MHz */
+   { .n = 500, .m = 16, .p = 0, .cpcon = 8 }, /* OSC: 19.2 MHz */
+   { .n = 600, .m = 12, .p = 0, .cpcon = 8 }, /* OSC: 12.0 MHz */
+   { .n = 600, .m = 26, .p = 0, .cpcon = 8 }, /* OSC: 26.0 MHz */
},
/*
 * T114: 700 MHz
diff --git a/arch/arm/cpu/arm720t/tegra30/cpu.c 
b/arch/arm/cpu/arm720t/tegra30/cpu.c
index 85a945bc7918..0f52e54239e1 100644
--- a/arch/arm/cpu/arm720t/tegra30/cpu.c
+++ b/arch/arm/cpu/arm720t/tegra30/cpu.c
@@ -41,10 +41,18 @@ void tegra_i2c_ll_write_data(uint data, uint config)
writel(config, reg-cnfg);
 }
 
+#define TPS62366A_I2C_ADDR 0x60
+#define TPS62366A_SET1_REG 0x01
+#define TPS62366A_SET1_DATA(0x46 | TPS62366A_SET1_REG)
+
+#define TPS62361B_I2C_ADDR 0x60
+#define TPS62361B_SET3_REG 0x03
+#define TPS62361B_SET3_DATA(0x46 | TPS62361B_SET3_REG)
+
 #define TPS65911_I2C_ADDR  0x5A
 #define TPS65911_VDDCTRL_OP_REG0x28
 #define TPS65911_VDDCTRL_SR_REG0x27
-#define TPS65911_VDDCTRL_OP_DATA   (0x2300 | TPS65911_VDDCTRL_OP_REG)
+#define TPS65911_VDDCTRL_OP_DATA   (0x2400 | TPS65911_VDDCTRL_OP_REG)
 #define TPS65911_VDDCTRL_SR_DATA   (0x0100 | TPS65911_VDDCTRL_SR_REG)
 #define I2C_SEND_2_BYTES   0x0A02
 
@@ -58,9 +66,20 @@ static void enable_cpu_power_rail(void)
reg |= CPUPWRREQ_OE;
writel(reg, pmc-pmc_cntrl);
 
+   /* Set