内核驱动 lm93

支持的芯片

作者

模块参数

  • init: 整型 设置为非零值以强制进行某些初始化 (默认值为 0)。

  • disable_block: 整型 “0”允许 SMBus 块数据事务(如果主机支持)。“1”禁用 SMBus 块数据事务。默认值为 0。

  • vccp_limit_type: 整型数组 (2) 配置 in7 和 in8 的限制类型,其中 0 表示绝对值,非零表示相对值。此处的“相对值”指数据手册中的“使用 VID 的动态 Vccp 监控”。这大大简化了接口,允许一次只使用一组限制(绝对或相对),尽管硬件能够同时启用两者。无论如何,同时启用两者并没有一个令人信服的使用场景。默认值为 “0,0”。

  • vid_agtl: 整型 “0”配置 VID 引脚,使其 V(ih) = 最小 2.1V,V(il) = 最大 0.8V。“1”配置 VID 引脚,使其 V(ih) = 最小 0.8V,V(il) = 最大 0.4V。(后者在数据手册中称为 AGTL+ 兼容模式。) 即,此参数控制 VID 引脚输入阈值;如果您的 VID 输入不工作,请尝试更改此值。默认值为 “0”。

硬件描述

(摘自数据手册)

LM93 硬件监控器具有与 SMBus 2.0 兼容的两线数字接口。LM93 使用 8 位 ADC 测量两个远程二极管连接晶体管的温度、自身芯片温度以及 16 路电源电压。为了设置风扇速度,LM93 有两个 PWM 输出,每个输出可由多达四个温度区域控制。风扇控制算法基于查找表。LM93 包含一个数字滤波器,可用于平滑温度读数,从而更好地控制风扇速度。LM93 有四个转速计输入用于测量风扇速度。包含所有测量值的限值和状态寄存器。LM93 建立在先前主板管理 ASIC 的功能之上,并使用了 LM85 的一些特性(即智能转速计模式)。它还增加了对动态 Vccp 监控和 PROCHOT 的测量和控制支持。它旨在以最少的外部元件监控双处理器 Xeon 级主板。

LM94 也支持 LM93 兼容模式。不支持 LM94 的额外传感器和功能。

用户接口

#PROCHOT

LM93 可以监控两个 #PROCHOT 信号。结果可在 sysfs 文件 prochot1、prochot2、prochot1_avg、prochot2_avg、prochot1_max 和 prochot2_max 中找到。prochot1_max 和 prochot2_max 分别包含 #PROCHOT1 和 #PROCHOT2 的用户限制。prochot1 和 prochot2 包含最近完整时间间隔的当前读数。prochot1_avg 和 prochot2_avg 的值类似于一个 2 周期指数移动平均值(但不完全是——请查阅数据手册)。请注意,这第三个值是由芯片本身计算的。所有值的范围为 0-255,其中 0 表示未限流,255 表示 > 99.6%。

两个 #PROCHOT 信号的监控间隔也是可配置的。这些间隔可在 sysfs 文件 prochot1_interval 和 prochot2_interval 中找到。这些文件中的值分别指定了 #P1_PROCHOT 和 #P2_PROCHOT 的间隔。选择此列表中不存在的值将导致驱动程序使用下一个最大的间隔。可用间隔为 (秒)

#PROCHOT 间隔

0.73, 1.46, 2.9, 5.8, 11.7, 23.3, 46.6, 93.2, 186, 372

可以将 LM93 配置为逻辑上短接两个 #PROCHOT 信号。即,当 #P1_PROCHOT 被置位时,LM93 将自动置位 #P2_PROCHOT,反之亦然。通过向 sysfs 文件 prochot_short 写入非零整数可以启用此模式。

LM93 还可以通过向一个或两个 #PROCHOT 引脚驱动 PWM 信号来覆盖它们。当被覆盖时,该信号周期为 3.56 毫秒,最小脉冲宽度为 5 个时钟周期 (22.5kHz 时 => 6.25% 占空比),最大脉冲宽度为 80 个时钟周期 (22.5kHz 时 => 99.88% 占空比)。

sysfs 文件 prochot1_override 和 prochot2_override 包含布尔整型值,分别用于启用或禁用 #P1_PROCHOT 和 #P2_PROCHOT 的覆盖功能。sysfs 文件 prochot_override_duty_cycle 包含一个值,用于控制启用覆盖功能时使用的 PWM 信号的占空比。该值范围为 0 到 15,其中 0 表示最小占空比,15 表示最大占空比。

