1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (C) 2018 Marvell International Ltd. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * https://spdx.org/licenses 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #include <arch_helpers.h> 9*91f16700Schasinglulu #include <common/debug.h> 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <mv_ddr_if.h> 12*91f16700Schasinglulu #include <plat_marvell.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* 15*91f16700Schasinglulu * This function may modify the default DRAM parameters 16*91f16700Schasinglulu * based on information received from SPD or bootloader 17*91f16700Schasinglulu * configuration located on non volatile storage 18*91f16700Schasinglulu */ 19*91f16700Schasinglulu void plat_marvell_dram_update_topology(void) 20*91f16700Schasinglulu { 21*91f16700Schasinglulu } 22*91f16700Schasinglulu 23*91f16700Schasinglulu /* 24*91f16700Schasinglulu * This struct provides the DRAM training code with 25*91f16700Schasinglulu * the appropriate board DRAM configuration 26*91f16700Schasinglulu */ 27*91f16700Schasinglulu static struct mv_ddr_topology_map board_topology_map = { 28*91f16700Schasinglulu /* FIXME: MISL board 2CS 4Gb x8 devices of micron - 2133P */ 29*91f16700Schasinglulu DEBUG_LEVEL_ERROR, 30*91f16700Schasinglulu 0x1, /* active interfaces */ 31*91f16700Schasinglulu /* cs_mask, mirror, dqs_swap, ck_swap X subphys */ 32*91f16700Schasinglulu { { { {0x3, 0x2, 0, 0}, 33*91f16700Schasinglulu {0x3, 0x2, 0, 0}, 34*91f16700Schasinglulu {0x3, 0x2, 0, 0}, 35*91f16700Schasinglulu {0x3, 0x2, 0, 0}, 36*91f16700Schasinglulu {0x3, 0x2, 0, 0}, 37*91f16700Schasinglulu {0x3, 0x2, 0, 0}, 38*91f16700Schasinglulu {0x3, 0x2, 0, 0}, 39*91f16700Schasinglulu {0x3, 0x2, 0, 0}, 40*91f16700Schasinglulu {0x3, 0x2, 0, 0} }, 41*91f16700Schasinglulu SPEED_BIN_DDR_2133P, /* speed_bin */ 42*91f16700Schasinglulu MV_DDR_DEV_WIDTH_8BIT, /* sdram device width */ 43*91f16700Schasinglulu MV_DDR_DIE_CAP_4GBIT, /* die capacity */ 44*91f16700Schasinglulu MV_DDR_FREQ_SAR, /* frequency */ 45*91f16700Schasinglulu 0, 0, /* cas_l, cas_wl */ 46*91f16700Schasinglulu MV_DDR_TEMP_LOW} }, /* temperature */ 47*91f16700Schasinglulu MV_DDR_32BIT_ECC_PUP8_BUS_MASK, /* subphys mask */ 48*91f16700Schasinglulu MV_DDR_CFG_DEFAULT, /* ddr configuration data source */ 49*91f16700Schasinglulu NOT_COMBINED, /* ddr twin-die combined*/ 50*91f16700Schasinglulu { {0} }, /* raw spd data */ 51*91f16700Schasinglulu {0}, /* timing parameters */ 52*91f16700Schasinglulu { /* electrical configuration */ 53*91f16700Schasinglulu { /* memory electrical configuration */ 54*91f16700Schasinglulu MV_DDR_RTT_NOM_PARK_RZQ_DISABLE, /* rtt_nom */ 55*91f16700Schasinglulu { 56*91f16700Schasinglulu MV_DDR_RTT_NOM_PARK_RZQ_DIV4, /* rtt_park 1cs */ 57*91f16700Schasinglulu MV_DDR_RTT_NOM_PARK_RZQ_DIV1 /* rtt_park 2cs */ 58*91f16700Schasinglulu }, 59*91f16700Schasinglulu { 60*91f16700Schasinglulu MV_DDR_RTT_WR_DYN_ODT_OFF, /* rtt_wr 1cs */ 61*91f16700Schasinglulu MV_DDR_RTT_WR_RZQ_DIV2 /* rtt_wr 2cs */ 62*91f16700Schasinglulu }, 63*91f16700Schasinglulu MV_DDR_DIC_RZQ_DIV7 /* dic */ 64*91f16700Schasinglulu }, 65*91f16700Schasinglulu { /* phy electrical configuration */ 66*91f16700Schasinglulu MV_DDR_OHM_30, /* data_drv_p */ 67*91f16700Schasinglulu MV_DDR_OHM_30, /* data_drv_n */ 68*91f16700Schasinglulu MV_DDR_OHM_30, /* ctrl_drv_p */ 69*91f16700Schasinglulu MV_DDR_OHM_30, /* ctrl_drv_n */ 70*91f16700Schasinglulu { 71*91f16700Schasinglulu MV_DDR_OHM_60, /* odt_p 1cs */ 72*91f16700Schasinglulu MV_DDR_OHM_120 /* odt_p 2cs */ 73*91f16700Schasinglulu }, 74*91f16700Schasinglulu { 75*91f16700Schasinglulu MV_DDR_OHM_60, /* odt_n 1cs */ 76*91f16700Schasinglulu MV_DDR_OHM_120 /* odt_n 2cs */ 77*91f16700Schasinglulu }, 78*91f16700Schasinglulu }, 79*91f16700Schasinglulu { /* mac electrical configuration */ 80*91f16700Schasinglulu MV_DDR_ODT_CFG_NORMAL, /* odtcfg_pattern */ 81*91f16700Schasinglulu MV_DDR_ODT_CFG_ALWAYS_ON, /* odtcfg_write */ 82*91f16700Schasinglulu MV_DDR_ODT_CFG_NORMAL, /* odtcfg_read */ 83*91f16700Schasinglulu }, 84*91f16700Schasinglulu } 85*91f16700Schasinglulu }; 86*91f16700Schasinglulu 87*91f16700Schasinglulu struct mv_ddr_topology_map *mv_ddr_topology_map_get(void) 88*91f16700Schasinglulu { 89*91f16700Schasinglulu /* Return the board topology as defined in the board code */ 90*91f16700Schasinglulu return &board_topology_map; 91*91f16700Schasinglulu } 92