]> Git Repo - u-boot.git/blobdiff - drivers/ddr/fsl/lc_common_dimm_params.c
tools: kwboot: Fix parsing UART image without data checksum
[u-boot.git] / drivers / ddr / fsl / lc_common_dimm_params.c
index b12eeb9f01cc19081ead2d2c162099f8e3e49ff9..5e4ad56f0714eb4d87e7e943a3dfb31b5b3b2611 100644 (file)
@@ -1,13 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright 2008-2014 Freescale Semiconductor, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * Version 2 as published by the Free Software Foundation.
+ * Copyright 2008-2016 Freescale Semiconductor, Inc.
+ * Copyright 2017-2021 NXP Semiconductor
  */
 
 #include <common.h>
 #include <fsl_ddr_sdram.h>
+#include <log.h>
+#include <asm/bitops.h>
 
 #include <fsl_ddr.h>
 
@@ -23,7 +23,7 @@ compute_cas_latency(const unsigned int ctrl_num,
        unsigned int caslat_actual;
        unsigned int retry = 16;
        unsigned int tmp = ~0;
-       const unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
+       unsigned int mclk_ps = get_memory_clk_period_ps(ctrl_num);
 #ifdef CONFIG_SYS_FSL_DDR3
        const unsigned int taamax = 20000;
 #else
@@ -37,6 +37,12 @@ compute_cas_latency(const unsigned int ctrl_num,
        }
        common_caslat = tmp;
 
+       if (!mclk_ps) {
+               printf("DDR clock (MCLK cycle was 0 ps), So setting it to slowest DIMM(s) (tCKmin %u ps).\n",
+                      outpdimm->tckmin_x_ps);
+               mclk_ps = outpdimm->tckmin_x_ps;
+       }
+
        /* validate if the memory clk is in the range of dimms */
        if (mclk_ps < outpdimm->tckmin_x_ps) {
                printf("DDR clock (MCLK cycle %u ps) is faster than "
@@ -62,8 +68,8 @@ compute_cas_latency(const unsigned int ctrl_num,
         * 18ns for all DDR4 speed grades.
         */
        if (caslat_actual * mclk_ps > taamax) {
-               printf("The choosen cas latency %d is too large\n",
-                       caslat_actual);
+               printf("The chosen cas latency %d is too large\n",
+                      caslat_actual);
        }
        outpdimm->lowest_common_spd_caslat = caslat_actual;
        debug("lowest_common_spd_caslat is 0x%x\n", caslat_actual);
@@ -236,6 +242,7 @@ compute_lowest_common_dimm_parameters(const unsigned int ctrl_num,
        unsigned int trrds_ps = 0;
        unsigned int trrdl_ps = 0;
        unsigned int tccdl_ps = 0;
+       unsigned int trfc_slr_ps = 0;
 #else
        unsigned int twr_ps = 0;
        unsigned int twtr_ps = 0;
@@ -315,6 +322,8 @@ compute_lowest_common_dimm_parameters(const unsigned int ctrl_num,
                               (unsigned int)dimm_params[i].trrdl_ps);
                tccdl_ps = max(tccdl_ps,
                               (unsigned int)dimm_params[i].tccdl_ps);
+               trfc_slr_ps = max(trfc_slr_ps,
+                                 (unsigned int)dimm_params[i].trfc_slr_ps);
 #else
                twr_ps = max(twr_ps, (unsigned int)dimm_params[i].twr_ps);
                twtr_ps = max(twtr_ps, (unsigned int)dimm_params[i].twtr_ps);
@@ -367,6 +376,7 @@ compute_lowest_common_dimm_parameters(const unsigned int ctrl_num,
        outpdimm->trrds_ps = trrds_ps;
        outpdimm->trrdl_ps = trrdl_ps;
        outpdimm->tccdl_ps = tccdl_ps;
+       outpdimm->trfc_slr_ps = trfc_slr_ps;
 #else
        outpdimm->twtr_ps = twtr_ps;
        outpdimm->trfc_ps = trfc_ps;
@@ -412,6 +422,9 @@ compute_lowest_common_dimm_parameters(const unsigned int ctrl_num,
                                        dimm_params[i].mpart);
 #endif
                        }
+#ifndef CONFIG_SPL_BUILD
+                       puts("       ");
+#endif
                }
        }
 
@@ -569,6 +582,7 @@ compute_lowest_common_dimm_parameters(const unsigned int ctrl_num,
        debug("trrds_ps = %u\n", trrds_ps);
        debug("trrdl_ps = %u\n", trrdl_ps);
        debug("tccdl_ps = %u\n", tccdl_ps);
+       debug("trfc_slr_ps = %u\n", trfc_slr_ps);
 #else
        debug("twtr_ps   = %u\n", outpdimm->twtr_ps);
        debug("trfc_ps   = %u\n", outpdimm->trfc_ps);
This page took 0.032326 seconds and 4 git commands to generate.