#VRD_HOT

LM93 可以监控两个 #VRD_HOT 信号。结果可在 sysfs 文件 vrdhot1 和 vrdhot2 中找到。每个文件包含一个值:一个布尔值,其中 1 表示 #VRD_HOT 被置位,0 表示它被复位。这些文件是只读的。

智能转速计模式 (摘自数据手册)

If a fan is driven using a low-side drive PWM, the tachometer
output of the fan is corrupted. The LM93 includes smart tachometer
circuitry that allows an accurate tachometer reading to be
achieved despite the signal corruption.  In smart tach mode all
four signals are measured within 4 seconds.

通过向 sysfs 文件 fan<n>_smart_tach 写入 1 或 2(将风扇转速计与 PWM 关联)来启用智能转速计模式。写入零将禁用该风扇的功能。请注意,如果 PWM 输出频率为 22500 Hz,则无法启用智能转速计模式(参见下文)。

手动 PWM

LM93 的两个 PWM 输出具有固定或覆盖模式(尽管仍然存在一些条件会覆盖此模式——详见数据手册第 15.10.6 节)。sysfs 文件 pwm1_override 和 pwm2_override 用于启用此模式;每个都是一个布尔整型值,其中 0 禁用手动控制模式,1 启用手动控制模式。sysfs 文件 pwm1 和 pwm2 用于设置手动占空比;每个都是一个整数 (0-255),其中 0 表示 0% 占空比,255 表示 100% 占空比。请注意,占空比值受硬件限制。选择一个不可用的值将导致驱动程序使用下一个最大的值。另请注意:当手动 PWM 模式禁用时,pwm1 和 pwm2 的值表示由硬件选择的当前占空比。

PWM 输出频率

LM93 支持 PWM 输出通道的多种不同频率。sysfs 文件 pwm1_freq 和 pwm2_freq 用于选择频率。频率值受硬件限制。选择一个不可用的值将导致驱动程序使用下一个最大的值。另请注意,此参数对智能转速计模式有影响(参见上文)。

PWM 输出频率 (Hz)

12, 36, 48, 60, 72, 84, 96, 22500 (默认)

自动 PWM

LM93 能够进行复杂的自动风扇控制,具有许多不同的配置点。首先,每个 PWM 输出可以绑定到八个控制源的任意组合。最终的 PWM 是 PWM 输出所绑定到的所有单个控制源中最大的一个。

八个控制源包括:temp1-temp4(在数据手册中也称为“区域”)、#PROCHOT 1 和 2,以及 #VRDHOT 1 和 2。绑定在 sysfs 文件 pwm<n>_auto_channels 中以位掩码形式表示,其中“1”启用绑定,“0”禁用绑定。硬件默认值为 0x0f(所有温度绑定)。

0x01

温度 1

0x02

温度 2

0x04

温度 3

0x08

温度 4

0x10

#PROCHOT 1

0x20

#PROCHOT 2

0x40

#VRDHOT 1

0x80

#VRDHOT 2

函数 y = f(x) 将源温度 x 转换为 PWM 输出 y。LM93 的此功能源自一个基础温度和包含 12 个温度偏移量的表。基础温度在 sysfs 文件 temp<n>_auto_base 中以摄氏度表示。偏移量以累积摄氏度表示,温度值 <n> 的偏移量 <i> 的值包含在文件 temp<n>_auto_offset<i> 中。例如,如果基础温度是 40C

偏移量 #

temp<n>_auto_offset<i>

范围

PWM

1

0

25.00%

2

0

28.57%

3

1

40C - 41C

32.14%

4

1

41C - 42C

35.71%

5

2

42C - 44C

39.29%

6

2

44C - 46C

42.86%

7

2

48C - 50C

46.43%

8

2

50C - 52C

50.00%

9

2

52C - 54C

53.57%

10

2

54C - 56C

57.14%

11

2

56C - 58C

71.43%

12

2

58C - 60C

85.71%

> 60C

100.00%

有效偏移量范围为 0C <= x <= 7.5C,以 0.5C 递增。

每个温度通道都有一个独立的基础温度。然而,请注意,只有两个偏移量表:一个用于 temp[12],另一个用于 temp[34]。因此,对例如 temp1_auto_offset<i> 的任何更改也将影响 temp2_auto_offset<i>。

