--- a/psdkla/board-support/ti-u-boot-2024.04+git/drivers/ram/k3-ddrss/k3-ddrss.c +++ b/psdkla/board-support/ti-u-boot-2024.04+git/drivers/ram/k3-ddrss/k3-ddrss.c @@ -4,7 +4,8 @@ * * Copyright (C) 2020-2021 Texas Instruments Incorporated - https://www.ti.com/ */ - static void k3_ddrss_set_ecc_range_r0(u32 base, u64 start_address, u64 size) @@ -782,9 +786,30 @@ static void k3_ddrss_lpddr4_ecc_init(struct k3_ddrss_desc *ddrss) writel(val, base + DDRSS_ECC_CTRL_REG); } +static void k3_lpddr4_MRR(struct k3_ddrss_desc *ddrss, uint32_t rank, uint32_t mr) +{ + uint32_t rank_read, channelA_MRval, channelB_MRval; + + uint32_t readModelRegVal = (0x10000U | ((rank & 1U) << 8U) | (mr & 0xFFU)); + uint64_t mmrValue = 0U; + uint8_t mmrStatus = 0U; + + lpddr4_obj *driverdt = ddrss->driverdt; + lpddr4_privatedata *pd = &ddrss->pd; + + driverdt->getmmrregister(pd, readModelRegVal, &mmrValue, &mmrStatus); + + rank_read = (uint32_t)(mmrValue >> 32U); + channelA_MRval = (uint32_t)(mmrValue & 0xFFU); + channelB_MRval = (uint32_t)((mmrValue & 0xFF0000) >> 16U); + printf("Rank [%d], MR [%d]\n", rank_read, mr); + printf("\tChannel A:0x%02x\n", channelA_MRval); + printf("\tChannel B:0x%02x\n", channelB_MRval); +} + static int k3_ddrss_probe(struct udevice *dev) { - int ret; + int ret, i; struct k3_ddrss_desc *ddrss = dev_get_priv(dev); debug("%s(dev=%p)\n", __func__, dev); @@ -828,7 +853,8 @@ static int k3_ddrss_probe(struct udevice *dev) ddrss->ecc_regions[0].range = ddrss->ddr_ram_size - ddrss->ecc_reserved_space; k3_ddrss_lpddr4_ecc_init(ddrss); } - + for(i=0; i<64; i++) + k3_lpddr4_MRR(ddrss, 0, i); return ret; }