Commit 65afb4c8 authored by Vadim Pasternak's avatar Vadim Pasternak Committed by Guenter Roeck

hwmon: (mlxreg-fan) Add support for Mellanox FAN driver

Driver obtains PWM and tachometers registers location according to the
system configuration and creates FAN/PWM hwmon objects and a cooling
device. PWM and tachometers are controlled through the on-board
programmable device, which exports its register map. This device could be
attached to any bus type, for which register mapping is supported. Single
instance is created with one PWM control, up to 12 tachometers and one
cooling device. It could be as many instances as programmable device
supports.

Currently driver will be activated from the Mellanox platform driver:
drivers/platform/x86/mlx-platform.c.
For the future ARM based systems it could be activated from the ARM
platform module.
Signed-off-by: default avatarVadim Pasternak <vadimp@mellanox.com>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent ffb32432
Kernel driver mlxreg-fan
========================
Provides FAN control for the next Mellanox systems:
QMB700, equipped with 40x200GbE InfiniBand ports;
MSN3700, equipped with 32x200GbE or 16x400GbE Ethernet ports;
MSN3410, equipped with 6x400GbE plus 48x50GbE Ethernet ports;
MSN3800, equipped with 64x1000GbE Ethernet ports;
These are the Top of the Rack systems, equipped with Mellanox switch
board with Mellanox Quantum or Spectrume-2 devices.
FAN controller is implemented by the programmable device logic.
The default registers offsets set within the programmable device is as
following:
- pwm1 0xe3
- fan1 (tacho1) 0xe4
- fan2 (tacho2) 0xe5
- fan3 (tacho3) 0xe6
- fan4 (tacho4) 0xe7
- fan5 (tacho5) 0xe8
- fan6 (tacho6) 0xe9
- fan7 (tacho7) 0xea
- fan8 (tacho8) 0xeb
- fan9 (tacho9) 0xec
- fan10 (tacho10) 0xed
- fan11 (tacho11) 0xee
- fan12 (tacho12) 0xef
This setup can be re-programmed with other registers.
Author: Vadim Pasternak <vadimp@mellanox.com>
Description
-----------
The driver implements a simple interface for driving a fan connected to
a PWM output and tachometer inputs.
This driver obtains PWM and tachometers registers location according to
the system configuration and creates FAN/PWM hwmon objects and a cooling
device. PWM and tachometers are sensed through the on-board programmable
device, which exports its register map. This device could be attached to
any bus type, for which register mapping is supported.
Single instance is created with one PWM control, up to 12 tachometers and
one cooling device. It could be as many instances as programmable device
supports.
The driver exposes the fan to the user space through the hwmon's and
thermal's sysfs interfaces.
/sys files in hwmon subsystem
-----------------------------
fan[1-12]_fault - RO files for tachometers TACH1-TACH12 fault indication
fan[1-12]_input - RO files for tachometers TACH1-TACH12 input (in RPM)
pwm1 - RW file for fan[1-12] target duty cycle (0..255)
/sys files in thermal subsystem
-------------------------------
cur_state - RW file for current cooling state of the cooling device
(0..max_state)
max_state - RO file for maximum cooling state of the cooling device
...@@ -937,6 +937,18 @@ config SENSORS_MCP3021 ...@@ -937,6 +937,18 @@ config SENSORS_MCP3021
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called mcp3021. will be called mcp3021.
config SENSORS_MLXREG_FAN
tristate "Mellanox Mellanox FAN driver"
depends on MELLANOX_PLATFORM
imply THERMAL
select REGMAP
help
This option enables support for the FAN control on the Mellanox
Ethernet and InfiniBand switches. The driver can be activated by the
platform device add call. Say Y to enable these. To compile this
driver as a module, choose 'M' here: the module will be called
mlxreg-fan.
config SENSORS_TC654 config SENSORS_TC654
tristate "Microchip TC654/TC655 and compatibles" tristate "Microchip TC654/TC655 and compatibles"
depends on I2C depends on I2C
......
...@@ -129,6 +129,7 @@ obj-$(CONFIG_SENSORS_MAX31790) += max31790.o ...@@ -129,6 +129,7 @@ obj-$(CONFIG_SENSORS_MAX31790) += max31790.o
obj-$(CONFIG_SENSORS_MC13783_ADC)+= mc13783-adc.o obj-$(CONFIG_SENSORS_MC13783_ADC)+= mc13783-adc.o
obj-$(CONFIG_SENSORS_MCP3021) += mcp3021.o obj-$(CONFIG_SENSORS_MCP3021) += mcp3021.o
obj-$(CONFIG_SENSORS_TC654) += tc654.o obj-$(CONFIG_SENSORS_TC654) += tc654.o
obj-$(CONFIG_SENSORS_MLXREG_FAN) += mlxreg-fan.o
obj-$(CONFIG_SENSORS_MENF21BMC_HWMON) += menf21bmc_hwmon.o obj-$(CONFIG_SENSORS_MENF21BMC_HWMON) += menf21bmc_hwmon.o
obj-$(CONFIG_SENSORS_NCT6683) += nct6683.o obj-$(CONFIG_SENSORS_NCT6683) += nct6683.o
obj-$(CONFIG_SENSORS_NCT6775) += nct6775.o obj-$(CONFIG_SENSORS_NCT6775) += nct6775.o
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment