]> git.sur5r.net Git - u-boot/blobdiff - arch/powerpc/include/asm/fsl_ddr_sdram.h
mpc85xx: Implement workaround for erratum DDR-A003
[u-boot] / arch / powerpc / include / asm / fsl_ddr_sdram.h
index 02920dbfd7bc08e993d22ccf878f120eeb58e983..e6f0d3275a65c4d0bc8e8c7d8a0f5061d57a7a21 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008-2010 Freescale Semiconductor, Inc.
+ * Copyright 2008-2011 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
@@ -24,6 +24,7 @@
 #define DDR_OTF                6       /* on-the-fly BC4 and BL8 */
 #define DDR_BL8                8       /* burst length 8 */
 
+#define DDR3_RTT_OFF           0
 #define DDR3_RTT_60_OHM                1 /* RTT_Nom = RZQ/4 */
 #define DDR3_RTT_120_OHM       2 /* RTT_Nom = RZQ/2 */
 #define DDR3_RTT_40_OHM                3 /* RTT_Nom = RZQ/6 */
@@ -50,6 +51,15 @@ typedef ddr3_spd_eeprom_t generic_spd_eeprom_t;
 #endif
 #endif /* #if defined(CONFIG_FSL_DDR1) */
 
+#define FSL_DDR_ODT_NEVER              0x0
+#define FSL_DDR_ODT_CS                 0x1
+#define FSL_DDR_ODT_ALL_OTHER_CS       0x2
+#define FSL_DDR_ODT_OTHER_DIMM         0x3
+#define FSL_DDR_ODT_ALL                        0x4
+#define FSL_DDR_ODT_SAME_DIMM          0x5
+#define FSL_DDR_ODT_CS_AND_OTHER_DIMM  0x6
+#define FSL_DDR_ODT_OTHER_CS_ONSAMEDIMM        0x7
+
 /* define bank(chip select) interleaving mode */
 #define FSL_DDR_CS0_CS1                        0x40
 #define FSL_DDR_CS2_CS3                        0x20
@@ -91,6 +101,25 @@ typedef ddr3_spd_eeprom_t generic_spd_eeprom_t;
 #define WR_DATA_DELAY_SHIFT    10
 #endif
 
+/* DDR_MD_CNTL */
+#define MD_CNTL_MD_EN          0x80000000
+#define MD_CNTL_CS_SEL_CS0     0x00000000
+#define MD_CNTL_CS_SEL_CS1     0x10000000
+#define MD_CNTL_CS_SEL_CS2     0x20000000
+#define MD_CNTL_CS_SEL_CS3     0x30000000
+#define MD_CNTL_CS_SEL_CS0_CS1 0x40000000
+#define MD_CNTL_CS_SEL_CS2_CS3 0x50000000
+#define MD_CNTL_MD_SEL_MR      0x00000000
+#define MD_CNTL_MD_SEL_EMR     0x01000000
+#define MD_CNTL_MD_SEL_EMR2    0x02000000
+#define MD_CNTL_MD_SEL_EMR3    0x03000000
+#define MD_CNTL_SET_REF                0x00800000
+#define MD_CNTL_SET_PRE                0x00400000
+#define MD_CNTL_CKE_CNTL_LOW   0x00100000
+#define MD_CNTL_CKE_CNTL_HIGH  0x00200000
+#define MD_CNTL_WRCW           0x00080000
+#define MD_CNTL_MD_VALUE(x)    (x & 0x0000FFFF)
+
 /* Record of register values computed */
 typedef struct fsl_ddr_cfg_regs_s {
        struct {
@@ -106,6 +135,12 @@ typedef struct fsl_ddr_cfg_regs_s {
        unsigned int ddr_sdram_cfg_2;
        unsigned int ddr_sdram_mode;
        unsigned int ddr_sdram_mode_2;
+       unsigned int ddr_sdram_mode_3;
+       unsigned int ddr_sdram_mode_4;
+       unsigned int ddr_sdram_mode_5;
+       unsigned int ddr_sdram_mode_6;
+       unsigned int ddr_sdram_mode_7;
+       unsigned int ddr_sdram_mode_8;
        unsigned int ddr_sdram_md_cntl;
        unsigned int ddr_sdram_interval;
        unsigned int ddr_data_init;
@@ -119,6 +154,12 @@ typedef struct fsl_ddr_cfg_regs_s {
        unsigned int ddr_sr_cntr;
        unsigned int ddr_sdram_rcw_1;
        unsigned int ddr_sdram_rcw_2;
+       unsigned int ddr_eor;
+       unsigned int ddr_cdr1;
+       unsigned int ddr_cdr2;
+       unsigned int err_disable;
+       unsigned int err_int_en;
+       unsigned int debug[32];
 } fsl_ddr_cfg_regs_t;
 
 typedef struct memctl_options_partial_s {
@@ -150,12 +191,15 @@ typedef struct memctl_options_s {
                unsigned int auto_precharge;
                unsigned int odt_rd_cfg;
                unsigned int odt_wr_cfg;
+               unsigned int odt_rtt_norm;
+               unsigned int odt_rtt_wr;
        } cs_local_opts[CONFIG_CHIP_SELECTS_PER_CTRL];
 
        /* Special configurations for chip select */
        unsigned int memctl_interleaving;
        unsigned int memctl_interleaving_mode;
        unsigned int ba_intlv_ctl;
+       unsigned int addr_hash;
 
        /* Operational mode parameters */
        unsigned int ECC_mode;   /* Use ECC? */
@@ -172,6 +216,8 @@ typedef struct memctl_options_s {
        unsigned int OTF_burst_chop_en;
        /* mirrior DIMMs for DDR3 */
        unsigned int mirrored_dimm;
+       unsigned int quad_rank_present;
+       unsigned int ap_en;     /* address parity enable for RDIMM */
 
        /* Global Timing Parameters */
        unsigned int cas_latency_override;
@@ -207,7 +253,33 @@ typedef struct memctl_options_s {
        unsigned int zq_en;
        /* Write leveling */
        unsigned int wrlvl_en;
+       /* RCW override for RDIMM */
+       unsigned int rcw_override;
+       unsigned int rcw_1;
+       unsigned int rcw_2;
+       /* control register 1 */
+       unsigned int ddr_cdr1;
 } memctl_options_t;
 
 extern phys_size_t fsl_ddr_sdram(void);
+extern int fsl_use_spd(void);
+
+/*
+ * The 85xx boards have a common prototype for fixed_sdram so put the
+ * declaration here.
+ */
+#ifdef CONFIG_MPC85xx
+extern phys_size_t fixed_sdram(void);
+#endif
+
+#if defined(CONFIG_DDR_ECC)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+
+
+typedef struct fixed_ddr_parm{
+       int min_freq;
+       int max_freq;
+       fsl_ddr_cfg_regs_t *ddr_settings;
+} fixed_ddr_parm_t;
 #endif