|
|
|
@ -29,7 +29,240 @@ struct dynamic_odt { |
|
|
|
|
unsigned int odt_rtt_wr; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_SYS_FSL_DDR3) || defined(CONFIG_SYS_FSL_DDR4) |
|
|
|
|
#ifdef CONFIG_SYS_FSL_DDR4 |
|
|
|
|
/* Quad rank is not verified yet due availability.
|
|
|
|
|
* Replacing 20 OHM with 34 OHM since DDR4 doesn't have 20 OHM option |
|
|
|
|
*/ |
|
|
|
|
static const struct dynamic_odt single_Q[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS_AND_OTHER_DIMM, |
|
|
|
|
DDR4_RTT_34_OHM, /* unverified */ |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
}, |
|
|
|
|
{ /* cs1 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
DDR4_RTT_OFF, |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS_AND_OTHER_DIMM, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
}, |
|
|
|
|
{ /* cs3 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_NEVER, /* tied high */ |
|
|
|
|
DDR4_RTT_OFF, |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt single_D[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_ALL, |
|
|
|
|
DDR4_RTT_40_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs1 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
DDR4_RTT_OFF, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt single_S[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_ALL, |
|
|
|
|
DDR4_RTT_40_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt dual_DD[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_SAME_DIMM, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs1 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_SAME_DIMM, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs3 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt dual_DS[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_SAME_DIMM, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs1 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_ALL, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0} |
|
|
|
|
}; |
|
|
|
|
static const struct dynamic_odt dual_SD[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_ALL, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_SAME_DIMM, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs3 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt dual_SS[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_ALL, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_OTHER_DIMM, |
|
|
|
|
FSL_DDR_ODT_ALL, |
|
|
|
|
DDR4_RTT_34_OHM, |
|
|
|
|
DDR4_RTT_120_OHM |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt dual_D0[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_SAME_DIMM, |
|
|
|
|
DDR4_RTT_40_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs1 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
DDR4_RTT_OFF, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt dual_0D[4] = { |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_SAME_DIMM, |
|
|
|
|
DDR4_RTT_40_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs3 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
DDR4_RTT_OFF, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt dual_S0[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS, |
|
|
|
|
DDR4_RTT_40_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0} |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt dual_0S[4] = { |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS, |
|
|
|
|
DDR4_RTT_40_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{0, 0, 0, 0} |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static const struct dynamic_odt odt_unknown[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs1 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs2 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
}, |
|
|
|
|
{ /* cs3 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
|
FSL_DDR_ODT_CS, |
|
|
|
|
DDR4_RTT_120_OHM, |
|
|
|
|
DDR4_RTT_OFF |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
#elif defined(CONFIG_SYS_FSL_DDR3) |
|
|
|
|
static const struct dynamic_odt single_Q[4] = { |
|
|
|
|
{ /* cs0 */ |
|
|
|
|
FSL_DDR_ODT_NEVER, |
|
|
|
@ -259,7 +492,7 @@ static const struct dynamic_odt odt_unknown[4] = { |
|
|
|
|
DDR3_RTT_OFF |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
#else /* CONFIG_SYS_FSL_DDR3 || CONFIG_SYS_FSL_DDR4 */ |
|
|
|
|
#else /* CONFIG_SYS_FSL_DDR3 */ |
|
|
|
|
static const struct dynamic_odt single_Q[4] = { |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|
{0, 0, 0, 0}, |
|
|
|
|