Attention is currently required from: Julius Werner. Moritz Fischer has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/50888 )
Change subject: soc/rockchip/rk3399/sdram: Use rank_mask in WDQL training ......................................................................
soc/rockchip/rk3399/sdram: Use rank_mask in WDQL training
Add rank_mask based on the rank number and iterate based on that rather than iterating all values.
Note: LPDDR4 uses a different rank mask.
Signed-off-by: Moritz Fischer moritzf@google.com Change-Id: I1bff9d20d3d66984c49073aa21212708039d578f --- M src/soc/rockchip/rk3399/sdram.c 1 file changed, 11 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/88/50888/1
diff --git a/src/soc/rockchip/rk3399/sdram.c b/src/soc/rockchip/rk3399/sdram.c index efa820a..194197a 100644 --- a/src/soc/rockchip/rk3399/sdram.c +++ b/src/soc/rockchip/rk3399/sdram.c @@ -847,12 +847,22 @@ { u32 *denali_pi = rk3399_ddr_pi[channel]->denali_pi; u32 rank = params->ch[channel].rank; + u32 rank_mask; u32 i, tmp;
/* clear interrupt,PI_175 PI_INT_ACK:WR:0:17 */ write32(&denali_pi[175], 0x00003f7c);
- for (i = 0; i < rank; i++) { + /* required rank mask is different for LPDDR4 */ + if (params->dramtype == LPDDR4) + rank_mask = (rank == 1) ? 0x5 : 0xf; + else + rank_mask = (rank == 1) ? 0x1 : 0x3; + + for (i = 0; i < 4; i++) { + if (!(rank_mask & (1 << i))) + continue; + select_per_cs_training_index(channel, i); /* * disable PI_WDQLVL_VREF_EN before wdq leveling?