Bug 4881 - Add Dothan Cpu voltage-table
Summary: Add Dothan Cpu voltage-table
Status: REJECTED INVALID
Alias: None
Product: ACPI
Classification: Unclassified
Component: Config-Processors (show other bugs)
Hardware: i386 Linux
: P2 low
Assignee: Venkatesh Pallipadi
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-07-13 11:52 UTC by Damien Bellegueulle
Modified: 2006-01-15 08:50 UTC (History)
1 user (show)

See Also:
Kernel Version: 2.6.12.1
Subsystem:
Regression: ---
Bisected commit-id:


Attachments

Description Damien Bellegueulle 2005-07-13 11:52:24 UTC
Distribution:Mandriva 2005 
Hardware Environment: Asus M6Ne Noteebook 
Software Environment: Kde 3.3.2 
Problem Description: Add Dothan Cpu voltage-table in new Acpi Tree 
 
Links for Patch : 
 
http://m6n.ath.cx/forum/viewtopic.php?t=394&postdays=0&postorder=asc&start=15&sid=80cbf2d16df9c59671c282fc63dc08d1 
 
Patch : 
 
--- linux-2.6.12.1/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c.orig   
2005-06-22 21:33:05.000000000 +0200  
 +++ linux-2.6.12.1/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.c   
2005-07-13 13:42:56.000000000 +0200  
 @@ -202,6 +202,96 @@  
     OP(1700, 1484),  
     { .frequency = CPUFREQ_TABLE_END }  
  };  
 +  
 +#undef OP  
 +  
 +/* Dothan processor datasheet 30218903.pdf defines 4 voltages for each  
 +   frequency (VID#A through VID#D) - this macro allows us to define all  
 +   of these but we only use the VID#C voltages at compile time - this may  
 +   need some work if we want to select the voltage profile at runtime. */  
 +  
 +#define OP(mhz, mva, mvb, mvc, mvd)               \  
 +   {                        \  
 +      .frequency = (mhz) * 1000,            \  
 +      .index = (((mhz)/100) << 8) | ((mva - 700) / 16)          \  
 +   }  
 +  
 +/* Intel Pentium M processor 715 / 1.50GHz (Dothan) */  
 +static struct cpufreq_frequency_table dothan_1500[] =  
 +{  
 +   OP( 600,  988,  988,  988,  988),  
 +   OP( 800, 1068, 1068, 1068, 1052),  
 +   OP(1000, 1148, 1148, 1132, 1116),  
 +   OP(1200, 1228, 1212, 1212, 1180),  
 +   OP(1500, 1340, 1324, 1308, 1276),  
 +   { .frequency = CPUFREQ_TABLE_END }  
 +};  
 +  
 +/* Intel Pentium M processor 725 / 1.60GHz (Dothan) - Normal voltages*/  
 +/*  
 +static struct cpufreq_frequency_table dothan_1600[] =  
 +{  
 +   OP( 600,  988,  988,  988,  988),  
 +   OP( 800, 1068, 1068, 1052, 1052),  
 +   OP(1000, 1132, 1132, 1116, 1116),  
 +   OP(1200, 1212, 1196, 1180, 1164),  
 +   OP(1400, 1276, 1260, 1244, 1228),  
 +   OP(1600, 1340, 1324, 1308, 1276),  
 +   { .frequency = CPUFREQ_TABLE_END }  
 +};  
 +*/  
 +  
 +/* Intel Pentium M processor 725 / 1.60GHz (Dothan) - Customized voltages*/  
 +static struct cpufreq_frequency_table dothan_1600[] =  
 +{  
 +       OP( 600,  700,  988,  988,  988),  
 +       OP( 800,  764, 1068, 1052, 1052),  
 +       OP(1000,  844, 1132, 1116, 1116),  
 +       OP(1200,  882, 1196, 1180, 1164),  
 +       OP(1400,  940, 1260, 1244, 1228),  
 +       OP(1600,  988, 1324, 1308, 1276),  
 +       { .frequency = CPUFREQ_TABLE_END }  
 +}  
 +  
 +/* Intel Pentium M processor 735 / 1.70GHz (Dothan) */  
 +static struct cpufreq_frequency_table dothan_1700[] =  
 +{  
 +   OP( 600,  988,  988,  988,  988),  
 +   OP( 800, 1052, 1052, 1052, 1052),  
 +   OP(1000, 1116, 1116, 1116, 1100),  
 +   OP(1200, 1180, 1180, 1164, 1148),  
 +   OP(1400, 1244, 1244, 1228, 1212),  
 +   OP(1700, 1340, 1324, 1308, 1276),  
 +   { .frequency = CPUFREQ_TABLE_END }  
 +};  
 +  
 +/* Intel Pentium M processor 745 / 1.80GHz (Dothan) */  
 +static struct cpufreq_frequency_table dothan_1800[] =  
 +{  
 +   OP( 600,  988,  988,  988,  988),  
 +   OP( 800, 1052, 1052, 1052, 1036),  
 +   OP(1000, 1116, 1100, 1100, 1084),  
 +   OP(1200, 1164, 1164, 1148, 1132),  
 +   OP(1400, 1228, 1212, 1212, 1180),  
 +   OP(1600, 1292, 1276, 1260, 1228),  
 +   OP(1800, 1340, 1324, 1308, 1276),  
 +   { .frequency = CPUFREQ_TABLE_END }  
 +};  
 +  
 +/* Intel Pentium M processor 755 / 2.00GHz (Dothan) */  
 +static struct cpufreq_frequency_table dothan_2000[] =  
 +{  
 +   OP( 600,  988,  988,  988,  988),  
 +   OP( 800, 1052, 1036, 1036, 1036),  
 +   OP(1000, 1100, 1084, 1084, 1084),  
 +   OP(1200, 1148, 1132, 1132, 1116),  
 +   OP(1400, 1196, 1180, 1180, 1164),  
 +   OP(1600, 1244, 1228, 1228, 1196),  
 +   OP(1800, 1292, 1276, 1276, 1244),  
 +   OP(2000, 1340, 1324, 1308, 1276),  
 +   { .frequency = CPUFREQ_TABLE_END }  
 +};  
 +  
  #undef OP  
    
  #define _BANIAS(cpuid, max, name)   \  
 @@ -212,6 +302,13 @@  
  }  
  #define BANIAS(max)   _BANIAS(&cpu_ids[CPU_BANIAS], max, #max)  
    
 +#define DOTHAN(cpuid, max, name)   \  
 +{   .cpu_id      = cpuid,   \  
 +   .model_name   = "Intel(R) Pentium(R) M processor " name "GHz", \  
 +   .max_freq   = (max)*1000,   \  
 +   .op_points   = dothan_##max,   \  
 +}  
 +  
  /* CPU models, their operating frequency range, and freq/voltage  
     operating points */  
  static struct cpu_model models[] =  
 @@ -225,6 +322,11 @@  
     BANIAS(1500),  
     BANIAS(1600),  
     BANIAS(1700),  
 +   DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1500, "1.50"),  
 +   DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1600, "1.60"),  
 +   DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1700, "1.70"),  
 +   DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 1800, "1.80"),  
 +   DOTHAN(&cpu_ids[CPU_DOTHAN_B0], 2000, "2.00"),  
    
     /* NULL model_name is a wildcard */  
     { &cpu_ids[CPU_DOTHAN_A1], NULL, 0, NULL },  
 @@ -237,6 +339,7 @@  
  };  
  #undef _BANIAS  
  #undef BANIAS  
 +#undef DOTHAN  
    
  static int centrino_cpu_init_table(struct cpufreq_policy *policy)  
  {
Comment 1 Venkatesh Pallipadi 2005-07-27 18:56:39 UTC
In theory this patch is not required if BIOS provides ACPI P-state table. Do you
have a system where BIOS is not doing it right? Using
X86_SPEEDSTEP_CENTRINO_ACPI doesn't work?
Comment 2 Damien Bellegueulle 2005-07-28 02:47:35 UTC
This patch is for tweak voltage Dothan.
In Kernel 2.6.xx , only Banias Cpu is supported in speedstep-centrino.c for 
tweak. ( reduce )

   OP( 600,  988,  988,  988,  988),  = 0,988 V
+  OP( 600,  700,  700,  700,  700),  => 0,700 V
Comment 3 Venkatesh Pallipadi 2005-08-31 18:09:21 UTC
I guess the patch is doing the right thing. But, all these voltage 
calculations should be a part of the BIOS, and BIOS should give proper _PSS 
table to the OS. That is the ideal scenario. We don't want people to burn the 
CPU, while they play with these numbers in kernel :).

