| 
									
										
										
										
											2005-05-26 12:42:19 +00:00
										 |  |  | Kernel driver pc87360 | 
					
						
							|  |  |  | ===================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Supported chips: | 
					
						
							|  |  |  |   * National Semiconductor PC87360, PC87363, PC87364, PC87365 and PC87366 | 
					
						
							|  |  |  |     Prefixes: 'pc87360', 'pc87363', 'pc87364', 'pc87365', 'pc87366' | 
					
						
							|  |  |  |     Addresses scanned: none, address read from Super I/O config space | 
					
						
							| 
									
										
										
										
											2008-10-17 17:51:17 +02:00
										 |  |  |     Datasheets: No longer available | 
					
						
							| 
									
										
										
										
											2005-05-26 12:42:19 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Authors: Jean Delvare <khali@linux-fr.org> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Thanks to Sandeep Mehta, Tonko de Rooy and Daniel Ceregatti for testing. | 
					
						
							|  |  |  | Thanks to Rudolf Marek for helping me investigate conversion issues. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Module Parameters | 
					
						
							|  |  |  | ----------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * init int | 
					
						
							|  |  |  |   Chip initialization level: | 
					
						
							|  |  |  |    0: None | 
					
						
							|  |  |  |   *1: Forcibly enable internal voltage and temperature channels, except in9 | 
					
						
							|  |  |  |    2: Forcibly enable all voltage and temperature channels, except in9 | 
					
						
							|  |  |  |    3: Forcibly enable all voltage and temperature channels, including in9 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that this parameter has no effect for the PC87360, PC87363 and PC87364 | 
					
						
							|  |  |  | chips. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Also note that for the PC87366, initialization levels 2 and 3 don't enable | 
					
						
							|  |  |  | all temperature channels, because some of them share pins with each other, | 
					
						
							|  |  |  | so they can't be used at the same time. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Description | 
					
						
							|  |  |  | ----------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The National Semiconductor PC87360 Super I/O chip contains monitoring and | 
					
						
							|  |  |  | PWM control circuitry for two fans. The PC87363 chip is similar, and the | 
					
						
							|  |  |  | PC87364 chip has monitoring and PWM control for a third fan. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The National Semiconductor PC87365 and PC87366 Super I/O chips are complete | 
					
						
							|  |  |  | hardware monitoring chipsets, not only controlling and monitoring three fans, | 
					
						
							|  |  |  | but also monitoring eleven voltage inputs and two (PC87365) or up to four | 
					
						
							|  |  |  | (PC87366) temperatures. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Chip        #vin    #fan    #pwm    #temp   devid | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   PC87360     -       2       2       -       0xE1 | 
					
						
							|  |  |  |   PC87363     -       2       2       -       0xE8 | 
					
						
							|  |  |  |   PC87364     -       3       3       -       0xE4 | 
					
						
							|  |  |  |   PC87365     11      3       3       2       0xE5 | 
					
						
							|  |  |  |   PC87366     11      3       3       3-4     0xE9 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The driver assumes that no more than one chip is present, and one of the | 
					
						
							|  |  |  | standard Super I/O addresses is used (0x2E/0x2F or 0x4E/0x4F) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Fan Monitoring | 
					
						
							|  |  |  | -------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Fan rotation speeds are reported in RPM (revolutions per minute). An alarm | 
					
						
							|  |  |  | is triggered if the rotation speed has dropped below a programmable limit. | 
					
						
							|  |  |  | A different alarm is triggered if the fan speed is too low to be measured. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Fan readings are affected by a programmable clock divider, giving the | 
					
						
							|  |  |  | readings more range or accuracy. Usually, users have to learn how it works, | 
					
						
							|  |  |  | but this driver implements dynamic clock divider selection, so you don't | 
					
						
							|  |  |  | have to care no more. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For reference, here are a few values about clock dividers: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 slowest         accuracy        highest | 
					
						
							|  |  |  |                 measurable      around 3000     accurate | 
					
						
							|  |  |  |     divider     speed (RPM)     RPM (RPM)       speed (RPM) | 
					
						
							|  |  |  |          1        1882              18           6928 | 
					
						
							|  |  |  |          2         941              37           4898 | 
					
						
							|  |  |  |          4         470              74           3464 | 
					
						
							|  |  |  |          8         235             150           2449 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For the curious, here is how the values above were computed: | 
					
						
							|  |  |  |  * slowest measurable speed: clock/(255*divider) | 
					
						
							|  |  |  |  * accuracy around 3000 RPM: 3000^2/clock | 
					
						
							|  |  |  |  * highest accurate speed: sqrt(clock*100) | 
					
						
							|  |  |  | The clock speed for the PC87360 family is 480 kHz. I arbitrarily chose 100 | 
					
						
							|  |  |  | RPM as the lowest acceptable accuracy. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | As mentioned above, you don't have to care about this no more. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that not all RPM values can be represented, even when the best clock | 
					
						
							|  |  |  | divider is selected. This is not only true for the measured speeds, but | 
					
						
							|  |  |  | also for the programmable low limits, so don't be surprised if you try to | 
					
						
							|  |  |  | set, say, fan1_min to 2900 and it finally reads 2909. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Fan Control | 
					
						
							|  |  |  | ----------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PWM (pulse width modulation) values range from 0 to 255, with 0 meaning | 
					
						
							|  |  |  | that the fan is stopped, and 255 meaning that the fan goes at full speed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Be extremely careful when changing PWM values. Low PWM values, even | 
					
						
							|  |  |  | non-zero, can stop the fan, which may cause irreversible damage to your | 
					
						
							|  |  |  | hardware if temperature increases too much. When changing PWM values, go | 
					
						
							|  |  |  | step by step and keep an eye on temperatures. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | One user reported problems with PWM. Changing PWM values would break fan | 
					
						
							|  |  |  | speed readings. No explanation nor fix could be found. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Temperature Monitoring | 
					
						
							|  |  |  | ---------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Temperatures are reported in degrees Celsius. Each temperature measured has | 
					
						
							|  |  |  | associated low, high and overtemperature limits, each of which triggers an | 
					
						
							|  |  |  | alarm when crossed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The first two temperature channels are external. The third one (PC87366 | 
					
						
							|  |  |  | only) is internal. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The PC87366 has three additional temperature channels, based on | 
					
						
							|  |  |  | thermistors (as opposed to thermal diodes for the first three temperature | 
					
						
							|  |  |  | channels). For technical reasons, these channels are held by the VLM | 
					
						
							|  |  |  | (voltage level monitor) logical device, not the TMS (temperature | 
					
						
							|  |  |  | measurement) one. As a consequence, these temperatures are exported as | 
					
						
							|  |  |  | voltages, and converted into temperatures in user-space. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that these three additional channels share their pins with the | 
					
						
							|  |  |  | external thermal diode channels, so you (physically) can't use them all at | 
					
						
							|  |  |  | the same time. Although it should be possible to mix the two sensor types, | 
					
						
							|  |  |  | the documents from National Semiconductor suggest that motherboard | 
					
						
							|  |  |  | manufacturers should choose one type and stick to it. So you will more | 
					
						
							|  |  |  | likely have either channels 1 to 3 (thermal diodes) or 3 to 6 (internal | 
					
						
							|  |  |  | thermal diode, and thermistors). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Voltage Monitoring | 
					
						
							|  |  |  | ------------------ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Voltages are reported relatively to a reference voltage, either internal or | 
					
						
							|  |  |  | external. Some of them (in7:Vsb, in8:Vdd and in10:AVdd) are divided by two | 
					
						
							|  |  |  | internally, you will have to compensate in sensors.conf. Others (in0 to in6) | 
					
						
							|  |  |  | are likely to be divided externally. The meaning of each of these inputs as | 
					
						
							|  |  |  | well as the values of the resistors used for division is left to the | 
					
						
							|  |  |  | motherboard manufacturers, so you will have to document yourself and edit | 
					
						
							|  |  |  | sensors.conf accordingly. National Semiconductor has a document with | 
					
						
							|  |  |  | recommended resistor values for some voltages, but this still leaves much | 
					
						
							|  |  |  | room for per motherboard specificities, unfortunately. Even worse, | 
					
						
							|  |  |  | motherboard manufacturers don't seem to care about National Semiconductor's | 
					
						
							|  |  |  | recommendations. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Each voltage measured has associated low and high limits, each of which | 
					
						
							|  |  |  | triggers an alarm when crossed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When available, VID inputs are used to provide the nominal CPU Core voltage. | 
					
						
							|  |  |  | The driver will default to VRM 9.0, but this can be changed from user-space. | 
					
						
							|  |  |  | The chipsets can handle two sets of VID inputs (on dual-CPU systems), but | 
					
						
							|  |  |  | the driver will only export one for now. This may change later if there is | 
					
						
							|  |  |  | a need. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | General Remarks | 
					
						
							|  |  |  | --------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If an alarm triggers, it will remain triggered until the hardware register | 
					
						
							|  |  |  | is read at least once. This means that the cause for the alarm may already | 
					
						
							|  |  |  | have disappeared! Note that all hardware registers are read whenever any | 
					
						
							|  |  |  | data is read (unless it is less than 2 seconds since the last update, in | 
					
						
							|  |  |  | which case cached values are returned instead). As a consequence, when | 
					
						
							|  |  |  | a once-only alarm triggers, it may take 2 seconds for it to show, and 2 | 
					
						
							|  |  |  | more seconds for it to disappear. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Monitoring of in9 isn't enabled at lower init levels (<3) because that | 
					
						
							|  |  |  | channel measures the battery voltage (Vbat). It is a known fact that | 
					
						
							|  |  |  | repeatedly sampling the battery voltage reduces its lifetime. National | 
					
						
							|  |  |  | Semiconductor smartly designed their chipset so that in9 is sampled only | 
					
						
							|  |  |  | once every 1024 sampling cycles (that is every 34 minutes at the default | 
					
						
							|  |  |  | sampling rate), so the effect is attenuated, but still present. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Limitations | 
					
						
							|  |  |  | ----------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The datasheets suggests that some values (fan mins, fan dividers) | 
					
						
							|  |  |  | shouldn't be changed once the monitoring has started, but we ignore that | 
					
						
							|  |  |  | recommendation. We'll reconsider if it actually causes trouble. |