Kernel driver i2c-i801

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

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

  • Intel 82801CA/CAM (ICH3)

  • Intel 82801DB (ICH4) (支持 HW PEC)

  • Intel 82801EB/ER (ICH5) (支持 HW 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 及更高版本的芯片组上,同时支持正常的 host SMBus 控制器和额外的 “集成设备功能” 控制器。

作者

模块参数

  • disable_features (位向量)

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

0x01

禁用 SMBus PEC

0x02

禁用块缓冲区

0x08

禁用 I2C 块读取功能

0x10

不使用中断

0x20

禁用 SMBus Host Notify

描述

ICH(正确称为 82801AA)、ICH0 (82801AB)、ICH2 (82801BA)、ICH3 (82801CA/CAM) 和更高版本的设备 (PCH) 是 Intel 芯片,是 Intel 的 ‘810’ 芯片组(用于基于 Celeron 的 PC)、‘810E’ 芯片组(用于基于 Pentium 的 PC)、‘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 芯片非常相似。

Process Call 支持

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 上有一些有趣的东西(例如,硬件监控芯片),你需要将你的主板添加到列表中。

主板使用 host bridge PCI 设备的子供应商和子设备 ID 来标识。使用 lspci -n -v -s 00:00.0 获取你的信息

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

这里,host bridge ID 是 2570 (82865G/PE/P),子供应商 ID 是 1043 (Asus),子设备 ID 是 80f2 (P4P800-X)。你可以在 include/linux/pci_ids.h 中找到 bridge 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 功能时提供的支持。