Created attachment 297185 [details] dmesg Problem: On boot, i801_smbus reports these errors: [ 3.221208] i801_smbus 0000:00:1f.4: SPD Write Disable is set [ 3.221247] i801_smbus 0000:00:1f.4: SMBus using PCI interrupt [ 3.423566] i801_smbus 0000:00:1f.4: Timeout waiting for interrupt! [ 3.423569] i801_smbus 0000:00:1f.4: Transaction timeout [ 3.425564] i801_smbus 0000:00:1f.4: Failed terminating the transaction [ 3.425603] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! Tested on Arch Linux / Gentoo, kernel 5.10.27, 5.12.x HW: Lenovo Ideapad 5 15ITL05 i5-1135G7, latest firmware Attempted fixes so far: disabling all other drivers accessing SMBus, using different SMBus access methods lspci -k reports the driver loading correctly: 00:1f.4 SMBus: Intel Corporation Tiger Lake-LP SMBus Controller (rev 20) Subsystem: Lenovo Tiger Lake-LP SMBus Controller Kernel driver in use: i801_smbus Kernel modules: i2c_i801 lm_sensors seems to have issues detecting SMBus: Found unknown SMBus adapter 8086:a0a3 at 0000:00:1f.4. i2cdetect -F output: Functionalities implemented by /dev/i2c-12: I2C no SMBus Quick Command yes SMBus Send Byte yes SMBus Receive Byte yes SMBus Write Byte yes SMBus Read Byte yes SMBus Write Word yes SMBus Read Word yes SMBus Process Call no SMBus Block Write yes SMBus Block Read yes SMBus Block Process Call yes SMBus PEC yes I2C Block Write yes I2C Block Read yes
Note: accessing the SMBus device via i2cdetect causes the flood of "i801_smbus 0000:00:1f.4: SMBus is busy, can't use it!" error messages seen in dmesg.
Created attachment 298413 [details] DSDT.dsl DSDT.dsl file for Lenovo IdeaPad 5 15ITL05 extracted from the latest FHCN57WW firmware.
https://lore.kernel.org/linux-i2c/CAJCQCtTB+KW596A1Q+Ds6u9uvUrqeOSmer6qKv7g+xRYijGS3A@mail.gmail.com/ This report describes the same issue on a Thinkpad Carbon X1 7th gen running Linux 5.14-rc3. Maybe this is a Lenovo-specific problem?
Hello, Did you try using a "i2c-i801.disable_features=0x10" Linux kernel cmdline option to disable usage of interrupts in the driver? In the dmesg you have: [ 3.221208] i801_smbus 0000:00:1f.4: SPD Write Disable is set [ 3.221247] i801_smbus 0000:00:1f.4: SMBus using PCI interrupt [ 3.222484] i2c i2c-12: 2/2 memory slots populated (from DMI) [...] [ 3.423566] i801_smbus 0000:00:1f.4: Timeout waiting for interrupt! [ 3.423569] i801_smbus 0000:00:1f.4: Transaction timeout [ 3.425564] i801_smbus 0000:00:1f.4: Failed terminating the transaction [ 3.425603] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! It is possible that the SMBus hangs while trying to access SPD EEPROM chips located on RAM modules. So blacklisting the "eeprom" and "at24" modules may help here. Why do you specifically want to access SMBus / the I2C bus? Is there a piece of hardware on the laptop that does not work?
Try also blacklisting the "i2c-i801" module and loading it manually ("modprobe i2c-i801 disable_features=0x10") after the laptop has finished booting. The problems may be caused by something other accessing the i2c bus during boot.
Hello. I did the "boot with the cmdline option" thing and "blacklist and then modprobe" thing so far, and I've seen this pop up on dmesg [ 104.545429] i801_smbus 0000:00:1f.4: Interrupt disabled by user [ 104.545691] i801_smbus 0000:00:1f.4: SPD Write Disable is set [ 104.545714] i801_smbus 0000:00:1f.4: SMBus using polling [ 104.546865] i2c i2c-14: 2/2 memory slots populated (from DMI) [ 104.549764] iTCO_vendor_support: vendor-support=0 [ 104.747810] i801_smbus 0000:00:1f.4: Transaction timeout [ 104.749912] i801_smbus 0000:00:1f.4: Failed terminating the transaction [ 104.749970] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 104.760558] iTCO_wdt iTCO_wdt: Found a Intel PCH TCO device (Version=6, TCOBASE=0x0400) [ 104.760629] iTCO_wdt iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0) I'll try blacklisting those other modules next
It didn't do anything, and I noticed that those modules don't even get loaded by default (they're not in lsmod output on a normal boot) Also, forgot to say, I have the exact same laptop, but with an i7-1165g7 instead.
I got similar issue on thinkpad X1 gen9 with latest 6.9.0-rc4+ Git bisect the first bad commit is "13e3a512a29001c i2c: smbus: Support up to 8 SPD EEPROMs " modprobe without param: [ 1290.401393] i801_smbus 0000:00:1f.4: SPD Write Disable is set [ 1290.401486] i801_smbus 0000:00:1f.4: SMBus using PCI interrupt [ 1290.403340] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1290.403383] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1290.403410] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1290.403437] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1290.403465] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1290.403492] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1290.403519] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1290.403546] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! with param [ 1314.568785] i801_smbus 0000:00:1f.4: Interrupt disabled by user [ 1314.568837] i801_smbus 0000:00:1f.4: SPD Write Disable is set [ 1314.568894] i801_smbus 0000:00:1f.4: SMBus using polling [ 1314.570230] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1314.570257] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1314.570283] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1314.570310] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1314.570336] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1314.570362] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1314.570389] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1314.570415] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it!
Hello, > I got similar issue on thinkpad X1 gen9 with latest 6.9.0-rc4+ > Git bisect the first bad commit is "13e3a512a29001c i2c: smbus: Support up > to 8 SPD EEPROMs > " Please report it to linux-i2c@vger.kernel.org while CCing the email addresses from description of this commit. I suspect that commit 13e3a512a29001c ("i2c: smbus: Support up to 8 SPD EEPROMs") only triggered a problem that was present earlier. Does running i2cdetect on a kernel without this problem (like Linux 6.8) trigger this bug? Greetings, Mateusz
Thanks for reporting this to mail list, I tried i2cdetect on old kernel, did not see errors. But I'm not familar with i2c, not sure which option do you want me to try. Anyway, here is some output. # i2cdetect -l i2c-0 i2c Synopsys DesignWare I2C adapter I2C adapter i2c-1 smbus SMBus I801 adapter at efa0 SMBus adapter i2c-2 i2c i915 gmbus dpa I2C adapter i2c-3 i2c i915 gmbus dpb I2C adapter i2c-4 i2c i915 gmbus dpc I2C adapter i2c-5 i2c i915 gmbus tc1 I2C adapter i2c-6 i2c i915 gmbus tc2 I2C adapter i2c-7 i2c i915 gmbus tc3 I2C adapter i2c-8 i2c i915 gmbus tc4 I2C adapter i2c-9 i2c i915 gmbus tc5 I2C adapter i2c-10 i2c i915 gmbus tc6 I2C adapter i2c-11 i2c AUX A/DDI A/PHY A I2C adapter i2c-12 i2c AUX USBC1/DDI TC1/PHY TC1 I2C adapter i2c-13 i2c AUX USBC2/DDI TC2/PHY TC2 I2C adapter i2c-14 i2c AUX USBC3/DDI TC3/PHY TC3 I2C adapter i2c-15 i2c AUX USBC4/DDI TC4/PHY TC4 I2C adapter # i2cdetect -y 11 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- 37 -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- # i2cdetect -F 11 Functionalities implemented by /dev/i2c-11: I2C yes SMBus Quick Command yes SMBus Send Byte yes SMBus Receive Byte yes SMBus Write Byte yes SMBus Read Byte yes SMBus Write Word yes SMBus Read Word yes SMBus Process Call yes SMBus Block Write yes SMBus Block Read yes SMBus Block Process Call yes SMBus PEC yes I2C Block Write yes I2C Block Read yes # uname -r 6.7.9-200.fc39.x86_64
Please check i2cdetect 0 i2cdetect 1 dmidecode How many RAM modules does this computer have?
(In reply to ruirui.yang from comment #8) > I got similar issue on thinkpad X1 gen9 with latest 6.9.0-rc4+ > Git bisect the first bad commit is "13e3a512a29001c i2c: smbus: Support up > to 8 SPD EEPROMs > " > The mentioned commit showed up in 6.8 only, but the problem reports date back to at least 5.12. So I don't think this commit is the culprit. Please bisect between last known good kernel and 5.12.
6.6 kernel works fine. # i2cdetect 0 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-0. I will probe address range 0x08-0x77. Continue? [Y/n] Y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- # i2cdetect 1 Warning: Can't use SMBus Quick Write command, will skip some addresses WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-1. I will probe address range 0x08-0x77. Continue? [Y/n] Y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: 10: 20: 30: -- -- -- -- -- -- -- -- 40: 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: 70:
Created attachment 306261 [details] dmidecode output
5.12 kernel works fine to me so I think it might be different problem although the symptom is similar. I do not think I can bisect betwen 5.12 and 6.x since all works fine, the first bad commit is clear to me with my original bisect.
According to the dmidecode output you have 8 memory slots, each populated with a 4GB DIMM. Is this correct? Then with previous kernel versions you should have seen the warning "Systems with more than 4 memory slots not supported yet".
It is hard to know, the laptop is a thinkpad x1 gen9, according to below article the memory is soldered to the motherboard. But it said that the memory works in quad-channel mode, so not sure if it is just 4 channels. I have never seen the warnings, but I can have a quick test with 6.6 kernel. https://laptopmedia.com/highlights/inside-lenovo-thinkpad-x1-carbon-9th-gen-disassembly-and-upgrade-options/
Yes! I see the warnings with 6.6 kernel: [ 1.591594] i2c i2c-0: 8/8 memory slots populated (from DMI) [ 1.593214] i2c i2c-0: Systems with more than 4 memory slots not supported yet, not instantiating SPD
> --- Comment #13 from ruirui.yang@linux.dev --- > 6.6 kernel works fine. > > # i2cdetect 0 > [...] > # i2cdetect 1 > [...] Are there any warning messages in dmesg generated while you run i2cdetect?
Yes, there are something printed below: [ 777.551328] i801_smbus 0000:00:1f.4: Transaction timeout [ 777.553555] i801_smbus 0000:00:1f.4: Failed terminating the transaction [ 777.553674] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.553752] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.553824] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.553895] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.553964] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554036] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554108] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554187] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554264] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554336] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554408] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554481] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554552] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554623] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554695] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554767] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554838] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554908] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.554980] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555051] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555122] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555224] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555302] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555387] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555463] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555539] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555614] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555689] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555765] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555836] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555908] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.555980] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556050] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556121] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556193] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556264] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556336] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556408] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556478] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556552] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556624] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556696] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556766] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556837] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556909] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.556977] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557049] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557119] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557189] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557259] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557331] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557402] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557471] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557543] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557614] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557687] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557759] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557830] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557899] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.557970] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558041] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558112] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558183] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558254] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558325] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558396] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558467] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558536] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558585] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558623] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558658] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558696] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558731] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558766] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558801] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558837] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558872] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558907] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558942] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.558977] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559012] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559047] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559082] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559117] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559152] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559196] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559233] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559271] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559306] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559342] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559378] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559417] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559455] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559490] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559525] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559560] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559596] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559631] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559666] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559701] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559736] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559771] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559806] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559844] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559879] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559914] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559949] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.559984] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.560019] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.560055] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 777.560090] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it!
Hmm, comment #20 is a reply to comment #19, will use "reply" to quote the questions later.
Seems that for whatever reason bit SMBHSTSTS_HOST_BUSY is constantly set. It should be automatically cleared by the host after each SMBUS operation. Could you please test the following? It's no proper fix, it's just to test whether manually resetting the bit on i801 driver load helps. diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index a7c0c8710..a521bd4a3 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c @@ -1683,6 +1683,8 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) outb_p(inb_p(SMBAUXCTL(priv)) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv)); + outb_p(SMBHSTSTS_HOST_BUSY, SMBHSTSTS(priv)); + /* Default timeout in interrupt mode: 200 ms */ priv->adapter.timeout = HZ / 5; -- 2.45.0
(In reply to Heiner Kallweit from comment #22) > Seems that for whatever reason bit SMBHSTSTS_HOST_BUSY is constantly set. > It should be automatically cleared by the host after each SMBUS operation. > > Could you please test the following? > It's no proper fix, it's just to test whether manually resetting the bit on > i801 driver load helps. Hi, with the changes, I still got the SMBus busy messages below: [~]$ uname -r 6.9.0-rc6+ [~]$ dmesg|grep i801 [ 1.563819] i801_smbus 0000:00:1f.4: enabling device (0000 -> 0003) [ 1.565938] i801_smbus 0000:00:1f.4: SPD Write Disable is set [ 1.569900] i801_smbus 0000:00:1f.4: SMBus using PCI interrupt [ 1.776346] i801_smbus 0000:00:1f.4: Transaction timeout [ 1.780426] i801_smbus 0000:00:1f.4: Failed terminating the transaction [ 1.782933] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1.785568] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1.787947] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1.790513] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1.792779] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1.794917] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it! [ 1.797100] i801_smbus 0000:00:1f.4: SMBus is busy, can't use it!
OK, so it can start a transaction, but transaction doesn't finish. Looks like BIOS might have switched off some clock needed for SMBUS. First (failed) SMBUS access attempt is when the ee1004 driver is probed. Before the referenced change this driver wasn't instantiated (due to >4 memory slots). Having said that I think that the SMBUS wasn't usable also before. You could check under 6.6 with i2cdetect, and whether you can access the SPD EEPROM's from userspace. Simple workaround would be to blacklist ee1004 and/or i801.
Following more than 3 yrs old post for a Gen8 model seems to indicate that SMBUS access on this machine type has been problematic for years. https://forums.lenovo.com/topic/findpost/27/5048595/5181539 The bisect just points to the change that revealed the problem.