linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 2.6.10-mm2: it87 sensor driver stops CPU fan
@ 2005-01-08  0:50 Simone Piunno
  2005-01-08  9:34 ` Jean Delvare
  2005-01-08 16:20 ` 2.6.10-mm2: it87 sensor driver stops CPU fan Jean Delvare
  0 siblings, 2 replies; 33+ messages in thread
From: Simone Piunno @ 2005-01-08  0:50 UTC (permalink / raw)
  To: Andrew Morton; +Cc: djg, greg, sensors, linux-kernel


Hi,

Today I've tried 2.6.10-mm2 compiled for x86_64 and found something bad.
As soon as I modprobe it87 (one of the i2c sensors drivers) the CPU fan 
completely halts and the CPU temperature skyrockets even while idle.
For context:
I have an Athlon64 3200+ on a Gigabyte K8VT800 motherboard (i2c_viapro module)
running Gentoo compiled in x86_64 mode, it87 is controlled through ISA bus, 
VT8237 ISA bridge.

The same setup doesn't show the problem on vanilla 2.6.10 and neither on the 
last -mm I tried, which IIRC was 2.6.9-rc4-mm1.

After some tweaking, it looks like ACPI is not the problem (tried to look at 
full debug trace, nothing appears when loading it87).  Instead, I've found I 
can control the fan speed using /sys/devices/platform/i2c-0/0-0290/pwm1 and
initially it is set to 225, but setting it to 0 the fan runs at max speed.
Intermediate values works as well: the higher the value, the slower the fan.

I've google for this sysfs interface and found than everyone expects pwm* 
values to have the reverse meaning: 255 should be max speed and 0 should halt 
the fan.  So apparently the problem is really in the it87 driver, using the 
wrong coefficient for this scale and therefore setting it to the wrong 
default value.

Comparing drivers/i2c/chips/it87.c in 2.6.10 vanilla and 2.6.10-mm2, I've 
found only -mm tree includes the pwm fan controller.  

I think a quick fix could be the following, but didn't try it.

--- drivers/i2c/chips/it87.c    2005-01-07 15:13:52.000000000 +0100
+++ drivers/i2c/chips/it87.c.new        2005-01-08 01:41:16.000000000 +0100
@@ -163,8 +163,8 @@

 #define ALARMS_FROM_REG(val) (val)

