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.
