nb/intel/sandybridge: Clarify command timing calculation
Command timing is the absolute value of the most negative `pi_coding` value across all ranks, or zero if there are no negative values. Use the MAX() macro to ease proving that `cmd_delay` can never be negative, and then drop the always-false underflow check. The variable type for `cmd_delay` still needs to be signed because of the comparisons with `pi_coding`, which is a signed value. Using an unsigned type would result in undefined and also undesired behavior. Change-Id: I714d3cf57d0f62376a1107af63bcd761f952bc3a Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/49320 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Nico Huber <nico.h@gmx.de>
This commit is contained in:
parent
0a7d99c089
commit
7519ca42b5
|
@ -938,16 +938,11 @@ void program_timings(ramctr_timing *ctrl, int channel)
|
||||||
u32 clk_logic_dly = 0;
|
u32 clk_logic_dly = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Apply command delay if desired setting is negative. Find the
|
* Compute command timing as abs() of the most negative PI code
|
||||||
* most negative value: 'cmd_delay' will be the absolute value.
|
* across all ranks. Use zero if none of the values is negative.
|
||||||
*/
|
*/
|
||||||
FOR_ALL_POPULATED_RANKS {
|
FOR_ALL_POPULATED_RANKS {
|
||||||
if (cmd_delay < -ctrl->timings[channel][slotrank].pi_coding)
|
cmd_delay = MAX(cmd_delay, -ctrl->timings[channel][slotrank].pi_coding);
|
||||||
cmd_delay = -ctrl->timings[channel][slotrank].pi_coding;
|
|
||||||
}
|
|
||||||
if (cmd_delay < 0) {
|
|
||||||
printk(BIOS_ERR, "C%d command delay underflow: %d\n", channel, cmd_delay);
|
|
||||||
cmd_delay = 0;
|
|
||||||
}
|
}
|
||||||
if (cmd_delay > CCC_MAX_PI) {
|
if (cmd_delay > CCC_MAX_PI) {
|
||||||
printk(BIOS_ERR, "C%d command delay overflow: %d\n", channel, cmd_delay);
|
printk(BIOS_ERR, "C%d command delay overflow: %d\n", channel, cmd_delay);
|
||||||
|
|
Loading…
Reference in New Issue