diff mbox

[U-Boot,v4,2/2] TI: DaVinci DA850 EVM: support passing maximum allowed cpu clock rate information to kernel

Message ID 1282886098-2647-1-git-send-email-nsekhar@ti.com
State Superseded
Delegated to: Sandeep Paulraj
Headers show

Commit Message

Sekhar Nori Aug. 27, 2010, 5:14 a.m. UTC
The TI DA850/OMAP-L138/AM18x EVM can be populated with devices
having different maximum allowed CPU clock rating.

The maximum clock the chip can support can only be determined from
the label on the package (not software readable).

Introduce a method to pass the maximum allowed clock rate information
to kernel using ATAG_REVISION. The kernel uses this information to
determine the maximum cpu clock rate reachable using cpufreq.

Note that U-Boot itself does not set the CPU clock rate. The CPU
clock is setup by a primary bootloader ("UBL"). The rate setup by
UBL could be different from the maximum clock rate supported by the
device.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
v4: updated README.davinci to included information regarding ATAG_REVISION.

 board/davinci/da8xxevm/da850evm.c |   33 +++++++++++++++++++++++++++++++++
 doc/README.davinci                |   14 ++++++++++++++
 include/configs/da850evm.h        |    1 +
 3 files changed, 48 insertions(+), 0 deletions(-)

Comments

Sekhar Nori Sept. 24, 2010, 5:10 a.m. UTC | #1
Hello All,

On Fri, Aug 27, 2010 at 10:44:58, Nori, Sekhar wrote:
> The TI DA850/OMAP-L138/AM18x EVM can be populated with devices
> having different maximum allowed CPU clock rating.
>
> The maximum clock the chip can support can only be determined from
> the label on the package (not software readable).
>
> Introduce a method to pass the maximum allowed clock rate information
> to kernel using ATAG_REVISION. The kernel uses this information to
> determine the maximum cpu clock rate reachable using cpufreq.
>
> Note that U-Boot itself does not set the CPU clock rate. The CPU
> clock is setup by a primary bootloader ("UBL"). The rate setup by
> UBL could be different from the maximum clock rate supported by the
> device.

Any more feedback on this patch? There are couple of kernel patches
which depend on this, that's why I ask.

Thanks,
Sekhar
Ben Gardiner Sept. 28, 2010, 2:01 p.m. UTC | #2
On Fri, Sep 24, 2010 at 1:10 AM, Nori, Sekhar <nsekhar@ti.com> wrote:
> Hello All,
>
> On Fri, Aug 27, 2010 at 10:44:58, Nori, Sekhar wrote:
>> The TI DA850/OMAP-L138/AM18x EVM can be populated with devices
>> having different maximum allowed CPU clock rating.
>>
>> The maximum clock the chip can support can only be determined from
>> the label on the package (not software readable).
>>
>> Introduce a method to pass the maximum allowed clock rate information
>> to kernel using ATAG_REVISION. The kernel uses this information to
>> determine the maximum cpu clock rate reachable using cpufreq.
>>
>> Note that U-Boot itself does not set the CPU clock rate. The CPU
>> clock is setup by a primary bootloader ("UBL"). The rate setup by
>> UBL could be different from the maximum clock rate supported by the
>> device.
>
> Any more feedback on this patch? There are couple of kernel patches
> which depend on this, that's why I ask.

FWIW: it's fine with me.

Applies cleanly to 3df61957938586c512c17e72d83551d190400981 of u-boot/next.

Tested on da850evm -- bootm of linux uImage works with the patch
'da850evm: fix linux bootparam address' aplied.

The kernel uImage used did not have support for parsing the
ATAG_REVISION information since that patch has not been posted to the
davinci-linux list.

Tested-by: Ben Gardiner <bengardiner@nanometrics.ca>

Best Regards,
Ben Gardiner

---
Nanometrics Inc.
http://www.nanometrics.ca
Sekhar Nori Sept. 29, 2010, 5:54 a.m. UTC | #3
Hi Ben,

