davinci: Support various speedgrades for MityDSP-L138 and MityARM-1808 SoMs
Subsystems (3)
PATCH v5 1/1 davinci: Support various speedgrades for MityDSP-L138 and MityARM-1808 SoMs
For the MityDSP-L138/MityARM-1808 SoMs, the speed grade can be determined from the part number string read from the factory configuration block on the on-board I2C PROM. Configure the maximum CPU speed based on this information.
This patch was tested using a MityDSP-L138 and MityARM-1808 at various speedgrades. Also, for code coverage, a bogus configuration was tested as well as a configuration having an unknown part number.
---
Changes since v4.
- Fixup indenting on if block per comments.
arch/arm/mach-davinci/board-mityomapl138.c | 83 +++++++++++++++++++++++++--- 1 files changed, 75 insertions(+), 8 deletions(-)
arch/arm/mach-davinci/board-mityomapl138.c +75 -8
@@ -44,38 +44,109 @@ struct factory_config {static struct factory_config factory_config; +struct part_no_info { +const char *part_no;/* part number string of interest */ +int max_freq;/* khz */ +}; + +static struct part_no_info mityomapl138_pn_info[] = { + { + .part_no ="L138-C" , + .max_freq =300000 , + }, + { + .part_no ="L138-D" , + .max_freq =375000 , + }, + { + .part_no ="L138-F" , + .max_freq =456000 , + }, + { + .part_no ="1808-C" , + .max_freq =300000 , + }, + { + .part_no ="1808-D" , + .max_freq =375000 , + }, + { + .part_no ="1808-F" , + .max_freq =456000 , + }, + { + .part_no ="1810-D" , + .max_freq =375000 , + }, +}; + +#ifdef CONFIG_CPU_FREQ +static void mityomapl138_cpufreq_init (const char *partnum) +{ +int i, ret; + +for (i =0 ; partnum && i <ARRAY_SIZE (mityomapl138_pn_info); i++) { +/* +* the part number has additional characters beyond what is +* stored in the table. This information is not needed for +* determining the speed grade, and would require several +* more table entries. Only check the first N characters +* for a match. +*/ +if (!strncmp (partnum, mityomapl138_pn_info[i].part_no, +strlen (mityomapl138_pn_info[i].part_no))) { + da850_max_speed = mityomapl138_pn_info[i].max_freq; +break ; + } + } + + ret =da850_register_cpufreq ("pll0_sysclk3" ); +if (ret) +pr_warning ("cpufreq registration failed: %d\n" , ret); +} +#else +static void mityomapl138_cpufreq_init (const char *partnum) { } +#endif +static void read_factory_config (struct memory_accessor *a,void *context) {int ret; +const char *partnum =NULL ;struct davinci_soc_info *soc_info = &davinci_soc_info; ret = a->read (a, (char *)&factory_config,0 ,sizeof (factory_config));if (ret !=sizeof (struct factory_config )) {pr_warning ("MityOMAPL138: Read Factory Config Failed: %d\n" , ret); -return ; + goto bad_config; }if (factory_config.magic !=FACTORY_CONFIG_MAGIC ) {pr_warning ("MityOMAPL138: Factory Config Magic Wrong (%X)\n" , factory_config.magic); -return ; + goto bad_config; }if (factory_config.version !=FACTORY_CONFIG_VERSION ) {pr_warning ("MityOMAPL138: Factory Config Version Wrong (%X)\n" , factory_config.version); -return ; + goto bad_config; }pr_info ("MityOMAPL138: Found MAC = %pM\n" , factory_config.mac); -pr_info ("MityOMAPL138: Part Number = %s\n" , factory_config.partnum);if (is_valid_ether_addr (factory_config.mac))memcpy (soc_info->emac_pdata->mac_addr, factory_config.mac,ETH_ALEN );else pr_warning ("MityOMAPL138: Invalid MAC found " "in factory config block\n" ); + + partnum = factory_config.partnum; +pr_info ("MityOMAPL138: Part Number = %s\n" , partnum); + +bad_config: +/* default maximum speed is valid for all platforms */ +mityomapl138_cpufreq_init (partnum); }static struct at24_platform_data mityomapl138_fd_chip = {
@@ -383,10 +454,6 @@ static void __init mityomapl138_init(void)if (ret)pr_warning ("rtc setup failed: %d\n" , ret); - ret =da850_register_cpufreq ("pll0_sysclk3" ); -if (ret) -pr_warning ("cpufreq registration failed: %d\n" , ret); - ret =da8xx_register_cpuidle ();if (ret)pr_warning ("cpuidle registration failed: %d\n" , ret);
Signature · 1 line
1.7.0.4
PATCH v5 1/1 davinci: Support various speedgrades for MityDSP-L138 and MityARM-1808 SoMs
Quoted 9 lines · Michael Williamson
For the MityDSP-L138/MityARM-1808 SoMs, the speed grade can be determined from the part number string read from the factory configuration block on the on-board I2C PROM. Configure the maximum CPU speed based on this information.
This patch was tested using a MityDSP-L138 and MityARM-1808 at various speedgrades. Also, for code coverage, a bogus configuration was tested as well as a configuration having an unknown part number.
Quoted 7 lines
Signed-off-by Michael Williamson <[email protected]>Tested-by Michael Williamson <[email protected]>Reviewed-by Sekhar Nori <[email protected]>---
Changes since v4.- Fixup indenting on if block per comments.
Thanks, queuing this for 2.6.39.
Kevin
Quoted 132 lines
arch/arm/mach-davinci/board-mityomapl138.c | 83 +++++++++++++++++++++++++--- 1 files changed, 75 insertions(+), 8 deletions(-)arch/arm/mach-davinci/board-mityomapl138.c +75
-8@@ -44,38 +44,109 @@ struct factory_config {static struct factory_config factory_config; +struct part_no_info { +const char *part_no;/* part number string of interest */ +int max_freq;/* khz */ +}; + +static struct part_no_info mityomapl138_pn_info[] = { + { + .part_no ="L138-C" , + .max_freq =300000 , + }, + { + .part_no ="L138-D" , + .max_freq =375000 , + }, + { + .part_no ="L138-F" , + .max_freq =456000 , + }, + { + .part_no ="1808-C" , + .max_freq =300000 , + }, + { + .part_no ="1808-D" , + .max_freq =375000 , + }, + { + .part_no ="1808-F" , + .max_freq =456000 , + }, + { + .part_no ="1810-D" , + .max_freq =375000 , + }, +}; + +#ifdef CONFIG_CPU_FREQ +static void mityomapl138_cpufreq_init (const char *partnum) +{ +int i, ret; + +for (i =0 ; partnum && i <ARRAY_SIZE (mityomapl138_pn_info); i++) { +/* +* the part number has additional characters beyond what is +* stored in the table. This information is not needed for +* determining the speed grade, and would require several +* more table entries. Only check the first N characters +* for a match. +*/ +if (!strncmp (partnum, mityomapl138_pn_info[i].part_no, +strlen (mityomapl138_pn_info[i].part_no))) { + da850_max_speed = mityomapl138_pn_info[i].max_freq; +break ; + } + } + + ret =da850_register_cpufreq ("pll0_sysclk3" ); +if (ret) +pr_warning ("cpufreq registration failed: %d\n" , ret); +} +#else +static void mityomapl138_cpufreq_init (const char *partnum) { } +#endif +static void read_factory_config (struct memory_accessor *a,void *context) {int ret; +const char *partnum =NULL ;struct davinci_soc_info *soc_info = &davinci_soc_info; ret = a->read (a, (char *)&factory_config,0 ,sizeof (factory_config));if (ret !=sizeof (struct factory_config )) {pr_warning ("MityOMAPL138: Read Factory Config Failed: %d\n" , ret); -return ; + goto bad_config; }if (factory_config.magic !=FACTORY_CONFIG_MAGIC ) {pr_warning ("MityOMAPL138: Factory Config Magic Wrong (%X)\n" , factory_config.magic); -return ; + goto bad_config; }if (factory_config.version !=FACTORY_CONFIG_VERSION ) {pr_warning ("MityOMAPL138: Factory Config Version Wrong (%X)\n" , factory_config.version); -return ; + goto bad_config; }pr_info ("MityOMAPL138: Found MAC = %pM\n" , factory_config.mac); -pr_info ("MityOMAPL138: Part Number = %s\n" , factory_config.partnum);if (is_valid_ether_addr (factory_config.mac))memcpy (soc_info->emac_pdata->mac_addr, factory_config.mac,ETH_ALEN );else pr_warning ("MityOMAPL138: Invalid MAC found " "in factory config block\n" ); + + partnum = factory_config.partnum; +pr_info ("MityOMAPL138: Part Number = %s\n" , partnum); + +bad_config: +/* default maximum speed is valid for all platforms */ +mityomapl138_cpufreq_init (partnum); }static struct at24_platform_data mityomapl138_fd_chip = {@@ -383,10 +454,6 @@ static void __init mityomapl138_init(void)if (ret)pr_warning ("rtc setup failed: %d\n" , ret); - ret =da850_register_cpufreq ("pll0_sysclk3" ); -if (ret) -pr_warning ("cpufreq registration failed: %d\n" , ret); - ret =da8xx_register_cpuidle ();if (ret)pr_warning ("cpuidle registration failed: %d\n" , ret);