Accessing SMBus registers
Posted: Fri Jun 20, 2025 8:43 am
i'm not sure if this is the right place, but none of the other "categories" seem to fit my question.
I recently got nerd sniped, and was curious on how firmware loads SMM, so I decided to write some firmware that's only purpose is to load SMM into memory and enable SMI#. I decided to target the ICH9/Q35 chipset, and booted up the spec and just read through it. I came up with this "strategy":
I was thinking that it's somehow a typo, seeing as on page 758 it says "SMB_BASE" while on 760, it states "Register offset: SMBASE + 02h". Intel's errata document doesn't state anything about this. My question is: how do I access HST_CNT?
I read:
I recently got nerd sniped, and was curious on how firmware loads SMM, so I decided to write some firmware that's only purpose is to load SMM into memory and enable SMI#. I decided to target the ICH9/Q35 chipset, and booted up the spec and just read through it. I came up with this "strategy":
- Enable SMBus by setting HST_EN and SMB_SMI_EN bits in the SMBus PCI register, which seems to be 0x8000fb40.
- Set INTREN in the HST_CNT register. (which enables SMI#)
Code: Select all
(qemu) x/1i $eax
0xffffffff8003fbff: Cannot read memory
I read:
Which only slightly confused me more. Thanks in advance!The following SMBus registers can be accessed through I/O BAR or Memory BAR registers in PCI configuration space. The offsets are the same for both I/O and Memory Mapped I/O registers.
