| 1 | Kernel driver `fscher.o' |
|---|
| 2 | ======================= |
|---|
| 3 | |
|---|
| 4 | Status: Stable |
|---|
| 5 | Tested with motherboard D1562 |
|---|
| 6 | |
|---|
| 7 | Think twice before you're using the write mode of some |
|---|
| 8 | variables, especially the watchdog |
|---|
| 9 | |
|---|
| 10 | |
|---|
| 11 | Supported chips: |
|---|
| 12 | * Fujitsu-Siemens Hermes chip |
|---|
| 13 | Prefix: 'fscher' |
|---|
| 14 | Addresses scanned: I2C 0x73 |
|---|
| 15 | |
|---|
| 16 | Author: Reinhard Nissl <rnissl@gmx.de> based on work from Hermann Jung |
|---|
| 17 | <hej@odn.de>, Frodo Looijaard <frodol@dds.nl> and Philip Edelbrock |
|---|
| 18 | <phil@netroedge.com> |
|---|
| 19 | |
|---|
| 20 | License: GPL |
|---|
| 21 | |
|---|
| 22 | |
|---|
| 23 | Module Parameters |
|---|
| 24 | ----------------- |
|---|
| 25 | |
|---|
| 26 | * force: short array (min = 1, max = 48) |
|---|
| 27 | List of adapter,address pairs to boldly assume to be present |
|---|
| 28 | * force_fscher: short array (min = 1, max = 48) |
|---|
| 29 | List of adapter,address pairs which are unquestionably assumed to contain |
|---|
| 30 | a `fscher' chip |
|---|
| 31 | * probe: short array (min = 1, max = 48) |
|---|
| 32 | List of adapter,address pairs to scan additionally |
|---|
| 33 | * probe_range: short array (min = 1, max = 48) |
|---|
| 34 | List of adapter,start-addr,end-addr triples to scan additionally |
|---|
| 35 | * ignore: short array (min = 1, max = 48) |
|---|
| 36 | List of adapter,address pairs not to scan |
|---|
| 37 | * ignore_range: short array (min = 1, max = 48) |
|---|
| 38 | List of adapter,start-addr,end-addr triples not to scan |
|---|
| 39 | |
|---|
| 40 | |
|---|
| 41 | Description |
|---|
| 42 | ----------- |
|---|
| 43 | |
|---|
| 44 | This driver implements support for the Fujitsu-Siemens Hermes chip. |
|---|
| 45 | It is described in the 'Register Set Specification BMC Hermes based |
|---|
| 46 | Systemboard' from Fujitsu-Siemens. |
|---|
| 47 | |
|---|
| 48 | The Hermes chip implements a hardware-based system management, |
|---|
| 49 | e.g. for controlling fan speed and core voltage. |
|---|
| 50 | There is also a watchdog counter on the chip which can trigger |
|---|
| 51 | an alarm and even shut the system down. |
|---|
| 52 | |
|---|
| 53 | The chip provides three temperature values (CPU, motherboard and auxiliary), |
|---|
| 54 | three voltage values (+12V, +5V and battery) and three fans (power supply, |
|---|
| 55 | CPU and auxiliary). |
|---|
| 56 | |
|---|
| 57 | Temperatures are measured in degrees Celsius. The resolution is 1 degree. |
|---|
| 58 | |
|---|
| 59 | Fan rotation speeds are reported in RPM (rotations per minute). |
|---|
| 60 | The value can be divided by a programmable divider (1, 2 or 4) which |
|---|
| 61 | is stored on the chip. |
|---|
| 62 | |
|---|
| 63 | Voltage sensors (also known as "in" sensors) report their values in volts. |
|---|
| 64 | |
|---|
| 65 | All values are reported as final values from the driver. |
|---|
| 66 | There is no need for further calculations. |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | Detailed description |
|---|
| 70 | -------------------- |
|---|
| 71 | |
|---|
| 72 | Below you'll find a single line description of all the bit values. With this |
|---|
| 73 | information, you're able to decode e. g. alarms, wdog, etc. |
|---|
| 74 | To make use of the watchdog, you'll need to set the watchdog time and enable |
|---|
| 75 | the watchdog. After that it is necessary to restart the watchdog time within |
|---|
| 76 | the specified period of time, or a system reset will occur. |
|---|
| 77 | |
|---|
| 78 | * rev:1 |
|---|
| 79 | READING & 0xff = 0x??: HERMES revision identification |
|---|
| 80 | |
|---|
| 81 | * alarms:1 |
|---|
| 82 | READING & 0x80 = 0x80: CPU throttling active |
|---|
| 83 | READING & 0x80 = 0x00: CPU running at full speed |
|---|
| 84 | |
|---|
| 85 | READING & 0x10 = 0x10: software event (see control:1) |
|---|
| 86 | READING & 0x10 = 0x00: no software event |
|---|
| 87 | |
|---|
| 88 | READING & 0x08 = 0x08: watchdog event (see wdog:2) |
|---|
| 89 | READING & 0x08 = 0x00: no watchdog event |
|---|
| 90 | |
|---|
| 91 | READING & 0x02 = 0x02: thermal event (see temp*:1) |
|---|
| 92 | READING & 0x02 = 0x00: no thermal event |
|---|
| 93 | |
|---|
| 94 | READING & 0x01 = 0x01: fan event (see fan*:1) |
|---|
| 95 | READING & 0x01 = 0x00: no fan event |
|---|
| 96 | |
|---|
| 97 | READING & 0x13 ! 0x00: ALERT LED is flashing |
|---|
| 98 | |
|---|
| 99 | * control:1 |
|---|
| 100 | READING & 0x01 = 0x01: software event |
|---|
| 101 | READING & 0x01 = 0x00: no software event |
|---|
| 102 | |
|---|
| 103 | WRITING & 0x01 = 0x01: set software event |
|---|
| 104 | WRITING & 0x01 = 0x00: clear software event |
|---|
| 105 | |
|---|
| 106 | * wdog:3 |
|---|
| 107 | READING & 0x80 = 0x80: power off on watchdog event while thermal event |
|---|
| 108 | READING & 0x80 = 0x00: watchdog power off disabled (just system reset enabled) |
|---|
| 109 | |
|---|
| 110 | READING & 0x40 = 0x40: watchdog timebase 60 seconds (see also wdog:1) |
|---|
| 111 | READING & 0x40 = 0x00: watchdog timebase 2 seconds |
|---|
| 112 | |
|---|
| 113 | READING & 0x10 = 0x10: watchdog enabled |
|---|
| 114 | READING & 0x10 = 0x00: watchdog disabled |
|---|
| 115 | |
|---|
| 116 | WRITING & 0x80 = 0x80: enable "power off on watchdog event while thermal event" |
|---|
| 117 | WRITING & 0x80 = 0x00: disable "power off on watchdog event while thermal event" |
|---|
| 118 | |
|---|
| 119 | WRITING & 0x40 = 0x40: set watchdog timebase to 60 seconds |
|---|
| 120 | WRITING & 0x40 = 0x00: set watchdog timebase to 2 seconds |
|---|
| 121 | |
|---|
| 122 | WRITING & 0x20 = 0x20: disable watchdog |
|---|
| 123 | |
|---|
| 124 | WRITING & 0x10 = 0x10: enable watchdog / restart watchdog time |
|---|
| 125 | |
|---|
| 126 | * wdog:2 |
|---|
| 127 | READING & 0x02 = 0x02: watchdog system reset occurred |
|---|
| 128 | READING & 0x02 = 0x00: no watchdog system reset occurred |
|---|
| 129 | |
|---|
| 130 | WRITING & 0x02 = 0x02: clear watchdog event |
|---|
| 131 | |
|---|
| 132 | * wdog:1 |
|---|
| 133 | READING & 0xff = 0x??: configured watch dog time in units (see wdog:3 0x40) |
|---|
| 134 | |
|---|
| 135 | WRITING & 0xff = 0x??: configure watch dog time in units |
|---|
| 136 | |
|---|
| 137 | * in*:1 (0: +5V, 1: +12V, 2: onboard 3V battery) |
|---|
| 138 | READING: actual voltage value |
|---|
| 139 | |
|---|
| 140 | * temp*:1 (1: CPU sensor, 2: onboard sensor, 3: auxiliary sensor) |
|---|
| 141 | READING & 0x02 = 0x02: thermal event (overtemperature) |
|---|
| 142 | READING & 0x02 = 0x00: no thermal event |
|---|
| 143 | |
|---|
| 144 | READING & 0x01 = 0x01: sensor is working |
|---|
| 145 | READING & 0x01 = 0x00: sensor is faulty |
|---|
| 146 | |
|---|
| 147 | WRITING & 0x02 = 0x02: clear thermal event |
|---|
| 148 | |
|---|
| 149 | * temp*:2 (1: CPU sensor, 2: onboard sensor, 3: auxiliary sensor) |
|---|
| 150 | READING: actual temperature value |
|---|
| 151 | |
|---|
| 152 | * fan*:1 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) |
|---|
| 153 | READING & 0x04 = 0x04: fan event (fan fault) |
|---|
| 154 | READING & 0x04 = 0x00: no fan event |
|---|
| 155 | |
|---|
| 156 | WRITING & 0x04 = 0x04: clear fan event |
|---|
| 157 | |
|---|
| 158 | * fan*:2 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) |
|---|
| 159 | READING & 0x03 = 0x03: 8 ripples are one fan turn |
|---|
| 160 | READING & 0x03 = 0x02: 4 ripples are one fan turn |
|---|
| 161 | READING & 0x03 = 0x01: 2 ripples are one fan turn |
|---|
| 162 | |
|---|
| 163 | WRITING & 0x03 = 0x03: set prescaler to "8 ripples are one fan turn" |
|---|
| 164 | WRITING & 0x03 = 0x02: set prescaler to "4 ripples are one fan turn" |
|---|
| 165 | WRITING & 0x03 = 0x01: set prescaler to "2 ripples are one fan turn" |
|---|
| 166 | |
|---|
| 167 | * fan*:3 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) |
|---|
| 168 | READING & 0xff = 0x00: fan may be switched off |
|---|
| 169 | READING & 0xff = 0x01: fan must run at least at minimum speed (supply: 6V) |
|---|
| 170 | READING & 0xff = 0xff: fan must run at maximum speed (supply: 12V) |
|---|
| 171 | READING & 0xff = 0x??: fan must run at least at given speed (supply: 6V..12V) |
|---|
| 172 | |
|---|
| 173 | WRITING & 0xff = 0x00: fan may be switched off |
|---|
| 174 | WRITING & 0xff = 0x01: fan must run at least at minimum speed (supply: 6V) |
|---|
| 175 | WRITING & 0xff = 0xff: fan must run at maximum speed (supply: 12V) |
|---|
| 176 | WRITING & 0xff = 0x??: fan must run at least at given speed (supply: 6V..12V) |
|---|
| 177 | |
|---|
| 178 | * fan*:4 (1: power supply fan, 2: CPU fan, 3: auxiliary fan) |
|---|
| 179 | READING: actual RPM value |
|---|
| 180 | |
|---|
| 181 | |
|---|
| 182 | Limitations |
|---|
| 183 | ----------- |
|---|
| 184 | |
|---|
| 185 | * Measuring fan speed |
|---|
| 186 | It seems that the chip counts "ripples" (typical fans produce 2 ripples per |
|---|
| 187 | rotation while VERAX fans produce 18) in a 9-bit register. This register is |
|---|
| 188 | read out every second, then the ripple prescaler (2, 4 or 8) is applied and |
|---|
| 189 | the result is stored in the 8 bit output register. Due to the limitation of |
|---|
| 190 | the counting register to 9 bits, it is impossible to measure a VERAX fan |
|---|
| 191 | properly (even with a prescaler of 8). At its maximum speed of 3500 RPM the |
|---|
| 192 | fan produces 1080 ripples per second which causes the counting register to |
|---|
| 193 | overflow twice, leading to only 186 RPM. |
|---|
| 194 | |
|---|
| 195 | * Measuring input voltages |
|---|
| 196 | in2 ("battery") reports the voltage of the onboard lithium battery and not |
|---|
| 197 | +3.3V from the power supply. |
|---|
| 198 | |
|---|
| 199 | * Undocumented features |
|---|
| 200 | Fujitsu-Siemens Computers has not documented all features of the chip so far. |
|---|
| 201 | Their software, System Guard, shows that there are a still some features which |
|---|
| 202 | cannot be controled by this implementation. |
|---|
| 203 | |
|---|
| 204 | |
|---|
| 205 | Chip Features |
|---|
| 206 | ------------- |
|---|
| 207 | |
|---|
| 208 | Chip 'fscher' |
|---|
| 209 | |
|---|
| 210 | LABEL LABEL CLASS COMPUTE CLASS MODE MAGN |
|---|
| 211 | rev - - R- 0 |
|---|
| 212 | alarms - - R- 0 |
|---|
| 213 | control - - RW 0 |
|---|
| 214 | in0 - - R- 2 |
|---|
| 215 | in1 - - R- 2 |
|---|
| 216 | in2 - - R- 2 |
|---|
| 217 | temp1 - - R- 0 |
|---|
| 218 | temp2 - - R- 0 |
|---|
| 219 | temp3 - - R- 0 |
|---|
| 220 | temp1_state temp1 temp1 RW 0 |
|---|
| 221 | temp2_state temp2 temp2 RW 0 |
|---|
| 222 | temp3_state temp3 temp3 RW 0 |
|---|
| 223 | fan1 - - R- 0 |
|---|
| 224 | fan2 - - R- 0 |
|---|
| 225 | fan3 - - R- 0 |
|---|
| 226 | fan1_min fan1 fan1 RW 0 |
|---|
| 227 | fan2_min fan2 fan2 RW 0 |
|---|
| 228 | fan3_min fan3 fan3 RW 0 |
|---|
| 229 | fan1_state fan1 fan1 RW 0 |
|---|
| 230 | fan2_state fan2 fan2 RW 0 |
|---|
| 231 | fan3_state fan3 fan3 RW 0 |
|---|
| 232 | fan1_ripple fan1 fan1 RW 0 |
|---|
| 233 | fan2_ripple fan2 fan2 RW 0 |
|---|
| 234 | fan3_ripple fan3 fan3 RW 0 |
|---|
| 235 | wdog_preset - - RW 0 |
|---|
| 236 | wdog_state wdog_preset wdog_preset RW 0 |
|---|
| 237 | wdog_control wdog_preset wdog_preset RW 0 |
|---|
| 238 | |
|---|
| 239 | LABEL FEATURE SYMBOL SYSCTL FILE:N |
|---|
| 240 | rev SENSORS_FSCHER_REV rev:1 |
|---|
| 241 | alarms SENSORS_FSCHER_EVENT alarms:1 |
|---|
| 242 | control SENSORS_FSCHER_CONTROL control:1 |
|---|
| 243 | in0 SENSORS_FSCHER_VOLTAGE1 in0:1 |
|---|
| 244 | in1 SENSORS_FSCHER_VOLTAGE2 in1:1 |
|---|
| 245 | in2 SENSORS_FSCHER_VOLTAGE3 in2:1 |
|---|
| 246 | temp1 SENSORS_FSCHER_TEMP1 temp1:2 |
|---|
| 247 | temp2 SENSORS_FSCHER_TEMP2 temp2:2 |
|---|
| 248 | temp3 SENSORS_FSCHER_TEMP3 temp3:2 |
|---|
| 249 | temp1_state SENSORS_FSCHER_TEMP1_STATE temp1:1 |
|---|
| 250 | temp2_state SENSORS_FSCHER_TEMP2_STATE temp2:1 |
|---|
| 251 | temp3_state SENSORS_FSCHER_TEMP3_STATE temp3:1 |
|---|
| 252 | fan1 SENSORS_FSCHER_FAN1 fan1:4 |
|---|
| 253 | fan2 SENSORS_FSCHER_FAN2 fan2:4 |
|---|
| 254 | fan3 SENSORS_FSCHER_FAN3 fan3:4 |
|---|
| 255 | fan1_min SENSORS_FSCHER_FAN1_MIN fan1:2 |
|---|
| 256 | fan2_min SENSORS_FSCHER_FAN2_MIN fan2:2 |
|---|
| 257 | fan3_min SENSORS_FSCHER_FAN3_MIN fan3:2 |
|---|
| 258 | fan1_state SENSORS_FSCHER_FAN1_STATE fan1:1 |
|---|
| 259 | fan2_state SENSORS_FSCHER_FAN2_STATE fan2:1 |
|---|
| 260 | fan3_state SENSORS_FSCHER_FAN3_STATE fan3:1 |
|---|
| 261 | fan1_ripple SENSORS_FSCHER_FAN1_RIPPLE fan1:3 |
|---|
| 262 | fan2_ripple SENSORS_FSCHER_FAN2_RIPPLE fan2:3 |
|---|
| 263 | fan3_ripple SENSORS_FSCHER_FAN3_RIPPLE fan3:3 |
|---|
| 264 | wdog_preset SENSORS_FSCHER_WDOG_PRESET wdog:1 |
|---|
| 265 | wdog_state SENSORS_FSCHER_WDOG_STATE wdog:2 |
|---|
| 266 | wdog_control SENSORS_FSCHER_WDOG_CONTROL wdog:3 |
|---|