-#define PWM_TO_REG(val)   ((val) >> 1)
-#define PWM_FROM_REG(val) (((val)&0x7f) << 1)
+#define PWM_TO_REG(val)   ((255-val) >> 1)
+#define PWM_FROM_REG(val) (255-(((val)&0x7f) << 1))

 static int DIV_TO_REG(int val)
 {

Regards,
  Simone Piunno
-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-08  0:50 2.6.10-mm2: it87 sensor driver stops CPU fan Simone Piunno
@ 2005-01-08  9:34 ` Jean Delvare
  2005-01-10 22:41   ` Simone Piunno
  2005-01-08 16:20 ` 2.6.10-mm2: it87 sensor driver stops CPU fan Jean Delvare
  1 sibling, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-08  9:34 UTC (permalink / raw)
  To: Simone Piunno, Jonas Munsin; +Cc: djg, greg, sensors, linux-kernel

Hi Simone,

> Today I've tried 2.6.10-mm2 compiled for x86_64 and found something
> bad. As soon as I modprobe it87 (one of the i2c sensors drivers) the
> CPU fan  completely halts and the CPU temperature skyrockets even
> while idle. For context:
> I have an Athlon64 3200+ on a Gigabyte K8VT800 motherboard (i2c_viapro
> module) running Gentoo compiled in x86_64 mode, it87 is controlled
> through ISA bus,  VT8237 ISA bridge.
> 
> The same setup doesn't show the problem on vanilla 2.6.10 and neither
> on the  last -mm I tried, which IIRC was 2.6.9-rc4-mm1.
> 
> After some tweaking, it looks like ACPI is not the problem (tried to
> look at  full debug trace, nothing appears when loading it87). 
> Instead, I've found I  can control the fan speed using
> /sys/devices/platform/i2c-0/0-0290/pwm1 and initially it is set to
> 225, but setting it to 0 the fan runs at max speed. Intermediate
> values works as well: the higher the value, the slower the fan.
> 
> I've google for this sysfs interface and found than everyone expects
> pwm*  values to have the reverse meaning: 255 should be max speed and
> 0 should halt  the fan.  So apparently the problem is really in the
> it87 driver, using the  wrong coefficient for this scale and therefore
> setting it to the wrong  default value.

Thanks a lot for the detective work. You are right, PWM control was
added very recently to the it87 driver in 2.6 (but is there for some
time alredy for 2.4 kernels in the lm_sensors project).

The 0-255 range happens to be in the correct "direction" for at least
one other board () so the it87 driver isn't plain wrong, more likely it
is a matter of how the chip was wired and (mis)configured by the
motherboard manufacturer. In particular, I suspect the fan polarity bit
not to be properly set on your board.

Could you please provide a dump of your it87 chip before loading the
it87 driver? "isadump 0x295 0x296" should tell you. I would also be
interested in a dump right after you load the driver if possible (but
don't burn your CPU for me).

Do you know what kind of it87 chip you do have? There are three of them,
IT8705F, IT8712F and a SIS950 clone (mostly similar to the IT8705F).

> Comparing drivers/i2c/chips/it87.c in 2.6.10 vanilla and 2.6.10-mm2,
> I've  found only -mm tree includes the pwm fan controller.  
> 
> I think a quick fix could be the following, but didn't try it.

Although it works for you, it probably breaks the driver for other
people, so it doesn't look like the correct fix. I'll propose a patch
after I see your chip dumps.

Thanks,
-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-08  0:50 2.6.10-mm2: it87 sensor driver stops CPU fan Simone Piunno
  2005-01-08  9:34 ` Jean Delvare
@ 2005-01-08 16:20 ` Jean Delvare
  2005-01-08 19:23   ` Simone Piunno
  1 sibling, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-08 16:20 UTC (permalink / raw)
  To: Simone Piunno; +Cc: LM Sensors, LKML

Hi again Simone,

> Today I've tried 2.6.10-mm2 compiled for x86_64 and found something
> bad. As soon as I modprobe it87 (one of the i2c sensors drivers) the
> CPU fan  completely halts and the CPU temperature skyrockets even
> while idle. For context:
> I have an Athlon64 3200+ on a Gigabyte K8VT800 motherboard (i2c_viapro
> module) running Gentoo compiled in x86_64 mode, it87 is controlled
> through ISA bus,  VT8237 ISA bridge.

I would also be interested in the output of dmidecode [1] for your
system. This would allow me to add a workaround for your board to the
it87 driver, since the BIOS seems not to properly intialize the chip.
Sadly, there are probably many other boards which would need similar
workarounds for this chips or any other with PWM capabilities, and I
would better see the bogus BIOSes fixed than as many workarounds in our
drivers...

BTW, if you don't have the latest version of your motherboard BIOS
already, it could be worth upgrading, just in case it helps (I wouldn't
put too much hope there though).

[1] http://www.nongnu.org/dmidecode/

Thanks,
-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-08 16:20 ` 2.6.10-mm2: it87 sensor driver stops CPU fan Jean Delvare
@ 2005-01-08 19:23   ` Simone Piunno
  2005-01-10 19:23     ` Simone Piunno
  0 siblings, 1 reply; 33+ messages in thread
From: Simone Piunno @ 2005-01-08 19:23 UTC (permalink / raw)
  To: LM Sensors, LKML

On Saturday 08 January 2005 17:20, Jean Delvare wrote:

> I would also be interested in the output of dmidecode [1] for your
> system. This would allow me to add a workaround for your board to the
> it87 driver, since the BIOS seems not to properly intialize the chip.

Ok, attached below

> BTW, if you don't have the latest version of your motherboard BIOS
> already, it could be worth upgrading, just in case it helps (I wouldn't
> put too much hope there though).

Ok I will do it, but it doesn't look useful looking at the changelog.
Anyway I had a problem with my BIOS, it caused frequent lock-ups.
I reported it to Gigabyte and in 1 week they provided my with a new version 
fixing the problem, so if you can explain in detail what is wrong with their 
BIOS, I'm confident I could let them fix it.
I'll keep you posted.

Thank you
  Simone

# dmidecode 2.5
SMBIOS 2.3 present.
37 structures occupying 1058 bytes.
Table at 0x000F0100.
Handle 0x0000
 DMI type 0, 20 bytes.
 BIOS Information
  Vendor: Award Software International, Inc.
  Version: F5
  Release Date: 04/21/2004
  Address: 0xE0000
  Runtime Size: 128 kB
  ROM Size: 256 kB
		Characteristics:
			ISA is supported
			PCI is supported
			PNP is supported
			APM is supported
			BIOS is upgradeable
			BIOS shadowing is allowed
			Boot from CD is supported
			Selectable boot is supported
			BIOS ROM is socketed
			EDD is supported
			5.25"/360 KB floppy services are supported (int 13h)
			5.25"/1.2 MB floppy services are supported (int 13h)
			3.5"/720 KB floppy services are supported (int 13h)
			3.5"/2.88 MB floppy services are supported (int 13h)
			Print screen service is supported (int 5h)
			8042 keyboard services are supported (int 9h)
			Serial services are supported (int 14h)
			Printer services are supported (int 17h)
			CGA/mono video services are supported (int 10h)
   ACPI is supported
   USB legacy is supported
   AGP is supported
   LS-120 boot is supported
   ATAPI Zip drive boot is supported
Handle 0x0001
 DMI type 1, 25 bytes.
 System Information
  Manufacturer:  
  Product Name:  
  Version:  
  Serial Number:  
  UUID: Not Present
  Wake-up Type: Power Switch
Handle 0x0002
 DMI type 2, 8 bytes.
 Base Board Information
  Manufacturer: Gigabyte Technology Co., Ltd.
  Product Name: K8T800-8237
  Version: 1.x
  Serial Number:  
Handle 0x0003
 DMI type 3, 17 bytes.
 Chassis Information
  Manufacturer:  
		Type: Desktop
		Lock: Not Present
		Version:  
		Serial Number:  
		Asset Tag:  
		Boot-up State: Unknown
		Power Supply State: Unknown
		Thermal State: Unknown
		Security Status: Unknown
		OEM Information: 0x00000000
Handle 0x0004
	DMI type 4, 35 bytes.
	Processor Information
		Socket Designation: Socket 754
		Type: Central Processor
		Family: Athlon
		Manufacturer: AMD
		ID: 48 0F 00 00 FF FB 8B 07
  Signature: Extended Family 0, Model 4, Stepping 8
  Flags:
   FPU (Floating-point unit on-chip)
   VME (Virtual mode extension)
   DE (Debugging extension)
   PSE (Page size extension)
   TSC (Time stamp counter)
   MSR (Model specific registers)
   PAE (Physical address extension)
   MCE (Machine check exception)
   CX8 (CMPXCHG8 instruction supported)
   APIC (On-chip APIC hardware supported)
   SEP (Fast system call)
   MTRR (Memory type range registers)
   PGE (Page global enable)
   MCA (Machine check architecture)
   CMOV (Conditional move instruction supported)
   PAT (Page attribute table)
   PSE-36 (36-bit page size extension)
   CLFSH (CLFLUSH instruction supported)
   MMX (MMX technology supported)
   FXSR (Fast floating-point save and restore)
   SSE (Streaming SIMD extensions)
   SSE2 (Streaming SIMD extensions 2)
  Version: AMD Athlon(tm) 64 Processor 3200+
		Voltage: 1.5 V
		External Clock: 200 MHz
		Max Speed: 4000 MHz
		Current Speed: 2000 MHz
		Status: Populated, Enabled
		Upgrade: ZIF Socket
		L1 Cache Handle: 0x0009
		L2 Cache Handle: 0x000A
		L3 Cache Handle: Not Provided
		Serial Number:  
		Asset Tag:  
		Part Number:  
Handle 0x0005
	DMI type 5, 22 bytes.
	Memory Controller Information
		Error Detecting Method: 8-bit Parity
		Error Correcting Capabilities:
			None
		Supported Interleave: One-way Interleave
		Current Interleave: One-way Interleave
		Maximum Memory Module Size: 1024 MB
		Maximum Total Memory Size: 3072 MB
		Supported Speeds:
			70 ns
			60 ns
		Supported Memory Types:
			Standard
			EDO
		Memory Module Voltage: 3.3 V
		Associated Memory Slots: 3
			0x0006
			0x0007
			0x0008
		Enabled Error Correcting Capabilities:
   None
Handle 0x0006
 DMI type 6, 12 bytes.
 Memory Module Information
  Socket Designation: A0
  Bank Connections: 1
  Current Speed: Unknown
  Type: Other
  Installed Size: 512 MB (Double-bank Connection)
  Enabled Size: 512 MB (Double-bank Connection)
  Error Status: OK
Handle 0x0007
 DMI type 6, 12 bytes.
 Memory Module Information
  Socket Designation: A1
  Bank Connections: 2
  Current Speed: Unknown
  Type: Other
  Installed Size: 512 MB (Double-bank Connection)
  Enabled Size: 512 MB (Double-bank Connection)
  Error Status: OK
Handle 0x0008
 DMI type 6, 12 bytes.
 Memory Module Information
		Socket Designation: A2
		Bank Connections: 3
		Current Speed: Unknown
		Type: Other
		Installed Size: Not Installed (Single-bank Connection)
		Enabled Size: Not Installed (Single-bank Connection)
		Error Status: OK
Handle 0x0009
	DMI type 7, 19 bytes.
	Cache Information
		Socket Designation: Internal Cache
		Configuration: Enabled, Not Socketed, Level 1
		Operational Mode: Write Back
		Location: Internal
		Installed Size: 128 KB
		Maximum Size: 128 KB
		Supported SRAM Types:
			Synchronous
		Installed SRAM Type: Synchronous
		Speed: Unknown
		Error Correction Type: Unknown
		System Type: Unknown
		Associativity: Unknown
Handle 0x000A
	DMI type 7, 19 bytes.
	Cache Information
		Socket Designation: External Cache
		Configuration: Enabled, Not Socketed, Level 2
		Operational Mode: Write Back
		Location: External
		Installed Size: 1024 KB
		Maximum Size: 1024 KB
		Supported SRAM Types:
			Synchronous
		Installed SRAM Type: Synchronous
		Speed: Unknown
		Error Correction Type: Unknown
		System Type: Unknown
		Associativity: Unknown
Handle 0x000B
	DMI type 8, 9 bytes.
	Port Connector Information
  Internal Reference Designator: PRIMARY IDE
  Internal Connector Type: On Board IDE
  External Reference Designator:  
  External Connector Type: None
  Port Type: Other
Handle 0x000C
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: SECONDARY IDE
  Internal Connector Type: On Board IDE
  External Reference Designator:  
  External Connector Type: None
  Port Type: Other
Handle 0x000D
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: FDD
  Internal Connector Type: On Board Floppy
  External Reference Designator:  
  External Connector Type: None
  Port Type: 8251 FIFO Compatible
Handle 0x000E
 DMI type 8, 9 bytes.
 Port Connector Information
		Internal Reference Designator: COM1
		Internal Connector Type: 9 Pin Dual Inline (pin 10 cut)
		External Reference Designator:  
		External Connector Type: DB-9 male
		Port Type: Serial Port 16450 Compatible
Handle 0x000F
	DMI type 8, 9 bytes.
	Port Connector Information
		Internal Reference Designator: COM2
  Internal Connector Type: 9 Pin Dual Inline (pin 10 cut)
  External Reference Designator:  
  External Connector Type: DB-9 male
  Port Type: Serial Port 16450 Compatible
Handle 0x0010
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: LPT1
  Internal Connector Type: DB-25 female
  External Reference Designator:  
  External Connector Type: DB-25 female
  Port Type: Parallel Port ECP/EPP
Handle 0x0011
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: Keyboard
		Internal Connector Type: Other
		External Reference Designator:  
		External Connector Type: PS/2
		Port Type: Keyboard Port
Handle 0x0012
	DMI type 8, 9 bytes.
	Port Connector Information
		Internal Reference Designator: PS/2 Mouse
		Internal Connector Type: PS/2
		External Reference Designator: Detected
		External Connector Type: PS/2
		Port Type: Mouse Port
Handle 0x0013
	DMI type 9, 13 bytes.
	System Slot Information
		Designation: PCI
		Type: 32-bit PCI
		Current Usage: Available
		Length: Long
		ID: 9
		Characteristics:
			5.0 V is provided
			3.3 V is provided
			PME signal is supported
Handle 0x0014
	DMI type 9, 13 bytes.
	System Slot Information
		Designation: PCI
		Type: 32-bit PCI
		Current Usage: Available
		Length: Long
		ID: 10
		Characteristics:
			5.0 V is provided
			3.3 V is provided
			PME signal is supported
Handle 0x0015
	DMI type 9, 13 bytes.
	System Slot Information
		Designation: PCI
		Type: 32-bit PCI
		Current Usage: Available
		Length: Long
		ID: 11
		Characteristics:
			5.0 V is provided
			3.3 V is provided
			PME signal is supported
Handle 0x0016
	DMI type 9, 13 bytes.
	System Slot Information
		Designation: PCI
		Type: 32-bit PCI
		Current Usage: Available
		Length: Long
		ID: 12
		Characteristics:
			5.0 V is provided
			3.3 V is provided
			PME signal is supported
Handle 0x0017
	DMI type 9, 13 bytes.
	System Slot Information
		Designation: PCI
		Type: 32-bit PCI
		Current Usage: Available
		Length: Long
		ID: 13
		Characteristics:
			5.0 V is provided
   3.3 V is provided
   PME signal is supported
Handle 0x0018
 DMI type 9, 13 bytes.
 System Slot Information
  Designation: AGP
  Type: 32-bit AGP
  Current Usage: In Use
  Length: Long
  ID: 8
  Characteristics:
   5.0 V is provided
Handle 0x0019
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: USB
  Internal Connector Type: None
  External Reference Designator:  
  External Connector Type: Access Bus (USB)
  Port Type: USB
Handle 0x001A
 DMI type 13, 22 bytes.
 BIOS Language Information
  Installable Languages: 3
   n|US|iso8859-1
   n|US|iso8859-1
   r|CA|iso8859-1
  Currently Installed Language: n|US|iso8859-1
Handle 0x001B
 DMI type 16, 15 bytes.
 Physical Memory Array
  Location: System Board Or Motherboard
  Use: System Memory
  Error Correction Type: None
  Maximum Capacity: 768 MB
  Error Information Handle: Not Provided
  Number Of Devices: 3
Handle 0x001C
 DMI type 17, 27 bytes.
 Memory Device
		Array Handle: 0x001B
		Error Information Handle: Not Provided
		Total Width: 64 bits
		Data Width: 64 bits
		Size: 512 MB
		Form Factor: DIMM
  Set: None
  Locator: A0
  Bank Locator: Bank0/1
  Type: Unknown
  Type Detail: None
  Speed: 400 MHz (2.5 ns)
  Manufacturer:  
  Serial Number:  
  Asset Tag:  
  Part Number:  
Handle 0x001D
 DMI type 17, 27 bytes.
 Memory Device
  Array Handle: 0x001B
  Error Information Handle: Not Provided
  Total Width: 64 bits
  Data Width: 64 bits
  Size: 512 MB
  Form Factor: DIMM
  Set: None
  Locator: A1
  Bank Locator: Bank2/3
  Type: Unknown
  Type Detail: None
  Speed: 400 MHz (2.5 ns)
  Manufacturer:  
  Serial Number:  
  Asset Tag:  
  Part Number:  
Handle 0x001E
 DMI type 17, 27 bytes.
 Memory Device
  Array Handle: 0x001B
  Error Information Handle: Not Provided
  Total Width: 64 bits
  Data Width: 64 bits
  Size: No Module Installed
  Form Factor: DIMM
  Set: None
  Locator: A2
  Bank Locator: Bank4/5
  Type: Unknown
  Type Detail: None
  Speed: Unknown
  Manufacturer:  
  Serial Number:  
  Asset Tag:  
  Part Number:  
Handle 0x001F
 DMI type 19, 15 bytes.
 Memory Array Mapped Address
  Starting Address: 0x00000000000
  Ending Address: 0x0003FFFFFFF
  Range Size: 1 GB
  Physical Array Handle: 0x001B
  Partition Width: 32
Handle 0x0020
 DMI type 20, 19 bytes.
 Memory Device Mapped Address
  Starting Address: 0x00000000000
  Ending Address: 0x0001FFFFFFF
  Range Size: 512 MB
  Physical Device Handle: 0x001C
  Memory Array Mapped Address Handle: 0x001F
  Partition Row Position: 1
Handle 0x0021
 DMI type 20, 19 bytes.
 Memory Device Mapped Address
  Starting Address: 0x00020000000
  Ending Address: 0x0003FFFFFFF
  Range Size: 512 MB
  Physical Device Handle: 0x001D
  Memory Array Mapped Address Handle: 0x001F
  Partition Row Position: 1
Handle 0x0022
 DMI type 20, 19 bytes.
 Memory Device Mapped Address
  Starting Address: 0x00000000000
  Ending Address: 0x000000003FF
  Range Size: 1 kB
  Physical Device Handle: 0x001E
  Memory Array Mapped Address Handle: 0x001F
  Partition Row Position: 1
Handle 0x0023
 DMI type 32, 11 bytes.
 System Boot Information
  Status: No errors detected
Handle 0x0024
 DMI type 127, 4 bytes.
 End Of Table

-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-08 19:23   ` Simone Piunno
@ 2005-01-10 19:23     ` Simone Piunno
  2005-01-10 19:34       ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Simone Piunno @ 2005-01-10 19:23 UTC (permalink / raw)
  To: LM Sensors; +Cc: LKML

On Saturday 08 January 2005 20:23, Simone Piunno wrote:

> > BTW, if you don't have the latest version of your motherboard BIOS
> > already, it could be worth upgrading, just in case it helps (I wouldn't
> > put too much hope there though).

I've upgraded to the newest version available (f10), I have new values in 
dmidecode, but nothing changed on the PWM behaviour.
Here is the new dmidecode output

# dmidecode 2.5
SMBIOS 2.3 present.
37 structures occupying 1064 bytes.
Table at 0x000F0100.
Handle 0x0000
 DMI type 0, 20 bytes.
 BIOS Information
  Vendor: Award Software International, Inc.
  Version: F10
  Release Date: 10/22/2004
  Address: 0xE0000
  Runtime Size: 128 kB
  ROM Size: 256 kB
  Characteristics:
   ISA is supported
   PCI is supported
   PNP is supported
   APM is supported
   BIOS is upgradeable
   BIOS shadowing is allowed
   Boot from CD is supported
   Selectable boot is supported
   BIOS ROM is socketed
   EDD is supported
   5.25"/360 KB floppy services are supported (int 13h)
   5.25"/1.2 MB floppy services are supported (int 13h)
   3.5"/720 KB floppy services are supported (int 13h)
   3.5"/2.88 MB floppy services are supported (int 13h)
   Print screen service is supported (int 5h)
   8042 keyboard services are supported (int 9h)
   Serial services are supported (int 14h)
   Printer services are supported (int 17h)
   CGA/mono video services are supported (int 10h)
   ACPI is supported
   USB legacy is supported
   AGP is supported
   LS-120 boot is supported
   ATAPI Zip drive boot is supported
   BIOS boot specification is supported
Handle 0x0001
 DMI type 1, 25 bytes.
 System Information
  Manufacturer:  
  Product Name:  
  Version:  
  Serial Number:  
  UUID: Not Present
  Wake-up Type: Power Switch
Handle 0x0002
 DMI type 2, 8 bytes.
 Base Board Information
  Manufacturer: Gigabyte Technology Co., Ltd.
  Product Name: K8T800-8237
  Version:  
  Serial Number:  
Handle 0x0003
 DMI type 3, 17 bytes.
 Chassis Information
  Manufacturer:  
  Type: Desktop
  Lock: Not Present
  Version:  
  Serial Number:  
  Asset Tag:  
  Boot-up State: Unknown
  Power Supply State: Unknown
  Thermal State: Unknown
  Security Status: Unknown
  OEM Information: 0x00000000
Handle 0x0004
 DMI type 4, 35 bytes.
 Processor Information
  Socket Designation: Socket 754
  Type: Central Processor
  Family: Athlon
  Manufacturer: AMD
  ID: 48 0F 00 00 FF FB 8B 07
  Signature: Extended Family 0, Model 4, Stepping 8
  Flags:
   FPU (Floating-point unit on-chip)
   VME (Virtual mode extension)
   DE (Debugging extension)
   PSE (Page size extension)
   TSC (Time stamp counter)
   MSR (Model specific registers)
   PAE (Physical address extension)
   MCE (Machine check exception)
   CX8 (CMPXCHG8 instruction supported)
   APIC (On-chip APIC hardware supported)
   SEP (Fast system call)
   MTRR (Memory type range registers)
   PGE (Page global enable)
   MCA (Machine check architecture)
   CMOV (Conditional move instruction supported)
   PAT (Page attribute table)
   PSE-36 (36-bit page size extension)
   CLFSH (CLFLUSH instruction supported)
   MMX (MMX technology supported)
   FXSR (Fast floating-point save and restore)
   SSE (Streaming SIMD extensions)
   SSE2 (Streaming SIMD extensions 2)
  Version: AMD Athlon(tm) 64 Processor 3200+
  Voltage: 1.5 V
  External Clock: 200 MHz
  Max Speed: 4000 MHz
  Current Speed: 2000 MHz
  Status: Populated, Enabled
  Upgrade: ZIF Socket
  L1 Cache Handle: 0x0009
  L2 Cache Handle: 0x000A
  L3 Cache Handle: Not Provided
  Serial Number:  
  Asset Tag:  
  Part Number:  
Handle 0x0005
 DMI type 5, 22 bytes.
 Memory Controller Information
  Error Detecting Method: 8-bit Parity
  Error Correcting Capabilities:
   None
  Supported Interleave: One-way Interleave
  Current Interleave: One-way Interleave
  Maximum Memory Module Size: 1024 MB
  Maximum Total Memory Size: 3072 MB
  Supported Speeds:
   70 ns
   60 ns
  Supported Memory Types:
   Standard
   EDO
  Memory Module Voltage: 3.3 V
  Associated Memory Slots: 3
   0x0006
   0x0007
   0x0008
  Enabled Error Correcting Capabilities:
   None
Handle 0x0006
 DMI type 6, 12 bytes.
 Memory Module Information
  Socket Designation: A0
  Bank Connections: 1
  Current Speed: Unknown
  Type: Other
  Installed Size: 2048 MB (Double-bank Connection)
  Enabled Size: 2048 MB (Double-bank Connection)
  Error Status: OK
Handle 0x0007
 DMI type 6, 12 bytes.
 Memory Module Information
  Socket Designation: A1
  Bank Connections: 2
  Current Speed: Unknown
  Type: Other
  Installed Size: 2048 MB (Double-bank Connection)
  Enabled Size: 2048 MB (Double-bank Connection)
  Error Status: OK
Handle 0x0008
 DMI type 6, 12 bytes.
 Memory Module Information
  Socket Designation: ..h.
  Bank Connections: 0 9
  Current Speed: Unknown
  Type: Other
		Installed Size: Not Installed (Single-bank Connection)
		Enabled Size: Not Installed (Single-bank Connection)
		Error Status: OK
Handle 0x0009
	DMI type 7, 19 bytes.
	Cache Information
  Socket Designation: Internal Cache
  Configuration: Enabled, Not Socketed, Level 1
  Operational Mode: Write Back
  Location: Internal
  Installed Size: 128 KB
  Maximum Size: 128 KB
  Supported SRAM Types:
   Synchronous
  Installed SRAM Type: Synchronous
  Speed: Unknown
  Error Correction Type: Unknown
  System Type: Unknown
  Associativity: Unknown
Handle 0x000A
 DMI type 7, 19 bytes.
 Cache Information
  Socket Designation: External Cache
  Configuration: Enabled, Not Socketed, Level 2
  Operational Mode: Write Back
  Location: Internal
  Installed Size: 1024 KB
  Maximum Size: 1024 KB
  Supported SRAM Types:
   Synchronous
		Installed SRAM Type: Synchronous
		Speed: Unknown
		Error Correction Type: Unknown
		System Type: Unknown
		Associativity: Unknown
Handle 0x000B
	DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: PRIMARY IDE
  Internal Connector Type: On Board IDE
  External Reference Designator:  
  External Connector Type: None
  Port Type: Other
Handle 0x000C
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: SECONDARY IDE
  Internal Connector Type: On Board IDE
  External Reference Designator:  
  External Connector Type: None
  Port Type: Other
Handle 0x000D
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: FDD
  Internal Connector Type: On Board Floppy
  External Reference Designator:  
  External Connector Type: None
  Port Type: 8251 FIFO Compatible
Handle 0x000E
 DMI type 8, 9 bytes.
 Port Connector Information
		Internal Reference Designator: COM1
		Internal Connector Type: 9 Pin Dual Inline (pin 10 cut)
  External Reference Designator:  
  External Connector Type: DB-9 male
  Port Type: Serial Port 16450 Compatible
Handle 0x000F
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: COM2
  Internal Connector Type: 9 Pin Dual Inline (pin 10 cut)
  External Reference Designator:  
  External Connector Type: DB-9 male
  Port Type: Serial Port 16450 Compatible
Handle 0x0010
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: LPT1
  Internal Connector Type: DB-25 female
  External Reference Designator:  
  External Connector Type: DB-25 female
  Port Type: Parallel Port ECP/EPP
Handle 0x0011
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: Keyboard
  Internal Connector Type: Other
  External Reference Designator:  
  External Connector Type: PS/2
  Port Type: Keyboard Port
Handle 0x0012
	DMI type 8, 9 bytes.
	Port Connector Information
		Internal Reference Designator: PS/2 Mouse
		Internal Connector Type: PS/2
		External Reference Designator: No Detected
		External Connector Type: PS/2
		Port Type: Mouse Port
Handle 0x0013
 DMI type 8, 9 bytes.
 Port Connector Information
  Internal Reference Designator: USB
  Internal Connector Type: None
  External Reference Designator:  
  External Connector Type: Access Bus (USB)
  Port Type: USB
Handle 0x0014
 DMI type 9, 13 bytes.
 System Slot Information
  Designation: PCI
  Type: 32-bit PCI
  Current Usage: Available
  Length: Long
  ID: 9
  Characteristics:
   5.0 V is provided
   3.3 V is provided
   PME signal is supported
   SMBus signal is supported
Handle 0x0015
 DMI type 9, 13 bytes.
 System Slot Information
  Designation: PCI
  Type: 32-bit PCI
  Current Usage: Available
  Length: Long
  ID: 10
  Characteristics:
   5.0 V is provided
   3.3 V is provided
   PME signal is supported
   SMBus signal is supported
Handle 0x0016
 DMI type 9, 13 bytes.
 System Slot Information
  Designation: PCI
  Type: 32-bit PCI
  Current Usage: Available
  Length: Long
  ID: 11
  Characteristics:
   5.0 V is provided
   3.3 V is provided
   PME signal is supported
   SMBus signal is supported
Handle 0x0017
 DMI type 9, 13 bytes.
	System Slot Information
		Designation: PCI
		Type: 32-bit PCI
		Current Usage: Available
  Length: Long
  ID: 12
  Characteristics:
   5.0 V is provided
   3.3 V is provided
   PME signal is supported
   SMBus signal is supported
Handle 0x0018
 DMI type 9, 13 bytes.
 System Slot Information
  Designation: PCI
  Type: 32-bit PCI
  Current Usage: Available
  Length: Long
  ID: 13
  Characteristics:
   5.0 V is provided
   3.3 V is provided
   PME signal is supported
   SMBus signal is supported
Handle 0x0019
 DMI type 9, 13 bytes.
 System Slot Information
  Designation: AGP
  Type: 32-bit AGP
  Current Usage: In Use
  Length: Long
  ID: 8
  Characteristics:
   5.0 V is provided
Handle 0x001A
 DMI type 13, 22 bytes.
 BIOS Language Information
  Installable Languages: 3
   n|US|iso8859-1
   n|US|iso8859-1
   r|CA|iso8859-1
  Currently Installed Language: n|US|iso8859-1
Handle 0x001B
 DMI type 16, 15 bytes.
 Physical Memory Array
  Location: System Board Or Motherboard
  Use: System Memory
  Error Correction Type: None
  Maximum Capacity: 768 MB
  Error Information Handle: Not Provided
  Number Of Devices: 3
Handle 0x001C
 DMI type 17, 27 bytes.
 Memory Device
  Array Handle: 0x001B
  Error Information Handle: Not Provided
  Total Width: 64 bits
  Data Width: 64 bits
  Size: 2048 MB
  Form Factor: DIMM
  Set: None
  Locator: A0
  Bank Locator: Bank0/1
  Type: Unknown
  Type Detail: None
  Speed: 400 MHz (2.5 ns)
  Manufacturer:  
  Serial Number:  
  Asset Tag:  
  Part Number:  
Handle 0x001D
 DMI type 17, 27 bytes.
 Memory Device
  Array Handle: 0x001B
  Error Information Handle: Not Provided
  Total Width: 64 bits
  Data Width: 64 bits
  Size: 2048 MB
  Form Factor: DIMM
  Set: None
  Locator: A1
  Bank Locator: Bank2/3
  Type: Unknown
  Type Detail: None
  Speed: 400 MHz (2.5 ns)
  Manufacturer:  
  Serial Number:  
  Asset Tag:  
  Part Number:  
Handle 0x001E
 DMI type 17, 27 bytes.
 Memory Device
  Array Handle: 0x001B
  Error Information Handle: Not Provided
  Total Width: 64 bits
  Data Width: 64 bits
  Size: No Module Installed
  Form Factor: DIMM
  Set: None
  Locator: ..h.
  Bank Locator: Bank4/5
  Type: Unknown
  Type Detail: None
  Speed: Unknown
  Manufacturer:  
  Serial Number:  
  Asset Tag:  
  Part Number:  
Handle 0x001F
 DMI type 19, 15 bytes.
 Memory Array Mapped Address
  Starting Address: 0x00000000000
  Ending Address: 0x000FFFFFFFF
  Range Size: 4 GB
  Physical Array Handle: 0x001B
  Partition Width: 32
Handle 0x0020
 DMI type 20, 19 bytes.
 Memory Device Mapped Address
  Starting Address: 0x00000000000
  Ending Address: 0x0007FFFFFFF
  Range Size: 2 GB
  Physical Device Handle: 0x001C
  Memory Array Mapped Address Handle: 0x001F
  Partition Row Position: 1
Handle 0x0021
 DMI type 20, 19 bytes.
 Memory Device Mapped Address
  Starting Address: 0x00080000000
  Ending Address: 0x000FFFFFFFF
  Range Size: 2 GB
  Physical Device Handle: 0x001D
  Memory Array Mapped Address Handle: 0x001F
  Partition Row Position: 1
Handle 0x0022
 DMI type 20, 19 bytes.
 Memory Device Mapped Address
  Starting Address: 0x00000000000
  Ending Address: 0x000000003FF
  Range Size: 1 kB
  Physical Device Handle: 0x001E
  Memory Array Mapped Address Handle: 0x001F
  Partition Row Position: 1
Handle 0x0023
 DMI type 32, 11 bytes.
 System Boot Information
  Status: No errors detected
Handle 0x0024
 DMI type 127, 4 bytes.
 End Of Table

-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-10 19:23     ` Simone Piunno
@ 2005-01-10 19:34       ` Jean Delvare
  2005-01-19 20:19         ` Nicolas Pitre
  0 siblings, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-10 19:34 UTC (permalink / raw)
  To: Simone Piunno; +Cc: LM Sensors, LKML

Hi Simone,

> I've upgraded to the newest version available (f10), I have new values
> in  dmidecode, but nothing changed on the PWM behaviour.

OK, thanks for the update anyway. Please note that what I mainly need
now if a dump of your IT87xxF chip before ever loading the it87 driver.
As explained in a previous mail, you can obtain such a dump by running
"isadump 0x295 0x296". isadump is part of the lm_sensors package [1].

[1] http://secure.netroedge.com/~lm78/download.html

When I get this, I'll compare with the datasheets so as to understand
how your chip is configured (or left unconfigured) by your BIOS. This
will both help me propose a workaround in the it87 driver and explain
the Gigabyte support what I think they should do.

Thanks,
-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-08  9:34 ` Jean Delvare
@ 2005-01-10 22:41   ` Simone Piunno
  2005-01-11  9:26     ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Simone Piunno @ 2005-01-10 22:41 UTC (permalink / raw)
  To: LM Sensors; +Cc: Jonas Munsin, djg, greg, linux-kernel

On Saturday 08 January 2005 10:34, Jean Delvare wrote:

> Could you please provide a dump of your it87 chip before loading the
> it87 driver? "isadump 0x295 0x296" should tell you. I would also be
> interested in a dump right after you load the driver if possible 

Before loading it87:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: 11 00 00 00 37 ff 00 37 ff 07 00 5b 00 2a ff ff
10: ff ff ff 30 00 00 00 00 00 00 00 00 00 00 00 00
20: 5c 9f ce b0 bf b2 83 aa 00 19 29 7f 00 00 00 00
30: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
40: 7f 7f 7f 7f 7f 7f 00 00 2d 00 00 00 00 00 00 00
50: ff 38 7f 7f 7f 00 00 00 90 4f 06 00 50 00 00 00
60: 7f 7f 7f 7f 7f 00 00 00 7f 7f 7f 7f 7f 00 00 00
70: 7f 7f 7f 7f 7f 00 00 00 00 00 00 00 00 00 00 00
80: 11 00 00 00 37 ff 00 37 ff 07 00 5b 00 2a ff ff
90: ff ff ff 30 00 00 00 00 00 00 00 00 00 00 00 00
a0: 5c 9f ce b0 bf b2 83 aa 00 19 29 7f 00 00 00 00
b0: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
c0: 7f 7f 7f 7f 7f 7f 00 00 2d 00 00 00 00 00 00 00
d0: ff 38 7f 7f 7f 00 00 00 90 4f 06 00 50 00 00 00
e0: 7f 7f 7f 7f 7f 00 00 00 7f 7f 7f 7f 7f 00 00 00
f0: 7f 7f 7f 7f 7f 00 00 00 00 00 00 00 00 00 00 00

After loading it87:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: 11 03 60 00 37 ff 00 37 ff 07 00 5b 00 ff ff ff
10: fe fe fe 31 07 7f 00 00 00 00 00 00 00 00 00 00
20: 5c 9f ce b2 be a9 69 ac 00 19 26 7f 00 00 00 00
30: 62 4d a4 94 d9 c4 c3 b1 c5 b2 82 78 80 79 cd a7
40: 28 0f 2d 0f 2d 0f 00 00 2d 00 00 00 00 00 00 00
50: ff 38 7f 7f 7f 00 00 00 90 4f 06 00 50 00 00 00
60: 7f 7f 7f 7f 7f 00 00 00 7f 7f 7f 7f 7f 00 00 00
70: 7f 7f 7f 7f 7f 00 00 00 00 00 00 00 00 00 00 00
80: 11 00 00 00 37 ff 00 37 ff 07 00 5b 00 ff ff ff
90: fe fe fe 31 07 7f 00 00 00 00 00 00 00 00 00 00
a0: 5c 9f ce b2 be a9 69 ac 00 19 26 7f 00 00 00 00
b0: 62 4d a4 94 d9 c4 c3 b1 c5 b2 82 78 80 79 cd a7
c0: 28 0f 2d 0f 2d 0f 00 00 2d 00 00 00 00 00 00 00
d0: ff 38 7f 7f 7f 00 00 00 90 4f 06 00 50 00 00 00
e0: 7f 7f 7f 7f 7f 00 00 00 7f 7f 7f 7f 7f 00 00 00
f0: 7f 7f 7f 7f 7f 00 00 00 00 00 00 00 00 00 00 00

> (but don't burn your CPU for me).

Oh, don't worry.
I've already coded a small fan controller daemon working around the problem 
and driving the fan to run at the minimum speed sufficient to keep the CPU 
cool enough.  Anyone interested can look here:
  http://svn.ferrara.linux.it/view/just4fan
or check it out from the subversion repository:
  svn checkout http://svn.ferrara.linux.it/just4fan
In fact, now I run the system with it87 always loaded... it's soooo quiet!  
Now that I'm used to this silence I can't live without it: I can't stand the 
fan screaming anymore!  I think for I won't move away from -mm until this 
single feature makes it into vanilla :)

> Do you know what kind of it87 chip you do have? There are three of them,
> IT8705F, IT8712F and a SIS950 clone (mostly similar to the IT8705F).

I'm sorry I don't know.  How I could check?

Thanks again
/Simone

-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-10 22:41   ` Simone Piunno
@ 2005-01-11  9:26     ` Jean Delvare
  2005-01-11 20:24       ` Jonas Munsin
                         ` (2 more replies)
  0 siblings, 3 replies; 33+ messages in thread
From: Jean Delvare @ 2005-01-11  9:26 UTC (permalink / raw)
  To: pioppo, sensors; +Cc: Jonas Munsin, djg, Greg KH, LKML


On 2005-01-10, Simone Piunno wrote:

> Before loading it87:
>     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
> 00: 11 00 00 00 37 ff 00 37 ff 07 00 5b 00 2a ff ff
> 10: ff ff ff 30 00 00 00 00 00 00 00 00 00 00 00 00
> (...)

The relevant registers are 0x13-0x17, and they are just what I expected.

The IT87xxF chips have three fan control modes: on/off, manual PWM
control and automatic (temperature-based) PWM control, the default being
on/off, all fans off. When switching to PWM mode, the default is manual
with 0% duty cycle (i.e. all fans off again).

What you have here is this default configuration, i.e. all fans are
supposedly off. Of course it isn't the case, I assume that your fans
are running at full speed when you turn your computer on. So how is this
possible? The IT87xxF chip have a fan polarity bit which defaults to
"Active low". Providing that your fans are meant to be driven active
high (and I'd guess all fans work that way without additional
electronics), they are on when the IT87xxF chip wants to set them off,
and off when the chip wants them on. This is why the fans apparently
work OK.

While it's OK at boot time and as long as we don't want to use PWM (the
fans are on even if the chip pretends they shouldn't be), the illusion
breaks when we attempt to control the fan speed through the it87 driver:

> After loading it87:
>
>     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>00: 11 03 60 00 37 ff 00 37 ff 07 00 5b 00 ff ff ff
>10: fe fe fe 31 07 7f 00 00 00 00 00 00 00 00 00 00

Here, configuration changed. Fans in on/off mode will now be on. While it
makes full sense from the driver's point of view, if breaks the fragile
equilibrium state your board was in.

Additionally, the first fan control output was turned to manual PWM
control mode, full speed. The driver supposedly doesn't do that, I
guess you did it yourself through the sysfs interface?

This configuration supposedly sets all fans to full speed, but in your
"inverted" hardware setup, this means all fans off, unfortunately, as
you noticed in the first place.

I would like to insist on the fact that the ones to blame here are:
1* ITE for their poor chip defauls.
2* Motherboard manufaturers for their poor BIOSes.
And in no way Jonas, whose code was correct, just not broken-config-proof.

> I've already coded a small fan controller daemon working around the
> problem and driving the fan to run at the minimum speed sufficient to
> keep the CPU cool enough.  Anyone interested can look here:
>   http://svn.ferrara.linux.it/view/just4fan
> or check it out from the subversion repository:
>   svn checkout http://svn.ferrara.linux.it/just4fan

Well, the lm_sensors project has tools to do that already. Look in
prog/pwm, there is a PWM configuration detection script (pwmconfig) and
two fan control scripts (original one in shell and a reimplementation in
perl). It might be more efficient to start from these and possibly
improve them if needed (and contribute back!) than writing something
completely new. Do as you prefer though :)

Although note that the ITxxF has an automatic PWM control mode as
explained above, so it probably can do in hardware what your software
daemon does. We have plans to add support for this to the it87 driver
soon (actually I think Jonas is already working on the code) but we
obviously cannot do that before manual mode is OK, which it isn't for
now.

> In fact, now I run the system with it87 always loaded... it's soooo
> quiet! Now that I'm used to this silence I can't live without it:
> I can't stand the fan screaming anymore!  I think for I won't move away
> from -mm until this single feature makes it into vanilla :)

