内核驱动 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 兼容的两线数字接口。使用 8 位 ADC,LM93 测量两个远程二极管连接晶体管以及自身芯片和 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 还可以通过在其中一个或两个引脚上驱动 PWM 信号来覆盖 #PROCHOT 引脚。当被覆盖时,该信号的周期为 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 的值表示 h/w 选择的当前占空比。

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”禁用绑定。h/w 默认值为 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 引脚的输入状态;只读