12b4ffbf6SChris Packham /* SPDX-License-Identifier: GPL-2.0 */ 22b4ffbf6SChris Packham /* 32b4ffbf6SChris Packham * Copyright (C) Marvell International Ltd. and its affiliates 42b4ffbf6SChris Packham */ 52b4ffbf6SChris Packham 62b4ffbf6SChris Packham #ifndef _MV_DDR_TOPOLOGY_H 72b4ffbf6SChris Packham #define _MV_DDR_TOPOLOGY_H 82b4ffbf6SChris Packham 9*ebb1a593SChris Packham #define MAX_CS_NUM 4 10*ebb1a593SChris Packham 11*ebb1a593SChris Packham enum mv_ddr_speed_bin { 12*ebb1a593SChris Packham SPEED_BIN_DDR_800D, 13*ebb1a593SChris Packham SPEED_BIN_DDR_800E, 14*ebb1a593SChris Packham SPEED_BIN_DDR_1066E, 15*ebb1a593SChris Packham SPEED_BIN_DDR_1066F, 16*ebb1a593SChris Packham SPEED_BIN_DDR_1066G, 17*ebb1a593SChris Packham SPEED_BIN_DDR_1333F, 18*ebb1a593SChris Packham SPEED_BIN_DDR_1333G, 19*ebb1a593SChris Packham SPEED_BIN_DDR_1333H, 20*ebb1a593SChris Packham SPEED_BIN_DDR_1333J, 21*ebb1a593SChris Packham SPEED_BIN_DDR_1600G, 22*ebb1a593SChris Packham SPEED_BIN_DDR_1600H, 23*ebb1a593SChris Packham SPEED_BIN_DDR_1600J, 24*ebb1a593SChris Packham SPEED_BIN_DDR_1600K, 25*ebb1a593SChris Packham SPEED_BIN_DDR_1866J, 26*ebb1a593SChris Packham SPEED_BIN_DDR_1866K, 27*ebb1a593SChris Packham SPEED_BIN_DDR_1866L, 28*ebb1a593SChris Packham SPEED_BIN_DDR_1866M, 29*ebb1a593SChris Packham SPEED_BIN_DDR_2133K, 30*ebb1a593SChris Packham SPEED_BIN_DDR_2133L, 31*ebb1a593SChris Packham SPEED_BIN_DDR_2133M, 32*ebb1a593SChris Packham SPEED_BIN_DDR_2133N, 33*ebb1a593SChris Packham 34*ebb1a593SChris Packham SPEED_BIN_DDR_1333H_EXT, 35*ebb1a593SChris Packham SPEED_BIN_DDR_1600K_EXT, 36*ebb1a593SChris Packham SPEED_BIN_DDR_1866M_EXT 37*ebb1a593SChris Packham }; 38*ebb1a593SChris Packham 39*ebb1a593SChris Packham enum mv_ddr_freq { 40*ebb1a593SChris Packham MV_DDR_FREQ_LOW_FREQ, 41*ebb1a593SChris Packham MV_DDR_FREQ_400, 42*ebb1a593SChris Packham MV_DDR_FREQ_533, 43*ebb1a593SChris Packham MV_DDR_FREQ_667, 44*ebb1a593SChris Packham MV_DDR_FREQ_800, 45*ebb1a593SChris Packham MV_DDR_FREQ_933, 46*ebb1a593SChris Packham MV_DDR_FREQ_1066, 47*ebb1a593SChris Packham MV_DDR_FREQ_311, 48*ebb1a593SChris Packham MV_DDR_FREQ_333, 49*ebb1a593SChris Packham MV_DDR_FREQ_467, 50*ebb1a593SChris Packham MV_DDR_FREQ_850, 51*ebb1a593SChris Packham MV_DDR_FREQ_600, 52*ebb1a593SChris Packham MV_DDR_FREQ_300, 53*ebb1a593SChris Packham MV_DDR_FREQ_900, 54*ebb1a593SChris Packham MV_DDR_FREQ_360, 55*ebb1a593SChris Packham MV_DDR_FREQ_1000, 56*ebb1a593SChris Packham MV_DDR_FREQ_LAST, 57*ebb1a593SChris Packham MV_DDR_FREQ_SAR 58*ebb1a593SChris Packham }; 59*ebb1a593SChris Packham 60*ebb1a593SChris Packham enum mv_ddr_speed_bin_timing { 61*ebb1a593SChris Packham SPEED_BIN_TRCD, 62*ebb1a593SChris Packham SPEED_BIN_TRP, 63*ebb1a593SChris Packham SPEED_BIN_TRAS, 64*ebb1a593SChris Packham SPEED_BIN_TRC, 65*ebb1a593SChris Packham SPEED_BIN_TRRD1K, 66*ebb1a593SChris Packham SPEED_BIN_TRRD2K, 67*ebb1a593SChris Packham SPEED_BIN_TPD, 68*ebb1a593SChris Packham SPEED_BIN_TFAW1K, 69*ebb1a593SChris Packham SPEED_BIN_TFAW2K, 70*ebb1a593SChris Packham SPEED_BIN_TWTR, 71*ebb1a593SChris Packham SPEED_BIN_TRTP, 72*ebb1a593SChris Packham SPEED_BIN_TWR, 73*ebb1a593SChris Packham SPEED_BIN_TMOD, 74*ebb1a593SChris Packham SPEED_BIN_TXPDLL, 75*ebb1a593SChris Packham SPEED_BIN_TXSDLL 76*ebb1a593SChris Packham }; 77*ebb1a593SChris Packham 782b4ffbf6SChris Packham /* ddr bus masks */ 792b4ffbf6SChris Packham #define BUS_MASK_32BIT 0xf 802b4ffbf6SChris Packham #define BUS_MASK_32BIT_ECC 0x1f 812b4ffbf6SChris Packham #define BUS_MASK_16BIT 0x3 822b4ffbf6SChris Packham #define BUS_MASK_16BIT_ECC 0x13 832b4ffbf6SChris Packham #define BUS_MASK_16BIT_ECC_PUP3 0xb 842b4ffbf6SChris Packham #define MV_DDR_64BIT_BUS_MASK 0xff 852b4ffbf6SChris Packham #define MV_DDR_64BIT_ECC_PUP8_BUS_MASK 0x1ff 862b4ffbf6SChris Packham #define MV_DDR_32BIT_ECC_PUP8_BUS_MASK 0x10f 872b4ffbf6SChris Packham 88*ebb1a593SChris Packham #define MV_DDR_CS_BITMASK_1CS 0x1 89*ebb1a593SChris Packham #define MV_DDR_CS_BITMASK_2CS 0x3 90*ebb1a593SChris Packham 91*ebb1a593SChris Packham #define MV_DDR_ONE_SPHY_PER_DUNIT 1 92*ebb1a593SChris Packham #define MV_DDR_TWO_SPHY_PER_DUNIT 2 93*ebb1a593SChris Packham 942b4ffbf6SChris Packham /* source of ddr configuration data */ 952b4ffbf6SChris Packham enum mv_ddr_cfg_src { 962b4ffbf6SChris Packham MV_DDR_CFG_DEFAULT, /* based on data in mv_ddr_topology_map structure */ 972b4ffbf6SChris Packham MV_DDR_CFG_SPD, /* based on data in spd */ 982b4ffbf6SChris Packham MV_DDR_CFG_USER, /* based on data from user */ 992b4ffbf6SChris Packham MV_DDR_CFG_STATIC, /* based on data from user in register-value format */ 1002b4ffbf6SChris Packham MV_DDR_CFG_LAST 1012b4ffbf6SChris Packham }; 1022b4ffbf6SChris Packham 1032b4ffbf6SChris Packham enum mv_ddr_temperature { 1042b4ffbf6SChris Packham MV_DDR_TEMP_LOW, 1052b4ffbf6SChris Packham MV_DDR_TEMP_NORMAL, 1062b4ffbf6SChris Packham MV_DDR_TEMP_HIGH 1072b4ffbf6SChris Packham }; 1082b4ffbf6SChris Packham 109e6f61622SChris Packham enum mv_ddr_timing { 110e6f61622SChris Packham MV_DDR_TIM_DEFAULT, 111e6f61622SChris Packham MV_DDR_TIM_1T, 112e6f61622SChris Packham MV_DDR_TIM_2T 113e6f61622SChris Packham }; 114e6f61622SChris Packham 1152b4ffbf6SChris Packham enum mv_ddr_timing_data { 1162b4ffbf6SChris Packham MV_DDR_TCK_AVG_MIN, /* sdram min cycle time (t ck avg min) */ 1172b4ffbf6SChris Packham MV_DDR_TAA_MIN, /* min cas latency time (t aa min) */ 1182b4ffbf6SChris Packham MV_DDR_TRFC1_MIN, /* min refresh recovery delay time (t rfc1 min) */ 1192b4ffbf6SChris Packham MV_DDR_TWR_MIN, /* min write recovery time (t wr min) */ 1202b4ffbf6SChris Packham MV_DDR_TRCD_MIN, /* min ras to cas delay time (t rcd min) */ 1212b4ffbf6SChris Packham MV_DDR_TRP_MIN, /* min row precharge delay time (t rp min) */ 1222b4ffbf6SChris Packham MV_DDR_TRC_MIN, /* min active to active/refresh delay time (t rc min) */ 1232b4ffbf6SChris Packham MV_DDR_TRAS_MIN, /* min active to precharge delay time (t ras min) */ 1242b4ffbf6SChris Packham MV_DDR_TRRD_S_MIN, /* min activate to activate delay time (t rrd_s min), diff bank group */ 1252b4ffbf6SChris Packham MV_DDR_TRRD_L_MIN, /* min activate to activate delay time (t rrd_l min), same bank group */ 126*ebb1a593SChris Packham MV_DDR_TCCD_L_MIN, /* min cas to cas delay time (t ccd_l min), same bank group */ 1272b4ffbf6SChris Packham MV_DDR_TFAW_MIN, /* min four activate window delay time (t faw min) */ 1282b4ffbf6SChris Packham MV_DDR_TWTR_S_MIN, /* min write to read time (t wtr s min), diff bank group */ 1292b4ffbf6SChris Packham MV_DDR_TWTR_L_MIN, /* min write to read time (t wtr l min), same bank group */ 1302b4ffbf6SChris Packham MV_DDR_TDATA_LAST 1312b4ffbf6SChris Packham }; 1322b4ffbf6SChris Packham 133*ebb1a593SChris Packham enum mv_ddr_electrical_data { 134*ebb1a593SChris Packham MV_DDR_CK_DLY, 135*ebb1a593SChris Packham MV_DDR_PHY_REG3, 136*ebb1a593SChris Packham MV_DDR_ZPRI_DATA, 137*ebb1a593SChris Packham MV_DDR_ZNRI_DATA, 138*ebb1a593SChris Packham MV_DDR_ZPRI_CTRL, 139*ebb1a593SChris Packham MV_DDR_ZNRI_CTRL, 140*ebb1a593SChris Packham MV_DDR_ZPODT_DATA, 141*ebb1a593SChris Packham MV_DDR_ZNODT_DATA, 142*ebb1a593SChris Packham MV_DDR_ZPODT_CTRL, 143*ebb1a593SChris Packham MV_DDR_ZNODT_CTRL, 144*ebb1a593SChris Packham MV_DDR_DIC, 145*ebb1a593SChris Packham MV_DDR_ODT_CFG, 146*ebb1a593SChris Packham MV_DDR_RTT_NOM, 147*ebb1a593SChris Packham MV_DDR_RTT_WR, 148*ebb1a593SChris Packham MV_DDR_RTT_PARK, 149*ebb1a593SChris Packham MV_DDR_EDATA_LAST 150*ebb1a593SChris Packham }; 151*ebb1a593SChris Packham 152*ebb1a593SChris Packham /* memory electrical configuration values */ 153*ebb1a593SChris Packham enum mv_ddr_rtt_nom_park_evalue { 154*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DISABLE, 155*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DIV4, /* 60-Ohm; RZQ = 240-Ohm */ 156*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DIV2, /* 120-Ohm; RZQ = 240-Ohm */ 157*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DIV6, /* 40-Ohm; RZQ = 240-Ohm */ 158*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DIV1, /* 240-Ohm; RZQ = 240-Ohm */ 159*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DIV5, /* 48-Ohm; RZQ = 240-Ohm */ 160*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DIV3, /* 80-Ohm; RZQ = 240-Ohm */ 161*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_DIV7, /* 34-Ohm; RZQ = 240-Ohm */ 162*ebb1a593SChris Packham MV_DDR_RTT_NOM_PARK_RZQ_LAST 163*ebb1a593SChris Packham }; 164*ebb1a593SChris Packham 165*ebb1a593SChris Packham enum mv_ddr_rtt_wr_evalue { 166*ebb1a593SChris Packham MV_DDR_RTT_WR_DYN_ODT_OFF, 167*ebb1a593SChris Packham MV_DDR_RTT_WR_RZQ_DIV2, /* 120-Ohm; RZQ = 240-Ohm */ 168*ebb1a593SChris Packham MV_DDR_RTT_WR_RZQ_DIV1, /* 240-Ohm; RZQ = 240-Ohm */ 169*ebb1a593SChris Packham MV_DDR_RTT_WR_HIZ, 170*ebb1a593SChris Packham MV_DDR_RTT_WR_RZQ_DIV3, /* 80-Ohm; RZQ = 240-Ohm */ 171*ebb1a593SChris Packham MV_DDR_RTT_WR_RZQ_LAST 172*ebb1a593SChris Packham }; 173*ebb1a593SChris Packham 174*ebb1a593SChris Packham enum mv_ddr_dic_evalue { 175*ebb1a593SChris Packham MV_DDR_DIC_RZQ_DIV7, /* 34-Ohm; RZQ = 240-Ohm */ 176*ebb1a593SChris Packham MV_DDR_DIC_RZQ_DIV5, /* 48-Ohm; RZQ = 240-Ohm */ 177*ebb1a593SChris Packham MV_DDR_DIC_RZQ_LAST 178*ebb1a593SChris Packham }; 179*ebb1a593SChris Packham 180*ebb1a593SChris Packham /* phy electrical configuration values */ 181*ebb1a593SChris Packham enum mv_ddr_ohm_evalue { 182*ebb1a593SChris Packham MV_DDR_OHM_30 = 30, 183*ebb1a593SChris Packham MV_DDR_OHM_48 = 48, 184*ebb1a593SChris Packham MV_DDR_OHM_60 = 60, 185*ebb1a593SChris Packham MV_DDR_OHM_80 = 80, 186*ebb1a593SChris Packham MV_DDR_OHM_120 = 120, 187*ebb1a593SChris Packham MV_DDR_OHM_240 = 240, 188*ebb1a593SChris Packham MV_DDR_OHM_LAST 189*ebb1a593SChris Packham }; 190*ebb1a593SChris Packham 191*ebb1a593SChris Packham /* mac electrical configuration values */ 192*ebb1a593SChris Packham enum mv_ddr_odt_cfg_evalue { 193*ebb1a593SChris Packham MV_DDR_ODT_CFG_NORMAL, 194*ebb1a593SChris Packham MV_DDR_ODT_CFG_ALWAYS_ON, 195*ebb1a593SChris Packham MV_DDR_ODT_CFG_LAST 196*ebb1a593SChris Packham }; 197*ebb1a593SChris Packham 1982b4ffbf6SChris Packham enum mv_ddr_dev_width { /* sdram device width */ 1992b4ffbf6SChris Packham MV_DDR_DEV_WIDTH_4BIT, 2002b4ffbf6SChris Packham MV_DDR_DEV_WIDTH_8BIT, 2012b4ffbf6SChris Packham MV_DDR_DEV_WIDTH_16BIT, 2022b4ffbf6SChris Packham MV_DDR_DEV_WIDTH_32BIT, 2032b4ffbf6SChris Packham MV_DDR_DEV_WIDTH_LAST 2042b4ffbf6SChris Packham }; 2052b4ffbf6SChris Packham 2062b4ffbf6SChris Packham enum mv_ddr_die_capacity { /* total sdram capacity per die, megabits */ 2072b4ffbf6SChris Packham MV_DDR_DIE_CAP_256MBIT, 2082b4ffbf6SChris Packham MV_DDR_DIE_CAP_512MBIT = 0, 2092b4ffbf6SChris Packham MV_DDR_DIE_CAP_1GBIT, 2102b4ffbf6SChris Packham MV_DDR_DIE_CAP_2GBIT, 2112b4ffbf6SChris Packham MV_DDR_DIE_CAP_4GBIT, 2122b4ffbf6SChris Packham MV_DDR_DIE_CAP_8GBIT, 2132b4ffbf6SChris Packham MV_DDR_DIE_CAP_16GBIT, 2142b4ffbf6SChris Packham MV_DDR_DIE_CAP_32GBIT, 2152b4ffbf6SChris Packham MV_DDR_DIE_CAP_12GBIT, 2162b4ffbf6SChris Packham MV_DDR_DIE_CAP_24GBIT, 2172b4ffbf6SChris Packham MV_DDR_DIE_CAP_LAST 2182b4ffbf6SChris Packham }; 2192b4ffbf6SChris Packham 2202b4ffbf6SChris Packham enum mv_ddr_pkg_rank { /* number of package ranks per dimm */ 2212b4ffbf6SChris Packham MV_DDR_PKG_RANK_1, 2222b4ffbf6SChris Packham MV_DDR_PKG_RANK_2, 2232b4ffbf6SChris Packham MV_DDR_PKG_RANK_3, 2242b4ffbf6SChris Packham MV_DDR_PKG_RANK_4, 2252b4ffbf6SChris Packham MV_DDR_PKG_RANK_5, 2262b4ffbf6SChris Packham MV_DDR_PKG_RANK_6, 2272b4ffbf6SChris Packham MV_DDR_PKG_RANK_7, 2282b4ffbf6SChris Packham MV_DDR_PKG_RANK_8, 2292b4ffbf6SChris Packham MV_DDR_PKG_RANK_LAST 2302b4ffbf6SChris Packham }; 2312b4ffbf6SChris Packham 2322b4ffbf6SChris Packham enum mv_ddr_pri_bus_width { /* number of primary bus width bits */ 2332b4ffbf6SChris Packham MV_DDR_PRI_BUS_WIDTH_8, 2342b4ffbf6SChris Packham MV_DDR_PRI_BUS_WIDTH_16, 2352b4ffbf6SChris Packham MV_DDR_PRI_BUS_WIDTH_32, 2362b4ffbf6SChris Packham MV_DDR_PRI_BUS_WIDTH_64, 2372b4ffbf6SChris Packham MV_DDR_PRI_BUS_WIDTH_LAST 2382b4ffbf6SChris Packham }; 2392b4ffbf6SChris Packham 2402b4ffbf6SChris Packham enum mv_ddr_bus_width_ext { /* number of extension bus width bits */ 2412b4ffbf6SChris Packham MV_DDR_BUS_WIDTH_EXT_0, 2422b4ffbf6SChris Packham MV_DDR_BUS_WIDTH_EXT_8, 2432b4ffbf6SChris Packham MV_DDR_BUS_WIDTH_EXT_LAST 2442b4ffbf6SChris Packham }; 2452b4ffbf6SChris Packham 2462b4ffbf6SChris Packham enum mv_ddr_die_count { 2472b4ffbf6SChris Packham MV_DDR_DIE_CNT_1, 2482b4ffbf6SChris Packham MV_DDR_DIE_CNT_2, 2492b4ffbf6SChris Packham MV_DDR_DIE_CNT_3, 2502b4ffbf6SChris Packham MV_DDR_DIE_CNT_4, 2512b4ffbf6SChris Packham MV_DDR_DIE_CNT_5, 2522b4ffbf6SChris Packham MV_DDR_DIE_CNT_6, 2532b4ffbf6SChris Packham MV_DDR_DIE_CNT_7, 2542b4ffbf6SChris Packham MV_DDR_DIE_CNT_8, 2552b4ffbf6SChris Packham MV_DDR_DIE_CNT_LAST 2562b4ffbf6SChris Packham }; 2572b4ffbf6SChris Packham 258*ebb1a593SChris Packham #define IS_ACTIVE(mask, id) \ 259*ebb1a593SChris Packham ((mask) & (1 << (id))) 260*ebb1a593SChris Packham 261*ebb1a593SChris Packham #define VALIDATE_ACTIVE(mask, id) \ 262*ebb1a593SChris Packham { \ 263*ebb1a593SChris Packham if (IS_ACTIVE(mask, id) == 0) \ 264*ebb1a593SChris Packham continue; \ 265*ebb1a593SChris Packham } 266*ebb1a593SChris Packham 267*ebb1a593SChris Packham #define IS_IF_ACTIVE(if_mask, if_id) \ 268*ebb1a593SChris Packham ((if_mask) & (1 << (if_id))) 269*ebb1a593SChris Packham 270*ebb1a593SChris Packham #define VALIDATE_IF_ACTIVE(mask, id) \ 271*ebb1a593SChris Packham { \ 272*ebb1a593SChris Packham if (IS_IF_ACTIVE(mask, id) == 0) \ 273*ebb1a593SChris Packham continue; \ 274*ebb1a593SChris Packham } 275*ebb1a593SChris Packham 276*ebb1a593SChris Packham #define IS_BUS_ACTIVE(if_mask , if_id) \ 277*ebb1a593SChris Packham (((if_mask) >> (if_id)) & 1) 278*ebb1a593SChris Packham 279*ebb1a593SChris Packham #define VALIDATE_BUS_ACTIVE(mask, id) \ 280*ebb1a593SChris Packham { \ 281*ebb1a593SChris Packham if (IS_BUS_ACTIVE(mask, id) == 0) \ 282*ebb1a593SChris Packham continue; \ 283*ebb1a593SChris Packham } 284*ebb1a593SChris Packham 285*ebb1a593SChris Packham #define DDR3_IS_ECC_PUP3_MODE(if_mask) \ 286*ebb1a593SChris Packham (((if_mask) == BUS_MASK_16BIT_ECC_PUP3) ? 1 : 0) 287*ebb1a593SChris Packham 288*ebb1a593SChris Packham #define DDR3_IS_ECC_PUP4_MODE(if_mask) \ 289*ebb1a593SChris Packham (((if_mask) == BUS_MASK_32BIT_ECC || \ 290*ebb1a593SChris Packham (if_mask) == BUS_MASK_16BIT_ECC) ? 1 : 0) 291*ebb1a593SChris Packham 292*ebb1a593SChris Packham #define DDR3_IS_16BIT_DRAM_MODE(mask) \ 293*ebb1a593SChris Packham (((mask) == BUS_MASK_16BIT || \ 294*ebb1a593SChris Packham (mask) == BUS_MASK_16BIT_ECC || \ 295*ebb1a593SChris Packham (mask) == BUS_MASK_16BIT_ECC_PUP3) ? 1 : 0) 296*ebb1a593SChris Packham 297*ebb1a593SChris Packham #define DDR3_IS_ECC_PUP8_MODE(if_mask) \ 298*ebb1a593SChris Packham (((if_mask) == MV_DDR_32BIT_ECC_PUP8_BUS_MASK || \ 299*ebb1a593SChris Packham (if_mask) == MV_DDR_64BIT_ECC_PUP8_BUS_MASK) ? 1 : 0) 300*ebb1a593SChris Packham 301*ebb1a593SChris Packham #define MV_DDR_IS_64BIT_DRAM_MODE(mask) \ 302*ebb1a593SChris Packham ((((mask) & MV_DDR_64BIT_BUS_MASK) == MV_DDR_64BIT_BUS_MASK) || \ 303*ebb1a593SChris Packham (((mask) & MV_DDR_64BIT_ECC_PUP8_BUS_MASK) == MV_DDR_64BIT_ECC_PUP8_BUS_MASK) ? 1 : 0) 304*ebb1a593SChris Packham 305*ebb1a593SChris Packham #define MV_DDR_IS_32BIT_IN_64BIT_DRAM_MODE(mask, sphys) \ 306*ebb1a593SChris Packham (((sphys) == 9) && \ 307*ebb1a593SChris Packham (((mask) == BUS_MASK_32BIT) || \ 308*ebb1a593SChris Packham ((mask) == MV_DDR_32BIT_ECC_PUP8_BUS_MASK)) ? 1 : 0) 309*ebb1a593SChris Packham 310*ebb1a593SChris Packham #define MV_DDR_IS_HALF_BUS_DRAM_MODE(mask, sphys) \ 311*ebb1a593SChris Packham (MV_DDR_IS_32BIT_IN_64BIT_DRAM_MODE(mask, sphys) || \ 312*ebb1a593SChris Packham DDR3_IS_16BIT_DRAM_MODE(mask)) 313*ebb1a593SChris Packham 314*ebb1a593SChris Packham struct mv_ddr_topology_map *mv_ddr_topology_map_get(void); 3152b4ffbf6SChris Packham unsigned int mv_ddr_cl_calc(unsigned int taa_min, unsigned int tclk); 3162b4ffbf6SChris Packham unsigned int mv_ddr_cwl_calc(unsigned int tclk); 317*ebb1a593SChris Packham int mv_ddr_topology_map_update(void); 3182b4ffbf6SChris Packham unsigned short mv_ddr_bus_bit_mask_get(void); 3192b4ffbf6SChris Packham unsigned int mv_ddr_if_bus_width_get(void); 320*ebb1a593SChris Packham unsigned int mv_ddr_cs_num_get(void); 321*ebb1a593SChris Packham int mv_ddr_is_ecc_ena(void); 322*ebb1a593SChris Packham unsigned long long mv_ddr_mem_sz_per_cs_get(void); 323*ebb1a593SChris Packham unsigned long long mv_ddr_mem_sz_get(void); 324*ebb1a593SChris Packham unsigned int mv_ddr_rtt_nom_get(void); 325*ebb1a593SChris Packham unsigned int mv_ddr_rtt_park_get(void); 326*ebb1a593SChris Packham unsigned int mv_ddr_rtt_wr_get(void); 327*ebb1a593SChris Packham unsigned int mv_ddr_dic_get(void); 3282b4ffbf6SChris Packham 3292b4ffbf6SChris Packham #endif /* _MV_DDR_TOPOLOGY_H */ 330