diff --git a/doc/chips/fscher b/doc/chips/fscher new file mode 100644 index 00000000..bb735f26 --- /dev/null +++ b/doc/chips/fscher @@ -0,0 +1,266 @@ +Kernel driver `fscher.o' +======================= + +Status: Stable + Tested with motherboard D1562 + + Think twice before you're using the write mode of some + variables, especially the watchdog + + +Supported chips: + * Fujitsu-Siemens Hermes chip + Prefix `fscher' + Addresses scanned: I2C 0x73 + +Author: Reinhard Nissl based on work from Hermann Jung + , Frodo Looijaard and Philip Edelbrock + + +License: GPL + + +Module Parameters +----------------- + +* force: short array (min = 1, max = 48) + List of adapter,address pairs to boldly assume to be present +* force_fscher: short array (min = 1, max = 48) + List of adapter,address pairs which are unquestionably assumed to contain + a `fscher' chip +* probe: short array (min = 1, max = 48) + List of adapter,address pairs to scan additionally +* probe_range: short array (min = 1, max = 48) + List of adapter,start-addr,end-addr triples to scan additionally +* ignore: short array (min = 1, max = 48) + List of adapter,address pairs not to scan +* ignore_range: short array (min = 1, max = 48) + List of adapter,start-addr,end-addr triples not to scan + + +Description +----------- + +This driver implements support for the Fujitsu-Siemens Hermes chip. +It is described in the 'Register Set Specification BMC Hermes based +Systemboard' from Fujitsu-Siemens. + +The Hermes chip implements a hardware-based system management, +e.g. for controlling fan speed and core voltage. +There is also a watchdog counter on the chip which can trigger +an alarm and even shut the system down. + +The chip provides three temperature values (CPU, motherboard and auxiliary), +three voltage values (+12V, +5V and battery) and three fans (power supply, +CPU and auxiliary). + +Temperatures are measured in degrees Celcius. The resolution is 1 degree. + +Fan rotation speeds are reported in RPM (rotations per minute). +The value can be divided by a programmable divider (1, 2 or 4) which +is stored on the chip. + +Voltage sensors (also known as "in" sensors) report their values in volts. + +All values are reported as final values from the driver. +There is no need for further calculations. + + +Detailed description +-------------------- + +Below you'll find a single line description of all the bit values. With this +information, you're able to decode e. g. alarms, wdog, etc. +To make use of the watchdog, you'll need to set the watchdog time and enable +the watchdog. After that it is necessary to restart the watchdog time within +the specified period of time, or a system reset will occur. + +* rev:1 + READING & 0xff = 0x??: HERMES revision identification + +* alarms:1 + READING & 0x80 = 0x80: CPU throttling active + READING & 0x80 = 0x00: CPU running at full speed + + READING & 0x10 = 0x10: software event (see control:1) + READING & 0x10 = 0x00: no software event + + READING & 0x08 = 0x08: watchdog event (see wdog:2) + READING & 0x08 = 0x00: no watchdog event + + READING & 0x02 = 0x02: thermal event (see temp*:1) + READING & 0x02 = 0x00: no thermal event + + READING & 0x01 = 0x01: fan event (see fan*:1) + READING & 0x01 = 0x00: no fan event + + READING & 0x13 ! 0x00: ALERT LED is flashing + +* control:1 + READING & 0x01 = 0x01: software event + READING & 0x01 = 0x00: no software event + + WRITING & 0x01 = 0x01: set software event + WRITING & 0x01 = 0x00: clear software event + +* wdog:3 + READING & 0x80 = 0x80: power off on watchdog event while thermal event + READING & 0x80 = 0x00: watchdog power off disabled (just system reset enabled) + + READING & 0x40 = 0x40: watchdog timebase 60 seconds (see also wdog:1) + READING & 0x40 = 0x00: watchdog timebase 2 seconds + + READING & 0x10 = 0x10: watchdog enabled + READING & 0x10 = 0x00: watchdog disabled + + WRITING & 0x80 = 0x80: enable "power off on watchdog event while thermal event" + WRITING & 0x80 = 0x00: disable "power off on watchdog event while thermal event" + + WRITING & 0x40 = 0x40: set watchdog timebase to 60 seconds + WRITING & 0x40 = 0x00: set watchdog timebase to 2 seconds + + WRITING & 0x20 = 0x20: disable watchdog + + WRITING & 0x10 = 0x10: enable watchdog / restart watchdog time + +* wdog:2 + READING & 0x02 = 0x02: watchdog system reset occurred + READING & 0x02 = 0x00: no watchdog system reset occurred + + WRITING & 0x02 = 0x02: clear watchdog event + +* wdog:1 + READING & 0xff = 0x??: configured watch dog time in units (see wdog:3 0x40) + + WRITING & 0xff = 0x??: configure watch dog time in units + +* in*:1 (0: +5V, 1: +12V, 2: onboard 3V battery) + READING: actual voltage value + +* temp*:1 (1: CPU sensor, 2: onboard sensor, 3: auxiliary sensor) + READING & 0x02 = 0x02: thermal event (overtemperature) + READING & 0x02 = 0x00: no thermal event + + READING & 0x01 = 0x01: sensor is working + READING & 0x01 = 0x00: sensor is faulty + + WRITING & 0x02 = 0x02: clear thermal event + +* temp*:2 (1: CPU sensor, 2: onboard sensor, 3: auxiliary sensor) + READING: actual temperature value + +* fan*:1 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) + READING & 0x04 = 0x04: fan event (fan fault) + READING & 0x04 = 0x00: no fan event + + WRITING & 0x04 = 0x04: clear fan event + +* fan*:2 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) + READING & 0x03 = 0x03: 8 ripples are one fan turn + READING & 0x03 = 0x02: 4 ripples are one fan turn + READING & 0x03 = 0x01: 2 ripples are one fan turn + + WRITING & 0x03 = 0x03: set prescaler to "8 ripples are one fan turn" + WRITING & 0x03 = 0x02: set prescaler to "4 ripples are one fan turn" + WRITING & 0x03 = 0x01: set prescaler to "2 ripples are one fan turn" + +* fan*:3 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) + READING & 0xff = 0x00: fan may be switched off + READING & 0xff = 0x01: fan must run at least at minimum speed (supply: 6V) + READING & 0xff = 0xff: fan must run at maximum speed (supply: 12V) + READING & 0xff = 0x??: fan must run at least at given speed (supply: 6V..12V) + + WRITING & 0xff = 0x00: fan may be switched off + WRITING & 0xff = 0x01: fan must run at least at minimum speed (supply: 6V) + WRITING & 0xff = 0xff: fan must run at maximum speed (supply: 12V) + WRITING & 0xff = 0x??: fan must run at least at given speed (supply: 6V..12V) + +* fan*:4 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) + READING: actual RPM value + + +Limitations +----------- + +* Measuring fan speed +It seems that the chip counts "ripples" (typical fans produce 2 ripples per +rotation while VERAX fans produce 18) in a 9-bit register. This register is +read out every second, then the ripple prescaler (2, 4 or 8) is applied and +the result is stored in the 8 bit output register. Due to the limitation of +the counting register to 9 bits, it is impossible to measure a VERAX fan +properly (even with a prescaler of 8). At its maximum speed of 3500 RPM the +fan produces 1080 ripples per second which causes the counting register to +overflow twice, leading to only 186 RPM. + +* Measuring input voltages +in2 ("battery") reports the voltage of the onboard lithium battery and not ++3.3V from the power supply. + +* Undocumented features +Fujitsu-Siemens Computers has not documented all features of the chip so far. +Their software, System Guard, shows that there are a still some features which +cannot be controled by this implementation. + + +Chip Features +------------- + +Chip 'fscher' + +LABEL LABEL CLASS COMPUTE CLASS MODE MAGN +rev - - R- 0 +alarms - - R- 0 +control - - RW 0 +in0 - - R- 2 +in1 - - R- 2 +in2 - - R- 2 +temp1 - - R- 0 +temp2 - - R- 0 +temp3 - - R- 0 +temp1_state temp1 temp1 RW 0 +temp2_state temp2 temp2 RW 0 +temp3_state temp3 temp3 RW 0 +fan1 - - R- 0 +fan2 - - R- 0 +fan3 - - R- 0 +fan1_min fan1 fan1 RW 0 +fan2_min fan2 fan2 RW 0 +fan3_min fan3 fan3 RW 0 +fan1_state fan1 fan1 RW 0 +fan2_state fan2 fan2 RW 0 +fan3_state fan3 fan3 RW 0 +fan1_ripple fan1 fan1 RW 0 +fan2_ripple fan2 fan2 RW 0 +fan3_ripple fan3 fan3 RW 0 +wdog_preset - - RW 0 +wdog_state wdog_preset wdog_preset RW 0 +wdog_control wdog_preset wdog_preset RW 0 + +LABEL FEATURE SYMBOL SYSCTL FILE:N +rev SENSORS_FSCHER_REV rev:1 +alarms SENSORS_FSCHER_EVENT alarms:1 +control SENSORS_FSCHER_CONTROL control:1 +in0 SENSORS_FSCHER_VOLTAGE1 in0:1 +in1 SENSORS_FSCHER_VOLTAGE2 in1:1 +in2 SENSORS_FSCHER_VOLTAGE3 in2:1 +temp1 SENSORS_FSCHER_TEMP1 temp1:2 +temp2 SENSORS_FSCHER_TEMP2 temp2:2 +temp3 SENSORS_FSCHER_TEMP3 temp3:2 +temp1_state SENSORS_FSCHER_TEMP1_STATE temp1:1 +temp2_state SENSORS_FSCHER_TEMP2_STATE temp2:1 +temp3_state SENSORS_FSCHER_TEMP3_STATE temp3:1 +fan1 SENSORS_FSCHER_FAN1 fan1:4 +fan2 SENSORS_FSCHER_FAN2 fan2:4 +fan3 SENSORS_FSCHER_FAN3 fan3:4 +fan1_min SENSORS_FSCHER_FAN1_MIN fan1:2 +fan2_min SENSORS_FSCHER_FAN2_MIN fan2:2 +fan3_min SENSORS_FSCHER_FAN3_MIN fan3:2 +fan1_state SENSORS_FSCHER_FAN1_STATE fan1:1 +fan2_state SENSORS_FSCHER_FAN2_STATE fan2:1 +fan3_state SENSORS_FSCHER_FAN3_STATE fan3:1 +fan1_ripple SENSORS_FSCHER_FAN1_RIPPLE fan1:3 +fan2_ripple SENSORS_FSCHER_FAN2_RIPPLE fan2:3 +fan3_ripple SENSORS_FSCHER_FAN3_RIPPLE fan3:3 +wdog_preset SENSORS_FSCHER_WDOG_PRESET wdog:1 +wdog_state SENSORS_FSCHER_WDOG_STATE wdog:2 +wdog_control SENSORS_FSCHER_WDOG_CONTROL wdog:3