irusanov / ZenTimings

https://zentimings.com/
GNU General Public License v3.0
345 stars 18 forks source link

[Feature Request] List AGESA version in ZenTimings #3

Open GhostlyCrowd opened 4 years ago

GhostlyCrowd commented 4 years ago

First of all thanks for the great tool.

If possible id like to have the AGESA version included in Zen timings as I use its screenshot to archive timings that work, and across AGESA versions things can change.

For example what was working on ComboAM4v2PI 1.0.0.2 for ProcODT and the CMD drive strengths did not work at all on ComboAM4v2PI 1.0.8.1. So for archiving purposes and to track results and what is working best for my hardware including this read out in the app might be beneficial to some.

irusanov commented 4 years ago

I don't know how to read AGESA version. If I ever find how, will also like to include it.

CfYz-R commented 3 years ago

Can you look into this utility for AGESA information? https://github.com/LeagueRaINi/Zen2-SMU-Checker

Or this is only extracted from files, not from running BIOS?

irusanov commented 3 years ago

It searches files in binary mode for a byte sequence to get the AGESA version string. It's definitely possible to get that on a running system, since CPUZ and AIDA64 show it, unless it is a lookup table. Both tools are not open-source.

patrickschur commented 3 years ago

CPU-Z and AIDA64 can't show you the AGESA version (at least not for ComboAM4v2). The only way I know of is to read from the SPI flash. That's something you can do very easily via SMN. The SPI flash memory starts at address 0x44000000 in the SMN space. But this will only work on Zen 3 and I think on Zen 2 CPUs (I'm not sure about this).

Here is an example I wrote which shows you how to read from the SPI flash: https://gist.github.com/patrickschur/a093be96c91264e7092cc2ba95616ee4

The next step is to find the version in the actual binary. Since OEMs have started to compress their UEFI images even more, you won't be able to find the version. So you need to find the right volume and decompress it.

There are several places you can look for, but I would look up the version in the AmdVersionDxe file. That's the only file I know of that always contains the version and has always the same GUID (29D40F30-E8BF-4803-88A6-4247A29A5318).

The file itself is in a LZMA compressed volume (9E21FD93-9C72-4C15-8C4B-E77F1DB2D792) and the volume again can be found in the FFSv2 volume (4F1C52D3-D824-4D2A-A2F0-EC40C23C5916).

image

The tricky part here is to find the volume. I don't have a reasonable solution for this except to read the complete binary. Maybe the UEFI specification will help you out.

And here is an example which shows you how I read the AGESA version from an UEFI image: https://gist.github.com/patrickschur/ea11d1e22ac9bd83d026bc75db59d642

I hope this helps you. ;)