util/inteltool: Use appropriate channel for printing timings
At least one channel must be present, so print an error if there is not. However, we cannot always assume it will be the first channel, so make the appropriate selection when printing the timings. Found-by: Coverity Scan #1370{584,585,588,589,590-596,600} Signed-off-by: Jacob Garber <jgarber1@ualberta.ca> Change-Id: I6b59989242e498474782876302e0850e3e4cf2d3 Reviewed-on: https://review.coreboot.org/c/coreboot/+/32713 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
parent
7528f83444
commit
a75440739d
|
@ -97,6 +97,11 @@ void ivybridge_dump_timings(const char *dump_spd_file)
|
||||||
rankmap[channel] = read_mchbar32(0xc14 + 0x100 * channel) >> 24;
|
rankmap[channel] = read_mchbar32(0xc14 + 0x100 * channel) >> 24;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((rankmap[0] == 0) && (rankmap[1] == 0)) {
|
||||||
|
fputs("Error: no memory channels found\n", stderr);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
two_channels = rankmap[0] && rankmap[1];
|
two_channels = rankmap[0] && rankmap[1];
|
||||||
|
|
||||||
mr0[0] = read_mchbar32(0x0004);
|
mr0[0] = read_mchbar32(0x0004);
|
||||||
|
@ -172,49 +177,52 @@ void ivybridge_dump_timings(const char *dump_spd_file)
|
||||||
|
|
||||||
printf(".reg_4004_b30 = { %d, %d },\n", reg_4004_b30[0],
|
printf(".reg_4004_b30 = { %d, %d },\n", reg_4004_b30[0],
|
||||||
reg_4004_b30[1]);
|
reg_4004_b30[1]);
|
||||||
|
|
||||||
|
channel = (rankmap[0] != 0) ? 0 : 1;
|
||||||
|
|
||||||
if (two_channels && tFAW[0] != tFAW[1])
|
if (two_channels && tFAW[0] != tFAW[1])
|
||||||
printf("/* tFAW mismatch: %d, %d */\n", tFAW[0], tFAW[1]);
|
printf("/* tFAW mismatch: %d, %d */\n", tFAW[0], tFAW[1]);
|
||||||
print_time("tFAW", tFAW[0], tCK);
|
print_time("tFAW", tFAW[channel], tCK);
|
||||||
if (two_channels && tWTR[0] != tWTR[1])
|
if (two_channels && tWTR[0] != tWTR[1])
|
||||||
printf("/* tWTR mismatch: %d, %d */\n", tWTR[0], tWTR[1]);
|
printf("/* tWTR mismatch: %d, %d */\n", tWTR[0], tWTR[1]);
|
||||||
print_time("tWTR", tWTR[0], tCK);
|
print_time("tWTR", tWTR[channel], tCK);
|
||||||
if (two_channels && tCKE[0] != tCKE[1])
|
if (two_channels && tCKE[0] != tCKE[1])
|
||||||
printf("/* tCKE mismatch: %d, %d */\n", tCKE[0], tCKE[1]);
|
printf("/* tCKE mismatch: %d, %d */\n", tCKE[0], tCKE[1]);
|
||||||
print_time("tCKE", tCKE[0], tCK);
|
print_time("tCKE", tCKE[channel], tCK);
|
||||||
if (two_channels && tRTP[0] != tRTP[1])
|
if (two_channels && tRTP[0] != tRTP[1])
|
||||||
printf("/* tRTP mismatch: %d, %d */\n", tRTP[0], tRTP[1]);
|
printf("/* tRTP mismatch: %d, %d */\n", tRTP[0], tRTP[1]);
|
||||||
print_time("tRTP", tRTP[0], tCK);
|
print_time("tRTP", tRTP[channel], tCK);
|
||||||
if (two_channels && tRRD[0] != tRRD[1])
|
if (two_channels && tRRD[0] != tRRD[1])
|
||||||
printf("/* tRRD mismatch: %d, %d */\n", tRRD[0], tRRD[1]);
|
printf("/* tRRD mismatch: %d, %d */\n", tRRD[0], tRRD[1]);
|
||||||
print_time("tRRD", tRRD[0], tCK);
|
print_time("tRRD", tRRD[channel], tCK);
|
||||||
|
|
||||||
if (two_channels && tRAS[0] != tRAS[1])
|
if (two_channels && tRAS[0] != tRAS[1])
|
||||||
printf("/* tRAS mismatch: %d, %d */\n", tRAS[0], tRAS[1]);
|
printf("/* tRAS mismatch: %d, %d */\n", tRAS[0], tRAS[1]);
|
||||||
print_time("tRAS", tRAS[0], tCK);
|
print_time("tRAS", tRAS[channel], tCK);
|
||||||
|
|
||||||
if (two_channels && tCWL[0] != tCWL[1])
|
if (two_channels && tCWL[0] != tCWL[1])
|
||||||
printf("/* tCWL mismatch: %d, %d */\n", tCWL[0], tCWL[1]);
|
printf("/* tCWL mismatch: %d, %d */\n", tCWL[0], tCWL[1]);
|
||||||
print_time("tCWL", tCWL[0], tCK);
|
print_time("tCWL", tCWL[channel], tCK);
|
||||||
|
|
||||||
if (two_channels && tRP[0] != tRP[1])
|
if (two_channels && tRP[0] != tRP[1])
|
||||||
printf("/* tRP mismatch: %d, %d */\n", tRP[0], tRP[1]);
|
printf("/* tRP mismatch: %d, %d */\n", tRP[0], tRP[1]);
|
||||||
print_time("tRP", tRP[0], tCK);
|
print_time("tRP", tRP[channel], tCK);
|
||||||
|
|
||||||
if (two_channels && tRCD[0] != tRCD[1])
|
if (two_channels && tRCD[0] != tRCD[1])
|
||||||
printf("/* tRCD mismatch: %d, %d */\n", tRCD[0], tRCD[1]);
|
printf("/* tRCD mismatch: %d, %d */\n", tRCD[0], tRCD[1]);
|
||||||
print_time("tRCD", tRCD[0], tCK);
|
print_time("tRCD", tRCD[channel], tCK);
|
||||||
|
|
||||||
if (two_channels && tXPDLL[0] != tXPDLL[1])
|
if (two_channels && tXPDLL[0] != tXPDLL[1])
|
||||||
printf("/* tXPDLL mismatch: %d, %d */\n", tXPDLL[0], tXPDLL[1]);
|
printf("/* tXPDLL mismatch: %d, %d */\n", tXPDLL[0], tXPDLL[1]);
|
||||||
print_time("tXPDLL", tXPDLL[0], tCK);
|
print_time("tXPDLL", tXPDLL[channel], tCK);
|
||||||
|
|
||||||
if (two_channels && tXP[0] != tXP[1])
|
if (two_channels && tXP[0] != tXP[1])
|
||||||
printf("/* tXP mismatch: %d, %d */\n", tXP[0], tXP[1]);
|
printf("/* tXP mismatch: %d, %d */\n", tXP[0], tXP[1]);
|
||||||
print_time("tXP", tXP[0], tCK);
|
print_time("tXP", tXP[channel], tCK);
|
||||||
|
|
||||||
if (two_channels && tAONPD[0] != tAONPD[1])
|
if (two_channels && tAONPD[0] != tAONPD[1])
|
||||||
printf("/* tAONPD mismatch: %d, %d */\n", tAONPD[0], tAONPD[1]);
|
printf("/* tAONPD mismatch: %d, %d */\n", tAONPD[0], tAONPD[1]);
|
||||||
print_time("tAONPD", tAONPD[0], tCK);
|
print_time("tAONPD", tAONPD[channel], tCK);
|
||||||
|
|
||||||
reg = read_mchbar32(0x4298);
|
reg = read_mchbar32(0x4298);
|
||||||
if (reg != read_mchbar32(0x4698) && two_channels)
|
if (reg != read_mchbar32(0x4698) && two_channels)
|
||||||
|
|
Loading…
Reference in New Issue