]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge with /home/git/u-boot
authorWolfgang Denk <wd@pollux.denx.de>
Thu, 8 Mar 2007 10:41:19 +0000 (11:41 +0100)
committerWolfgang Denk <wd@denx.de>
Thu, 8 Mar 2007 10:41:19 +0000 (11:41 +0100)
1  2 
cpu/ppc4xx/44x_spd_ddr2.c
cpu/ppc4xx/start.S

index da50985c4c89602219d1e5e84bfc847af53a5e45,83c991116f81a843f6eb4ea214ed06ab194221c6..d7177c9908975d008731af094612420e7b7b70d4
@@@ -188,6 -188,7 +188,7 @@@ static void program_initplr(unsigned lo
                            ddr_cas_id_t selected_cas,
                            int write_recovery);
  static unsigned long is_ecc_enabled(void);
+ #ifdef CONFIG_DDR_ECC
  static void program_ecc(unsigned long *dimm_populated,
                        unsigned char *iic0_dimm_addr,
                        unsigned long num_dimm_banks,
  static void program_ecc_addr(unsigned long start_address,
                             unsigned long num_bytes,
                             unsigned long tlb_word2_i_value);
+ #endif
  static void program_DQS_calibration(unsigned long *dimm_populated,
                                    unsigned char *iic0_dimm_addr,
                                    unsigned long num_dimm_banks);
@@@ -255,15 -257,6 +257,6 @@@ static void mtdcr_any(u32 dcr, u32 val
        }
  }
  
- static void wait_ddr_idle(void)
- {
-       u32 val;
-       do {
-               mfsdram(SDRAM_MCSTAT, val);
-       } while ((val & SDRAM_MCSTAT_IDLE_MASK) == SDRAM_MCSTAT_IDLE_NOT);
- }
  static unsigned char spd_read(uchar chip, uint addr)
  {
        unsigned char data[2];
@@@ -491,7 -484,7 +484,7 @@@ long int initdram(int board_type
                (val & ~(SDRAM_MEMODE_DIC_MASK  | SDRAM_MEMODE_DLL_MASK |
                         SDRAM_MEMODE_RTT_MASK | SDRAM_MEMODE_DQS_MASK)) |
                (SDRAM_MEMODE_DIC_NORMAL | SDRAM_MEMODE_DLL_ENABLE
-                | SDRAM_MEMODE_RTT_75OHM | SDRAM_MEMODE_DQS_ENABLE));
+                | SDRAM_MEMODE_RTT_150OHM | SDRAM_MEMODE_DQS_ENABLE));
  
        /*------------------------------------------------------------------
         * Program Initialization preload registers.
         *-----------------------------------------------------------------*/
        program_DQS_calibration(dimm_populated, iic0_dimm_addr, num_dimm_banks);
  
+ #ifdef CONFIG_DDR_ECC
        /*------------------------------------------------------------------
         * If ecc is enabled, initialize the parity bits.
         *-----------------------------------------------------------------*/
        program_ecc(dimm_populated, iic0_dimm_addr, num_dimm_banks, MY_TLB_WORD2_I_ENABLE);
+ #endif
  
  #ifdef DEBUG
        ppc440sp_sdram_register_dump();
