Freut mich, gern geschehen.
Uwe
Freut mich, gern geschehen.
Uwe
Hallo,
also nochmal zur Kernel Konfig. Ich hab bei mir nur 'Video For Linux' als Modul und dann noch 'DVB For Linux'. Dann linuxtv-dvb-cvs gemerged..
Würd Dir vielleicht noch empfehlen mal alle Module zu löschen un dann den Kernel neu zu kompilieren un dann linuxtv-dvb-cvs zu mergen. Nich daß da irgendwelche alten Module rumschleichen.
Viel Erfolg
Uwe
Ja, is mir schon klar, daß das mit Vcore ne Menge bringt, aber was soll ich denn machen mit dem Board? Wenn jemand ein andres kennt, wo ich Vcore regeln kann, und SATA hat und auch noch preiswert is, dann würd ichs sogar auswechseln. Ansonsten rennt das Ding nämlich supersabil, obwohl ich mal ne Abneigung gegen SIS hatte.
Uwe
Da fällt mir noch was ganz wichtiges ein: Unbedingt die linux26-header installieren und die ollen 2.4er vorher rausschmeßen!!
Uwe
PS: Den erwähnte Beitrag find ich grad selber nich. Wenns Dir noch hilft guck ich nach, sobald ich zu Hause bin, dauert aber noch bißchen.
Zitatalles an? nur nen teil oder alles aus?
Alles an auf keinen Fall, alles aus aber auch nicht.
Bin noch auf Arbeit, kann grad nich nachgucken. Aber such mal hier in der Gentoo Abteillung, da müßte ein Post von mir sein, wo ich das schonmal beschrieben hab.
Uwe
oda linuxtv-dvb-cvs emergen. Dann geht das von alleine.
Uwe
Elchi
Freut mich, daß es bei Dir funktioniert.
ZitatSag mal kannst du auch .5 Multis übergeben oder muß ich da in die Powernow-k7 eingreifen?
Die sollten eigentlich auch gehen. Die mußt Du ohne Dezimalpunkt angeben, das weißt Du? Für 12,5 also 125. Ich hab aber auch festgestellt, daß nicht alle Multis gehen.
ZitatHast du schonmal probiert den FSB im laufenden Betrieb zuändern, also Modul raus und mit neuem FSB wieder rein, ich hatte das mit Ksensors überwacht und es klappte bisher nur 1x, kann sein das mich da was veralbert hat.
Wenn ich das richtig verstanden habe, dann änderst Du damit den FSB nicht. Das Modul benutzt den Parameter deshalb, weil es den realen FSB unter Umständen nicht korrekt ermitteln kann.
Uwe
Ich hab die 0.4.9_pre1 drauf. Weiß nich mehr ganau warum, kann aber sein, daß die 0.4.8 bei mir auch Probleme gemacht hat.
Uwe
Also mit dem 2.6.8er Kernel funktioniert der Patch garantiert nicht, das muß schon der 2.6.10er sein.
Warum lädst Du Dir nich nur nen neuen Kernel runter? Muß ja nich gleich ne neue Distri sein, wenn man nur mal nen neuen Kernel braucht.
Uwe
Elchi
so hier is alles, hat bißchen gedauert.
vdr2 root # lsmod
Module Size Used by
w83627hf 27680 0
i2c_sensor 3072 1 w83627hf
i2c_isa 1920 0
uhci_hcd 29968 0
8250_pnp 8192 0
8250 19972 1 8250_pnp
serial_core 18176 1 8250
dvb_ttpci 90796 19
dvb_core 75816 1 dvb_ttpci
saa7146_vv 45568 1 dvb_ttpci
video_buf 17412 1 saa7146_vv
saa7146 15396 2 dvb_ttpci,saa7146_vv
v4l1_compat 13828 1 saa7146_vv
v4l2_common 4864 1 saa7146_vv
videodev 7424 1 saa7146_vv
ves1820 5636 1 dvb_ttpci
stv0299 9732 1 dvb_ttpci
tda8083 5892 1 dvb_ttpci
stv0297 8704 1 dvb_ttpci
sp8870 7308 1 dvb_ttpci
firmware_class 7808 2 dvb_ttpci,sp8870
ves1x93 6404 1 dvb_ttpci
ttpci_eeprom 2432 1 dvb_ttpci
i2c_core 18064 11 w83627hf,i2c_sensor,i2c_isa,dvb_ttpci,ves1820,stv0299,tda8083,stv0297,sp8870,ves1x93,ttpci_eeprom
usb_storage 59424 0
sis900 17412 0
ehci_hcd 26884 0
ohci_hcd 18824 0
sis_agp 6148 1
agpgart 28328 1 sis_agp
usbcore 103544 5 uhci_hcd,usb_storage,ehci_hcd,ohci_hcd
lirc_serial 11488 1
lirc_dev 11788 1 lirc_serial
parport_pc 30276 1
ppdev 8068 2
parport 31560 2 parport_pc,ppdev
powernow_k7 10296 0
Alles anzeigen
Und hier noch die Modulparameter, aber wie gsagt, auf die Spannungswerte reagiert er nicht, die kann ich auch weg lassen. Würde mich aber brennend interessieren, ob das bei Dir vielleicht funktioniert.
options powernow-k7 overwrite_table=1 fsb=166666 multiplier=5,6,7,8,9,10,11,12 voltage=1050,1100,1150,1200,1250,1300,1350,1350
Uwe
Kann ich Dir schicken, krieg ich aber frühestens morgen auf die Reihe. Wie das mit ACPI zusammen hängt, weiß ich nicht, bei mir isses auf jeden Fall aktiv. Das Laden des Moduls müßte aber auch so funktionieren. Wenn das Modul erfolgreich geladen wurde müßte unter /sys/devices/system/cpu/cpu0/cpufreq nen ganzen Haufen Kram zu finden sein.
Uwe
Diese Seite kenne ich, hatte diesen Patch auch im Einsatz. Er funktioniert jedoch nur bis 2.6.9.
Is die nForce FSB Geschichte nich im 2.6.10er bereits standartmäßig drin?
Uwe
Hi,
Elchi
was und wo stehtn da bei Asrock, hab da noch nie vorbei geschaut.
Ich glaub nich, daß das mit nem 2.4er Kernel funktioniert. Da hat sich ziemlich viel geändert. Ansonsten: Kernel patchen, Modul laden, powernowd starten. Mehr isses nich.
Uwe
PS:Sorry, hätte auch den Link gepostet, Cpufreq-ML is aber nich öffentlich und nur um Missverständnissen vorzubeugen, ich les da nur manchmal, von programmieren hab ich keine Ahnung.
ZitatAlles anzeigenOn Mon, Jan 17, 2005 at 04:21:52PM +0100, Hendrik Muhs wrote:
> Why not let the user specify the FSB? I mean if this is the issue, why do you
> take the multiplier? I would add a module option "fsb" instead.
Attached is a patch for 2.6.10 with user specified fsb, as suggested above.
It is based on Hendrik's earlier patch.
It seems cpu clock value is so coarsely known that the FSB cannot be
accurately calculated from it even if the multiplier can be calculated.
It is indeed better to just let user to specify fixed fsb value.
I load the module with parameters:
powernow-k7 overwrite_table=1 fsb=133333 multiplier=3,4,5,6,7,8,9
The fsb frequency can be given either in khz or mhz. khz will give more
digits and rounded cpu frequencies will look prettier.
Using cpufreq.debug=2 on kernel command line. Dmesg says:
powernow: PowerNOW! Technology present. Can scale: frequency and voltage.
powernow-k7: MSR reported multiplier 14.0
powernow-k7: Current multiplier 9.0. CPU running at 1222MHz
powernow-k7: FSB: 133.333 MHz
powernow: Overwriting PST table with manual settings
powernow-k7: Settling Time: 200 microseconds.
powernow-k7: FID: 0x10 (3.0x [400MHz]) VID: 0xb (1.450V)
powernow-k7: FID: 0x12 (4.0x [533MHz]) VID: 0xb (1.450V)
powernow-k7: FID: 0x4 (5.0x [667MHz]) VID: 0xb (1.450V)
powernow-k7: FID: 0x6 (6.0x [800MHz]) VID: 0xb (1.450V)
powernow-k7: FID: 0x8 (7.0x [933MHz]) VID: 0xb (1.450V)
powernow-k7: FID: 0xa (8.0x [1067MHz]) VID: 0xb (1.450V)
powernow-k7: FID: 0xc (9.0x [1200MHz]) VID: 0xb (1.450V)
powernow: Minimum speed 400 MHz. Maximum speed 1200 MHz.
Frequency scaling works well and my system is stable. Voltage scaling
is not available and I keep Vcore at 1.15V.
Jarkko Lavinen
-------------- next part --------------
--- linux-2.6.10/arch/i386/kernel/cpu/cpufreq/powernow-k7.c 2004-12-24 23:33:49.000000000 +0200
+++ linux-2.6.10-new/arch/i386/kernel/cpu/cpufreq/powernow-k7.c 2005-01-19 17:01:23.000000000 +0200
@@ -72,7 +72,7 @@
2000, 1950, 1900, 1850, 1800, 1750, 1700, 1650,
1600, 1550, 1500, 1450, 1400, 1350, 1300, 0,
1275, 1250, 1225, 1200, 1175, 1150, 1125, 1100,
- 1075, 1050, 1024, 1000, 975, 950, 925, 0,
+ 1075, 1050, 1025, 1000, 975, 950, 925, 0,
};
#endif
@@ -81,15 +81,39 @@
110, 115, 120, 125, 50, 55, 60, 65,
70, 75, 80, 85, 90, 95, 100, 105,
30, 190, 40, 200, 130, 135, 140, 210,
- 150, 225, 160, 165, 170, 180, -1, -1,
+ 150, 220, 160, 165, 170, 180, -1, -1,
};
+/* translation table for even multiplier to fid */
+static int even_multiplier[20] = {
+ 16, 18, 4, 6, 8, 10, 12, 14, // 3, 4, 5, 6, 7 ,8 , 9, 10
+ 0, 2, 20, 22, 24, 26, 28, 29, // 11, 12, 13, 14, 15, 16, 17, 18
+ 17, 19, 23, 25, // 19, 20, 21, 22
+};
+
+/* translation table for odd multiplier to fid*/
+static int odd_multiplier[9] = {
+ 5, 7, 9, 11, 13, 15, 1, 3, // 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5
+ 21, // 13.5
+};
+
+
/* This parameter is used in order to force ACPI instead of legacy method for
* configuration purpose.
*/
static int acpi_force;
+/* This parameters can be used to manually overwrite the tables */
+static int overwrite_table = 0;
+#define MAX_PST 10
+static int multiplier_arr_size = MAX_PST;
+static int voltage_arr_size = MAX_PST;
+static int multiplier[MAX_PST] = {[0 ... (MAX_PST - 1)] = 0 };
+static int voltage[MAX_PST] = {[0 ... (MAX_PST - 1)] = 0 };
+static int switch_latency = 0;
+static unsigned int fsb = 0;
+
static struct cpufreq_frequency_table *powernow_table;
static unsigned int can_scale_bus;
@@ -97,7 +121,6 @@
static unsigned int minimum_speed=-1;
static unsigned int maximum_speed;
static unsigned int number_scales;
-static unsigned int fsb;
static unsigned int latency;
static char have_a0;
@@ -200,7 +223,7 @@
dprintk (" FID: 0x%x (%d.%dx [%dMHz]) "
"VID: 0x%x (%d.%03dV)\n", fid, fid_codes[fid] / 10,
- fid_codes[fid] % 10, speed/1000, vid,
+ fid_codes[fid] % 10, (speed + 500)/1000, vid,
mobile_vid_table[vid]/1000,
mobile_vid_table[vid]%1000);
}
@@ -374,7 +397,7 @@
dprintk (" FID: 0x%x (%d.%dx [%dMHz]) "
"VID: 0x%x (%d.%03dV)\n", fid, fid_codes[fid] / 10,
- fid_codes[fid] % 10, speed/1000, vid,
+ fid_codes[fid] % 10, (speed + 500)/1000, vid,
mobile_vid_table[vid]/1000,
mobile_vid_table[vid]%1000);
@@ -413,6 +436,131 @@
}
#endif
+static int powernow_manual_settings(union msr_fidvidstatus *fidvidstatus)
+{
+ int i,k, validentry;
+ unsigned int max_multiplier, max_voltage;
+ unsigned int speed, cm;
+ u8 vid, fid;
+ static struct cpufreq_frequency_table *powernow_table_tmp;
+
+ if (switch_latency > 0) {
+ if (switch_latency < 100) {
+ printk (KERN_INFO PFX "Settling time passed as %d microseconds."
+ "Should be at least 100. Correcting.\n", switch_latency);
+ switch_latency = 100;
+ }
+ latency = switch_latency;
+ } else {
+ latency = 200;
+ }
+ dprintk ("Settling Time: %d microseconds.\n", latency);
+
+ /* get number of specified multipliers */
+ number_scales = multiplier_arr_size;
+ for (i=0; i < multiplier_arr_size; i++) {
+ if (multiplier[i] == 0) {
+ number_scales=i;
+ break;
+ }
+ }
+
+ /* get maximum values */
+ max_multiplier = fid_codes[fidvidstatus->bits.MFID];
+ max_voltage = mobile_vid_table[fidvidstatus->bits.MVID];
+
+ /* allocate memory */
+ powernow_table=kmalloc((sizeof(struct cpufreq_frequency_table) * (number_scales + 1)), GFP_KERNEL);
+ if (!powernow_table)
+ return -ENOMEM;
+ memset(powernow_table,0,(sizeof(struct cpufreq_frequency_table)*(number_scales+1)));
+
+ k=0;
+ for(i=0; i<number_scales; i++) {
+ validentry = 0;
+ if (multiplier[i] != 0) {
+ /* fix multiplier */
+ if (multiplier[i] < 30)
+ multiplier[i]=multiplier[i] * 10;
+
+ if (multiplier[i] < max_multiplier) {
+ cm = (multiplier[i]/10);
+
+ /* check if odd or even muliplier */
+ if (multiplier[i]%10) {
+ /* odd multiplier */
+ if (cm == 16) {
+ /* hardcoded because 14.5 and 15.5 fids not possible */
+ fid = 27;
+ validentry = 1;
+ } else if ((cm > 4) && (cm < 14)) {
+ fid= odd_multiplier[cm-5];
+ validentry = 1;
+ }
+ } else {
+ /* even_multiplier */
+ if ((cm < 23) && (cm > 2)) {
+ fid = even_multiplier[cm-3];
+ validentry=1;
+ }
+ }
+ }
+ }
+
+ if (validentry) {
+ /* if no voltage specified use CPU default */
+ if (voltage[i] == 0)
+ voltage[i] = max_voltage;
+
+ /* we do not allow higher voltages than the CPU's maximum
+ 925 mV is the minimum */
+ if ((voltage[i] <= max_voltage) && (voltage[i] >= 925)) {
+ if (voltage[i] >= 1300) {
+ vid = 40 - (voltage[i]/50);
+ } else {
+ vid = 67 - (voltage[i]/25);
+ }
+ /* calculate speed */
+ speed = fsb * fid_codes[fid] / 10;
+ powernow_table[k].frequency = speed;
+ powernow_table[k].index=fid; /*lower 8 bits*/
+ powernow_table[k].index|= (vid << 8); /*upper 8 bits*/
+
+ if (speed < minimum_speed)
+ minimum_speed = speed;
+ if (speed > maximum_speed)
+ maximum_speed = speed;
+
+ dprintk (" FID: 0x%x (%d.%dx [%dMHz])\t", fid, fid_codes[fid] / 10, fid_codes[fid] % 10, (speed + 500)/1000);
+ printk ("VID: 0x%x (%d.%03dV)\n", vid, mobile_vid_table[vid]/1000, mobile_vid_table[vid]%1000);
+ k++;
+ }
+ } else {
+ // invalid entry
+ dprintk ("Entry %d is invalid\n", i+1);
+ }
+ }
+
+ if (k < number_scales) {
+ /* some entrys were invalid need to realloc table */
+ number_scales = k;
+ powernow_table_tmp = kmalloc((sizeof(struct cpufreq_frequency_table) * (number_scales + 1)), GFP_KERNEL);
+ if (!powernow_table_tmp) {
+ kfree(powernow_table);
+ return -ENOMEM;
+ }
+ memcpy(powernow_table_tmp,powernow_table,(sizeof(struct cpufreq_frequency_table) * (number_scales + 1)));
+ kfree(powernow_table);
+ powernow_table=powernow_table_tmp;
+ }
+
+ /* Terminate frequency list */
+ powernow_table[number_scales].frequency = CPUFREQ_TABLE_END;
+ powernow_table[number_scales].index = 0;
+
+ return 0;
+}
+
static int powernow_decode_bios (int maxfid, int startvid)
{
struct psb_s *psb;
@@ -586,8 +734,28 @@
rdmsrl (MSR_K7_FID_VID_STATUS, fidvidstatus.val);
+ if (fsb) {
+ unsigned int mult;
+
+ if (fsb < 1000)
+ fsb *= 1000;
+
+ if (fsb < 1000 fsb > 1000000) {
+ printk(KERN_WARNING PFX "FSB %ukhz out of range\n", fsb);
+ return -EINVAL;
+ }
+
+ mult = ((2*cpu_khz + fsb/2) / fsb) * 5;
+ if (mult != fid_codes[fidvidstatus.bits.MFID])
+ dprintk("MSR reported multiplier %u.%u\n", fid_codes[fidvidstatus.bits.MFID]/10, fid_codes[fidvidstatus.bits.MFID]%10);
+
+ dprintk("Current multiplier %u.%u. CPU running at %luMHz\n", mult/10, mult%10, (cpu_khz + 500)/1000);
+ if (mult < 30 mult >= 230)
+ dprintk("Multiplier %u.%u not possible\n", mult/10, mult%10);
+ } else
/* A K7 with powernow technology is set to max frequency by BIOS */
fsb = (10 * cpu_khz) / fid_codes[fidvidstatus.bits.MFID];
+
if (!fsb) {
printk(KERN_WARNING PFX "can not determine bus frequency\n");
return -EINVAL;
@@ -597,6 +765,9 @@
if (dmi_check_system(powernow_dmi_table) acpi_force) {
printk (KERN_INFO PFX "PSB/PST known to be broken. Trying ACPI instead\n");
result = powernow_acpi_init();
+ } else if (overwrite_table){
+ printk(KERN_INFO PFX "Overwriting PST table with manual settings\n");
+ result = powernow_manual_settings(&fidvidstatus);
} else {
result = powernow_decode_bios(fidvidstatus.bits.MFID, fidvidstatus.bits.SVID);
if (result) {
@@ -620,7 +791,7 @@
return result;
printk (KERN_INFO PFX "Minimum speed %d MHz. Maximum speed %d MHz.\n",
- minimum_speed/1000, maximum_speed/1000);
+ (minimum_speed + 500)/1000, (maximum_speed + 500)/1000);
policy->governor = CPUFREQ_DEFAULT_GOVERNOR;
@@ -678,6 +849,17 @@
module_param(acpi_force, int, 0444);
MODULE_PARM_DESC(acpi_force, "Force ACPI to be used.");
+module_param(overwrite_table,int,0444);
+MODULE_PARM_DESC(overwrite_table, "overwrite table with manually settings");
+module_param(fsb, uint, 0444);
+MODULE_PARM_DESC(fsb, "(MHz) overrides the calculated FSB");
+module_param_array(multiplier, int, &multiplier_arr_size, 0444);
+MODULE_PARM_DESC(multiplier, "Specifiy up to 10 multipliers, multiply them by 10: 5->50, 5.5->55");
+module_param_array(voltage, int, &voltage_arr_size, 0444);
+MODULE_PARM_DESC(voltage, "Specify voltages in respect to the given multipliers, specify them in mV: 1.275V -> 1275");
+module_param(switch_latency, int, 0444);
+MODULE_PARM_DESC(switch_latency, "Set state transition latency in microseconds (default 200us)");
+
MODULE_AUTHOR ("Dave Jones <davej at codemonkey.org.uk>");
MODULE_DESCRIPTION ("Powernow driver for AMD K7 processors.");
MODULE_LICENSE ("GPL");
Zitatalso du hast einen XP-M laufen auf einem K7S8XE+ und taktest den FSB von 600 bis auf 2000MHz hin und her mittels PowerNow, richtig?
wo liegt das Problem mit dem PowerNow? Warum macht es Probleme mit den Boards?
Ja, ich habs laufen. Es scheint offensichtlich mit den meisten Desktopboards Probleme zu machen. Das liegt aber AFAIK nicht so sehr am Chipsatz, sondern am Bios. PowerNow braucht ne sogenannte PST, das is sone Tabelle im Bios, wo die Multiplikatoren und die zugehörigen Vcore Werte drin stehen. Die fehlt den Desktop Biosen ganz einfach.
Ich hab deshalb bißchen auf der Cpufeq Mailingliste rumgelesen, dort wurde ein Patch gepostet, der es ermöglicht, dem powernow-k7 Modul ne eigene PST zu übergeben. Bei Bedarf könnte ich das entsprechende Post mit dem Patch für 2.6.10 zur Verfügung stellen.
Aber wie gesagt, mit dem Multiplikator klappt es auf dem Board einwandfrei, nur die Spannung krieg ich nich runter. Auf anderen Boards könnte das aber funktionieren.
Uwe
Hallo,
ich hab auf nem K7S8XE+ PowerNow zu laufen gekriegt. Ich denke, das wird mit anderen MoBos auch funktionieren. Das Ding läuft jetzt, je nach CPU Belastung mit 600...2000MHz, was sich schon in der Temperatur bemekbar macht. Nachteil ist, wie bidoba schon sagte, daß die Spannung konstant bei 1,575V bleibt. Da könnte man aber vielleicht mit Hilfe eines Lötkolbens auch was machen, wenn man sich traut
Uwe
Hallo,
@ Henning
mit text2skin und den zugehörigen Skins stimmt was nich.
Text2skin hat nen '_' vor dem rc2. In den Skins, in der Abhängigkeit is aber ein '-'.
Uwe
Hi,
mit den USE-FLAGS kann man bestimmte Features von Programmpaketen beeinflussen. Wenn Du z.B. -kde setzt, dann würde ein Paket, welches mit oder ohne KDE-Unterstützung übersetzt werden kann, ohne übersetzt. Das configure Script würde in dem Fall beispielsweise so
aufgerufen.
Hoffe, das war einigermaßen verständlich.
Uwe
Da ham wir wohl gestern alle dasselbe gemacht?
Bei mir gings übrigens um /dev/fb0, wegen graphtft. Ich war schon kurz davor auszuflippen. Die Lösung hab ich dann hier gefunden.
Uwe
Hi,
böse Falle!! Das hat glaube nichts mit devfs zu tun. Gestern stand ich vor einem ähnlichen Problem, allerdings im Zusammenhang mit udev. Guck mal nach /etc/security/console.perms.
Da kannst Du Dich kaputt machen, bestimmte Rechte werden beim Login eiskalt überschrieben.
Uwe
Hallo,
hab ich gemacht, nach nem gensync isses wieder da. Hier is mal meine gentoo-de.syncsource
# This id must be unique among all the ids in /etc/gensync/*.syncsource
id="gentoo-de"
# This is a human-readable description of the source
description="gentoo.de Portage Overlay"
# The rsync url
rsync="rsync://rsync16.de.gentoo.org/gentoo-de"
# By default, the overlay directory is set to ${base_overlay}/${id},
# where base_overlay is picked from /etc/gensync/gensync.conf
#
# You may specify a different relative path, such as
overlay="gentoo-de"
#
# Or an entirely new absolute path (remeber to create the path first)
#overlay="/my/absolute/path"
Alles anzeigen
Uwe