On Tue, Sep 28, 2010 at 19:31:02, Ben Gardiner wrote:
> On Fri, Sep 24, 2010 at 1:10 AM, Nori, Sekhar <nsekhar@ti.com> wrote:
> > Hello All,
> >
> > On Fri, Aug 27, 2010 at 10:44:58, Nori, Sekhar wrote:
> >> The TI DA850/OMAP-L138/AM18x EVM can be populated with devices
> >> having different maximum allowed CPU clock rating.
> >>
> >> The maximum clock the chip can support can only be determined from
> >> the label on the package (not software readable).
> >>
> >> Introduce a method to pass the maximum allowed clock rate information
> >> to kernel using ATAG_REVISION. The kernel uses this information to
> >> determine the maximum cpu clock rate reachable using cpufreq.
> >>
> >> Note that U-Boot itself does not set the CPU clock rate. The CPU
> >> clock is setup by a primary bootloader ("UBL"). The rate setup by
> >> UBL could be different from the maximum clock rate supported by the
> >> device.
> >
> > Any more feedback on this patch? There are couple of kernel patches
> > which depend on this, that's why I ask.
>
> FWIW: it's fine with me.
>
> Applies cleanly to 3df61957938586c512c17e72d83551d190400981 of u-boot/next.
>
> Tested on da850evm -- bootm of linux uImage works with the patch
> 'da850evm: fix linux bootparam address' aplied.
>
> The kernel uImage used did not have support for parsing the
> ATAG_REVISION information since that patch has not been posted to the
> davinci-linux list.
>
> Tested-by: Ben Gardiner <bengardiner@nanometrics.ca>

Thanks for the testing!

Regards,
Sekhar
diff mbox

Patch

diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
index eeb456c..266c4d8 100644
--- a/board/davinci/da8xxevm/da850evm.c
+++ b/board/davinci/da8xxevm/da850evm.c
@@ -70,6 +70,39 @@  static const struct lpsc_resource lpsc[] = {
 	{ DAVINCI_LPSC_GPIO },
 };
 
+#ifndef CONFIG_DA850_EVM_MAX_CPU_CLK
+#define CONFIG_DA850_EVM_MAX_CPU_CLK	300000000
+#endif
+
+/*
+ * get_board_rev() - setup to pass kernel board revision information
+ * Returns:
+ * bit[0-3]	Maximum cpu clock rate supported by onboard SoC
+ *		0000b - 300 MHz
+ *		0001b - 372 MHz
+ *		0010b - 408 MHz
+ *		0011b - 456 MHz
+ */
+u32 get_board_rev(void)
+{
+	char *s;
+	u32 maxcpuclk = CONFIG_DA850_EVM_MAX_CPU_CLK;
+	u32 rev = 0;
+
+	s = getenv("maxcpuclk");
+	if (s)
+		maxcpuclk = simple_strtoul(s, NULL, 10);
+
+	if (maxcpuclk >= 456000000)
+		rev = 3;
+	else if (maxcpuclk >= 408000000)
+		rev = 2;
+	else if (maxcpuclk >= 372000000)
+		rev = 1;
+
+	return rev;
+}
+
 int board_init(void)
 {
 #ifndef CONFIG_USE_IRQ
diff --git a/doc/README.davinci b/doc/README.davinci
index a2e96a5..0204372 100644
--- a/doc/README.davinci
+++ b/doc/README.davinci
@@ -95,6 +95,20 @@  into the RAM.
 The programmers and UBL are always released as part of any standard TI
 software release associated with an SOC.
 
+Environment Variables
+=====================
+
+The DA850 EVM allows the user to specify the maximum cpu clock allowed by the
+silicon, in Hz, via an environment variable "maxcpuclk".
+
+The maximum clock rate allowed depends on the silicon populated on the EVM.
+Please make sure you understand the restrictions placed on this clock in the
+device specific datasheet before setting up this variable. This information is
+passed to the Linux kernel using the ATAG_REVISION atag.
+
+If "maxcpuclk" is not defined, the configuration CONFIG_DA850_EVM_MAX_CPU_CLK
+is used to obtain this information.
+
 Links
 =====
 
diff --git a/include/configs/da850evm.h b/include/configs/da850evm.h
index 357715d..3ea9032 100644
--- a/include/configs/da850evm.h
+++ b/include/configs/da850evm.h
@@ -102,6 +102,7 @@ 
  */
 #define LINUX_BOOT_PARAM_ADDR	(CONFIG_SYS_MEMTEST_START + 0x100)
 #define CONFIG_CMDLINE_TAG
+#define CONFIG_REVISION_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
 #define CONFIG_BOOTARGS		\
 	"mem=32M console=ttyS2,115200n8 root=/dev/mtdblock2 rw noinitrd ip=dhcp"