@@@ -702,7 -697,7 +697,7 @@@ static void check_frequency(unsigned lo
         *-----------------------------------------------------------------*/
        get_sys_info(&board_cfg);
  
-       mfsdr(sdr_ddr0, sdr_ddrpll);
+       mfsdr(SDR0_DDR0, sdr_ddrpll);
        sdram_freq = ((board_cfg.freqPLB) * SDR0_DDR0_DDRM_DECODE(sdr_ddrpll));
  
        /*
@@@ -877,7 -872,11 +872,11 @@@ static void program_copt1(unsigned lon
        unsigned long ddrtype;
        unsigned long val;
  
+ #ifdef CONFIG_DDR_ECC
        ecc_enabled = TRUE;
+ #else
+       ecc_enabled = FALSE;
+ #endif
        dimm_32bit = FALSE;
        dimm_64bit = FALSE;
        buf0 = FALSE;
@@@ -1110,7 -1109,7 +1109,7 @@@ static void program_codt(unsigned long 
                                modt3 = 0x00000000;
                        }
                }
 -      } else {
 +      } else {
                codt |= SDRAM_CODT_DQS_2_5_V_DDR1;
                modt0 = 0x00000000;
                modt1 = 0x00000000;
@@@ -1314,7 -1313,7 +1313,7 @@@ static void program_mode(unsigned long 
         *-----------------------------------------------------------------*/
        get_sys_info(&board_cfg);
  
-       mfsdr(sdr_ddr0, sdr_ddrpll);
+       mfsdr(SDR0_DDR0, sdr_ddrpll);
        sdram_freq = MULDIV64((board_cfg.freqPLB), SDR0_DDR0_DDRM_DECODE(sdr_ddrpll), 1);
  
        /*------------------------------------------------------------------
        mfsdram(SDRAM_MMODE, mmode);
        mmode = mmode & ~(SDRAM_MMODE_WR_MASK | SDRAM_MMODE_DCL_MASK);
  
-       cycle_2_0_clk = MULDIV64(ONE_BILLION, 100, max_2_0_tcyc_ns_x_100);
-       cycle_2_5_clk = MULDIV64(ONE_BILLION, 100, max_2_5_tcyc_ns_x_100);
-       cycle_3_0_clk = MULDIV64(ONE_BILLION, 100, max_3_0_tcyc_ns_x_100);
-       cycle_4_0_clk = MULDIV64(ONE_BILLION, 100, max_4_0_tcyc_ns_x_100);
-       cycle_5_0_clk = MULDIV64(ONE_BILLION, 100, max_5_0_tcyc_ns_x_100);
+       /* add 10 here because of rounding problems */
+       cycle_2_0_clk = MULDIV64(ONE_BILLION, 100, max_2_0_tcyc_ns_x_100) + 10;
+       cycle_2_5_clk = MULDIV64(ONE_BILLION, 100, max_2_5_tcyc_ns_x_100) + 10;
+       cycle_3_0_clk = MULDIV64(ONE_BILLION, 100, max_3_0_tcyc_ns_x_100) + 10;
+       cycle_4_0_clk = MULDIV64(ONE_BILLION, 100, max_4_0_tcyc_ns_x_100) + 10;
+       cycle_5_0_clk = MULDIV64(ONE_BILLION, 100, max_5_0_tcyc_ns_x_100) + 10;
  
        if (sdram_ddr1 == TRUE) { /* DDR1 */
                if ((cas_2_0_available == TRUE) && (sdram_freq <= cycle_2_0_clk)) {
                } else {
                        printf("ERROR: Cannot find a supported CAS latency with the installed DIMMs.\n");
                        printf("Only DIMMs DDR2 with CAS latencies of 3.0, 4.0, and 5.0 are supported.\n");
-                       printf("Make sure the PLB speed is within the supported range of the DIMMs.\n\n");
+                       printf("Make sure the PLB speed is within the supported range of the DIMMs.\n");
+                       printf("cas3=%d cas4=%d cas5=%d\n",
+                              cas_3_0_available, cas_4_0_available, cas_5_0_available);
+                       printf("sdram_freq=%d cycle3=%d cycle4=%d cycle5=%d\n\n",
+                              sdram_freq, cycle_3_0_clk, cycle_4_0_clk, cycle_5_0_clk);
                        hang();
                }
        }
@@@ -1575,7 -1579,7 +1579,7 @@@ static void program_rtr(unsigned long *
        /*------------------------------------------------------------------
         * Set the SDRAM Refresh Timing Register, SDRAM_RTR
         *-----------------------------------------------------------------*/
-       mfsdr(sdr_ddr0, sdr_ddrpll);
+       mfsdr(SDR0_DDR0, sdr_ddrpll);
        sdram_freq = ((board_cfg.freqPLB) * SDR0_DDR0_DDRM_DECODE(sdr_ddrpll));
  
        max_refresh_rate = 0;
@@@ -1661,7 -1665,7 +1665,7 @@@ static void program_tr(unsigned long *d
         *-----------------------------------------------------------------*/
        get_sys_info(&board_cfg);
  
-       mfsdr(sdr_ddr0, sdr_ddrpll);
+       mfsdr(SDR0_DDR0, sdr_ddrpll);
        sdram_freq = ((board_cfg.freqPLB) * SDR0_DDR0_DDRM_DECODE(sdr_ddrpll));
  
        /*------------------------------------------------------------------
@@@ -2069,7 -2073,7 +2073,7 @@@ static void program_memory_queue(unsign
                         * Set the sizes
                         *-----------------------------------------------------------------*/
                        baseadd_size = 0;
-                       rank_size_bytes = 1024 * 1024 * rank_size_id;
+                       rank_size_bytes = 4 * 1024 * 1024 * rank_size_id;
                        switch (rank_size_id) {
                        case 0x02:
                                baseadd_size |= SDRAM_RXBAS_SDSZ_8;
  
                        for (i = 0; i < num_ranks; i++) {
                                mtdcr_any(rank_reg+i+dimm_num+bank_0_populated,
-                                         (rank_base_addr & SDRAM_RXBAS_SDBA_MASK) |
-                                         baseadd_size);
+                                         (SDRAM_RXBAS_SDBA_ENCODE(rank_base_addr) |
+                                          baseadd_size));
                                rank_base_addr += rank_size_bytes;
                        }
                }
@@@ -2130,9 -2134,10 +2134,10 @@@ static unsigned long is_ecc_enabled(voi
                ecc = max(ecc, SDRAM_MCOPT1_MCHK_CHK_DECODE(val));
        }
  
-       return(ecc);
+       return ecc;
  }
  
+ #ifdef CONFIG_DDR_ECC
  /*-----------------------------------------------------------------------------+
   * program_ecc.
   *-----------------------------------------------------------------------------*/
@@@ -2208,6 -2213,15 +2213,15 @@@ static void check_ecc(void
  }
  #endif
  
+ static void wait_ddr_idle(void)
+ {
+       u32 val;
+       do {
+               mfsdram(SDRAM_MCSTAT, val);
+       } while ((val & SDRAM_MCSTAT_IDLE_MASK) == SDRAM_MCSTAT_IDLE_NOT);
+ }
  /*-----------------------------------------------------------------------------+
   * program_ecc_addr.
   *-----------------------------------------------------------------------------*/
@@@ -2276,6 -2290,7 +2290,7 @@@ static void program_ecc_addr(unsigned l
  #endif
        }
  }