Mind you, there is a reason why Jonas implemented this ;)

> > Do you know what kind of it87 chip you do have? There are three of them,
> > IT8705F, IT8712F and a SIS950 clone (mostly similar to the IT8705F).
>
> I'm sorry I don't know.  How I could check?

See /sys/bus/i2c/devices/0-0290/name. If it says it8712 it's an IT8712F,
if it says it87 it is a less featured IT8705F or clone. After looking at
the datasheets, it doesn't matter much anymore though, as both chips
have the same default values and have to be configured in the same way.

OK, so now we want to reintroduce manual PWM in the it87 driver, in a way
that will not cause fans to stop unexpectedly. Here is my proposed plan:

1* Jonas, please send a modified version of your original patch to Greg.
The only difference would be that you wouldn't force on/off mode to be
on at driver load time. Instead, disabling PWM for one fan control
output (echo 0 > pwmN_enable) would both set on/off mode to on for that
output (new) and turn that output to on/off mode (same as before).

One might argue that it doesn't solve the problem but merely moves it.
This is true, but this at least ensures that loading the driver will
*not* change any fan speed. I think it is an important rule for all
hardware monitoring chips to respect.

One might also argue that this adds some overhead (we end up writing
several times to the same register, possibly for nothing, at use time
instead of just once at init time) but frankly it doesn't matter much.
One doesn't disable PWM that often.

