Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# OhGodADecode
Decodes an entire timing strap for an AMD VBIOS.

Works with Rx straps by default. Build with -DSTRAP_R9=1 to decode R9 series straps.
19 changes: 15 additions & 4 deletions ohgodadecode.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,12 @@ int main(int argc, char **argv)
}

ASCIIHexToBinary(buf, argv[1], 96);

#ifdef DEBUG
printf("Timings = %d bytes.\n", sizeof(*Timings));
#endif

printf("MC_SEQ_RAS_TIMING: 0x%08X\n", Timings->SEQ_RAS_TIMING);
printf("TRCDW=%d ", Timings->SEQ_RAS_TIMING.TRCDW);
printf("TRCDWA=%d ", Timings->SEQ_RAS_TIMING.TRCDWA);
printf("TRCDR=%d ", Timings->SEQ_RAS_TIMING.TRCDR);
Expand All @@ -55,40 +60,46 @@ int main(int argc, char **argv)
printf("TRC=%d ", Timings->SEQ_RAS_TIMING.TRC);
printf("Pad0=%d\n\n", Timings->SEQ_RAS_TIMING.Pad0);

printf("MC_SEQ_CAS_TIMING: 0x%08X\n", Timings->SEQ_CAS_TIMING);
printf("TNOPW=%d ", Timings->SEQ_CAS_TIMING.TNOPW);
printf("TNOPR=%d ", Timings->SEQ_CAS_TIMING.TNOPR);
printf("TR2W=%d ", Timings->SEQ_CAS_TIMING.TR2W);
printf("TCCDL=%d ", Timings->SEQ_CAS_TIMING.TCCDL);
printf("TR2R=%d ", Timings->SEQ_CAS_TIMING.TR2R);
printf("TCCDS=%d ", Timings->SEQ_CAS_TIMING.TCCDS);
printf("TW2R=%d ", Timings->SEQ_CAS_TIMING.TW2R);
printf("Pad0=%d ", Timings->SEQ_CAS_TIMING.Pad0);
printf("TCL=%d ", Timings->SEQ_CAS_TIMING.TCL);
printf("Pad1=%d\n\n", Timings->SEQ_CAS_TIMING.Pad1);

printf("MC_SEQ_MISC_TIMING: 0x%08X\n", Timings->SEQ_MISC_TIMING);
printf("TRP_WRA=%d ", Timings->SEQ_MISC_TIMING.TRP_WRA);
printf("TRP_RDA=%d ", Timings->SEQ_MISC_TIMING.TRP_RDA);
printf("TRP=%d ", Timings->SEQ_MISC_TIMING.TRP);
printf("TRFC=%d ", Timings->SEQ_MISC_TIMING.TRFC);
printf("Pad0=%d \n\n", Timings->SEQ_MISC_TIMING.Pad0);

printf("MC_SEQ_MISC_TIMING2: 0x%08X\n", Timings->SEQ_MISC_TIMING2);
printf("PA2RDATA=%d ", Timings->SEQ_MISC_TIMING2.PA2RDATA);
printf("Pad0=%d ", Timings->SEQ_MISC_TIMING2.Pad0);
printf("PA2WDATA=%d ", Timings->SEQ_MISC_TIMING2.PA2WDATA);
printf("Pad1=%d ", Timings->SEQ_MISC_TIMING2.Pad1);
printf("TFAW=%d ", Timings->SEQ_MISC_TIMING2.TFAW);
printf("TCRCRL=%d ", Timings->SEQ_MISC_TIMING2.TCRCRL);
printf("TCRCWL=%d ", Timings->SEQ_MISC_TIMING2.TCRCWL);
printf("TFAW32=%d\n\n", Timings->SEQ_MISC_TIMING2.TFAW32);
printf("T32AW=%d\n\n", Timings->SEQ_MISC_TIMING2.T32AW);

printf("MC_SEQ_MISC1: 0x%08X\n", Timings->SEQ_MISC1);
printf("MC_SEQ_MISC3: 0x%08X\n", Timings->SEQ_MISC3);
printf("MC_SEQ_PMG_TIMING: 0x%08X\n", Timings->SEQ_PMG_TIMING);
printf("MC_SEQ_MISC1 (MR1/MR0): 0x%08X\n", Timings->SEQ_MISC1);
printf("MC_SEQ_MISC3: (MR5/MR4)0x%08X\n", Timings->SEQ_MISC3);
printf("MC_SEQ_MISC8: 0x%08X\n\n", Timings->SEQ_MISC8);

printf("MC_ARB_DRAM_TIMING: 0x%08X\n", Timings->ARB_DRAM_TIMING);
printf("ACTRD=%d ", Timings->ARB_DRAM_TIMING.ACTRD);
printf("ACTWR=%d ", Timings->ARB_DRAM_TIMING.ACTWR);
printf("RASMACTRD=%d ", Timings->ARB_DRAM_TIMING.RASMACTRD);
printf("RASMACTWR=%d\n\n", Timings->ARB_DRAM_TIMING.RASMACTWR);

printf("MC_ARB_DRAM_TIMING2: 0x%08X\n", Timings->ARB_DRAM_TIMING2);
printf("RAS2RAS=%d ", Timings->ARB_DRAM_TIMING2.RAS2RAS);
printf("RP=%d " , Timings->ARB_DRAM_TIMING2.RP);
printf("WRPLUSRP=%d ", Timings->ARB_DRAM_TIMING2.WRPLUSRP);
Expand Down
4 changes: 2 additions & 2 deletions ohgodadecode.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ typedef struct _SEQ_CAS_TIMING_FORMAT
uint32_t TNOPR : 2;
uint32_t TR2W : 5;
uint32_t TCCDL : 3;
uint32_t TR2R : 4;
uint32_t TCCDS : 4;
uint32_t TW2R : 5;
uint32_t Pad0 : 3;
uint32_t TCL : 5;
Expand Down Expand Up @@ -101,7 +101,7 @@ typedef struct _SEQ_MISC_TIMING2_FORMAT
uint32_t TFAW : 5;
uint32_t TCRCRL : 3;
uint32_t TCRCWL : 5;
uint32_t TFAW32 : 4;
uint32_t T32AW : 4;
uint32_t Pad2 : 3;
uint32_t TWDATATR : 4;
} SEQ_MISC_TIMING2_FORMAT;
Expand Down