内核驱动 i2c-i801

支持的适配器
  • Intel 82801AA 和 82801AB(ICH 和 ICH0 - '810' 和 '810E' 芯片组的一部分)

  • Intel 82801BA(ICH2 - '815E' 芯片组的一部分)

  • Intel 82801CA/CAM(ICH3)

  • Intel 82801DB (ICH4) (支持硬件 PEC)

  • Intel 82801EB/ER (ICH5) (支持硬件 PEC)

  • Intel 6300ESB

  • Intel 82801FB/FR/FW/FRW (ICH6)

  • Intel 82801G (ICH7)

  • Intel 631xESB/632xESB (ESB2)

  • Intel 82801H (ICH8)

  • Intel 82801I (ICH9)

  • Intel EP80579 (Tolapai)

  • Intel 82801JI (ICH10)

  • Intel 5/3400 系列 (PCH)

  • Intel 6 系列 (PCH)

  • Intel Patsburg (PCH)

  • Intel DH89xxCC (PCH)

  • Intel Panther Point (PCH)

  • Intel Lynx Point (PCH)

  • Intel Avoton (SOC)

  • Intel Wellsburg (PCH)

  • Intel Coleto Creek (PCH)

  • Intel Wildcat Point (PCH)

  • Intel BayTrail (SOC)

  • Intel Braswell (SOC)

  • Intel Sunrise Point (PCH)

  • Intel Kaby Lake (PCH)

  • Intel DNV (SOC)

  • Intel Broxton (SOC)

  • Intel Lewisburg (PCH)

  • Intel Gemini Lake (SOC)

  • Intel Cannon Lake (PCH)

  • Intel Cedar Fork (PCH)

  • Intel Ice Lake (PCH)

  • Intel Comet Lake (PCH)

  • Intel Elkhart Lake (PCH)

  • Intel Tiger Lake (PCH)

  • Intel Jasper Lake (SOC)

  • Intel Emmitsburg (PCH)

  • Intel Alder Lake (PCH)

  • Intel Raptor Lake (PCH)

  • Intel Meteor Lake (SOC 和 PCH)

  • Intel Birch Stream (SOC)

  • Intel Arrow Lake (SOC)

  • Intel Panther Lake (SOC)

数据手册:在 Intel 网站上公开提供

在 Intel Patsburg 和更新的芯片组上,支持普通的主机 SMBus 控制器和额外的“集成设备功能”控制器。

作者

模块参数

  • disable_features(位向量)

禁用设备通常支持的选定功能。如果相关功能由于任何原因无法按预期工作,这可以解决可能的驱动程序或硬件错误。位值

0x01

禁用 SMBus PEC

0x02

禁用块缓冲区

0x08

禁用 I2C 块读取功能

0x10

不使用中断

0x20

禁用 SMBus 主机通知

描述

ICH(正式名称为 82801AA)、ICH0 (82801AB)、ICH2 (82801BA)、ICH3 (82801CA/CAM) 和更新的设备 (PCH) 是 Intel 芯片,是 Intel 用于基于 Celeron 的 PC 的“810”芯片组、基于 Pentium 的 PC 的“810E”芯片组、“815E”芯片组等的一部分。

ICH 芯片在两个逻辑 PCI 设备中包含至少七个单独的 PCI 功能。lspci 的输出将显示类似于以下内容

00:1e.0 PCI bridge: Intel Corporation: Unknown device 2418 (rev 01)
00:1f.0 ISA bridge: Intel Corporation: Unknown device 2410 (rev 01)
00:1f.1 IDE interface: Intel Corporation: Unknown device 2411 (rev 01)
00:1f.2 USB Controller: Intel Corporation: Unknown device 2412 (rev 01)
00:1f.3 Unknown class [0c05]: Intel Corporation: Unknown device 2413 (rev 01)

SMBus 控制器是设备 1f 中的功能 3。类 0c05 是 SMBus 串行控制器。

至少在 SMBus 控制器中,ICH 芯片与 Intel 的 PIIX4 芯片非常相似。

进程调用支持

82801EB (ICH5) 及更新的芯片支持块进程调用。

I2C 块读取支持

82801EB (ICH5) 及更新的芯片支持 I2C 块读取。

SMBus 2.0 支持

82801DB (ICH4) 及更新的芯片支持多个 SMBus 2.0 功能。

中断支持

82801EB (ICH5) 及更新的芯片支持 PCI 中断支持。

隐藏的 ICH SMBus

如果您的系统有一个 Intel ICH 南桥,但在 lspci 中看不到 00:1f.3 处的 SMBus 设备,并且您无法在 BIOS 中找到任何方法来启用它,则表示它已被 BIOS 代码隐藏。华硕以首次在其 P4B 主板上执行此操作而闻名,之后许多其他主板也采用了此操作。一些供应商的机器也受到影响。

首先要尝试的是 “i2c-scmi” ACPI 驱动程序。可能是 SMBus 被故意隐藏,因为它将由 ACPI 驱动。如果 i2c-scmi 驱动程序对您有效,请忘记 i2c-i801 驱动程序,不要尝试取消隐藏 ICH SMBus。即使 i2c-scmi 不起作用,您最好确保 ACPI 代码没有使用 SMBus。尝试加载“fan”和“thermal”驱动程序,并在 /sys/class/thermal 中检查。如果您找到类型为“acpitz”的热区,则很可能是 ACPI 正在访问 SMBus,最好不要取消隐藏它。只有在确定 ACPI 没有使用 SMBus 后,您才能尝试取消隐藏它。

为了取消隐藏 SMBus,我们需要在内核枚举 PCI 设备之前更改 PCI 寄存器的值。这在 drivers/pci/quirks.c 中完成,其中必须列出所有受影响的主板(请参阅函数 asus_hides_smbus_hostbridge)。如果 SMBus 设备丢失,并且您认为 SMBus 上有一些有趣的东西(例如,硬件监控芯片),则需要将您的主板添加到列表中。

使用主机桥 PCI 设备的子供应商 ID 和子设备 ID 来识别主板。使用 lspci -n -v -s 00:00.0 获取您的 ID。

00:00.0 Class 0600: 8086:2570 (rev 02)
        Subsystem: 1043:80f2
        Flags: bus master, fast devsel, latency 0
        Memory at fc000000 (32-bit, prefetchable) [size=32M]
        Capabilities: [e4] #09 [2106]
        Capabilities: [a0] AGP version 3.0

这里主机桥 ID 是 2570 (82865G/PE/P),子供应商 ID 是 1043(华硕),子设备 ID 是 80f2 (P4P800-X)。您可以在 include/linux/pci_ids.h 中找到桥 ID 和子供应商 ID 的符号名称,然后在 drivers/pci/quirks.c 中正确的位置为您子设备 ID 添加一个案例。然后请进行非常好的测试,以确保取消隐藏的 SMBus 不会与例如 ACPI 冲突。

如果它工作正常、证明有用(即,SMBus 上有可用的芯片)并且看起来安全,请提交补丁以包含到内核中。

注意:在 lm_sensors 2.10.2 及更高版本中有一个有用的脚本,名为 unhide_ICH_SMBus(位于 prog/hotplug 中),它使用 fakephp 驱动程序来临时取消隐藏 SMBus,而无需修补和重新编译内核。如果您只是想检查隐藏的 ICH SMBus 上是否有任何有趣的东西,这将非常方便。


lm_sensors 项目衷心感谢德州仪器在初始开发此驱动程序方面的支持。

lm_sensors 项目衷心感谢 Intel 在开发此驱动程序的 SMBus 2.0 / ICH4 功能方面的支持。