Of course, at this point, trying to play with PWM on a system such as
Simone's one will still break, but at least not at driver load time.

2* I would then add a check to the it87 driver, which completely disables
the fan speed control interface if the initial configuration looks weird
(all fans supposedly stopped and polarity set to "active low"). This
should protect users of the driver who have a faulty BIOS.

When a bogus configuration is detected, we would of course complain in
the logs and invite the user to complain to his/her motherboard maker
too.

At this point, Simone will complain that he likes the PWM feature and
wants it back ;)

3* Last, we would either add a module parameter allowing chip
reprogramming with active high polarity, or write a script which does
the same using i2cset or isaset. Not sure what is best. I don't much
like adding brokeness-workaround init code in the kernel, but OTOH an
external script might be harder to integrate into distributions etc...

At this point, Simone will have a prefectly working chip with manual PWM
and should be happy :)

And then Jonas will be able to go on with the automatic speed control.

Comments on the plan anyone?

Thanks,
--
Jean Delvare

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-11  9:26     ` Jean Delvare
@ 2005-01-11 20:24       ` Jonas Munsin
  2005-01-11 20:56         ` Jean Delvare
  2005-01-11 22:41         ` Greg KH
  2005-01-11 21:04       ` Simone Piunno
  2005-01-12 22:27       ` Jonas Munsin
  2 siblings, 2 replies; 33+ messages in thread
From: Jonas Munsin @ 2005-01-11 20:24 UTC (permalink / raw)
  To: Jean Delvare, Greg KH; +Cc: pioppo, sensors, Jonas Munsin, djg, LKML

On Tue, Jan 11, 2005 at 10:26:22AM +0100, Jean Delvare wrote:
> 1* Jonas, please send a modified version of your original patch to Greg.
> The only difference would be that you wouldn't force on/off mode to be
> on at driver load time. Instead, disabling PWM for one fan control
> output (echo 0 > pwmN_enable) would both set on/off mode to on for that
> output (new) and turn that output to on/off mode (same as before).

Ok, thanks for doing the thinking ;), here is the modified patch
(it87.c_2.6.10-jm3-corrected_manual_pwm_20050111.diff). In addition to
the above change, it also refreshes fan_main_ctrl in the update routine,
as suggested by Jean on IRC.

 - adds manual PWM
 - removes buggy "reset" module parameter
 - fixes some whitespaces

Signed-off-by: Jonas Munsin <jmunsin@iki.fi>

--- linux-2.6.10/drivers/i2c/chips/it87.c	2005-01-11 21:48:16.000000000 +0200
+++ linux-2.6.10/drivers/i2c/chips/it87.c_2.6.10-jm2-corrected_manual_pwm_20050111	2005-01-11 21:24:55.000000000 +0200
@@ -96,9 +96,6 @@ superio_exit(void)
 /* Update battery voltage after every reading if true */
 static int update_vbat;
 
-/* Reset the registers on init if true */
-static int reset;
-
 /* Chip Type */
 
 static u16 chip_type;
@@ -128,6 +125,8 @@ static u16 chip_type;
 #define IT87_REG_FAN(nr)       (0x0d + (nr))
 #define IT87_REG_FAN_MIN(nr)   (0x10 + (nr))
 #define IT87_REG_FAN_MAIN_CTRL 0x13
+#define IT87_REG_FAN_CTL       0x14
+#define IT87_REG_PWM(nr)       (0x15 + (nr))
 
 #define IT87_REG_VIN(nr)       (0x20 + (nr))
 #define IT87_REG_TEMP(nr)      (0x29 + (nr))
@@ -164,6 +163,9 @@ static inline u8 FAN_TO_REG(long rpm, in
 
 #define ALARMS_FROM_REG(val) (val)
 
+#define PWM_TO_REG(val)   ((val) >> 1)
+#define PWM_FROM_REG(val) (((val)&0x7f) << 1)
+
 static int DIV_TO_REG(int val)
 {
 	int answer = 0;
@@ -200,6 +202,8 @@ struct it87_data {
 	u8 vid;			/* Register encoding, combined */
 	int vrm;
 	u32 alarms;		/* Register encoding, combined */
+	u8 fan_main_ctrl;	/* Register value */
+	u8 manual_pwm_ctl[3];   /* manual PWM value set by user */
 };
 
 
@@ -440,18 +444,28 @@ static ssize_t show_fan(struct device *d
 {
 	struct it87_data *data = it87_update_device(dev);
 	return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr], 
-				DIV_FROM_REG(data->fan_div[nr])) );
+				DIV_FROM_REG(data->fan_div[nr])));
 }
 static ssize_t show_fan_min(struct device *dev, char *buf, int nr)
 {
 	struct it87_data *data = it87_update_device(dev);
 	return sprintf(buf,"%d\n",
-		FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])) );
+		FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])));
 }
 static ssize_t show_fan_div(struct device *dev, char *buf, int nr)
 {
 	struct it87_data *data = it87_update_device(dev);
-	return sprintf(buf,"%d\n", DIV_FROM_REG(data->fan_div[nr]) );
+	return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr]));
+}
+static ssize_t show_pwm_enable(struct device *dev, char *buf, int nr)
+{
+	struct it87_data *data = it87_update_device(dev);
+	return sprintf(buf,"%d\n", (data->fan_main_ctrl & (1 << nr)) ? 1 : 0);
+}
+static ssize_t show_pwm(struct device *dev, char *buf, int nr)
+{
+	struct it87_data *data = it87_update_device(dev);
+	return sprintf(buf,"%d\n", data->manual_pwm_ctl[nr]);
 }
 static ssize_t set_fan_min(struct device *dev, const char *buf, 
 		size_t count, int nr)
@@ -499,6 +513,48 @@ static ssize_t set_fan_div(struct device
 	}
 	return count;
 }
+static ssize_t set_pwm_enable(struct device *dev, const char *buf,
+		size_t count, int nr)
+{
+	struct i2c_client *client = to_i2c_client(dev);
+	struct it87_data *data = i2c_get_clientdata(client);
+	int val = simple_strtol(buf, NULL, 10);
+
+	if (val == 0) {
+		int tmp;
+		/* make sure the fan is on when in on/off mode */
+		tmp = it87_read_value(client, IT87_REG_FAN_CTL);
+		it87_write_value(client, IT87_REG_FAN_CTL, tmp | (1 << nr));
+		/* set on/off mode */
+		data->fan_main_ctrl &= ~(1 << nr);
+		it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
+	} else if (val == 1) {
+		/* set SmartGuardian mode */
+		data->fan_main_ctrl |= (1 << nr);
+		it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
+		/* set saved pwm value, clear FAN_CTLX PWM mode bit */
+		it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
+	} else
+		return -EINVAL;
+
+	return count;
+}
+static ssize_t set_pwm(struct device *dev, const char *buf,
+		size_t count, int nr)
+{
+	struct i2c_client *client = to_i2c_client(dev);
+	struct it87_data *data = i2c_get_clientdata(client);
+	int val = simple_strtol(buf, NULL, 10);
+
+	if (val < 0 || val > 255)
+		return -EINVAL;
+
+	data->manual_pwm_ctl[nr] = val;
+	if (data->fan_main_ctrl & (1 << nr))
+		it87_write_value(client, IT87_REG_PWM(nr), PWM_TO_REG(data->manual_pwm_ctl[nr]));
+
+	return count;
+}
 
 #define show_fan_offset(offset)						\
 static ssize_t show_fan_##offset (struct device *dev, char *buf)	\
@@ -533,6 +589,36 @@ show_fan_offset(1);
 show_fan_offset(2);
 show_fan_offset(3);
 