LM93 还可以对偏移量表应用滞后,以防止偏移量表中两个步长之间出现不必要的振荡。这些值可在 sysfs 文件 temp<n>_auto_offset_hyst 中找到。此文件中的值与 temp<n>_auto_offset<i> 中的表示相同。

如果温度读数低于该通道的基础值,LM93 将使用最小 PWM 值。这些值可在 sysfs 文件 temp<n>_auto_pwm_min 中找到。请注意,只有两个最小值:一个用于 temp[12],另一个用于 temp[34]。因此,对例如 temp1_auto_pwm_min 的任何更改也将影响 temp2_auto_pwm_min。

PWM 启动周期

当 PWM 输出从 0% 占空比命令到某个 > 0% 的值时,就会发生启动周期。LM93 支持在启动期间的最小占空比。这些值可在 sysfs 文件 pwm<n>_auto_spinup_min 中找到。此文件中的值与其他 PWM 占空比值的表示相同。启动周期的持续时间也是可配置的。这些值可在 sysfs 文件 pwm<n>_auto_spinup_time 中找到。此文件中的值为启动时间(秒)。可用的启动时间受硬件限制。选择一个不可用的值将导致驱动程序使用下一个最大的值。

启动持续时间

0 (禁用,硬件默认), 0.1, 0.25, 0.4, 0.7, 1.0, 2.0, 4.0

#PROCHOT 和 #VRDHOT PWM 斜坡上升

如果 #PROCHOT 或 #VRDHOT 信号在绑定到 PWM 输出通道时被置位,LM93 将以离散步进方式将 PWM 输出斜坡上升至 100% 占空比。每个步进的持续时间是可配置的。有两个文件,每个文件都包含一个以秒为单位的值:pwm_auto_prochot_ramp 和 pwm_auto_vrdhot_ramp。可用的斜坡上升时间受硬件限制。选择一个不可用的值将导致驱动程序使用下一个最大的值。

斜坡上升时间

0 (禁用,硬件默认) 到 0.75,以 0.05 秒为间隔

风扇加速

对于每个温度通道,都有一个加速温度:如果通道超过此限制,LM93 将立即将两个 PWM 输出驱动到 100%。此限制在 sysfs 文件 temp<n>_auto_boost 中以摄氏度表示。此功能还有一个滞后温度:达到加速限制后,温度通道必须下降到此值以下,加速功能才会禁用。此温度也在 sysfs 文件 temp<n>_auto_boost_hyst 中以摄氏度表示。

GPIO 引脚

LM93 可以监控四个专用 GPIO 引脚以及四个转速输入引脚的逻辑电平。GPIO0-GPIO3 分别对应 (风扇) 转速计 1-4。通过读取 sysfs 文件 gpio 中的位掩码来读取所有八个 GPIO。最低有效位 (LSB) 是 GPIO0,最高有效位 (MSB) 是 GPIO7。

LM93 特有的 sysfs 文件

文件

描述

prochot<n>

当前 #PROCHOT %

prochot<n>_avg

移动平均 #PROCHOT %

prochot<n>_max

限制 #PROCHOT %

prochot_short

启用或禁用逻辑 #PROCHOT 引脚短接

prochot<n>_override

强制将 #PROCHOT 置位为 PWM

prochot_override_duty_cycle

当 #PROCHOT 被覆盖时使用的 PWM 信号的占空比

prochot<n>_interval

#PROCHOT PWM 采样间隔

vrdhot<n>

0 表示复位,1 表示置位

fan<n>_smart_tach

启用或禁用智能转速计模式

pwm<n>_auto_channels

选择 PWM 输出的控制源

pwm<n>_auto_spinup_min

启动期间的最小占空比

pwm<n>_auto_spinup_time

启动持续时间

pwm_auto_prochot_ramp

当 #PROCHOT 置位时每步的斜坡上升时间

pwm_auto_vrdhot_ramp

当 #VRDHOT 置位时每步的斜坡上升时间

temp<n>_auto_base

温度通道基础值

temp<n>_auto_offset[1-12]

温度通道偏移量

temp<n>_auto_offset_hyst

温度通道偏移量滞后

temp<n>_auto_boost

温度通道加速 (PWM 至 100%) 限制

temp<n>_auto_boost_hyst

温度通道加速滞后

gpio

8 个 GPIO 引脚的输入状态;只读