mirror of
https://github.com/lm-sensors/lm-sensors.git
synced 2026-10-17 10:59:31 +00:00
<rnissl@gmx.de>. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@2037 7894878c-1315-0410-8ee3-d5d059ff63e0
267 lines
11 KiB
Plaintext
267 lines
11 KiB
Plaintext
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 <rnissl@gmx.de> based on work from Hermann Jung
|
|
<hej@odn.de>, Frodo Looijaard <frodol@dds.nl> and Philip Edelbrock
|
|
<phil@netroedge.com>
|
|
|
|
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
|