Re: [U-Boot] [PATCH 1/6] Make DDR interleaving mode work correctly

2008-10-13 Thread Andy Fleming
On Fri, Oct 3, 2008 at 11:36 AM, Haiying Wang
[EMAIL PROTECTED] wrote:
 Fix some bugs:
  1. Correctly set intlv_ctl in cs_config.
  2. Correctly set sa, ea in cs_bnds when bank interleaving mode is enabled.
  3. Set base_address and total memory for each ddr controller in memory
 controller interleaving mode.

 Signed-off-by: Haiying Wang [EMAIL PROTECTED]

Applied 1-6 to 85xx-next with some modifications from Kumar, thanks
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/6] Make DDR interleaving mode work correctly

2008-10-08 Thread Kim Phillips
On Wed, 8 Oct 2008 00:39:38 -0500
Kumar Gala [EMAIL PROTECTED] wrote:

 
 On Oct 7, 2008, at 4:38 PM, Andy Fleming wrote:
 
  If Kim and Jon approve, I'll pull these 6 patches into my 85xx-next  
  branch.
 
 The code doesn't impact 83xx and thus not sure why you need Kim's ack.

ack

on Kumar's comment, that is :)

Kim
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/6] Make DDR interleaving mode work correctly

2008-10-07 Thread Andy Fleming
If Kim and Jon approve, I'll pull these 6 patches into my 85xx-next branch.

On Fri, Oct 3, 2008 at 11:36 AM, Haiying Wang
[EMAIL PROTECTED] wrote:
 Fix some bugs:
  1. Correctly set intlv_ctl in cs_config.
  2. Correctly set sa, ea in cs_bnds when bank interleaving mode is enabled.
  3. Set base_address and total memory for each ddr controller in memory
 controller interleaving mode.

 Signed-off-by: Haiying Wang [EMAIL PROTECTED]
 ---
  cpu/mpc8xxx/ddr/ctrl_regs.c |   61 +++---
  cpu/mpc8xxx/ddr/main.c  |5 +++
  include/asm-ppc/fsl_ddr_sdram.h |   12 +++
  3 files changed, 66 insertions(+), 12 deletions(-)

 diff --git a/cpu/mpc8xxx/ddr/ctrl_regs.c b/cpu/mpc8xxx/ddr/ctrl_regs.c
 index e6c2a5c..6297141 100644
 --- a/cpu/mpc8xxx/ddr/ctrl_regs.c
 +++ b/cpu/mpc8xxx/ddr/ctrl_regs.c
 @@ -95,16 +95,10 @@ static void set_csn_config(int i, fsl_ddr_cfg_regs_t *ddr,
col_bits_cs_n = dimm_params[i/2].n_col_addr - 8;
}

 -   /* FIXME: intlv_en, intlv_ctl only on CS0_CONFIG */
 -   if (i != 0) {
 -   intlv_en = 0;
 -   intlv_ctl = 0;
 -   }
 -
