mb/google/{eve,glados}: Copy channel arrays separately

DqByteMapCh0 and DqByteMapCh1 are declared adjacently in the
FSP_M_CONFIG struct, so it is tempting to begin memcpy at the address of
the first array and overwrite both of them at once. However, FSP_M_CONFIG
is not declared with the packed attribute, so this is not guaranteed to
work and is undefined behaviour to boot. It is cleaner and less tricky
to copy them independently. The same is true for DqsMapCpu2DramCh0 and
DqsMapCpu2DramCh1, so we change those as well.

Change-Id: If394f14c4a39d6787ae31868241229646c26be7a
Signed-off-by: Jacob Garber <jgarber1@ualberta.ca>
Found-by: Coverity CID 1365730, 14013{38,39,40,42,43}
Reviewed-on: https://review.coreboot.org/c/coreboot/+/33066
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Jacob Garber 2019-05-29 10:59:30 -06:00 committed by Patrick Georgi
parent 12ef4f2d71
commit ed316bc39c
8 changed files with 60 additions and 30 deletions

View File

@ -40,8 +40,10 @@ void mainboard_memory_init_params(FSPM_UPD *mupd)
/* Rcomp target */ /* Rcomp target */
const u16 rcomp_target[] = { 100, 40, 40, 23, 40 }; const u16 rcomp_target[] = { 100, 40, 40, 23, 40 };
memcpy(&mem_cfg->DqByteMapCh0, dq_map, sizeof(dq_map)); memcpy(&mem_cfg->DqByteMapCh0, dq_map[0], sizeof(dq_map[0]));
memcpy(&mem_cfg->DqsMapCpu2DramCh0, dqs_map, sizeof(dqs_map)); memcpy(&mem_cfg->DqByteMapCh1, dq_map[1], sizeof(dq_map[1]));
memcpy(&mem_cfg->DqsMapCpu2DramCh0, dqs_map[0], sizeof(dqs_map[0]));
memcpy(&mem_cfg->DqsMapCpu2DramCh1, dqs_map[1], sizeof(dqs_map[1]));
memcpy(&mem_cfg->RcompResistor, rcomp_resistor, sizeof(rcomp_resistor)); memcpy(&mem_cfg->RcompResistor, rcomp_resistor, sizeof(rcomp_resistor));
memcpy(&mem_cfg->RcompTarget, rcomp_target, sizeof(rcomp_target)); memcpy(&mem_cfg->RcompTarget, rcomp_target, sizeof(rcomp_target));

View File

