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 功能時提供的支援。