+#define show_pwm_offset(offset)						\
+static ssize_t show_pwm##offset##_enable (struct device *dev,		\
+	char *buf)							\
+{									\
+	return show_pwm_enable(dev, buf, offset - 1);			\
+}									\
+static ssize_t show_pwm##offset (struct device *dev, char *buf)		\
+{									\
+	return show_pwm(dev, buf, offset - 1);				\
+}									\
+static ssize_t set_pwm##offset##_enable (struct device *dev,		\
+		const char *buf, size_t count)				\
+{									\
+	return set_pwm_enable(dev, buf, count, offset - 1);		\
+}									\
+static ssize_t set_pwm##offset (struct device *dev,			\
+		const char *buf, size_t count)				\
+{									\
+	return set_pwm(dev, buf, count, offset - 1);			\
+}									\
+static DEVICE_ATTR(pwm##offset##_enable, S_IRUGO | S_IWUSR,		\
+		show_pwm##offset##_enable,				\
+		set_pwm##offset##_enable);				\
+static DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR,			\
+		show_pwm##offset , set_pwm##offset );
+
+show_pwm_offset(1);
+show_pwm_offset(2);
+show_pwm_offset(3);
+
 /* Alarms */
 static ssize_t show_alarms(struct device *dev, char *buf)
 {
@@ -774,6 +860,12 @@ int it87_detect(struct i2c_adapter *adap
 	device_create_file(&new_client->dev, &dev_attr_fan2_div);
 	device_create_file(&new_client->dev, &dev_attr_fan3_div);
 	device_create_file(&new_client->dev, &dev_attr_alarms);
+	device_create_file(&new_client->dev, &dev_attr_pwm1_enable);
+	device_create_file(&new_client->dev, &dev_attr_pwm2_enable);
+	device_create_file(&new_client->dev, &dev_attr_pwm3_enable);
+	device_create_file(&new_client->dev, &dev_attr_pwm1);
+	device_create_file(&new_client->dev, &dev_attr_pwm2);
+	device_create_file(&new_client->dev, &dev_attr_pwm3);
 
 	if (data->type == it8712) {
 		device_create_file_vrm(new_client);
@@ -851,12 +943,17 @@ static int it87_write_value(struct i2c_c
 /* Called when we have found a new IT87. */
 static void it87_init_client(struct i2c_client *client, struct it87_data *data)
 {
-	int tmp;
+	int tmp, i;
 
-	if (reset) {
-		/* Reset all except Watchdog values and last conversion values
-		   This sets fan-divs to 2, among others */
-		it87_write_value(client, IT87_REG_CONFIG, 0x80);
+	/* initialize to sane defaults:
+	 * - if the chip is in manual pwm mode, this will be overwritten with
+	 *   the actual settings on the chip (so in this case, initialization
+	 *   is not needed)
+	 * - if in automatic or on/off mode, we could switch to manual mode,
+	 *   read the registers and set manual_pwm_ctl accordingly, but currently
+	 *   this is not implemented, so we initialize to something sane */
+	for (i = 0; i < 3; i++) {
+		data->manual_pwm_ctl[i] = 0xff;
 	}
 
 	/* Check if temperature channnels are reset manually or by some reason */
@@ -876,13 +973,31 @@ static void it87_init_client(struct i2c_
 	}
 
 	/* Check if tachometers are reset manually or by some reason */
-	tmp = it87_read_value(client, IT87_REG_FAN_MAIN_CTRL);
-	if ((tmp & 0x70) == 0) {
+	data->fan_main_ctrl = it87_read_value(client, IT87_REG_FAN_MAIN_CTRL);
+	if ((data->fan_main_ctrl & 0x70) == 0) {
 		/* Enable all fan tachometers */
-		tmp = (tmp & 0x8f) | 0x70;
-		it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, tmp);
+		data->fan_main_ctrl |= 0x70;
+		it87_write_value(client, IT87_REG_FAN_MAIN_CTRL, data->fan_main_ctrl);
 	}
 
+	/* Set current fan mode registers and the default settings for the
+	 * other mode registers */
+	for (i = 0; i < 3; i++) {
+		if (data->fan_main_ctrl & (1 << i)) {
+			/* pwm mode */
+			tmp = it87_read_value(client, IT87_REG_PWM(i));
+			if (tmp & 0x80) {
+				/* automatic pwm - not yet implemented, but
+				 * leave the settings made by the BIOS alone
+				 * until a change is requested via the sysfs
+				 * interface */
+			} else {
+				/* manual pwm */
+				data->manual_pwm_ctl[i] = PWM_FROM_REG(tmp);
+			}
+		}
+ 	}
+
 	/* Start monitoring */
 	it87_write_value(client, IT87_REG_CONFIG,
 			 (it87_read_value(client, IT87_REG_CONFIG) & 0x36)
@@ -948,6 +1063,7 @@ static struct it87_data *it87_update_dev
 			it87_read_value(client, IT87_REG_ALARM1) |
 			(it87_read_value(client, IT87_REG_ALARM2) << 8) |
 			(it87_read_value(client, IT87_REG_ALARM3) << 16);
+		data->fan_main_ctrl = it87_read_value(client, IT87_REG_FAN_MAIN_CTRL);
 
 		data->sensor = it87_read_value(client, IT87_REG_TEMP_ENABLE);
 		/* The 8705 does not have VID capability */
@@ -984,8 +1100,6 @@ MODULE_AUTHOR("Chris Gauthron <chrisg@0-
 MODULE_DESCRIPTION("IT8705F, IT8712F, Sis950 driver");
 module_param(update_vbat, bool, 0);
 MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value");
-module_param(reset, bool, 0);
-MODULE_PARM_DESC(reset, "Reset the chip's registers, default no");
 MODULE_LICENSE("GPL");
 
 module_init(sm_it87_init);

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-11 20:24       ` Jonas Munsin
@ 2005-01-11 20:56         ` Jean Delvare
  2005-01-11 22:41         ` Greg KH
  1 sibling, 0 replies; 33+ messages in thread
From: Jean Delvare @ 2005-01-11 20:56 UTC (permalink / raw)
  To: Jonas Munsin, Simone Piunno; +Cc: sensors, djg, LKML, Greg KH

> Ok, thanks for doing the thinking ;), here is the modified patch
> (it87.c_2.6.10-jm3-corrected_manual_pwm_20050111.diff). In addition to
> the above change, it also refreshes fan_main_ctrl in the update
> routine, as suggested by Jean on IRC.
> 
>  - adds manual PWM
>  - removes buggy "reset" module parameter
>  - fixes some whitespaces

Tested, works as intended for me.

Simone, you might revert
  http://khali.linux-fr.org/devel/i2c/linux-2.6/linux-2.6.10-rc3-i2c-it87-manual-pwm.diff
and apply this new patch instead. This won't solve the polarity issue
but at least the fans won't stop when you load the it87 driver.

We can now move to the second part of the plan. Stay tuned :)

-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-11  9:26     ` Jean Delvare
  2005-01-11 20:24       ` Jonas Munsin
@ 2005-01-11 21:04       ` Simone Piunno
  2005-01-12  9:44         ` Jean Delvare
  2005-01-12 22:27       ` Jonas Munsin
  2 siblings, 1 reply; 33+ messages in thread
From: Simone Piunno @ 2005-01-11 21:04 UTC (permalink / raw)
  To: Jean Delvare; +Cc: sensors, Jonas Munsin, djg, Greg KH, LKML

On Tuesday 11 January 2005 10:26, Jean Delvare wrote:

> What you have here is this default configuration, i.e. all fans are
> supposedly off. Of course it isn't the case, I assume that your fans
> are running at full speed when you turn your computer on. 

Yes, thank you for your analisys.

> Additionally, the first fan control output was turned to manual PWM
> control mode, full speed. The driver supposedly doesn't do that, I
> guess you did it yourself through the sysfs interface?

Of course, sorry.

> > > Do you know what kind of it87 chip you do have? There are three of
> > > them, IT8705F, IT8712F and a SIS950 clone (mostly similar to the
> > > IT8705F).
> See /sys/bus/i2c/devices/0-0290/name. If it says it8712 it's an IT8712F,
> if it says it87 it is a less featured IT8705F or clone. After looking at

pioppo@roentgen ~ $ cat /sys/devices/platform/i2c-0/0-0290/name
it87

> 2* I would then add a check to the it87 driver, which completely disables
> the fan speed control interface if the initial configuration looks weird
> (all fans supposedly stopped and polarity set to "active low"). This
> should protect users of the driver who have a faulty BIOS.

If the driver can perform a similar guess, couldn't it also activate a reverse 
polarity mode as well?  I think all systems boot with with full-speed fan, so 
any value you found at loading time should be the full-speed one, shouln't 
it?

BTW:
  I'm writing a report to giga-byte.

Cheers,
  Simone
-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-11 20:24       ` Jonas Munsin
  2005-01-11 20:56         ` Jean Delvare
@ 2005-01-11 22:41         ` Greg KH
  1 sibling, 0 replies; 33+ messages in thread
From: Greg KH @ 2005-01-11 22:41 UTC (permalink / raw)
  To: Jonas Munsin, Jean Delvare, pioppo, sensors, djg, LKML

On Tue, Jan 11, 2005 at 10:24:38PM +0200, Jonas Munsin wrote:
> On Tue, Jan 11, 2005 at 10:26:22AM +0100, Jean Delvare wrote:
> > 1* Jonas, please send a modified version of your original patch to Greg.
> > The only difference would be that you wouldn't force on/off mode to be
> > on at driver load time. Instead, disabling PWM for one fan control
> > output (echo 0 > pwmN_enable) would both set on/off mode to on for that
> > output (new) and turn that output to on/off mode (same as before).
> 
> Ok, thanks for doing the thinking ;), here is the modified patch
> (it87.c_2.6.10-jm3-corrected_manual_pwm_20050111.diff). In addition to
> the above change, it also refreshes fan_main_ctrl in the update routine,
> as suggested by Jean on IRC.
> 
>  - adds manual PWM
>  - removes buggy "reset" module parameter
>  - fixes some whitespaces

Applied, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-11 21:04       ` Simone Piunno
@ 2005-01-12  9:44         ` Jean Delvare
  0 siblings, 0 replies; 33+ messages in thread
From: Jean Delvare @ 2005-01-12  9:44 UTC (permalink / raw)
  To: pioppo; +Cc: LM Sensors, Jonas Munsin, djg, Greg KH, LKML


Hi Simone,

> > 2* I would then add a check to the it87 driver, which completely disables
> > the fan speed control interface if the initial configuration looks weird
> > (all fans supposedly stopped and polarity set to "active low"). This
> > should protect users of the driver who have a faulty BIOS.
>
> If the driver can perform a similar guess, couldn't it also activate a
> reverse polarity mode as well?  I think all systems boot with with
> full-speed fan, so any value you found at loading time should be the
> full-speed one, shouln't it?

I'm thinking about this. However, there are a couple things to keep in
mind:
1* The driver is not necessarily loaded at boot time. For example, one
might unload and reload the module. In this case, fans might have been
configured for less-then-full speed, and we have to handle this case
properly.
2* This is just a guess. If we are wrong, the user is in trouble. You
know what I mean ;) For this reason, it sounds better if the user has to
activate a module parameter by his/herself, because it means he/she is
aware that bad things might happen.
3* This is really a workaround for buggy BIOS. It would be better is
BIOSes were fixed instead. It is time that manufacturer improve the
quality of the BIOSes for the hardware monitoring parts. I have seen
brokenesses ain too many BIOSes to keep count of them. Silently working
around the bugs in the Linux driver is not going to help that.

That said, if no problems are reported after some time, we might consider
to apply the workaround by default. One thing at a time though.

> BTW:
>  I'm writing a report to giga-byte.

OK. Let us know how it goes. Feel free to direct them to me if you think
it can be of any help.

--
Jean Delvare

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-11  9:26     ` Jean Delvare
  2005-01-11 20:24       ` Jonas Munsin
  2005-01-11 21:04       ` Simone Piunno
@ 2005-01-12 22:27       ` Jonas Munsin
  2005-01-13 23:29         ` Greg KH
  2 siblings, 1 reply; 33+ messages in thread
From: Jonas Munsin @ 2005-01-12 22:27 UTC (permalink / raw)
  To: Greg KH, Jean Delvare; +Cc: pioppo, sensors, Jonas Munsin, djg, LKML

> 2* I would then add a check to the it87 driver, which completely disables
> the fan speed control interface if the initial configuration looks weird
> (all fans supposedly stopped and polarity set to "active low"). This
> should protect users of the driver who have a faulty BIOS.
> 
> When a bogus configuration is detected, we would of course complain in
> the logs and invite the user to complain to his/her motherboard maker
> too.

Here is it87.c_2.6.10-jm4-detect_broken_bios_20050112.diff implementing
this. It goes on top of the previous patch.

- detects broken bioses, disables the pwm for them and prints a message
- fixes an unrelated minor bug in set_fan_div()

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Jonas Munsin <jmunsin@iki.fi>

--- linux-2.6.10/drivers/i2c/chips/it87.c	2005-01-12 23:58:51.000000000 +0200
+++ linux-2.6.10/drivers/i2c/chips/it87.c_2.6.10-jm4-detect_broken_bios_20050112	2005-01-12 23:58:34.000000000 +0200
@@ -500,7 +500,7 @@ static ssize_t set_fan_div(struct device
 		else
 			data->fan_div[nr] = 3;
 	}
-	val = old & 0x100;
+	val = old & 0x80;
 	val |= (data->fan_div[0] & 0x07);
 	val |= (data->fan_div[1] & 0x07) << 3;
 	if (data->fan_div[2] == 3)
@@ -703,6 +703,8 @@ int it87_detect(struct i2c_adapter *adap
 	int err = 0;
 	const char *name = "";
 	int is_isa = i2c_is_isa_adapter(adapter);
+	int enable_pwm_interface;
+	int tmp;
 
 	if (!is_isa && 
 	    !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
@@ -812,6 +814,17 @@ int it87_detect(struct i2c_adapter *adap
 	/* Initialize the IT87 chip */
 	it87_init_client(new_client, data);
 
+	/* Some BIOSes fail to correctly configure the IT87 fans. All fans off
+	 * and polarity set to active low is sign that this is the case so we
+	 * disable pwm control to protect the user. */
+	enable_pwm_interface = 1;
+	tmp = it87_read_value(new_client, IT87_REG_FAN_CTL);
+	if ((tmp & 0x87) == 0) {
+		enable_pwm_interface = 0;
+		dev_info(&new_client->dev,
+			"detected broken BIOS defaults, disabling pwm interface");
+	}
+
 	/* Register sysfs hooks */
 	device_create_file(&new_client->dev, &dev_attr_in0_input);
 	device_create_file(&new_client->dev, &dev_attr_in1_input);
@@ -860,12 +873,14 @@ int it87_detect(struct i2c_adapter *adap
 	device_create_file(&new_client->dev, &dev_attr_fan2_div);
 	device_create_file(&new_client->dev, &dev_attr_fan3_div);
 	device_create_file(&new_client->dev, &dev_attr_alarms);
-	device_create_file(&new_client->dev, &dev_attr_pwm1_enable);
-	device_create_file(&new_client->dev, &dev_attr_pwm2_enable);
-	device_create_file(&new_client->dev, &dev_attr_pwm3_enable);
-	device_create_file(&new_client->dev, &dev_attr_pwm1);
-	device_create_file(&new_client->dev, &dev_attr_pwm2);
-	device_create_file(&new_client->dev, &dev_attr_pwm3);
+	if (enable_pwm_interface) {
+		device_create_file(&new_client->dev, &dev_attr_pwm1_enable);
+		device_create_file(&new_client->dev, &dev_attr_pwm2_enable);
+		device_create_file(&new_client->dev, &dev_attr_pwm3_enable);
+		device_create_file(&new_client->dev, &dev_attr_pwm1);
+		device_create_file(&new_client->dev, &dev_attr_pwm2);
+		device_create_file(&new_client->dev, &dev_attr_pwm3);
+	}
 
 	if (data->type == it8712) {
 		device_create_file_vrm(new_client);

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-12 22:27       ` Jonas Munsin
@ 2005-01-13 23:29         ` Greg KH
  2005-01-14 14:40           ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Greg KH @ 2005-01-13 23:29 UTC (permalink / raw)
  To: Jonas Munsin, Jean Delvare, pioppo, sensors, djg, LKML

On Thu, Jan 13, 2005 at 12:27:35AM +0200, Jonas Munsin wrote:
> > 2* I would then add a check to the it87 driver, which completely disables
> > the fan speed control interface if the initial configuration looks weird
> > (all fans supposedly stopped and polarity set to "active low"). This
> > should protect users of the driver who have a faulty BIOS.
> > 
> > When a bogus configuration is detected, we would of course complain in
> > the logs and invite the user to complain to his/her motherboard maker
> > too.
> 
> Here is it87.c_2.6.10-jm4-detect_broken_bios_20050112.diff implementing
> this. It goes on top of the previous patch.
> 
> - detects broken bioses, disables the pwm for them and prints a message
> - fixes an unrelated minor bug in set_fan_div()
> 
> Signed-off-by: Jean Delvare <khali@linux-fr.org>
> Signed-off-by: Jonas Munsin <jmunsin@iki.fi>

Applied, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-13 23:29         ` Greg KH
@ 2005-01-14 14:40           ` Jean Delvare
  2005-01-15 15:30             ` [PATCH 2.6] I2C: Allow it87 pwm reconfiguration Jean Delvare
  2005-01-15 15:54             ` 2.6.10-mm2: it87 sensor driver stops CPU fan Simone Piunno
  0 siblings, 2 replies; 33+ messages in thread
From: Jean Delvare @ 2005-01-14 14:40 UTC (permalink / raw)
  To: pioppo; +Cc: Greg KH, Jonas Munsin, djg, LM Sensors, LKML


Simone,

> On Thu, Jan 13, 2005 at 12:27:35AM +0200, Jonas Munsin wrote:
> > Here is it87.c_2.6.10-jm4-detect_broken_bios_20050112.diff implementing
> > this. It goes on top of the previous patch.
> >
> > - detects broken bioses, disables the pwm for them and prints a message
> > - fixes an unrelated minor bug in set_fan_div()
> >
> > Signed-off-by: Jean Delvare <khali@linux-fr.org>
> > Signed-off-by: Jonas Munsin <jmunsin@iki.fi>
>
> Applied, thanks.

Kernel 2.6.11-rc1-mm1 is just out, which does contain the latest updates
to the it87 driver. I would like you to test them. What you should see:

1* When loading the it87 driver, the fans should not change speeds.

2* In the logs, you should see an information line with the chip type,
address and revision.

3* Still in the logs, you should see a warning about your BIOS being
broken and PWM being disabled as a consequence.

4* PWM interface should NOT be available in sysfs.

As soon as you will have confirmed that everything worked as expected,
Jonas and I will provide a patch adding a pwm polarity reconfiguration
module parameter for you to test. This should give you access to the PWM
features of your it87 chip again, but in a safe way for a change ;)

Thanks,
--
Jean Delvare

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [PATCH 2.6] I2C: Allow it87 pwm reconfiguration
  2005-01-14 14:40           ` Jean Delvare
@ 2005-01-15 15:30             ` Jean Delvare
  2005-01-15 17:18               ` Simone Piunno
  2005-01-19 23:23               ` Greg KH
  2005-01-15 15:54             ` 2.6.10-mm2: it87 sensor driver stops CPU fan Simone Piunno
  1 sibling, 2 replies; 33+ messages in thread
From: Jean Delvare @ 2005-01-15 15:30 UTC (permalink / raw)
  To: Simone Piunno, Greg KH; +Cc: LM Sensors, Jonas Munsin, djg, LKML

Quoting myself:

> As soon as you will have confirmed that everything worked as expected,
> Jonas and I will provide a patch adding a pwm polarity reconfiguration
> module parameter for you to test. This should give you access to the
> PWM features of your it87 chip again, but in a safe way for a change
> ;)

Here comes this patch. The new "fix_pwm_polarity" module parameter
allows one to force the it87 chip reconfiguration. This is only
supported in the case the original PWM configuration is suspected to be
bogus, and only if we think that reconfiguring the chip is safe.

I wish to thank Rudolf Marek and Jonas Munsin again for their testing
and review of my code.

Greg, please apply, thanks.

Simone, feel free to test this (on top of 2.6.11-rc1-mm1 for example).


Signed-off-by: Jean Delvare <khali@linux-fr.org>

--- linux-2.6.11-rc1/drivers/i2c/chips/it87.c.orig	2005-01-14 18:37:07.000000000 +0100
+++ linux-2.6.11-rc1/drivers/i2c/chips/it87.c	2005-01-15 15:46:04.000000000 +0100
@@ -106,6 +106,9 @@
 /* Update battery voltage after every reading if true */
 static int update_vbat;
 
+/* Not all BIOSes properly configure the PWM registers */
+static int fix_pwm_polarity;
+
 /* Chip Type */
 
 static u16 chip_type;
@@ -226,6 +229,7 @@
 static int it87_write_value(struct i2c_client *client, u8 register,
 			u8 value);
 static struct it87_data *it87_update_device(struct device *dev);
+static int it87_check_pwm(struct i2c_client *client);
 static void it87_init_client(struct i2c_client *client, struct it87_data *data);
 
 
@@ -720,7 +724,6 @@
 	const char *name = "";
 	int is_isa = i2c_is_isa_adapter(adapter);
 	int enable_pwm_interface;
-	int tmp;
 
 	if (!is_isa && 
 	    !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
@@ -824,20 +827,12 @@
 	if ((err = i2c_attach_client(new_client)))
 		goto ERROR2;
 
+	/* Check PWM configuration */
+	enable_pwm_interface = it87_check_pwm(new_client);
+
 	/* Initialize the IT87 chip */
 	it87_init_client(new_client, data);
 
-	/* Some BIOSes fail to correctly configure the IT87 fans. All fans off
-	 * and polarity set to active low is sign that this is the case so we
-	 * disable pwm control to protect the user. */
-	enable_pwm_interface = 1;
-	tmp = it87_read_value(new_client, IT87_REG_FAN_CTL);
-	if ((tmp & 0x87) == 0) {
-		enable_pwm_interface = 0;
-		dev_info(&new_client->dev,
-			"detected broken BIOS defaults, disabling pwm interface");
-	}
-
 	/* Register sysfs hooks */
 	device_create_file(&new_client->dev, &dev_attr_in0_input);
 	device_create_file(&new_client->dev, &dev_attr_in1_input);
@@ -968,6 +963,56 @@
 		return i2c_smbus_write_byte_data(client, reg, value);
 }
 
+/* Return 1 if and only if the PWM interface is safe to use */
+static int it87_check_pwm(struct i2c_client *client)
+{
+	/* Some BIOSes fail to correctly configure the IT87 fans. All fans off
+	 * and polarity set to active low is sign that this is the case so we
+	 * disable pwm control to protect the user. */
+	int tmp = it87_read_value(client, IT87_REG_FAN_CTL);
+	if ((tmp & 0x87) == 0) {
+		if (fix_pwm_polarity) {
+			/* The user asks us to attempt a chip reconfiguration.
+			 * This means switching to active high polarity and
+			 * inverting all fan speed values. */
+			int i;
+			u8 pwm[3];
+
+			for (i = 0; i < 3; i++)
+				pwm[i] = it87_read_value(client,
+							 IT87_REG_PWM(i));
+
+			/* If any fan is in automatic pwm mode, the polarity
+			 * might be correct, as suspicious as it seems, so we
+			 * better don't change anything (but still disable the
+			 * PWM interface). */
+			if (!((pwm[0] | pwm[1] | pwm[2]) & 0x80)) {
+				dev_info(&client->dev, "Reconfiguring PWM to "
+					 "active high polarity\n");
+				it87_write_value(client, IT87_REG_FAN_CTL,
+						 tmp | 0x87);
+				for (i = 0; i < 3; i++)
+					it87_write_value(client,
+							 IT87_REG_PWM(i),
+							 0x7f & ~pwm[i]);
+				return 1;
+			}
+
+			dev_info(&client->dev, "PWM configuration is "
+				 "too broken to be fixed\n");
+		}
+
+		dev_info(&client->dev, "Detected broken BIOS "
+			 "defaults, disabling PWM interface\n");
+		return 0;
+	} else if (fix_pwm_polarity) {
+		dev_info(&client->dev, "PWM configuration looks "
+			 "sane, won't touch\n");
+	}
+
+	return 1;
+}
+
 /* Called when we have found a new IT87. */
 static void it87_init_client(struct i2c_client *client, struct it87_data *data)
 {
@@ -1128,6 +1173,8 @@
 MODULE_DESCRIPTION("IT8705F, IT8712F, Sis950 driver");
 module_param(update_vbat, bool, 0);
 MODULE_PARM_DESC(update_vbat, "Update vbat if set else return powerup value");
+module_param(fix_pwm_polarity, bool, 0);
+MODULE_PARM_DESC(fix_pwm_polarity, "Force PWM polarity to active high (DANGEROUS)");
 MODULE_LICENSE("GPL");
 
 module_init(sm_it87_init);

-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-14 14:40           ` Jean Delvare
  2005-01-15 15:30             ` [PATCH 2.6] I2C: Allow it87 pwm reconfiguration Jean Delvare
@ 2005-01-15 15:54             ` Simone Piunno
  2005-01-15 16:55               ` Jean Delvare
  1 sibling, 1 reply; 33+ messages in thread
From: Simone Piunno @ 2005-01-15 15:54 UTC (permalink / raw)
  To: Jean Delvare; +Cc: Greg KH, Jonas Munsin, djg, LM Sensors, LKML

On Friday 14 January 2005 15:40, Jean Delvare wrote:

> Kernel 2.6.11-rc1-mm1 is just out, which does contain the latest updates
> to the it87 driver. I would like you to test them. What you should see:
> 1* When loading the it87 driver, the fans should not change speeds.

confirmed.

> 2* In the logs, you should see an information line with the chip type,
> address and revision.
> 3* Still in the logs, you should see a warning about your BIOS being
> broken and PWM being disabled as a consequence.

Confirmed, but it looks like there's a missing linefeed in the warning.

pioppo@roentgen ~ $ uname -a
Linux roentgen 2.6.11-rc1-mm1 #1 Sat Jan 15 16:23:34 CET 2005 x86_64 AMD 
Athlon(tm) 64 Processor 3200+ AuthenticAMD GNU/Linux
pioppo@roentgen ~ $ dmesg|grep it87
it87: Found IT8705F chip at 0x290, revision 2
it87 0-0290: detected broken BIOS defaults, disabling pwm interface<6>8139too 
Fast Ethernet driver 0.9.27

> 4* PWM interface should NOT be available in sysfs.

confirmed.

pioppo@roentgen ~ $ ls /sys/devices/platform/i2c-0/0-0290
alarms        fan3_div    in2_input  in5_input  in8_input    temp2_min
detach_state  fan3_input  in2_max    in5_max    name         temp2_type
driver        fan3_min    in2_min    in5_min    power        temp3_input
fan1_div      in0_input   in3_input  in6_input  temp1_input  temp3_max
fan1_input    in0_max     in3_max    in6_max    temp1_max    temp3_min
fan1_min      in0_min     in3_min    in6_min    temp1_min    temp3_type
fan2_div      in1_input   in4_input  in7_input  temp1_type
fan2_input    in1_max     in4_max    in7_max    temp2_input
fan2_min      in1_min     in4_min    in7_min    temp2_max

/Simone

-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-15 15:54             ` 2.6.10-mm2: it87 sensor driver stops CPU fan Simone Piunno
@ 2005-01-15 16:55               ` Jean Delvare
  2005-01-16 22:32                 ` Simone Piunno
  0 siblings, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-15 16:55 UTC (permalink / raw)
  To: Simone Piunno; +Cc: LM Sensors, LKML, Greg KH, Jonas Munsin, djg

Hi Simone,

> > 2* In the logs, you should see an information line with the chip
> > type, address and revision.
> > 3* Still in the logs, you should see a warning about your BIOS being
> > broken and PWM being disabled as a consequence.
> 
> Confirmed, but it looks like there's a missing linefeed in the
> warning.
> 
> pioppo@roentgen ~ $ uname -a
> Linux roentgen 2.6.11-rc1-mm1 #1 Sat Jan 15 16:23:34 CET 2005 x86_64
> AMD  Athlon(tm) 64 Processor 3200+ AuthenticAMD GNU/Linux
> pioppo@roentgen ~ $ dmesg|grep it87
> it87: Found IT8705F chip at 0x290, revision 2
> it87 0-0290: detected broken BIOS defaults, disabling pwm
> interface<6>8139too  Fast Ethernet driver 0.9.27

True. The additional patch I posted earlier today fixes it though. You
can now test this one, which adds the "fix_pwm_polarity" module
parameter which will let you - at last - to use PWM the way it is meant
to be.

Let us know how it goes! :)

-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 2.6] I2C: Allow it87 pwm reconfiguration
  2005-01-15 15:30             ` [PATCH 2.6] I2C: Allow it87 pwm reconfiguration Jean Delvare
@ 2005-01-15 17:18               ` Simone Piunno
  2005-01-19 23:23               ` Greg KH
  1 sibling, 0 replies; 33+ messages in thread
From: Simone Piunno @ 2005-01-15 17:18 UTC (permalink / raw)
  To: LM Sensors, LKML; +Cc: Greg KH, Jonas Munsin, djg

On Saturday 15 January 2005 16:30, Jean Delvare wrote:

> Simone, feel free to test this (on top of 2.6.11-rc1-mm1 for example).

I've been unable to apply your patch cleanly on top of 2.6.11-rc1-mm1, but 
eventually I've managed to apply it manually.

I can confirm it works as expected.

Without parameters I get in dmesg:

  it87: Found IT8705F chip at 0x290, revision 2
  it87 0-0290: Detected broken BIOS defaults, disabling PWM interface

No pwm appears in sysfs and the missing linefeed has been fixed

Adding "options it87 fix_pwm_polarity=1" in modules.conf I get:

  it87: Found IT8705F chip at 0x290, revision 2
  it87 0-0290: Reconfiguring PWM to active high polarity

PWM controllers appear in sysfs, the fan doesn't stop running at load time and 
pwm values are now in normal direction: (0 stops, 255 runs full-speed).

Thanks!

/Simone

-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org


^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-15 16:55               ` Jean Delvare
@ 2005-01-16 22:32                 ` Simone Piunno
  2005-01-17 19:19                   ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Simone Piunno @ 2005-01-16 22:32 UTC (permalink / raw)
  To: LM Sensors, LKML; +Cc: Greg KH, Jonas Munsin, djg


Hi,

While we're at it, the fan speed sensor reports an absurd speed when the fan 
is driven with very low but non-zero pwm values.  For example, driving it 
with pwm=2 I get speeds over 50K rpms, while of course the fan is stopped 
(almost?).  This could be just an hardware sensitivity problem in the sensor 
chip, or a false measure triggered by fan vibration, but maybe you know 
better.

/Simone

-- 
http://thisurlenablesemailtogetthroughoverzealousspamfilters.org

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-16 22:32                 ` Simone Piunno
@ 2005-01-17 19:19                   ` Jean Delvare
  2005-01-17 19:37                     ` 2.6 Series Mem Mgmt Chris Bookholt
  0 siblings, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-17 19:19 UTC (permalink / raw)
  To: Simone Piunno; +Cc: djg, LM Sensors, LKML, Greg KH

Hi Simone,

> While we're at it, the fan speed sensor reports an absurd speed when
> the fan  is driven with very low but non-zero pwm values.  For
> example, driving it  with pwm=2 I get speeds over 50K rpms, while of
> course the fan is stopped  (almost?).  This could be just an hardware
> sensitivity problem in the sensor  chip, or a false measure triggered
> by fan vibration, but maybe you know  better.

This is a frequent problem with PWM. In order to estimate the fan
rotation speed, chips sample a signal that comes from the fan on its
third wire (typically two pulses per revolution). Since the fan is not a
power source by itself, the pulses are powered from the fan header's
+12V pin. When you start using PWM, you affect the +12V pin duty cycle,
and as a result you affect the speed signal duty cycle. The lower the
duty cycle, the harder for the chip to correctly determine the speed.

Newer chips have the capability to correct the effects of PWM at
reasonable duty cycles. It however supposes that it knows which fan
corresponds to which PWM output. Motherboard manufacturers will have to
take this information into account when designing their boards. And at
any rate, very low PWM duty cycles cannot possibly corrected.

It is possible to affect the fan speed vs. PWM curve by changing the
base frequency of the PWM signal. This can help achieve lower fan speeds
with higher PWM duty cycles (and thus better speed readings). Most chips
support frequency adjustment, but our drivers don't, because it wasn't
realized until very recently that this could be of any benefit to the
user.

-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* 2.6 Series Mem Mgmt
  2005-01-17 19:19                   ` Jean Delvare
@ 2005-01-17 19:37                     ` Chris Bookholt
  2005-01-17 19:56                       ` Brian Gerst
  0 siblings, 1 reply; 33+ messages in thread
From: Chris Bookholt @ 2005-01-17 19:37 UTC (permalink / raw)
  To: LKML

I'm hoping someone can help explain part of the layout of a process' 
virtual address space in the 2.6 series kernel.

Below is the output of "cat /proc/self/maps" on Fedora Core 3 
(2.6.9-1.6_FC2) with exec-shield[-randomize] disabled and 
legacy_vm_layout enabled.

What is being mapped in at last line (ffffe000-fffff000 ---p)?  This is 
always there, no matter what process I run.  To my knowledge, this 
wasn't the case on 2.4.

 >$ cat /proc/self/maps
08048000-0804c000 r-xp 00000000 03:03 2490451    /bin/cat
0804c000-0804d000 rw-p 00003000 03:03 2490451    /bin/cat
0804d000-0806e000 rw-p 0804d000 00:00 0
42344000-42359000 r-xp 00000000 03:03 950351     /lib/ld-2.3.3.so
42359000-4235a000 r--p 00014000 03:03 950351     /lib/ld-2.3.3.so
4235a000-4235b000 rw-p 00015000 03:03 950351     /lib/ld-2.3.3.so
4235d000-42473000 r-xp 00000000 03:03 950450     /lib/tls/libc-2.3.3.so
42473000-42474000 r--p 00116000 03:03 950450     /lib/tls/libc-2.3.3.so
42474000-42477000 rw-p 00117000 03:03 950450     /lib/tls/libc-2.3.3.so
42477000-42479000 rw-p 42477000 00:00 0
55017000-55018000 rw-p 55017000 00:00 0
55018000-55218000 r--p 00000000 03:03 114690 
/usr/lib/locale/locale-archive
feffe000-ff000000 rw-p feffe000 00:00 0
ffffe000-fffff000 ---p 00000000 00:00 0

I have not had much success in my search for information via Google & 
IRC and the books I have are specific to the 2.4 series.  Any help would 
be greatly appreciated.

-Chris

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6 Series Mem Mgmt
  2005-01-17 19:37                     ` 2.6 Series Mem Mgmt Chris Bookholt
@ 2005-01-17 19:56                       ` Brian Gerst
  0 siblings, 0 replies; 33+ messages in thread
From: Brian Gerst @ 2005-01-17 19:56 UTC (permalink / raw)
  To: Chris Bookholt; +Cc: LKML

Chris Bookholt wrote:
> I'm hoping someone can help explain part of the layout of a process' 
> virtual address space in the 2.6 series kernel.
> 
> Below is the output of "cat /proc/self/maps" on Fedora Core 3 
> (2.6.9-1.6_FC2) with exec-shield[-randomize] disabled and 
> legacy_vm_layout enabled.
> 
> What is being mapped in at last line (ffffe000-fffff000 ---p)?  This is 
> always there, no matter what process I run.  To my knowledge, this 
> wasn't the case on 2.4.
> 
>  >$ cat /proc/self/maps
> 08048000-0804c000 r-xp 00000000 03:03 2490451    /bin/cat
> 0804c000-0804d000 rw-p 00003000 03:03 2490451    /bin/cat
> 0804d000-0806e000 rw-p 0804d000 00:00 0
> 42344000-42359000 r-xp 00000000 03:03 950351     /lib/ld-2.3.3.so
> 42359000-4235a000 r--p 00014000 03:03 950351     /lib/ld-2.3.3.so
> 4235a000-4235b000 rw-p 00015000 03:03 950351     /lib/ld-2.3.3.so
> 4235d000-42473000 r-xp 00000000 03:03 950450     /lib/tls/libc-2.3.3.so
> 42473000-42474000 r--p 00116000 03:03 950450     /lib/tls/libc-2.3.3.so
> 42474000-42477000 rw-p 00117000 03:03 950450     /lib/tls/libc-2.3.3.so
> 42477000-42479000 rw-p 42477000 00:00 0
> 55017000-55018000 rw-p 55017000 00:00 0
> 55018000-55218000 r--p 00000000 03:03 114690 /usr/lib/locale/locale-archive
> feffe000-ff000000 rw-p feffe000 00:00 0
> ffffe000-fffff000 ---p 00000000 00:00 0
> 
> I have not had much success in my search for information via Google & 
> IRC and the books I have are specific to the 2.4 series.  Any help would 
> be greatly appreciated.
> 

That is the vsyscall page.

--
				Brian Gerst

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-10 19:34       ` Jean Delvare
@ 2005-01-19 20:19         ` Nicolas Pitre
  2005-01-19 20:52           ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Nicolas Pitre @ 2005-01-19 20:19 UTC (permalink / raw)
  To: LM Sensors, LKML; +Cc: Jean Delvare, Jonas Munsin, Simone Piunno, djg, greg

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1096 bytes --]

On Mon, 10 Jan 2005, Jean Delvare wrote:

> When I get this, I'll compare with the datasheets so as to understand
> how your chip is configured (or left unconfigured) by your BIOS. This
> will both help me propose a workaround in the it87 driver and explain
> the Gigabyte support what I think they should do.

FWIW, I have a Gigabyte motherboard with an it87 chip too.  Reading 
about this it87 polarity thing I'm suspecting something is really wrong 
here:

When system is idle, the sensors report shows:
CPU temp = +25°C and CPU fan = 2136 RPM (and rather noisy)

When system is 100% busy (with dd if=/dev/urandom of=/dev/null):
CPU temp = +41°C and CPU fan =   1288 RPM (and obviously much quieter)

I'm running a 2.6.10 kernel (not -mm) so I guess the BIOS settings for 
fan control are not altered.  And incidentally the BIOS has a setting 
called "smart fan control" set to "enabled" which maps to the ITxxF 
automatic PWM control mode I suppose.  So if the BIOS actually set the 
fan polarity wrong then the fan would slow down when the temperature 
rises and vice versa, right?


Nicolas

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-19 20:19         ` Nicolas Pitre
@ 2005-01-19 20:52           ` Jean Delvare
  2005-01-19 22:10             ` Nicolas Pitre
  0 siblings, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-19 20:52 UTC (permalink / raw)
  To: Nicolas Pitre; +Cc: Jonas Munsin, Simone Piunno, LM Sensors, LKML, Greg KH

Hi Nicolas,

> FWIW, I have a Gigabyte motherboard with an it87 chip too.  Reading 
> about this it87 polarity thing I'm suspecting something is really
> wrong  here:
> 
> When system is idle, the sensors report shows:
> CPU temp = +25°C and CPU fan = 2136 RPM (and rather noisy)
> 
> When system is 100% busy (with dd if=/dev/urandom of=/dev/null):
> CPU temp = +41°C and CPU fan =   1288 RPM (and obviously much quieter)
> 
> I'm running a 2.6.10 kernel (not -mm) so I guess the BIOS settings for
> fan control are not altered.  And incidentally the BIOS has a setting 
> called "smart fan control" set to "enabled" which maps to the ITxxF 
> automatic PWM control mode I suppose.  So if the BIOS actually set the
> fan polarity wrong then the fan would slow down when the temperature 
> rises and vice versa, right?

That's right, what you describe really sounds like a wrong polarity
setting.

Could you please tell us what model it is, with what BIOS revision? I
would also appreciate a dump of the chip (isadump 0x295 0x296 unless it
lives at some uncommon address) to confirm the guess.

The code Jonas and I have been adding to the it87 driver recently will
probably not work for you if you leave the "smart fan control" enabled
in your BIOS setup screen (because we supposed that no reponsible
motherboard maker would enable this mode without properly configuring
the polarity beforehand - wrong guess in your case - and are not
allowing a polarity inversion in this case). However, by disabling this
mode in the BIOS setup screen, you should be able to use the new
fix_pwm_polarity module register to get the polarity fixed, with manual
PWM control (no auto mode yet).

You might also search for a BIOS update for your board. I consider the
behavior your describe a major problem and would expect Gigabyte to fix
it at some point in time.

Thanks,
-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-19 20:52           ` Jean Delvare
@ 2005-01-19 22:10             ` Nicolas Pitre
  2005-01-20 11:08               ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Nicolas Pitre @ 2005-01-19 22:10 UTC (permalink / raw)
  To: LM Sensors, LKML; +Cc: Jonas Munsin, Simone Piunno, Greg KH

[-- Attachment #1: Type: TEXT/PLAIN, Size: 3595 bytes --]

On Wed, 19 Jan 2005, Jean Delvare wrote:

> Hi Nicolas,
> 
> > FWIW, I have a Gigabyte motherboard with an it87 chip too.  Reading 
> > about this it87 polarity thing I'm suspecting something is really
> > wrong  here:
> > 
> > When system is idle, the sensors report shows:
> > CPU temp = +25°C and CPU fan = 2136 RPM (and rather noisy)
> > 
> > When system is 100% busy (with dd if=/dev/urandom of=/dev/null):
> > CPU temp = +41°C and CPU fan =   1288 RPM (and obviously much quieter)
> > 
> > I'm running a 2.6.10 kernel (not -mm) so I guess the BIOS settings for
> > fan control are not altered.  And incidentally the BIOS has a setting 
> > called "smart fan control" set to "enabled" which maps to the ITxxF 
> > automatic PWM control mode I suppose.  So if the BIOS actually set the
> > fan polarity wrong then the fan would slow down when the temperature 
> > rises and vice versa, right?
> 
> That's right, what you describe really sounds like a wrong polarity
> setting.
> 
> Could you please tell us what model it is, with what BIOS revision?

>From dmidecode:

        BIOS Information
                Vendor: Award Software International, Inc.
                Version: F5
                Release Date: 11/01/2004

        Base Board Information
                Manufacturer: Gigabyte Technology Co., Ltd.
                Product Name: 8I915GMF
                Version: x.x
                Serial Number:

> I would also appreciate a dump of the chip (isadump 0x295 0x296 unless 
> it lives at some uncommon address) to confirm the guess.

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: 11 10 80 00 37 ff 00 37 ff 07 13 5b 00 51 40 ff
10: fe fe ff 71 d7 fe 7f fe 00 00 ff ff ff ff ff ff
20: 53 a4 cc b9 b9 89 8b ff c9 c9 fe 19 60 f7 f7 f7
30: ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00
40: 7f 7f 7f 7f 46 7f ff ff 2d ff ff ff ff ff ff ff
50: ff 1c 7f 7f 7f ff 5f 5f 90 5f f9 12 55 00 00 00
60: ff 14 41 23 82 23 ff ff 7f 7f 7f 00 00 7f ff ff
70: ff 14 41 23 82 23 ff ff ff ff ff ff ff ff ff ff
80: 00 00 00 00 ff ff ff ff 40 40 ff ff ff ff ff ff
90: 7f 7f 7f 00 00 7f ff ff 7f 7f 7f 00 00 7f ff ff
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

> The code Jonas and I have been adding to the it87 driver recently will
> probably not work for you if you leave the "smart fan control" enabled
> in your BIOS setup screen (because we supposed that no reponsible
> motherboard maker would enable this mode without properly configuring
> the polarity beforehand - wrong guess in your case - and are not
> allowing a polarity inversion in this case).

Heh... and it's the default value.

> However, by disabling this
> mode in the BIOS setup screen, you should be able to use the new
> fix_pwm_polarity module register to get the polarity fixed, with manual
> PWM control (no auto mode yet).

I guess the BIOS setting will simply be overwritten so changing the BIOS 
should not affect subsequent use, no?

> You might also search for a BIOS update for your board. I consider the
> behavior your describe a major problem and would expect Gigabyte to fix
> it at some point in time.

Well... I can't find a straight BIOS update for this board.  There is a 
Windows application to fetch and install a new BIOS from the net but 
installing Windows on this machine just for that is not really 
practical.


Nicolas

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [PATCH 2.6] I2C: Allow it87 pwm reconfiguration
  2005-01-15 15:30             ` [PATCH 2.6] I2C: Allow it87 pwm reconfiguration Jean Delvare
  2005-01-15 17:18               ` Simone Piunno
@ 2005-01-19 23:23               ` Greg KH
  1 sibling, 0 replies; 33+ messages in thread
From: Greg KH @ 2005-01-19 23:23 UTC (permalink / raw)
  To: LM Sensors, LKML; +Cc: Simone Piunno, Jonas Munsin, djg

On Sat, Jan 15, 2005 at 04:30:45PM +0100, Jean Delvare wrote:
> Quoting myself:
> 
> > As soon as you will have confirmed that everything worked as expected,
> > Jonas and I will provide a patch adding a pwm polarity reconfiguration
> > module parameter for you to test. This should give you access to the
> > PWM features of your it87 chip again, but in a safe way for a change
> > ;)
> 
> Here comes this patch. The new "fix_pwm_polarity" module parameter
> allows one to force the it87 chip reconfiguration. This is only
> supported in the case the original PWM configuration is suspected to be
> bogus, and only if we think that reconfiguring the chip is safe.
> 
> I wish to thank Rudolf Marek and Jonas Munsin again for their testing
> and review of my code.
> 
> Greg, please apply, thanks.

Applied, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-19 22:10             ` Nicolas Pitre
@ 2005-01-20 11:08               ` Jean Delvare
  2005-01-20 16:01                 ` Nicolas Pitre
  0 siblings, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-20 11:08 UTC (permalink / raw)
  To: nico, sensors, linux-kernel; +Cc: Jonas Munsin, Simone Piunno, Greg KH


Hi Nicolas,

> > I would also appreciate a dump of the chip (isadump 0x295 0x296 unless
> > it lives at some uncommon address) to confirm the guess.
>
>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
> 00: 11 10 80 00 37 ff 00 37 ff 07 13 5b 00 51 40 ff
> 10: fe fe ff 71 d7 fe 7f fe 00 00 ff ff ff ff ff ff

Interesting. Your chip does seem to be configured (i.e. pwm polarity is
high), so whatever your problem is, it is probably different from what
Simone experienced.

Your configuration is as follow:
* PWM outputs active high.
* PWM 2 and 3 in on/off mode, set to on.
* PWM 1 in "smart guardian" mode, set to automatic PWM depending on
temp3.

I would like to know how temperature channels are used by your
motherboard, and how fans are used as well. Which temperature and fan
channels correspond to your CPU? What other temperature sensors and fans
are present?

The values dumped here make me believe that the PWM outputs were
configured by the BIOS. Now maybe not the correct way, at least for you.

> I guess the BIOS setting will simply be overwritten so changing the BIOS
> should not affect subsequent use, no?

Changing the BIOS configuration affects the initial register
configuration, from which the it87 driver decides whether using PWM or
reconfiguring the chip (changing polarity) is safe or not. This is why
it might help. With the dump you provided, we now know that the (new)
it87 driver will accept PWM operations even when your BIOS was left in
"smart guardian" mode.

I would like you to give a try to a recent version of the it87 driver (as
found in 2.6.11-rc1-bk7 or 2.6.11-rc1-mm2). This will let us know which
revision of the IT8712F you have (in case it matters), and will also let
you experiment with manual PWM.

If manual PWM works, then the problem is in the way temperature interacts
with PWM in automatic mode.

If manual PWM works the wrong way around (like it did for Simone) then it
is a polarity issue (after all, maybe *you* need active low).

If manual PWM half works (fan speed changes but not as much as it should)
it might be a problem of picking the correct base frequency for PWM.

So please let us know how manual PWM behaves, and I'll tell you what I
think the problem is, and how I think it can be tinkered with (providing
it can).

In the meantime, you could contact Gigabyte and explain about the
problem. They better learn about the problem and fix their BIOS is
needed.

Thanks,
--
Jean Delvare

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-20 11:08               ` Jean Delvare
@ 2005-01-20 16:01                 ` Nicolas Pitre
  2005-01-20 16:28                   ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Nicolas Pitre @ 2005-01-20 16:01 UTC (permalink / raw)
  To: Jean Delvare; +Cc: sensors, lkml, Jonas Munsin, Simone Piunno, Greg KH

On Thu, 20 Jan 2005, Jean Delvare wrote:

> 
> Hi Nicolas,
> 
> > > I would also appreciate a dump of the chip (isadump 0x295 0x296 unless
> > > it lives at some uncommon address) to confirm the guess.
> >
> >      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
> > 00: 11 10 80 00 37 ff 00 37 ff 07 13 5b 00 51 40 ff
> > 10: fe fe ff 71 d7 fe 7f fe 00 00 ff ff ff ff ff ff
> 
> Interesting. Your chip does seem to be configured (i.e. pwm polarity is
> high), so whatever your problem is, it is probably different from what
> Simone experienced.
> 
> Your configuration is as follow:
> * PWM outputs active high.
> * PWM 2 and 3 in on/off mode, set to on.
> * PWM 1 in "smart guardian" mode, set to automatic PWM depending on
> temp3.

Sensible.

> I would like to know how temperature channels are used by your
> motherboard, and how fans are used as well. Which temperature and fan
> channels correspond to your CPU? What other temperature sensors and fans
> are present?

It looks like only temp3 is used for the CPU temperature, fan1 is the 
CPU fan and fan2 the case fan.

> The values dumped here make me believe that the PWM outputs were
> configured by the BIOS. Now maybe not the correct way, at least for you.

I experimented with isaset tweaking individual bits in register 0x14 
(blindly I confess, haven't read the datasheet) and flipping bit 3 from 
0 to 1 (writing 0xdf) apparently reverses the behavior, i.e. the CPU fan 
speed now increases with the CPU temperature.

> I would like you to give a try to a recent version of the it87 driver (as
> found in 2.6.11-rc1-bk7 or 2.6.11-rc1-mm2).

Will try to do soon.  In the mean time I'm willing to try out things 
with isaset if you can suggest basic tests (easier than upgrading kernel 
for the time being).


Nicolas

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-20 16:01                 ` Nicolas Pitre
@ 2005-01-20 16:28                   ` Jean Delvare
  2005-01-20 21:19                     ` Nicolas Pitre
  0 siblings, 1 reply; 33+ messages in thread
From: Jean Delvare @ 2005-01-20 16:28 UTC (permalink / raw)
  To: nico; +Cc: LM Sensors, lkml, Jonas Munsin, Simone Piunno, Greg KH


Hi Nicolas,

> It looks like only temp3 is used for the CPU temperature, fan1 is the
> CPU fan and fan2 the case fan.

This is coherent with your chip configuration.

> I experimented with isaset tweaking individual bits in register 0x14
> (blindly I confess, haven't read the datasheet) and flipping bit 3 from
> 0 to 1 (writing 0xdf) apparently reverses the behavior, i.e. the CPU fan
> speed now increases with the CPU temperature.

That's odd. This bit isn't supposed to significantly change the
behavior. When cleared (default), possible duty cycles range from 0 to
100%. When set, the possible duty cycles range from 20% to 100% (except
for PWM=0 which still results in a 0% duty cycle). I hardly understand
how setting this bit can result in the change you describe.

> In the mean time I'm willing to try out things
> with isaset if you can suggest basic tests (easier than upgrading kernel
> for the time being).

OK. Remember you better keep an eye on the CPU fan in case your tests
stop it. I would also suggest that you take a look at the datasheet so
that you better understand what you are doing:
http://www.iteusa.com/product_info/file/pc/IT8712F_V0.81.pdf
(page 79 of the document, which is 97 of the PDF file - don't ask)

The best test I can think of is to switch your CPU fan to manual PWM
mode. To do that, write 0x40 to register 0x15. CPU fan should go to half
speed. Write 0x7F and if should go to full speed, except if the polarity
is not correct in which case 0x00 will do (and 0x7F will stop the fan
completely so you don't want to keep it that way).

I suggest that you use the -y flag of isaset so that you can overwrite
register values quickly if things turn bad.

Once you know if the polarity is correct, you can try different values of
PWM between 0x00 and 0x7F and see how exactly your fan reacts to them.
You can also study more precisely how bit 3 of register 0x14 (the one
you played with already) affects the PWM vs speed curve.

Thanks,
--
Jean Delvare

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-20 16:28                   ` Jean Delvare
@ 2005-01-20 21:19                     ` Nicolas Pitre
  2005-01-21  6:46                       ` Jean Delvare
  0 siblings, 1 reply; 33+ messages in thread
From: Nicolas Pitre @ 2005-01-20 21:19 UTC (permalink / raw)
  To: Jean Delvare; +Cc: LM Sensors, lkml, Jonas Munsin, Simone Piunno, Greg KH

On Thu, 20 Jan 2005, Jean Delvare wrote:

> > In the mean time I'm willing to try out things
> > with isaset if you can suggest basic tests (easier than upgrading kernel
> > for the time being).
> 
> The best test I can think of is to switch your CPU fan to manual PWM
> mode. To do that, write 0x40 to register 0x15. CPU fan should go to half
> speed. Write 0x7F and if should go to full speed, except if the polarity
> is not correct in which case 0x00 will do (and 0x7F will stop the fan
> completely so you don't want to keep it that way).

I confirm that 0x7f is full speed.

> Once you know if the polarity is correct, you can try different values of
> PWM between 0x00 and 0x7F and see how exactly your fan reacts to them.

That's where things get really really interesting.  As mentioned above 
0x7f drives the fan full speed (2596 RPM).  Now lowering that value 
slows the CPU fan gradually down to a certain point.  With a value of 
0x3f the fan turns at 1041 RPM.  But below 0x3f the fan starts speeding 
up again to reach a peak of 2280 RPM with a value of 0x31, then it slows 
down again toward 0 RPM as the register value is decreased down to 0.

Bit 3 of register 0x14, when set, only modifies the curve so the first 
minimum is instead reached at 0x30 then the peak occurs at 0x1d before 
dropping to 0.

Changing the PWM base clock select has no effect.


Nicolas

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: 2.6.10-mm2: it87 sensor driver stops CPU fan
  2005-01-20 21:19                     ` Nicolas Pitre
@ 2005-01-21  6:46                       ` Jean Delvare
  0 siblings, 0 replies; 33+ messages in thread
From: Jean Delvare @ 2005-01-21  6:46 UTC (permalink / raw)
  To: Nicolas Pitre; +Cc: LM Sensors, lkml, Jonas Munsin, Simone Piunno, Greg KH

Hi Nicolas,

> I confirm that 0x7f is full speed.

So at least the polarity bit is correct, and Gigabyte isn't to blame.

> > Once you know if the polarity is correct, you can try different
> > values of PWM between 0x00 and 0x7F and see how exactly your fan
> > reacts to them.
> 
> That's where things get really really interesting.  As mentioned
> above 0x7f drives the fan full speed (2596 RPM).  Now lowering that
> value slows the CPU fan gradually down to a certain point.  With a
> value of 0x3f the fan turns at 1041 RPM.  But below 0x3f the fan
> starts speeding up again to reach a peak of 2280 RPM with a value
> of 0x31, then it slows  down again toward 0 RPM as the register
> value is decreased down to 0.
> 
> Bit 3 of register 0x14, when set, only modifies the curve so the
> first minimum is instead reached at 0x30 then the peak occurs at 0x1d
> before dropping to 0.
> 
> Changing the PWM base clock select has no effect.

Wow! Unexpected, to say the least. First time I see such a behavior.

Could it be that your CPU fan isn't a simple passive device but one of
these high-tech models with an embedded thermal sensor and automatic
speed adjustment? This would possibly interact with the motherboard PWM
capability and could explain the strange speed curve your obtained.

I would also like you to try a similar test with your case fan. Enable
"smart guardian" mode for this one (by writing 0x73 to register 0x13),
then scan the 0x7f-0x00 range (register 0x16) like you did for your CPU
fan. I wonder if you will obtain the same kind of result or a standard
linear curve.

(Note that PWM2 might not be wired at all on your motherboard, so don't
be surprised if the case fan speed doesn't change at all.)

Thanks,
-- 
Jean Delvare
http://khali.linux-fr.org/

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2005-01-21  6:43 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-01-08  0:50 2.6.10-mm2: it87 sensor driver stops CPU fan Simone Piunno
2005-01-08  9:34 ` Jean Delvare
2005-01-10 22:41   ` Simone Piunno
2005-01-11  9:26     ` Jean Delvare
2005-01-11 20:24       ` Jonas Munsin
2005-01-11 20:56         ` Jean Delvare
2005-01-11 22:41         ` Greg KH
2005-01-11 21:04       ` Simone Piunno
2005-01-12  9:44         ` Jean Delvare
2005-01-12 22:27       ` Jonas Munsin
2005-01-13 23:29         ` Greg KH
2005-01-14 14:40           ` Jean Delvare
2005-01-15 15:30             ` [PATCH 2.6] I2C: Allow it87 pwm reconfiguration Jean Delvare
2005-01-15 17:18               ` Simone Piunno
2005-01-19 23:23               ` Greg KH
2005-01-15 15:54             ` 2.6.10-mm2: it87 sensor driver stops CPU fan Simone Piunno
2005-01-15 16:55               ` Jean Delvare
2005-01-16 22:32                 ` Simone Piunno
2005-01-17 19:19                   ` Jean Delvare
2005-01-17 19:37                     ` 2.6 Series Mem Mgmt Chris Bookholt
2005-01-17 19:56                       ` Brian Gerst
2005-01-08 16:20 ` 2.6.10-mm2: it87 sensor driver stops CPU fan Jean Delvare
2005-01-08 19:23   ` Simone Piunno
2005-01-10 19:23     ` Simone Piunno
2005-01-10 19:34       ` Jean Delvare
2005-01-19 20:19         ` Nicolas Pitre
2005-01-19 20:52           ` Jean Delvare
2005-01-19 22:10             ` Nicolas Pitre
2005-01-20 11:08               ` Jean Delvare
2005-01-20 16:01                 ` Nicolas Pitre
2005-01-20 16:28                   ` Jean Delvare
2005-01-20 21:19                     ` Nicolas Pitre
2005-01-21  6:46                       ` Jean Delvare

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).