ddr-cs[i].config = (0
| ((cs_n_en  0x1)  31)
| ((intlv_en  0x3)  29)
 -   | ((intlv_en  0xf)  24)
 +   | ((intlv_ctl  0xf)  24)
| ((ap_n_en  0x1)  23)

/* XXX: some implementation only have 1 bit starting at left */
 @@ -874,8 +868,13 @@ compute_fsl_memctl_config_regs(const memctl_options_t 
 *popts,
for (i = 0; i  CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
phys_size_t sa = 0;
phys_size_t ea = 0;
 -   if (popts-ba_intlv_ctl  i  0) {
 -   /* Don't set up boundaries if bank interleaving */
 +
 +   if (popts-ba_intlv_ctl  (i  0) 
 +   ((popts-ba_intlv_ctl  0x60) != FSL_DDR_CS2_CS3 )) {
 +   /* Don't set up boundaries for other CS
 +* other than CS0, if bank interleaving
 +* is enabled and not CS2+CS3 interleaved.
 +*/
break;
}

 @@ -894,7 +893,9 @@ compute_fsl_memctl_config_regs(const memctl_options_t 
 *popts,
 * on each controller is twice the amount present on
 * each controller.
 */
 -   ea = (2 * common_dimm-total_mem  dbw_cap_adj) - 1;
 +   unsigned long long rank_density
 +   = dimm_params[0].capacity;
 +   ea = (2 * (rank_density  dbw_cap_adj)) - 1;
}
else if (!popts-memctl_interleaving  popts-ba_intlv_ctl) {
/*
 @@ -906,8 +907,44 @@ compute_fsl_memctl_config_regs(const memctl_options_t 
 *popts,
 * controller needs to be programmed into its
 * respective CS0_BNDS.
 */
 -   sa = common_dimm-base_address;
 -   ea = sa + (common_dimm-total_mem  dbw_cap_adj) - 1;
 +   unsigned long long rank_density
 +   = 
 dimm_params[i/2].rank_density;
 +   switch (popts-ba_intlv_ctl  
 FSL_DDR_CS0_CS1_CS2_CS3) {
 +   case FSL_DDR_CS0_CS1_CS2_CS3:
 +   /* CS0+CS1+CS2+CS3 interleaving, only CS0_CNDS
 +* needs to be set.
 +*/
 +   sa = common_dimm-base_address;
 +   ea = sa + (4 * (rank_density  
 dbw_cap_adj))-1;
 +   break;
 +   case FSL_DDR_CS0_CS1_AND_CS2_CS3:
 +   /* CS0+CS1 and CS2+CS3 interleaving, CS0_CNDS
 +* and CS2_CNDS need to be set.
 +*/
 +   if (!(i1)) {
 +   sa = dimm_params[i/2].base_address;
 +   ea = sa + (i * (rank_density 
 +   dbw_cap_adj)) - 1;
 +   }
 +   break;
 +   case FSL_DDR_CS0_CS1:
 +   /* CS0+CS1 interleaving, CS0_CNDS needs
 +* to be set
 +*/
 +   sa = common_dimm-base_address;
 +   ea = sa + (2 * (rank_density  
 dbw_cap_adj))-1;
 +   break;
 +   case FSL_DDR_CS2_CS3:
 +   /* CS2+CS3 interleaving*/
 +   if (i == 2) {
 +   

Re: [U-Boot] [PATCH 1/6] Make DDR interleaving mode work correctly

2008-10-07 Thread Jon Loeliger
Andy Fleming wrote:
 If Kim and Jon approve, I'll pull these 6 patches into my 85xx-next branch.
 
 On Fri, Oct 3, 2008 at 11:36 AM, Haiying Wang
 [EMAIL PROTECTED] wrote:
 Fix some bugs:
  1. Correctly set intlv_ctl in cs_config.
  2. Correctly set sa, ea in cs_bnds when bank interleaving mode is enabled.
  3. Set base_address and total memory for each ddr controller in memory
 controller interleaving mode.

 Signed-off-by: Haiying Wang [EMAIL PROTECTED]


Sounds good by me.

ACK.

jdl
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 1/6] Make DDR interleaving mode work correctly

2008-10-07 Thread Kumar Gala

On Oct 7, 2008, at 4:38 PM, Andy Fleming wrote:

 If Kim and Jon approve, I'll pull these 6 patches into my 85xx-next  
 branch.

The code doesn't impact 83xx and thus not sure why you need Kim's ack.

- k

 On Fri, Oct 3, 2008 at 11:36 AM, Haiying Wang
 [EMAIL PROTECTED] wrote:
 Fix some bugs:
 1. Correctly set intlv_ctl in cs_config.
 2. Correctly set sa, ea in cs_bnds when bank interleaving mode is  
 enabled.
 3. Set base_address and total memory for each ddr controller in  
 memory
controller interleaving mode.


___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 1/6] Make DDR interleaving mode work correctly

2008-10-03 Thread Haiying Wang
Fix some bugs:
  1. Correctly set intlv_ctl in cs_config.
  2. Correctly set sa, ea in cs_bnds when bank interleaving mode is enabled.
  3. Set base_address and total memory for each ddr controller in memory
 controller interleaving mode.

Signed-off-by: Haiying Wang [EMAIL PROTECTED]
---
 cpu/mpc8xxx/ddr/ctrl_regs.c |   61 +++---
 cpu/mpc8xxx/ddr/main.c  |5 +++
 include/asm-ppc/fsl_ddr_sdram.h |   12 +++
 3 files changed, 66 insertions(+), 12 deletions(-)

diff --git a/cpu/mpc8xxx/ddr/ctrl_regs.c b/cpu/mpc8xxx/ddr/ctrl_regs.c
index e6c2a5c..6297141 100644
--- a/cpu/mpc8xxx/ddr/ctrl_regs.c
+++ b/cpu/mpc8xxx/ddr/ctrl_regs.c
@@ -95,16 +95,10 @@ static void set_csn_config(int i, fsl_ddr_cfg_regs_t *ddr,
col_bits_cs_n = dimm_params[i/2].n_col_addr - 8;
}
 
-   /* FIXME: intlv_en, intlv_ctl only on CS0_CONFIG */
-   if (i != 0) {
-   intlv_en = 0;
-   intlv_ctl = 0;
-   }
-
ddr-cs[i].config = (0
| ((cs_n_en  0x1)  31)
| ((intlv_en  0x3)  29)
-   | ((intlv_en  0xf)  24)
+   | ((intlv_ctl  0xf)  24)
| ((ap_n_en  0x1)  23)
 
/* XXX: some implementation only have 1 bit starting at left */
@@ -874,8 +868,13 @@ compute_fsl_memctl_config_regs(const memctl_options_t 
*popts,
for (i = 0; i  CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
phys_size_t sa = 0;
phys_size_t ea = 0;
-   if (popts-ba_intlv_ctl  i  0) {
-   /* Don't set up boundaries if bank interleaving */
+
+   if (popts-ba_intlv_ctl  (i  0) 
+   ((popts-ba_intlv_ctl  0x60) != FSL_DDR_CS2_CS3 )) {
+   /* Don't set up boundaries for other CS
+* other than CS0, if bank interleaving
+* is enabled and not CS2+CS3 interleaved.
+*/
break;
}
 
@@ -894,7 +893,9 @@ compute_fsl_memctl_config_regs(const memctl_options_t 
*popts,
 * on each controller is twice the amount present on
 * each controller.
 */
-   ea = (2 * common_dimm-total_mem  dbw_cap_adj) - 1;
+   unsigned long long rank_density
+   = dimm_params[0].capacity;
+   ea = (2 * (rank_density  dbw_cap_adj)) - 1;
}
else if (!popts-memctl_interleaving  popts-ba_intlv_ctl) {
/*
@@ -906,8 +907,44 @@ compute_fsl_memctl_config_regs(const memctl_options_t 
*popts,
 * controller needs to be programmed into its
 * respective CS0_BNDS.
 */
-   sa = common_dimm-base_address;
-   ea = sa + (common_dimm-total_mem  dbw_cap_adj) - 1;
+   unsigned long long rank_density
+   = dimm_params[i/2].rank_density;
+   switch (popts-ba_intlv_ctl  FSL_DDR_CS0_CS1_CS2_CS3) {
+   case FSL_DDR_CS0_CS1_CS2_CS3:
+   /* CS0+CS1+CS2+CS3 interleaving, only CS0_CNDS
+* needs to be set.
+*/
+   sa = common_dimm-base_address;
+   ea = sa + (4 * (rank_density  dbw_cap_adj))-1;
+   break;
+   case FSL_DDR_CS0_CS1_AND_CS2_CS3:
+   /* CS0+CS1 and CS2+CS3 interleaving, CS0_CNDS
+* and CS2_CNDS need to be set.
+*/
+   if (!(i1)) {
+   sa = dimm_params[i/2].base_address;
+   ea = sa + (i * (rank_density 
+   dbw_cap_adj)) - 1;
+   }
+   break;
+   case FSL_DDR_CS0_CS1:
+   /* CS0+CS1 interleaving, CS0_CNDS needs
+* to be set
+*/
+   sa = common_dimm-base_address;
+   ea = sa + (2 * (rank_density  dbw_cap_adj))-1;
+   break;
+   case FSL_DDR_CS2_CS3:
+   /* CS2+CS3 interleaving*/
+   if (i == 2) {
+   sa = dimm_params[i/2].base_address;
+   ea = sa + (2 * (rank_density 
+   dbw_cap_adj)) - 1;
+   }
+