| Kernel driver fscher |
| ==================== |
| |
| Supported chips: |
| * Fujitsu-Siemens Hermes chip |
| Prefix: 'fscher' |
| Addresses scanned: I2C 0x73 |
| |
| Authors: |
| Reinhard Nissl <rnissl@gmx.de> based on work |
| from Hermann Jung <hej@odn.de>, |
| Frodo Looijaard <frodol@dds.nl>, |
| Philip Edelbrock <phil@netroedge.com> |
| |
| 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 Celsius. 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. |
| |
| * revision |
| READING & 0xff = 0x??: HERMES revision identification |
| |
| * alarms |
| 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 |
| READING & 0x01 = 0x01: software event |
| READING & 0x01 = 0x00: no software event |
| |
| WRITING & 0x01 = 0x01: set software event |
| WRITING & 0x01 = 0x00: clear software event |
| |
| * watchdog_control |
| 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 |
| |
| * watchdog_state |
| READING & 0x02 = 0x02: watchdog system reset occurred |
| READING & 0x02 = 0x00: no watchdog system reset occurred |
| |
| WRITING & 0x02 = 0x02: clear watchdog event |
| |
| * watchdog_preset |
| READING & 0xff = 0x??: configured watch dog time in units (see wdog:3 0x40) |
| |
| WRITING & 0xff = 0x??: configure watch dog time in units |
| |
| * in* (0: +5V, 1: +12V, 2: onboard 3V battery) |
| READING: actual voltage value |
| |
| * temp*_status (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*_input (1: CPU sensor, 2: onboard sensor, 3: auxiliary sensor) |
| READING: actual temperature value |
| |
| * fan*_status (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*_div (1: power supply fan, 2: CPU fan, 3: auxiliary fan) |
| Divisors 2,4 and 8 are supported, both for reading and writing |
| |
| * fan*_pwm (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*_input (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 controlled by this implementation. |