Hi Marc,
I'm working on v3 and K8 setup. Right now, we try to determine whether we rebooted because of INIT by looking at bit 11 of MTRRdefType because it survives INIT and doesn't survive a cold or warm reboot. Although this is a nice generic way, we can only read it early in stage0 asm because we clobber it late in stage0 asm.
HyperTransport Initialization Control Register Function 0 Offset 6Ch Bit 6: InitDet looks exactly like what we want for that, and it is not clobbered. Quoting from a really old BKDG (26094 Rev. 3.30 February 2006): "INIT Detect (InitDet)—Bit 6. This bit may be used to distinguish between an INIT and a warm/cold reset by setting the bit to 1 before an initialization event is generated. This bit is cleared by a warm or cold reset but not by an INIT." Newer BKDGs say the same, so my question is how far back into the past (in terms of CPUs supported by coreboot v2) and how far into the future we can rely on this. It would certainly allow our stage0/stage1 code to enjoy a cleaner design, not to mention improved readability.
Regards, Carl-Daniel