Merge branch 'master' of git://git.denx.de/u-boot-nand-flash
[oweals/u-boot.git] / include / asm-ppc / fsl_ddr_sdram.h
index 8adde34247bd1364c6bfd419206e6895bf5ef438..c2e5aeebcbfa70b15ee9c1f9dec2535b0ba11059 100644 (file)
 #define SDRAM_TYPE_LPDDR1  6
 #define SDRAM_TYPE_DDR3    7
 
+#define DDR_BL4                4       /* burst length 4 */
+#define DDR_BC4                DDR_BL4 /* burst chop for ddr3 */
+#define DDR_OTF                6       /* on-the-fly BC4 and BL8 */
+#define DDR_BL8                8       /* burst length 8 */
+
 #if defined(CONFIG_FSL_DDR1)
 #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR       (1)
 typedef ddr1_spd_eeprom_t generic_spd_eeprom_t;
@@ -34,6 +39,50 @@ typedef ddr2_spd_eeprom_t generic_spd_eeprom_t;
 #elif defined(CONFIG_FSL_DDR3)
 #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR       (3)     /* FIXME */
 typedef ddr3_spd_eeprom_t generic_spd_eeprom_t;
+#ifndef CONFIG_FSL_SDRAM_TYPE
+#define CONFIG_FSL_SDRAM_TYPE  SDRAM_TYPE_DDR3
+#endif
+#endif /* #if defined(CONFIG_FSL_DDR1) */
+
+/* define bank(chip select) interleaving mode */
+#define FSL_DDR_CS0_CS1                        0x40
+#define FSL_DDR_CS2_CS3                        0x20
+#define FSL_DDR_CS0_CS1_AND_CS2_CS3    (FSL_DDR_CS0_CS1 | FSL_DDR_CS2_CS3)
+#define FSL_DDR_CS0_CS1_CS2_CS3                (FSL_DDR_CS0_CS1_AND_CS2_CS3 | 0x04)
+
+/* define memory controller interleaving mode */
+#define FSL_DDR_CACHE_LINE_INTERLEAVING        0x0
+#define FSL_DDR_PAGE_INTERLEAVING      0x1
+#define FSL_DDR_BANK_INTERLEAVING      0x2
+#define FSL_DDR_SUPERBANK_INTERLEAVING 0x3
+
+/* DDR_SDRAM_CFG - DDR SDRAM Control Configuration
+ */
+#define SDRAM_CFG_MEM_EN               0x80000000
+#define SDRAM_CFG_SREN                 0x40000000
+#define SDRAM_CFG_ECC_EN               0x20000000
+#define SDRAM_CFG_RD_EN                        0x10000000
+#define SDRAM_CFG_SDRAM_TYPE_DDR1      0x02000000
+#define SDRAM_CFG_SDRAM_TYPE_DDR2      0x03000000
+#define SDRAM_CFG_SDRAM_TYPE_MASK      0x07000000
+#define SDRAM_CFG_SDRAM_TYPE_SHIFT     24
+#define SDRAM_CFG_DYN_PWR              0x00200000
+#define SDRAM_CFG_32_BE                        0x00080000
+#define SDRAM_CFG_8_BE                 0x00040000
+#define SDRAM_CFG_NCAP                 0x00020000
+#define SDRAM_CFG_2T_EN                        0x00008000
+#define SDRAM_CFG_BI                   0x00000001
+
+#if defined(CONFIG_P4080)
+#define RD_TO_PRE_MASK         0xf
+#define RD_TO_PRE_SHIFT                13
+#define WR_DATA_DELAY_MASK     0xf
+#define WR_DATA_DELAY_SHIFT    9
+#else
+#define RD_TO_PRE_MASK         0x7
+#define RD_TO_PRE_SHIFT                13
+#define WR_DATA_DELAY_MASK     0x7
+#define WR_DATA_DELAY_SHIFT    10
 #endif
 
 /* Record of register values computed */
@@ -113,7 +162,11 @@ typedef struct memctl_options_s {
        unsigned int dynamic_power;     /* DYN_PWR */
        /* memory data width to use (16-bit, 32-bit, 64-bit) */
        unsigned int data_bus_width;
-       unsigned int burst_length;      /* 4, 8 */
+       unsigned int burst_length;      /* BL4, OTF and BL8 */
+       /* On-The-Fly Burst Chop enable */
+       unsigned int OTF_burst_chop_en;
+       /* mirrior DIMMs for DDR3 */
+       unsigned int mirrored_dimm;
 
        /* Global Timing Parameters */
        unsigned int cas_latency_override;
@@ -131,6 +184,18 @@ typedef struct memctl_options_s {
        unsigned int bstopre;
        unsigned int tCKE_clock_pulse_width_ps; /* tCKE */
        unsigned int tFAW_window_four_activates_ps;     /* tFAW --  FOUR_ACT */
+
+       /* Rtt impedance */
+       unsigned int rtt_override;              /* rtt_override enable */
+       unsigned int rtt_override_value;        /* that is Rtt_Nom for DDR3 */
+
+       /* Automatic self refresh */
+       unsigned int auto_self_refresh_en;
+       unsigned int sr_it;
+       /* ZQ calibration */
+       unsigned int zq_en;
+       /* Write leveling */
+       unsigned int wrlvl_en;
 } memctl_options_t;
 
 extern phys_size_t fsl_ddr_sdram(void);