Commit cae7c1b56b4f59289a1b2f10532c2c6a0b12c6c1

Authored by York Sun
Committed by Kumar Gala
1 parent f8bc7bb5a7

powerpc/mpc8xxx: Fix DDR code for empty first DIMM slot and enable DQS_en

Check second DIMM slot in case the first one is empty.
Honor DQS enable option for SDRAM mode register.

Signed-off-by: York Sun <yorksun@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>

Showing 2 changed files with 14 additions and 9 deletions Side-by-side Diff

arch/powerpc/cpu/mpc8xxx/ddr/ctrl_regs.c
... ... @@ -160,7 +160,7 @@
160 160 break;
161 161 case 2:
162 162 if ((dimm_number == 0 && dimm_params[0].n_ranks > 2) || \
163   - (dimm_number > 1 && dimm_params[dimm_number].n_ranks > 0))
  163 + (dimm_number >= 1 && dimm_params[dimm_number].n_ranks > 0))
164 164 go_config = 1;
165 165 break;
166 166 case 3:
... ... @@ -631,7 +631,7 @@
631 631 unsigned int sr_ie = 0; /* Self-refresh interrupt enable */
632 632 unsigned int dll_rst_dis; /* DLL reset disable */
633 633 unsigned int dqs_cfg; /* DQS configuration */
634   - unsigned int odt_cfg; /* ODT configuration */
  634 + unsigned int odt_cfg = 0; /* ODT configuration */
635 635 unsigned int num_pr; /* Number of posted refreshes */
636 636 unsigned int obc_cfg; /* On-The-Fly Burst Chop Cfg */
637 637 unsigned int ap_en; /* Address Parity Enable */
638 638  
... ... @@ -639,15 +639,16 @@
639 639 unsigned int rcw_en = 0; /* Register Control Word Enable */
640 640 unsigned int md_en = 0; /* Mirrored DIMM Enable */
641 641 unsigned int qd_en = 0; /* quad-rank DIMM Enable */
  642 + int i;
642 643  
643 644 dll_rst_dis = 1; /* Make this configurable */
644 645 dqs_cfg = popts->DQS_config;
645   - if (popts->cs_local_opts[0].odt_rd_cfg
646   - || popts->cs_local_opts[0].odt_wr_cfg) {
647   - /* FIXME */
648   - odt_cfg = 2;
649   - } else {
650   - odt_cfg = 0;
  646 + for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
  647 + if (popts->cs_local_opts[i].odt_rd_cfg
  648 + || popts->cs_local_opts[i].odt_wr_cfg) {
  649 + odt_cfg = SDRAM_CFG2_ODT_ONLY_READ;
  650 + break;
  651 + }
651 652 }
652 653  
653 654 num_pr = 1; /* Make this configurable */
... ... @@ -1032,7 +1033,7 @@
1032 1033 #if defined(CONFIG_FSL_DDR2)
1033 1034 const unsigned int mclk_ps = get_memory_clk_period_ps();
1034 1035 #endif
1035   -
  1036 + dqs_en = !popts->DQS_config;
1036 1037 rtt = fsl_ddr_get_rtt();
1037 1038  
1038 1039 al = additive_latency;
arch/powerpc/include/asm/fsl_ddr_sdram.h
... ... @@ -92,6 +92,10 @@
92 92  
93 93 #define SDRAM_CFG2_D_INIT 0x00000010
94 94 #define SDRAM_CFG2_ODT_CFG_MASK 0x00600000
  95 +#define SDRAM_CFG2_ODT_NEVER 0
  96 +#define SDRAM_CFG2_ODT_ONLY_WRITE 1
  97 +#define SDRAM_CFG2_ODT_ONLY_READ 2
  98 +#define SDRAM_CFG2_ODT_ALWAYS 3
95 99  
96 100 #define TIMING_CFG_2_CPO_MASK 0x0F800000
97 101