Is the BIOS not giving the proper _PSS table here?

Thanks.
Comment 4 Dominik Brodowski 2005-11-16 13:21:10 UTC
In addition, the kernel cannot know whether VID#A,#B,#C or #D is to be used.
Therefore, I'd vote against adding this patch to mainline. Unless Intel can tell
us how to determine which of the four voltages is to be used, that is ;-). Also,
the table-based approach might make sense in certain scenarios, where some ACPI
DSDT bug makes using ACPI impossible, or where the ACPI tables do not contain
all possible frequency states (not uncommon, unfortunately). Nontheless, the
#A-#D issue makes this patch unmergeable, IMHO.
Comment 5 Venkatesh Pallipadi 2005-12-08 11:04:20 UTC
Closing the bug. Please feel free to reopen if you still have concerns on this one.
Comment 6 Dieter Steiner 2006-01-15 08:50:28 UTC
just wanted to mention, that some people realy need this patch, my Pentium M 715
allways got identified as banias (not by name, but by the speed states, the
banias 1,5 has a 1,4 Ghz state, the Dothan doesn't)

Notebook is a Acer Travelmate 4001 Lmi

what about including it and introducing a Kconfig Variable? somethink like

SPEEDSTEP_CENTRINO_OVERRIDE_ACPI_P_STATE_TABLE

Note You need to log in before you can comment on or make changes to this bug.