+ #endif
  
  /*-----------------------------------------------------------------------------+
   * program_DQS_calibration.
@@@ -2531,7 -2546,6 +2546,6 @@@ static void DQS_calibration_process(voi
                }
        }               /* for rffd */
  
        /*------------------------------------------------------------------
         * Set the average RFFD value
         *-----------------------------------------------------------------*/
diff --combined cpu/ppc4xx/start.S
index 3fa52bd75a9169a9022fdac47309a047097636a8,54be37cf68204d97b1d24d3230ac17e0b18a3f71..072a6d1e9249cf5f8da755e91194b545db8c00bf
@@@ -1361,7 -1361,7 +1361,7 @@@ ppcSync
  relocate_code:
  #if defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
      defined(CONFIG_440EPX) || defined(CONFIG_440GRX) || \
-     defined(CONFIG_440SPE)
+     defined(CONFIG_440SP) || defined(CONFIG_440SPE)
        /*
         * On some 440er platforms the cache is enabled in the first TLB (Boot-CS)
         * to speed up the boot process. Now this cache needs to be disabled.
@@@ -1858,11 -1858,11 +1858,11 @@@ pll_wait
  #endif /* CONFIG_405EP */
  
  #if defined(CONFIG_440)
 -#define function_prolog(func_name)      .text; \
 +#define function_prolog(func_name)    .text; \
                                        .align 2; \
                                        .globl func_name; \
                                        func_name:
 -#define function_epilog(func_name)      .type func_name,@function; \
 +#define function_epilog(func_name)    .type func_name,@function; \
                                        .size func_name,.-func_name
  
  /*----------------------------------------------------------------------------+
  +----------------------------------------------------------------------------*/
        function_prolog(dcbz_area)
        rlwinm. r5,r4,0,27,31
 -      rlwinm  r5,r4,27,5,31
 -      beq     ..d_ra2
 -      addi    r5,r5,0x0001
 -..d_ra2:mtctr   r5
 -..d_ag2:dcbz    r0,r3
 -      addi    r3,r3,32
 -      bdnz    ..d_ag2
 +      rlwinm  r5,r4,27,5,31
 +      beq     ..d_ra2
 +      addi    r5,r5,0x0001
 +..d_ra2:mtctr r5
 +..d_ag2:dcbz  r0,r3
 +      addi    r3,r3,32
 +      bdnz    ..d_ag2
        sync
        blr
        function_epilog(dcbz_area)
  | dflush.  Assume 32K at vector address is cachable.
  +----------------------------------------------------------------------------*/
        function_prolog(dflush)
 -      mfmsr   r9
 -      rlwinm  r8,r9,0,15,13
 -      rlwinm  r8,r8,0,17,15
 -      mtmsr   r8
 -      addi    r3,r0,0x0000
 -      mtspr   dvlim,r3
 -      mfspr   r3,ivpr
 -      addi    r4,r0,1024
 -      mtctr   r4
 +      mfmsr   r9
 +      rlwinm  r8,r9,0,15,13
 +      rlwinm  r8,r8,0,17,15
 +      mtmsr   r8
 +      addi    r3,r0,0x0000
 +      mtspr   dvlim,r3
 +      mfspr   r3,ivpr
 +      addi    r4,r0,1024
 +      mtctr   r4
  ..dflush_loop:
 -      lwz     r6,0x0(r3)
 -      addi    r3,r3,32
 -      bdnz    ..dflush_loop
 -      addi    r3,r3,-32
 -      mtctr   r4
 -..ag:   dcbf    r0,r3
 -      addi    r3,r3,-32
 -      bdnz    ..ag
 +      lwz     r6,0x0(r3)
 +      addi    r3,r3,32
 +      bdnz    ..dflush_loop
 +      addi    r3,r3,-32
 +      mtctr   r4
 +..ag: dcbf    r0,r3
 +      addi    r3,r3,-32
 +      bdnz    ..ag
        sync
 -      mtmsr   r9
 +      mtmsr   r9
        blr
        function_epilog(dflush)
  #endif /* CONFIG_440 */