If you see the VRAM info table is declared with offset and lenght, and so are all tables:
View attachment 519205
So if you change/add any length to any table, then you would have to cascade the following offsets and most likely the total length, wherever that is declared.
View attachment 519207
edit
I may be wrong, but I'm trying to stay away from this sort of rom editing because I believe it will be incredibly difficult if at all possible. It's usually not the same thing to change some info than it is to add info.
check this links: before editing timings and after
This is a debug build, skipping update check. Open a AMD Polaris VBIOS file to see it's some detalie
www.diffchecker.com
Diffchecker will compare text to find the difference between two text files. Just paste your files and click Find Difference!
www.diffchecker.com
EDIT1:
As you see, the only value is mismatch by offset is power related. So possibly the only thing which protect video bios from inserts is power configs. So protection just will not power on gpu. So if we find out where jump to power table is located, we can change it and we will be able to get rom working!
EDIT2.
Interesting article about reading vrom
EDIT3.
I have a feeling that I found jump to offset. So now need to find string in and out to compare it with other vbioses. Possibly the rom tables are easy build as they are initialize on early stage and gpu chipset uses no force to decompile or execute.
EDIT4.
finaly found reverse offsets to power tables and patched it
Xml report here:
Timings patch by search reverse ofsett - This is a debug build, skipping update check. Open a AMD Polaris VBIOS file to see it's some detalie
www.diffchecker.com
Not tested yet.
Adding two Files:
Before timings insert and reverse offset jumps.zip
After timings insert and reverse offset jumps.zip
Only reasonable problem
before
<VoltageObjectInfo>49580 = 0xC1AC = 0b1100000110101100</VoltageObjectInfo>
after
<VoltageObjectInfo>50412 = 0xC4EC = 0b1100010011101100</VoltageObjectInfo>
EDIT5.
I compare this line with 3 versions of vbios
Original MXM (Timings extracted)
<VoltageObjectInfo>43640 = 0xAA78 = 0b1010101001111000</VoltageObjectInfo>
HP vbios from G4 bios
<VoltageObjectInfo>49580 = 0xC1AC = 0b1100000110101100</VoltageObjectInfo>
HP vbios from G4 bios (Timings inserted)
<VoltageObjectInfo>50412 = 0xC4EC = 0b1100010011101100</VoltageObjectInfo>
EDIT6.
Also done some offset test for polaris bios editor, by forcing adding FFFFFFFFF empty space after every efi image, starting from the end of the file, deleted GOP, as i don`t need garbage for patching. So if you compare files in
Vaughn_emptyspaces_and_original.zip, you will see, that the last strokes before insert of empty space are related to voltages. I randomly (in another file) added any values after stroke, and Polaris bios editor even not recognize any changes in XML, so possibly this line ending the main gpu bios (base components and hardware control).
28 00 03 01 01 07 0C 00 12 00 00 00 00 00 00 00 02 00 18 00 00 02 00 00 00 00 00 40 00 00 00 00 46 05 00 00 00 40 DC 05 28 00 03 01 FF FF FF 00 7D 00 B8 0B 01 00 00 00 FF FF FF 00 C8 00 4E 0C 02 00 00 00
EDIT7.
P.S. VIDEO OUTPUTS Are located before Vram sections
EDIT8.
I read Polaris opencode and didnt find any important relationship "VoltageObjectInfo" to BIOS values
AND I FOUND SOME IMPORTANT INFO ON POLARIS BIOS GITHUB PROJECT
IMPORTANT:
You need to disable SecureBoot / Activate CSM in your
Motherboard UEFI because the modification will make
the cryptographic signature invalid.
EDIT9.
And about memory trainings, you was interested in: