|
@@ -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},
|