5 * Fujitsu-Siemens Hermes chip
7 Addresses scanned: I2C 0x73
10 Reinhard Nissl <rnissl@gmx.de> based on work
11 from Hermann Jung <hej@odn.de>,
12 Frodo Looijaard <frodol@dds.nl>,
13 Philip Edelbrock <phil@netroedge.com>
18 This driver implements support for the Fujitsu-Siemens Hermes chip. It is
19 described in the 'Register Set Specification BMC Hermes based Systemboard'
22 The Hermes chip implements a hardware-based system management, e.g. for
23 controlling fan speed and core voltage. There is also a watchdog counter on
24 the chip which can trigger an alarm and even shut the system down.
26 The chip provides three temperature values (CPU, motherboard and
27 auxiliary), three voltage values (+12V, +5V and battery) and three fans
28 (power supply, CPU and auxiliary).
30 Temperatures are measured in degrees Celsius. The resolution is 1 degree.
32 Fan rotation speeds are reported in RPM (rotations per minute). The value
33 can be divided by a programmable divider (1, 2 or 4) which is stored on
36 Voltage sensors (also known as "in" sensors) report their values in volts.
38 All values are reported as final values from the driver. There is no need
39 for further calculations.
45 Below you'll find a single line description of all the bit values. With
46 this information, you're able to decode e. g. alarms, wdog, etc. To make
47 use of the watchdog, you'll need to set the watchdog time and enable the
48 watchdog. After that it is necessary to restart the watchdog time within
49 the specified period of time, or a system reset will occur.
52 READING & 0xff = 0x??: HERMES revision identification
55 READING & 0x80 = 0x80: CPU throttling active
56 READING & 0x80 = 0x00: CPU running at full speed
58 READING & 0x10 = 0x10: software event (see control:1)
59 READING & 0x10 = 0x00: no software event
61 READING & 0x08 = 0x08: watchdog event (see wdog:2)
62 READING & 0x08 = 0x00: no watchdog event
64 READING & 0x02 = 0x02: thermal event (see temp*:1)
65 READING & 0x02 = 0x00: no thermal event
67 READING & 0x01 = 0x01: fan event (see fan*:1)
68 READING & 0x01 = 0x00: no fan event
70 READING & 0x13 ! 0x00: ALERT LED is flashing
73 READING & 0x01 = 0x01: software event
74 READING & 0x01 = 0x00: no software event
76 WRITING & 0x01 = 0x01: set software event
77 WRITING & 0x01 = 0x00: clear software event
80 READING & 0x80 = 0x80: power off on watchdog event while thermal event
81 READING & 0x80 = 0x00: watchdog power off disabled (just system reset enabled)
83 READING & 0x40 = 0x40: watchdog timebase 60 seconds (see also wdog:1)
84 READING & 0x40 = 0x00: watchdog timebase 2 seconds
86 READING & 0x10 = 0x10: watchdog enabled
87 READING & 0x10 = 0x00: watchdog disabled
89 WRITING & 0x80 = 0x80: enable "power off on watchdog event while thermal event"
90 WRITING & 0x80 = 0x00: disable "power off on watchdog event while thermal event"
92 WRITING & 0x40 = 0x40: set watchdog timebase to 60 seconds
93 WRITING & 0x40 = 0x00: set watchdog timebase to 2 seconds
95 WRITING & 0x20 = 0x20: disable watchdog
97 WRITING & 0x10 = 0x10: enable watchdog / restart watchdog time
100 READING & 0x02 = 0x02: watchdog system reset occurred
101 READING & 0x02 = 0x00: no watchdog system reset occurred
103 WRITING & 0x02 = 0x02: clear watchdog event
106 READING & 0xff = 0x??: configured watch dog time in units (see wdog:3 0x40)
108 WRITING & 0xff = 0x??: configure watch dog time in units
110 * in* (0: +5V, 1: +12V, 2: onboard 3V battery)
111 READING: actual voltage value
113 * temp*_status (1: CPU sensor, 2: onboard sensor, 3: auxiliary sensor)
114 READING & 0x02 = 0x02: thermal event (overtemperature)
115 READING & 0x02 = 0x00: no thermal event
117 READING & 0x01 = 0x01: sensor is working
118 READING & 0x01 = 0x00: sensor is faulty
120 WRITING & 0x02 = 0x02: clear thermal event
122 * temp*_input (1: CPU sensor, 2: onboard sensor, 3: auxiliary sensor)
123 READING: actual temperature value
125 * fan*_status (1: power supply fan, 2: CPU fan, 3: auxiliary fan)
126 READING & 0x04 = 0x04: fan event (fan fault)
127 READING & 0x04 = 0x00: no fan event
129 WRITING & 0x04 = 0x04: clear fan event
131 * fan*_div (1: power supply fan, 2: CPU fan, 3: auxiliary fan)
132 Divisors 2,4 and 8 are supported, both for reading and writing
134 * fan*_pwm (1: power supply fan, 2: CPU fan, 3: auxiliary fan)
135 READING & 0xff = 0x00: fan may be switched off
136 READING & 0xff = 0x01: fan must run at least at minimum speed (supply: 6V)
137 READING & 0xff = 0xff: fan must run at maximum speed (supply: 12V)
138 READING & 0xff = 0x??: fan must run at least at given speed (supply: 6V..12V)
140 WRITING & 0xff = 0x00: fan may be switched off
141 WRITING & 0xff = 0x01: fan must run at least at minimum speed (supply: 6V)
142 WRITING & 0xff = 0xff: fan must run at maximum speed (supply: 12V)
143 WRITING & 0xff = 0x??: fan must run at least at given speed (supply: 6V..12V)
145 * fan*_input (1: power supply fan, 2: CPU fan, 3: auxiliary fan)
146 READING: actual RPM value
152 * Measuring fan speed
153 It seems that the chip counts "ripples" (typical fans produce 2 ripples per
154 rotation while VERAX fans produce 18) in a 9-bit register. This register is
155 read out every second, then the ripple prescaler (2, 4 or 8) is applied and
156 the result is stored in the 8 bit output register. Due to the limitation of
157 the counting register to 9 bits, it is impossible to measure a VERAX fan
158 properly (even with a prescaler of 8). At its maximum speed of 3500 RPM the
159 fan produces 1080 ripples per second which causes the counting register to
160 overflow twice, leading to only 186 RPM.
162 * Measuring input voltages
163 in2 ("battery") reports the voltage of the onboard lithium battery and not
164 +3.3V from the power supply.
166 * Undocumented features
167 Fujitsu-Siemens Computers has not documented all features of the chip so
168 far. Their software, System Guard, shows that there are a still some
169 features which cannot be controlled by this implementation.