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) {
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?
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
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.
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.
Closing the bug. Please feel free to reopen if you still have concerns on this one.
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