I need having two microcode version for the same CPU to understand which one is newer (includes fixes from another). Microcode version is not monotonous so it can decrease with an update.
Based on what I have seen microcode version is a number less than 0x1000 but in some cases it has higher bits also set e.g. 0x2000064
My observation is microcode version decreases with an update only by zeroing those higher part and low part is always growth.
Does anyone have understanding of how the version number is formed: what is encoded in higher part and does low part really always grows?
Thank you.
Each microcode update has a revision. The version can only be increased (enforced by the operating system), but the processor itself does not enforce that.
(Non-ancient Intel processors do enforce some no-downgrade barriers, but it is not based on the microcode update revision number. It looks at some undocumented fields inside the microcode update itself).
The microcode revision number is a 32 bit, signed number. There is no processor-enforced structure to it. Apparently, some Intel microcode teams that work with particular micro-architectures appear to have structured it a bit to ease their work.
For future reference: https://manpages.debian.org/unstable/iucode-tool/iucode_tool.8.en.html https://github.com/platomav/MCExtractor/wiki/Intel-Microcode-Extra-Undocumented-Header