@ -39,10 +39,14 @@ void variant_memory_init_params(
/* Rcomp target */ /* Rcomp target */
const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 }; const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 };
memcpy(memory_params->DqByteMapCh0, dq_map, memcpy(memory_params->DqByteMapCh0, dq_map[0],
sizeof(memory_params->DqByteMapCh0) * 2); sizeof(memory_params->DqByteMapCh0));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map, memcpy(memory_params->DqByteMapCh1, dq_map[1],
sizeof(memory_params->DqsMapCpu2DramCh0) * 2); sizeof(memory_params->DqByteMapCh1));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map[0],
sizeof(memory_params->DqsMapCpu2DramCh0));
memcpy(memory_params->DqsMapCpu2DramCh1, dqs_map[1],
sizeof(memory_params->DqsMapCpu2DramCh1));
memcpy(memory_params->RcompResistor, RcompResistor, memcpy(memory_params->RcompResistor, RcompResistor,
sizeof(memory_params->RcompResistor)); sizeof(memory_params->RcompResistor));
memcpy(memory_params->RcompTarget, RcompTarget, memcpy(memory_params->RcompTarget, RcompTarget,

View File

@ -41,10 +41,14 @@ void variant_memory_init_params(
/* Rcomp target */ /* Rcomp target */
const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 }; const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 };
memcpy(memory_params->DqByteMapCh0, dq_map, memcpy(memory_params->DqByteMapCh0, dq_map[0],
sizeof(memory_params->DqByteMapCh0) * 2); sizeof(memory_params->DqByteMapCh0));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map, memcpy(memory_params->DqByteMapCh1, dq_map[1],
sizeof(memory_params->DqsMapCpu2DramCh0) * 2); sizeof(memory_params->DqByteMapCh1));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map[0],
sizeof(memory_params->DqsMapCpu2DramCh0));
memcpy(memory_params->DqsMapCpu2DramCh1, dqs_map[1],
sizeof(memory_params->DqsMapCpu2DramCh1));
memcpy(memory_params->RcompResistor, RcompResistor, memcpy(memory_params->RcompResistor, RcompResistor,
sizeof(memory_params->RcompResistor)); sizeof(memory_params->RcompResistor));
memcpy(memory_params->RcompTarget, RcompTarget, memcpy(memory_params->RcompTarget, RcompTarget,

View File

@ -41,10 +41,14 @@ void variant_memory_init_params(
/* Rcomp target */ /* Rcomp target */
const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 }; const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 };
memcpy(memory_params->DqByteMapCh0, dq_map, memcpy(memory_params->DqByteMapCh0, dq_map[0],
sizeof(memory_params->DqByteMapCh0) * 2); sizeof(memory_params->DqByteMapCh0));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map, memcpy(memory_params->DqByteMapCh1, dq_map[1],
sizeof(memory_params->DqsMapCpu2DramCh0) * 2); sizeof(memory_params->DqByteMapCh1));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map[0],
sizeof(memory_params->DqsMapCpu2DramCh0));
memcpy(memory_params->DqsMapCpu2DramCh1, dqs_map[1],
sizeof(memory_params->DqsMapCpu2DramCh1));
memcpy(memory_params->RcompResistor, RcompResistor, memcpy(memory_params->RcompResistor, RcompResistor,
sizeof(memory_params->RcompResistor)); sizeof(memory_params->RcompResistor));
memcpy(memory_params->RcompTarget, RcompTarget, memcpy(memory_params->RcompTarget, RcompTarget,

View File

@ -41,10 +41,14 @@ void variant_memory_init_params(
/* Rcomp target */ /* Rcomp target */
const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 }; const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 };
memcpy(memory_params->DqByteMapCh0, dq_map, memcpy(memory_params->DqByteMapCh0, dq_map[0],
sizeof(memory_params->DqByteMapCh0) * 2); sizeof(memory_params->DqByteMapCh0));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map, memcpy(memory_params->DqByteMapCh1, dq_map[1],
sizeof(memory_params->DqsMapCpu2DramCh0) * 2); sizeof(memory_params->DqByteMapCh1));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map[0],
sizeof(memory_params->DqsMapCpu2DramCh0));
memcpy(memory_params->DqsMapCpu2DramCh1, dqs_map[1],
sizeof(memory_params->DqsMapCpu2DramCh1));
memcpy(memory_params->RcompResistor, RcompResistor, memcpy(memory_params->RcompResistor, RcompResistor,
sizeof(memory_params->RcompResistor)); sizeof(memory_params->RcompResistor));
memcpy(memory_params->RcompTarget, RcompTarget, memcpy(memory_params->RcompTarget, RcompTarget,

View File

@ -41,10 +41,14 @@ void variant_memory_init_params(
/* Rcomp target */ /* Rcomp target */
const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 }; const u16 RcompTarget[5] = { 100, 40, 40, 23, 40 };
memcpy(memory_params->DqByteMapCh0, dq_map, memcpy(memory_params->DqByteMapCh0, dq_map[0],
sizeof(memory_params->DqByteMapCh0) * 2); sizeof(memory_params->DqByteMapCh0));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map, memcpy(memory_params->DqByteMapCh1, dq_map[1],
sizeof(memory_params->DqsMapCpu2DramCh0) * 2); sizeof(memory_params->DqByteMapCh1));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map[0],
sizeof(memory_params->DqsMapCpu2DramCh0));
memcpy(memory_params->DqsMapCpu2DramCh1, dqs_map[1],
sizeof(memory_params->DqsMapCpu2DramCh1));
memcpy(memory_params->RcompResistor, RcompResistor, memcpy(memory_params->RcompResistor, RcompResistor,
sizeof(memory_params->RcompResistor)); sizeof(memory_params->RcompResistor));
memcpy(memory_params->RcompTarget, RcompTarget, memcpy(memory_params->RcompTarget, RcompTarget,

View File

@ -58,10 +58,14 @@ void variant_memory_init_params(
if (spd_index == K4E6E304EB_MEM_ID) if (spd_index == K4E6E304EB_MEM_ID)
targeted_rcomp = StrengthendRcompTarget; targeted_rcomp = StrengthendRcompTarget;
memcpy(params->DqByteMapCh0, dq_map, memcpy(params->DqByteMapCh0, dq_map[0],
sizeof(params->DqByteMapCh0) * 2); sizeof(params->DqByteMapCh0));
memcpy(params->DqsMapCpu2DramCh0, dqs_map, memcpy(params->DqByteMapCh1, dq_map[1],
sizeof(params->DqsMapCpu2DramCh0) * 2); sizeof(params->DqByteMapCh1));
memcpy(params->DqsMapCpu2DramCh0, dqs_map[0],
sizeof(params->DqsMapCpu2DramCh0));
memcpy(params->DqsMapCpu2DramCh1, dqs_map[1],
sizeof(params->DqsMapCpu2DramCh1));
memcpy(params->RcompResistor, RcompResistor, memcpy(params->RcompResistor, RcompResistor,
sizeof(params->RcompResistor)); sizeof(params->RcompResistor));
memcpy(params->RcompTarget, targeted_rcomp, memcpy(params->RcompTarget, targeted_rcomp,

View File

@ -51,10 +51,14 @@ void variant_memory_init_params(
if (spd_index == K4E6E304EE_MEM_ID) if (spd_index == K4E6E304EE_MEM_ID)
targeted_rcomp = StrengthendRcompTarget; targeted_rcomp = StrengthendRcompTarget;
memcpy(memory_params->DqByteMapCh0, dq_map, memcpy(memory_params->DqByteMapCh0, dq_map[0],
sizeof(memory_params->DqByteMapCh0) * 2); sizeof(memory_params->DqByteMapCh0));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map, memcpy(memory_params->DqByteMapCh1, dq_map[1],
sizeof(memory_params->DqsMapCpu2DramCh0) * 2); sizeof(memory_params->DqByteMapCh1));
memcpy(memory_params->DqsMapCpu2DramCh0, dqs_map[0],
sizeof(memory_params->DqsMapCpu2DramCh0));
memcpy(memory_params->DqsMapCpu2DramCh1, dqs_map[1],
sizeof(memory_params->DqsMapCpu2DramCh1));
memcpy(memory_params->RcompResistor, RcompResistor, memcpy(memory_params->RcompResistor, RcompResistor,
sizeof(memory_params->RcompResistor)); sizeof(memory_params->RcompResistor));
memcpy(memory_params->RcompTarget, targeted_rcomp, memcpy(memory_params->RcompTarget, targeted_rcomp,