All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthew Bettencourt <matthew.bettencourt@gmail.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [BUG] SPD5118 Intermittent MR11 Corruption During Suspend/Resume
Date: Wed, 2 Sep 2026 09:00:24 -0500	[thread overview]
Message-ID: <9cdf4b63-8f99-4a80-b0be-3f3df69e526e@gmail.com> (raw)
In-Reply-To: <a953dcaa-cfff-40c8-85a9-c12601e49e85@roeck-us.net>

Hello Guenter,

 > It would be something like
 >
 > sudo acpidump > acpi.log
 > acpixtract acpi.log
 > iasl -d *.dat
 >
 > You'll get a number of.dsl files with cryptic assembler-style
 > code and data. Then the digging starts ... you may find something
 > like "Name (SMB0, 0x0B00)" in dsdt.dsl. Then we can only hope to
 > figure out if ACPI actually accesses it.

That wasn't as hard as I thought. I got everything decoding I guess, I 
just did a grep on all the dsl files for SMB.

$ grep -i -rn "SMB" *.dsl
dsdt.dsl:295:    Name (SMBB, 0x0B20)
dsdt.dsl:296:    Name (SMBL, 0x20)
dsdt.dsl:297:    Name (SMB0, 0x0B00)
dsdt.dsl:298:    Name (SMBM, 0x10)
dsdt.dsl:311:    Name (SSMB, 0xFED80200)
dsdt.dsl:3352:                                If (SMBB)
dsdt.dsl:3354:                                    CreateWordField (CRS, 
0xD2, SMB1)
dsdt.dsl:3357:                                    SMB1 = SMBB /* \SMBB */
dsdt.dsl:3358:                                    SMH1 = SMBB /* \SMBB */
dsdt.dsl:3359:                                    SML1 = SMBL /* \SMBL */
dsdt.dsl:3360:                                    CreateWordField (CRS, 
0xCA, SMBZ)
dsdt.dsl:3363:                                    SMBZ = SMB0 /* \SMB0 */
dsdt.dsl:3364:                                    SMH0 = SMB0 /* \SMB0 */
dsdt.dsl:3365:                                    SML0 = SMBM /* \SMBM */
ssdt4.dsl:4026:            SMB8,   8
ssdt4.dsl:4032:            SMB8 |= 0x40
ssdt4.dsl:4046:            Local1 = SMB8 /* \M477.SMB8 */
ssdt4.dsl:4062:            SMB8,   8
ssdt4.dsl:4065:        SMB8 |= 0x80
ssdt4.dsl:4073:            SMB0,   8,
ssdt4.dsl:4074:            SMB1,   8,
ssdt4.dsl:4075:            SMB2,   8
ssdt4.dsl:4085:                SMB0 = 0x1F
ssdt4.dsl:4100:                Local2 = SMB0 /* \M479.SMB0 */
ssdt4.dsl:4105:                SMB2 = 0x02
ssdt4.dsl:4113:        If (((SMB0 & One) != Zero))
ssdt4.dsl:4124:                SMB1 = 0x3F
ssdt4.dsl:4139:                Local2 = SMB1 /* \M479.SMB1 */
ssdt4.dsl:4144:                SMB1 = 0x02
ssdt4.dsl:4152:        If (((SMB1 & One) != Zero))
ssdt4.dsl:4173:        M460 ("  KER-ASL-CpmSmbusExecutor (Port%d, isRead 
%d, Potcl %d, DevAddr 0x%X, Cmd 0x%X)\n", Arg0, Arg1, Arg2, Arg3, Arg4, 
Zero)
ssdt4.dsl:4179:            M459 ("  KER-ASL-CpmSmbusExecutor return 
0x80\n", Zero)
ssdt4.dsl:4186:            M459 ("  KER-ASL-CpmSmbusExecutor return 
0x81\n", Zero)
ssdt4.dsl:4201:            M459 ("  KER-ASL-CpmSmbusExecutor return 
0x82\n", Zero)
ssdt4.dsl:4212:                M460 ("  KER-ASL-CpmSmbusExecutor return 
0x83, Length %d\n", Local2, Zero, Zero, Zero, Zero, Zero)
ssdt4.dsl:4223:            M460 ("  KER-ASL-CpmSmbusExecutor return 
0x84, Local4 %d\n", Local4, Zero, Zero, Zero, Zero, Zero)
ssdt4.dsl:4230:            SMB0,   8,
ssdt4.dsl:4231:            SMB1,   8,
ssdt4.dsl:4232:            SMB2,   8,
ssdt4.dsl:4233:            SMB3,   8,
ssdt4.dsl:4234:            SMB4,   8,
ssdt4.dsl:4235:            SMB5,   8,
ssdt4.dsl:4236:            SMB6,   8,
ssdt4.dsl:4237:            SMB7,   8,
ssdt4.dsl:4238:            SMB8,   8
ssdt4.dsl:4249:            Local6 = SMB2 /* \M47A.SMB2 */
ssdt4.dsl:4250:            SMB2 = (Local6 & 0x7F)
ssdt4.dsl:4257:                SMB2 = Local6
ssdt4.dsl:4267:            M459 ("  KER-ASL-CpmSmbusExecutor return 
0x85\n", Zero)
ssdt4.dsl:4275:                SMB2 = Local6
ssdt4.dsl:4286:            M459 ("  KER-ASL-CpmSmbusExecutor return 
0x86\n", Zero)
ssdt4.dsl:4294:            SMB0 = 0x1F
ssdt4.dsl:4295:            SMB4 = ((Arg3 << One) | Arg1)
ssdt4.dsl:4296:            SMB3 = Arg4
ssdt4.dsl:4297:            SMB2 = (Arg2 << 0x02)
ssdt4.dsl:4298:            Local1 = SMB2 /* \M47A.SMB2 */
ssdt4.dsl:4303:                    SMB5 = DerefOf (Local7 [One])
ssdt4.dsl:4308:                    SMB6 = DerefOf (Local7 [0x02])
ssdt4.dsl:4309:                    SMB5 = DerefOf (Local7 [One])
ssdt4.dsl:4315:                    SMB5 = Local2
ssdt4.dsl:4319:                        SMB7 = DerefOf (Local7 [Local1])
ssdt4.dsl:4327:                SMB5 = Local2
ssdt4.dsl:4330:            SMB2 = ((Arg2 << 0x02) | 0x40)
ssdt4.dsl:4350:                Local2 = SMB0 /* \M47A.SMB0 */
ssdt4.dsl:4355:                SMB2 = 0x02
ssdt4.dsl:4358:                    SMB2 = Local6
ssdt4.dsl:4369:                M459 ("  KER-ASL-CpmSmbusExecutor return 
0x87\n", Zero)
ssdt4.dsl:4379:                SMB0 = 0x08
ssdt4.dsl:4390:                        DATB = SMB5 /* \M47A.SMB5 */
ssdt4.dsl:4396:                        Local0 [0x03] = SMB6 /* \M47A.SMB6 */
ssdt4.dsl:4397:                        Local0 [0x02] = SMB5 /* \M47A.SMB5 */
ssdt4.dsl:4403:                        Local2 = SMB2 /* \M47A.SMB2 */
ssdt4.dsl:4404:                        Local2 = SMB5 /* \M47A.SMB5 */
ssdt4.dsl:4416:                            Local0 [Local1] = SMB7 /* 
\M47A.SMB7 */
ssdt4.dsl:4424:        Local1 = (SMB0 & 0x1D)
ssdt4.dsl:4426:        SMB0 = 0x1F
ssdt4.dsl:4429:            SMB2 = Local6
ssdt4.dsl:4439:        M460 ("  KER-ASL-CpmSmbusExecutor return St: 
0x%X, Len %d, Data: 0x%X, 0x%X, 0x%X, 0x%X ...\n", STAT, LEN, DerefOf 
(Local0 [0x02]), DerefOf (Local0 [
ssdt4.dsl:4497:            M460 ("  KER-ASL-CpmReadSmbusByte (%d, 0x%X, 
0x%X) = 0 Smbus Access Disable\n", Arg0, Arg1, Arg2, Zero, Zero, Zero)
ssdt4.dsl:4506:            SMB0,   8,
ssdt4.dsl:4507:            SMB1,   8,
ssdt4.dsl:4508:            SMB2,   8,
ssdt4.dsl:4509:            SMB3,   8,
ssdt4.dsl:4510:            SMB4,   8,
ssdt4.dsl:4511:            SMB5,   8,
ssdt4.dsl:4512:            SMB6,   8,
ssdt4.dsl:4513:            SMB7,   8,
ssdt4.dsl:4514:            SMB8,   8
ssdt4.dsl:4525:            Local6 = SMB2 /* \M409.SMB2 */
ssdt4.dsl:4526:            SMB2 = (Local6 & 0x7F)
ssdt4.dsl:4533:            SMB8 |= 0x10
ssdt4.dsl:4536:            Local1 = SMB8 /* \M409.SMB8 */
ssdt4.dsl:4546:                SMB0 = 0x1F
ssdt4.dsl:4549:                Local1 = SMB0 /* \M409.SMB0 */
ssdt4.dsl:4554:                SMB2 = 0x02
ssdt4.dsl:4567:                SMB2 = Local6
ssdt4.dsl:4576:            M460 ("  KER-ASL-CpmReadSmbusByte (%d, 0x%X, 
0x%X) = 0 ERROR 1\n", Arg0, Arg1, Arg2, Zero, Zero, Zero)
ssdt4.dsl:4587:                SMB1 = 0x3F
ssdt4.dsl:4590:                Local1 = SMB1 /* \M409.SMB1 */
ssdt4.dsl:4595:                SMB1 = 0x02
ssdt4.dsl:4608:                SMB2 = Local6
ssdt4.dsl:4617:            M460 ("  KER-ASL-CpmReadSmbusByte (%d, 0x%X, 
0x%X) = 0 ERROR 2\n", Arg0, Arg1, Arg2, Zero, Zero, Zero)
ssdt4.dsl:4624:            SMB0 = 0x1F
ssdt4.dsl:4625:            SMB4 = ((Arg1 << One) | One)
ssdt4.dsl:4626:            SMB3 = Arg2
ssdt4.dsl:4627:            SMB2 = 0x08
ssdt4.dsl:4628:            Local1 = SMB2 /* \M409.SMB2 */
ssdt4.dsl:4629:            SMB2 = 0x48
ssdt4.dsl:4639:                    Local1 = SMB0 /* \M409.SMB0 */
ssdt4.dsl:4644:                    SMB2 = 0x02
ssdt4.dsl:4647:                        SMB2 = Local6
ssdt4.dsl:4656:                    M460 ("  KER-ASL-CpmReadSmbusByte 
(%d, 0x%X, 0x%X) = 0 ERROR 3\n", Arg0, Arg1, Arg2, Zero, Zero, Zero)
ssdt4.dsl:4662:                Local1 = SMB0 /* \M409.SMB0 */
ssdt4.dsl:4672:                SMB0 = 0x08
ssdt4.dsl:4679:                Local4 = SMB5 /* \M409.SMB5 */
ssdt4.dsl:4683:        SMB0 = 0x1F
ssdt4.dsl:4684:        SMB8 |= 0x20
ssdt4.dsl:4687:            SMB2 = Local6
ssdt4.dsl:4696:        M460 ("  KER-ASL-CpmReadSmbusByte (%d, 0x%X, 
0x%X) = 0x%X Success\n", Arg0, Arg1, Arg2, Local4, Zero, Zero)
ssdt4.dsl:4705:            M460 ("  KER-ASL-CpmWriteSmbusByte (%d, 0x%X, 
0x%X, 0x%X) = 0 Smbus Access Disable\n", Arg0, Arg1, Arg2, Arg3, Zero, Zero)
ssdt4.dsl:4714:            SMB0,   8,
ssdt4.dsl:4715:            SMB1,   8,
ssdt4.dsl:4716:            SMB2,   8,
ssdt4.dsl:4717:            SMB3,   8,
ssdt4.dsl:4718:            SMB4,   8,
ssdt4.dsl:4719:            SMB5,   8,
ssdt4.dsl:4720:            SMB6,   8,
ssdt4.dsl:4721:            SMB7,   8,
ssdt4.dsl:4722:            SMB8,   8
ssdt4.dsl:4733:            Local6 = SMB2 /* \M410.SMB2 */
ssdt4.dsl:4734:            SMB2 = (Local6 & 0x7F)
ssdt4.dsl:4741:            SMB8 |= 0x10
ssdt4.dsl:4744:            Local1 = SMB8 /* \M410.SMB8 */
ssdt4.dsl:4754:                SMB0 = 0x1F
ssdt4.dsl:4757:                Local1 = SMB0 /* \M410.SMB0 */
ssdt4.dsl:4762:                SMB2 = 0x02
ssdt4.dsl:4775:                SMB2 = Local6
ssdt4.dsl:4784:            M460 ("  KER-ASL-CpmWriteSmbusByte (%d, 0x%X, 
0x%X, 0x%X) = 0 ERROR 1\n", Arg0, Arg1, Arg2, Arg3, Zero, Zero)
ssdt4.dsl:4795:                SMB1 = 0x3F
ssdt4.dsl:4798:                Local1 = SMB1 /* \M410.SMB1 */
ssdt4.dsl:4803:                SMB1 = 0x02
ssdt4.dsl:4816:                SMB2 = Local6
ssdt4.dsl:4825:            M460 ("  KER-ASL-CpmWriteSmbusByte (%d, 0x%X, 
0x%X, 0x%X) = 0 ERROR 2\n", Arg0, Arg1, Arg2, Arg3, Zero, Zero)
ssdt4.dsl:4832:            SMB0 = 0x1F
ssdt4.dsl:4833:            SMB4 = (Arg1 << One)
ssdt4.dsl:4834:            SMB3 = Arg2
ssdt4.dsl:4835:            SMB2 = 0x08
ssdt4.dsl:4836:            Local1 = SMB2 /* \M410.SMB2 */
ssdt4.dsl:4837:            SMB5 = Arg3
ssdt4.dsl:4838:            SMB2 = 0x48
ssdt4.dsl:4848:                    Local1 = SMB0 /* \M410.SMB0 */
ssdt4.dsl:4853:                    SMB2 = 0x02
ssdt4.dsl:4856:                        SMB2 = Local6
ssdt4.dsl:4865:                    M460 ("  KER-ASL-CpmWriteSmbusByte 
(%d, 0x%X, 0x%X, 0x%X) = 0 ERROR 3\n", Arg0, Arg1, Arg2, Arg3, Zero, Zero)
ssdt4.dsl:4871:                Local1 = SMB0 /* \M410.SMB0 */
ssdt4.dsl:4881:                SMB0 = 0x08
ssdt4.dsl:4892:        SMB0 = 0x1F
ssdt4.dsl:4893:        SMB8 |= 0x20
ssdt4.dsl:4896:            SMB2 = Local6
ssdt4.dsl:4905:        M460 ("  KER-ASL-CpmWriteSmbusByte (%d, 0x%X, 
0x%X, 0x%X) Success\n", Arg0, Arg1, Arg2, Arg3, Zero, Zero)


On 9/1/26 10:19 PM, Guenter Roeck wrote:
> Hi Matthew,
> 
> On 9/1/26 19:14, Matthew Bettencourt wrote:
>> Hello Guetner,
>>
>> I believe I implemented the print port correctly, below is the dmesg 
>> and piix4_sb800_port_sel() function.
>>
>>  > Another idea might be to decode the ACPI data and see if there is 
>> anything
>>  > in there which accesses the SMBus controller.
>>
>> I have no problem grabbing the ACPI data or whatever is needed, just 
>> might need a little bit of guidance on that front. I am OK at c code 
>> with some AI help but never really delved into ACPI.
>>
> 
> It would be something like
> 
> sudo acpidump > acpi.log
> acpixtract acpi.log
> iasl -d *.dat
> 
> You'll get a number of.dsl files with cryptic assembler-style
> code and data. Then the digging starts ... you may find something
> like "Name (SMB0, 0x0B00)" in dsdt.dsl. Then we can only hope to
> figure out if ACPI actually accesses it.
> 
>> And one last thing I greatly appreciate all the time and effort you 
>> are putting into this. I would definitely not have been able to get 
>> this far without your help.
>>
> My pleasure.
> 
>> --- CMD=0b
>> [19462.122064] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.123074] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.123109] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.124081] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.124115] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.125067] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.125074] [  T21668] spd5118 12-0053: PRE BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x00
>> [19462.125094] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.126064] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.126072] [  T21683] spd5118 12-0051: PRE BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x00
>> [19462.126088] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.127545] [  T21668] i2c i2c-12: [PIIX4 ERROR TRACE TRIGGERED] 
>> result=0
>>                          STEP 1 (PRE-START)    : CNT=08, CMD=0b, 
>> ADD=a7, DAT0=00, DAT1=18
>>                          STEP 2 (START BIT SET): CNT=08, CMD=0b, 
>> ADD=a7, DAT0=00, DAT1=18
>>                          STEP 3 (POST-WAIT)    : STS=00, CNT=08, 
>> CMD=01, ADD=45, DAT0=ff, DAT1=18
>>                          STEP 4 (POST-CLEANUP) : CNT=08, CMD=01, 
>> ADD=45, DAT0=ff, DAT1=18
> 
> Now we'll need to know the port number here (or even better at each step),
> so some duplication of piix4_sb800_port_sel() which only reads the port
> number will be needed.
> 
> Note that this may not help at all - whatever entity is modifying the 
> registers
> may not change the port number.
> 
> Thanks,
> Guenter
> 
>> [19462.127556] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.127582] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.128217] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.128240] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.128894] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.128920] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.129561] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.129588] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.130227] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.130255] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.130894] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.130919] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.131560] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.131584] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.132226] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.132249] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.132882] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.132904] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.133555] [  T21683] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.133563] [  T21683] spd5118 12-0051: POST BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x00
>> [19462.133581] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.134238] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19462.134244] [  T21668] spd5118 12-0053: POST BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x08
>>
>> --- CMD=1a
>> [19664.445821] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.446491] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.446531] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.447201] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.447235] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.447890] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.447903] [  T21712] spd5118 12-0053: PRE BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x00
>> [19664.447923] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.448574] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.448581] [  T21668] spd5118 12-0051: PRE BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x00
>> [19664.448601] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.449239] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.449264] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.449886] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.449910] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.451402] [  T21712] i2c i2c-12: [PIIX4 ERROR TRACE TRIGGERED] 
>> result=0
>>                              STEP 1 (PRE-START)    : CNT=08, CMD=1a, 
>> ADD=a7, DAT0=00, DAT1=18
>>                              STEP 2 (START BIT SET): CNT=08, CMD=1a, 
>> ADD=a7, DAT0=00, DAT1=18
>>                              STEP 3 (POST-WAIT)    : STS=00, CNT=08, 
>> CMD=01, ADD=45, DAT0=ff, DAT1=18
>>                              STEP 4 (POST-CLEANUP) : CNT=08, CMD=01, 
>> ADD=45, DAT0=ff, DAT1=18
>> [19664.451414] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.451438] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.452398] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.452423] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.453393] [  T21712] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.453400] [  T21712] spd5118 12-0053: POST BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x00
>> [19664.453417] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.454396] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.454417] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.454883] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.454904] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.455541] [  T21668] piix4_smbus: PORT SEL -> requested=0x00 | 
>> hardware_was=0x00 | writing=0x07
>> [19664.455549] [  T21668] spd5118 12-0051: POST BIT UPDATE: SUSPEND 
>> MR11 (0x0B) -> Cache: 0x00 | Bus: 0x00
>>
>>
>> ---
>> int piix4_sb800_port_sel(u8 port, struct sb800_mmio_cfg *mmio_cfg)
>> {
>>      u8 smba_en_lo, val, prev_port;
>>
>>      if (mmio_cfg->use_mmio) {
>>          smba_en_lo = ioread8(mmio_cfg->addr + piix4_port_sel_sb800);
>>          val = (smba_en_lo & ~piix4_port_mask_sb800) | port;
>>          if (smba_en_lo != val)
>>              iowrite8(val, mmio_cfg->addr + piix4_port_sel_sb800);
>>
>>          prev_port = smba_en_lo & piix4_port_mask_sb800;
>>      } else {
>>          outb_p(piix4_port_sel_sb800, SB800_PIIX4_SMB_IDX);
>>          smba_en_lo = inb_p(SB800_PIIX4_SMB_IDX + 1);
>>
>>          val = (smba_en_lo & ~piix4_port_mask_sb800) | port;
>>          if (smba_en_lo != val)
>>              outb_p(val, SB800_PIIX4_SMB_IDX + 1);
>>
>>          prev_port = smba_en_lo & piix4_port_mask_sb800;
>>      }
>>
>>      /* Always print port state on every function call */
>>      pr_info("piix4_smbus: PORT SEL -> requested=0x%02x | 
>> hardware_was=0x%02x | writing=0x%02x\n",
>>              port, prev_port, val);
>>
>>      return prev_port;
>> }
>>
>>
>> Thanks,
>> Matthew
>> On 9/1/26 8:32 PM, Guenter Roeck wrote:
>>> On 9/1/26 17:57, Matthew Bettencourt wrote:
>>>> Hello Guenter,
>>>>
>>>> These are the only boot up messages I see for SMBus/i2c/piix4
>>>>
>>>> [    1.848113] [    T272] i2c_dev: i2c /dev entries driver
>>>> [    6.093885] [    T727] piix4_smbus 0000:00:14.0: SMBus Host 
>>>> Controller at 0xb00, revision 0
>>>> [    6.093888] [    T727] piix4_smbus 0000:00:14.0: Using register 
>>>> 0x02 for SMBus port selection
>>>
>>> So bus 12 and 13 share the same controller address.
>>>
>>> There is one more thing we can try: Print the selected port before 
>>> and after
>>> the access. The code to access the port number is in 
>>> piix4_sb800_port_sel().
>>> If we are "lucky", we may find that the selected port changed.
>>>
>>> Unfortunately that isn't going to help much since we'd still have
>>> to figure out where that happens.
>>>
>>> Another idea might be to decode the ACPI data and see if there is 
>>> anything
>>> in there which accesses the SMBus controller.
>>>
>>> Thanks,
>>> Guenter
>>>
>>>> [    6.095020] [    T727] i2c i2c-12: Successfully instantiated SPD 
>>>> at 0x51
>>>> [    6.095981] [    T727] i2c i2c-12: Successfully instantiated SPD 
>>>> at 0x53
>>>> [    6.096039] [    T727] piix4_smbus 0000:00:14.0: Auxiliary SMBus 
>>>> Host Controller at 0xb20
>>>>
>>>>
>>>> I don't see anything on bus 13 or 14, I added 10-12 as well for good 
>>>> measure.
>>>> # sudo i2cdetect -y -a 14
>>>>       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>>>> 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> # sudo i2cdetect -y -a 13
>>>>       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>>>> 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> # sudo i2cdetect -y -a 12
>>>>       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>>>> 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 10: -- -- -- -- -- 15 -- -- -- -- -- -- -- -- -- --
>>>> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 40: -- -- -- -- -- -- -- -- -- 49 -- 4b -- -- -- --
>>>> 50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- --
>>>> 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 70: -- 71 -- 73 -- -- -- -- -- -- -- -- -- -- 7e --
>>>> # sudo i2cdetect -y -a 11
>>>>       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>>>> 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 30: 30 -- -- -- -- -- -- 37 -- -- -- -- -- -- -- --
>>>> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> # sudo i2cdetect -y -a 10
>>>>       0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
>>>> 00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>> 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>>>>
>>>>
>>>>
>>>>
>>
> 


  reply	other threads:[~2026-09-02 14:00 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-30 23:21 [BUG] SPD5118 Intermittent MR11 Corruption During Suspend/Resume Matthew Bettencourt
2026-08-31 15:12 ` Guenter Roeck
2026-08-31 17:28   ` Guenter Roeck
2026-08-31 23:36     ` Matthew Bettencourt
     [not found]     ` <37132c40-aa82-4df1-b5ce-337601f3c085@gmail.com>
     [not found]       ` <3c4e9f59-5272-48cf-a4a0-eeefcba955a9@roeck-us.net>
2026-09-01  0:16         ` Matthew Bettencourt
2026-09-01  3:10           ` Guenter Roeck
2026-09-01 16:31             ` Matthew Bettencourt
2026-09-01 17:04               ` Guenter Roeck
2026-09-01 20:53                 ` Matthew Bettencourt
2026-09-01 22:36                   ` Guenter Roeck
2026-09-02  0:57                     ` Matthew Bettencourt
2026-09-02  1:32                       ` Guenter Roeck
2026-09-02  2:14                         ` Matthew Bettencourt
2026-09-02  3:19                           ` Guenter Roeck
2026-09-02 14:00                             ` Matthew Bettencourt [this message]
2026-09-02 14:52                               ` Guenter Roeck
2026-09-02 15:26                                 ` Matthew Bettencourt
2026-09-02 17:21                                   ` Guenter Roeck
2026-09-02 17:37                                     ` Matthew Bettencourt
2026-09-02 16:57                               ` Armin Wolf
2026-09-02 17:08                                 ` Matthew Bettencourt
2026-09-02 17:22                                   ` Armin Wolf
2026-09-02 17:28                                     ` Matthew Bettencourt
2026-09-02 19:19                                       ` Armin Wolf
2026-09-02 19:25                                         ` Matthew Bettencourt
2026-09-02 19:31                                           ` Armin Wolf
2026-09-02 19:40                                             ` Matthew Bettencourt
2026-09-02 19:51                                               ` Armin Wolf
2026-09-03 18:01                                                 ` Matthew Bettencourt
2026-09-03 18:16                                                   ` Guenter Roeck
2026-09-03 18:25                                                     ` Matthew Bettencourt
2026-09-03 21:05                                                       ` Guenter Roeck
2026-09-03 22:47                                                         ` Armin Wolf
2026-09-04  0:24                                                           ` Matthew Bettencourt
2026-09-04 17:58                                                             ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9cdf4b63-8f99-4a80-b0be-3f3df69e526e@gmail.com \
    --to=matthew.bettencourt@gmail.com \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.