15614e71bSYork Sun /* 234e026f9SYork Sun * Copyright 2008-2014 Freescale Semiconductor, Inc. 35614e71bSYork Sun * 45614e71bSYork Sun * This program is free software; you can redistribute it and/or 55614e71bSYork Sun * modify it under the terms of the GNU General Public License 65614e71bSYork Sun * Version 2 as published by the Free Software Foundation. 75614e71bSYork Sun */ 85614e71bSYork Sun 95614e71bSYork Sun #ifndef FSL_DDR_MEMCTL_H 105614e71bSYork Sun #define FSL_DDR_MEMCTL_H 115614e71bSYork Sun 125614e71bSYork Sun /* 135614e71bSYork Sun * Pick a basic DDR Technology. 145614e71bSYork Sun */ 155614e71bSYork Sun #include <ddr_spd.h> 1634e026f9SYork Sun #include <fsl_ddrc_version.h> 175614e71bSYork Sun 185614e71bSYork Sun #define SDRAM_TYPE_DDR1 2 195614e71bSYork Sun #define SDRAM_TYPE_DDR2 3 205614e71bSYork Sun #define SDRAM_TYPE_LPDDR1 6 215614e71bSYork Sun #define SDRAM_TYPE_DDR3 7 2234e026f9SYork Sun #define SDRAM_TYPE_DDR4 5 235614e71bSYork Sun 245614e71bSYork Sun #define DDR_BL4 4 /* burst length 4 */ 255614e71bSYork Sun #define DDR_BC4 DDR_BL4 /* burst chop for ddr3 */ 265614e71bSYork Sun #define DDR_OTF 6 /* on-the-fly BC4 and BL8 */ 275614e71bSYork Sun #define DDR_BL8 8 /* burst length 8 */ 285614e71bSYork Sun 295614e71bSYork Sun #define DDR3_RTT_OFF 0 305614e71bSYork Sun #define DDR3_RTT_60_OHM 1 /* RTT_Nom = RZQ/4 */ 315614e71bSYork Sun #define DDR3_RTT_120_OHM 2 /* RTT_Nom = RZQ/2 */ 325614e71bSYork Sun #define DDR3_RTT_40_OHM 3 /* RTT_Nom = RZQ/6 */ 335614e71bSYork Sun #define DDR3_RTT_20_OHM 4 /* RTT_Nom = RZQ/12 */ 345614e71bSYork Sun #define DDR3_RTT_30_OHM 5 /* RTT_Nom = RZQ/8 */ 355614e71bSYork Sun 36*19601dd9SYork Sun #define DDR4_RTT_OFF 0 37*19601dd9SYork Sun #define DDR4_RTT_60_OHM 1 /* RZQ/4 */ 38*19601dd9SYork Sun #define DDR4_RTT_120_OHM 2 /* RZQ/2 */ 39*19601dd9SYork Sun #define DDR4_RTT_40_OHM 3 /* RZQ/6 */ 40*19601dd9SYork Sun #define DDR4_RTT_240_OHM 4 /* RZQ/1 */ 41*19601dd9SYork Sun #define DDR4_RTT_48_OHM 5 /* RZQ/5 */ 42*19601dd9SYork Sun #define DDR4_RTT_80_OHM 6 /* RZQ/3 */ 43*19601dd9SYork Sun #define DDR4_RTT_34_OHM 7 /* RZQ/7 */ 44*19601dd9SYork Sun 455614e71bSYork Sun #define DDR2_RTT_OFF 0 465614e71bSYork Sun #define DDR2_RTT_75_OHM 1 475614e71bSYork Sun #define DDR2_RTT_150_OHM 2 485614e71bSYork Sun #define DDR2_RTT_50_OHM 3 495614e71bSYork Sun 505614e71bSYork Sun #if defined(CONFIG_SYS_FSL_DDR1) 515614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (1) 525614e71bSYork Sun typedef ddr1_spd_eeprom_t generic_spd_eeprom_t; 535614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 545614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR1 555614e71bSYork Sun #endif 565614e71bSYork Sun #elif defined(CONFIG_SYS_FSL_DDR2) 575614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (3) 585614e71bSYork Sun typedef ddr2_spd_eeprom_t generic_spd_eeprom_t; 595614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 605614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR2 615614e71bSYork Sun #endif 625614e71bSYork Sun #elif defined(CONFIG_SYS_FSL_DDR3) 635614e71bSYork Sun typedef ddr3_spd_eeprom_t generic_spd_eeprom_t; 645614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 655614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR3 665614e71bSYork Sun #endif 6734e026f9SYork Sun #elif defined(CONFIG_SYS_FSL_DDR4) 6834e026f9SYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (3) /* FIXME */ 6934e026f9SYork Sun typedef struct ddr4_spd_eeprom_s generic_spd_eeprom_t; 7034e026f9SYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 7134e026f9SYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR4 7234e026f9SYork Sun #endif 735614e71bSYork Sun #endif /* #if defined(CONFIG_SYS_FSL_DDR1) */ 745614e71bSYork Sun 755614e71bSYork Sun #define FSL_DDR_ODT_NEVER 0x0 765614e71bSYork Sun #define FSL_DDR_ODT_CS 0x1 775614e71bSYork Sun #define FSL_DDR_ODT_ALL_OTHER_CS 0x2 785614e71bSYork Sun #define FSL_DDR_ODT_OTHER_DIMM 0x3 795614e71bSYork Sun #define FSL_DDR_ODT_ALL 0x4 805614e71bSYork Sun #define FSL_DDR_ODT_SAME_DIMM 0x5 815614e71bSYork Sun #define FSL_DDR_ODT_CS_AND_OTHER_DIMM 0x6 825614e71bSYork Sun #define FSL_DDR_ODT_OTHER_CS_ONSAMEDIMM 0x7 835614e71bSYork Sun 845614e71bSYork Sun /* define bank(chip select) interleaving mode */ 855614e71bSYork Sun #define FSL_DDR_CS0_CS1 0x40 865614e71bSYork Sun #define FSL_DDR_CS2_CS3 0x20 875614e71bSYork Sun #define FSL_DDR_CS0_CS1_AND_CS2_CS3 (FSL_DDR_CS0_CS1 | FSL_DDR_CS2_CS3) 885614e71bSYork Sun #define FSL_DDR_CS0_CS1_CS2_CS3 (FSL_DDR_CS0_CS1_AND_CS2_CS3 | 0x04) 895614e71bSYork Sun 905614e71bSYork Sun /* define memory controller interleaving mode */ 915614e71bSYork Sun #define FSL_DDR_CACHE_LINE_INTERLEAVING 0x0 925614e71bSYork Sun #define FSL_DDR_PAGE_INTERLEAVING 0x1 935614e71bSYork Sun #define FSL_DDR_BANK_INTERLEAVING 0x2 945614e71bSYork Sun #define FSL_DDR_SUPERBANK_INTERLEAVING 0x3 956b1e1254SYork Sun #define FSL_DDR_256B_INTERLEAVING 0x8 965614e71bSYork Sun #define FSL_DDR_3WAY_1KB_INTERLEAVING 0xA 975614e71bSYork Sun #define FSL_DDR_3WAY_4KB_INTERLEAVING 0xC 985614e71bSYork Sun #define FSL_DDR_3WAY_8KB_INTERLEAVING 0xD 995614e71bSYork Sun /* placeholder for 4-way interleaving */ 1005614e71bSYork Sun #define FSL_DDR_4WAY_1KB_INTERLEAVING 0x1A 1015614e71bSYork Sun #define FSL_DDR_4WAY_4KB_INTERLEAVING 0x1C 1025614e71bSYork Sun #define FSL_DDR_4WAY_8KB_INTERLEAVING 0x1D 1035614e71bSYork Sun 1045614e71bSYork Sun #define SDRAM_CS_CONFIG_EN 0x80000000 1055614e71bSYork Sun 1065614e71bSYork Sun /* DDR_SDRAM_CFG - DDR SDRAM Control Configuration 1075614e71bSYork Sun */ 1085614e71bSYork Sun #define SDRAM_CFG_MEM_EN 0x80000000 1095614e71bSYork Sun #define SDRAM_CFG_SREN 0x40000000 1105614e71bSYork Sun #define SDRAM_CFG_ECC_EN 0x20000000 1115614e71bSYork Sun #define SDRAM_CFG_RD_EN 0x10000000 1125614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_DDR1 0x02000000 1135614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_DDR2 0x03000000 1145614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_MASK 0x07000000 1155614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_SHIFT 24 1165614e71bSYork Sun #define SDRAM_CFG_DYN_PWR 0x00200000 1175614e71bSYork Sun #define SDRAM_CFG_DBW_MASK 0x00180000 1185614e71bSYork Sun #define SDRAM_CFG_DBW_SHIFT 19 1195614e71bSYork Sun #define SDRAM_CFG_32_BE 0x00080000 1205614e71bSYork Sun #define SDRAM_CFG_16_BE 0x00100000 1215614e71bSYork Sun #define SDRAM_CFG_8_BE 0x00040000 1225614e71bSYork Sun #define SDRAM_CFG_NCAP 0x00020000 1235614e71bSYork Sun #define SDRAM_CFG_2T_EN 0x00008000 1245614e71bSYork Sun #define SDRAM_CFG_BI 0x00000001 1255614e71bSYork Sun 126a7787b78STang Yuantian #define SDRAM_CFG2_FRC_SR 0x80000000 1275614e71bSYork Sun #define SDRAM_CFG2_D_INIT 0x00000010 1285614e71bSYork Sun #define SDRAM_CFG2_ODT_CFG_MASK 0x00600000 1295614e71bSYork Sun #define SDRAM_CFG2_ODT_NEVER 0 1305614e71bSYork Sun #define SDRAM_CFG2_ODT_ONLY_WRITE 1 1315614e71bSYork Sun #define SDRAM_CFG2_ODT_ONLY_READ 2 1325614e71bSYork Sun #define SDRAM_CFG2_ODT_ALWAYS 3 1335614e71bSYork Sun 1345614e71bSYork Sun #define TIMING_CFG_2_CPO_MASK 0x0F800000 1355614e71bSYork Sun 13634e026f9SYork Sun #if defined(CONFIG_SYS_FSL_DDR_VER) && \ 13734e026f9SYork Sun (CONFIG_SYS_FSL_DDR_VER > FSL_DDR_VER_4_4) 1385614e71bSYork Sun #define RD_TO_PRE_MASK 0xf 1395614e71bSYork Sun #define RD_TO_PRE_SHIFT 13 1405614e71bSYork Sun #define WR_DATA_DELAY_MASK 0xf 1415614e71bSYork Sun #define WR_DATA_DELAY_SHIFT 9 1425614e71bSYork Sun #else 1435614e71bSYork Sun #define RD_TO_PRE_MASK 0x7 1445614e71bSYork Sun #define RD_TO_PRE_SHIFT 13 1455614e71bSYork Sun #define WR_DATA_DELAY_MASK 0x7 1465614e71bSYork Sun #define WR_DATA_DELAY_SHIFT 10 1475614e71bSYork Sun #endif 1485614e71bSYork Sun 1495614e71bSYork Sun /* DDR_MD_CNTL */ 1505614e71bSYork Sun #define MD_CNTL_MD_EN 0x80000000 1515614e71bSYork Sun #define MD_CNTL_CS_SEL_CS0 0x00000000 1525614e71bSYork Sun #define MD_CNTL_CS_SEL_CS1 0x10000000 1535614e71bSYork Sun #define MD_CNTL_CS_SEL_CS2 0x20000000 1545614e71bSYork Sun #define MD_CNTL_CS_SEL_CS3 0x30000000 1555614e71bSYork Sun #define MD_CNTL_CS_SEL_CS0_CS1 0x40000000 1565614e71bSYork Sun #define MD_CNTL_CS_SEL_CS2_CS3 0x50000000 1575614e71bSYork Sun #define MD_CNTL_MD_SEL_MR 0x00000000 1585614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR 0x01000000 1595614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR2 0x02000000 1605614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR3 0x03000000 1615614e71bSYork Sun #define MD_CNTL_SET_REF 0x00800000 1625614e71bSYork Sun #define MD_CNTL_SET_PRE 0x00400000 1635614e71bSYork Sun #define MD_CNTL_CKE_CNTL_LOW 0x00100000 1645614e71bSYork Sun #define MD_CNTL_CKE_CNTL_HIGH 0x00200000 1655614e71bSYork Sun #define MD_CNTL_WRCW 0x00080000 1665614e71bSYork Sun #define MD_CNTL_MD_VALUE(x) (x & 0x0000FFFF) 1679f9f0093SYork Sun #define MD_CNTL_CS_SEL(x) (((x) & 0x7) << 28) 1689f9f0093SYork Sun #define MD_CNTL_MD_SEL(x) (((x) & 0xf) << 24) 1695614e71bSYork Sun 1705614e71bSYork Sun /* DDR_CDR1 */ 1715614e71bSYork Sun #define DDR_CDR1_DHC_EN 0x80000000 1725614e71bSYork Sun #define DDR_CDR1_ODT_SHIFT 17 1735614e71bSYork Sun #define DDR_CDR1_ODT_MASK 0x6 1745614e71bSYork Sun #define DDR_CDR2_ODT_MASK 0x1 1755614e71bSYork Sun #define DDR_CDR1_ODT(x) ((x & DDR_CDR1_ODT_MASK) << DDR_CDR1_ODT_SHIFT) 1765614e71bSYork Sun #define DDR_CDR2_ODT(x) (x & DDR_CDR2_ODT_MASK) 17734e026f9SYork Sun #define DDR_CDR2_VREF_OVRD(x) (0x00008080 | ((((x) - 37) & 0x3F) << 8)) 178a7787b78STang Yuantian #define DDR_CDR2_VREF_TRAIN_EN 0x00000080 1797288c2c2SYork Sun #define DDR_CDR2_VREF_RANGE_2 0x00000040 1805614e71bSYork Sun 1815614e71bSYork Sun #if (defined(CONFIG_SYS_FSL_DDR_VER) && \ 1825614e71bSYork Sun (CONFIG_SYS_FSL_DDR_VER >= FSL_DDR_VER_4_7)) 18334e026f9SYork Sun #ifdef CONFIG_SYS_FSL_DDR3L 18434e026f9SYork Sun #define DDR_CDR_ODT_OFF 0x0 18534e026f9SYork Sun #define DDR_CDR_ODT_120ohm 0x1 18634e026f9SYork Sun #define DDR_CDR_ODT_200ohm 0x2 18734e026f9SYork Sun #define DDR_CDR_ODT_75ohm 0x3 18834e026f9SYork Sun #define DDR_CDR_ODT_60ohm 0x5 18934e026f9SYork Sun #define DDR_CDR_ODT_46ohm 0x7 19034e026f9SYork Sun #elif defined(CONFIG_SYS_FSL_DDR4) 19134e026f9SYork Sun #define DDR_CDR_ODT_OFF 0x0 19234e026f9SYork Sun #define DDR_CDR_ODT_100ohm 0x1 19334e026f9SYork Sun #define DDR_CDR_ODT_120OHM 0x2 19434e026f9SYork Sun #define DDR_CDR_ODT_80ohm 0x3 19534e026f9SYork Sun #define DDR_CDR_ODT_60ohm 0x4 19634e026f9SYork Sun #define DDR_CDR_ODT_40ohm 0x5 19734e026f9SYork Sun #define DDR_CDR_ODT_50ohm 0x6 19834e026f9SYork Sun #define DDR_CDR_ODT_30ohm 0x7 19934e026f9SYork Sun #else 2005614e71bSYork Sun #define DDR_CDR_ODT_OFF 0x0 2015614e71bSYork Sun #define DDR_CDR_ODT_120ohm 0x1 2025614e71bSYork Sun #define DDR_CDR_ODT_180ohm 0x2 2035614e71bSYork Sun #define DDR_CDR_ODT_75ohm 0x3 2045614e71bSYork Sun #define DDR_CDR_ODT_110ohm 0x4 2055614e71bSYork Sun #define DDR_CDR_ODT_60hm 0x5 2065614e71bSYork Sun #define DDR_CDR_ODT_70ohm 0x6 2075614e71bSYork Sun #define DDR_CDR_ODT_47ohm 0x7 20834e026f9SYork Sun #endif /* DDR3L */ 2095614e71bSYork Sun #else 2105614e71bSYork Sun #define DDR_CDR_ODT_75ohm 0x0 2115614e71bSYork Sun #define DDR_CDR_ODT_55ohm 0x1 2125614e71bSYork Sun #define DDR_CDR_ODT_60ohm 0x2 2135614e71bSYork Sun #define DDR_CDR_ODT_50ohm 0x3 2145614e71bSYork Sun #define DDR_CDR_ODT_150ohm 0x4 2155614e71bSYork Sun #define DDR_CDR_ODT_43ohm 0x5 2165614e71bSYork Sun #define DDR_CDR_ODT_120ohm 0x6 2175614e71bSYork Sun #endif 2185614e71bSYork Sun 219a7787b78STang Yuantian #define DDR_INIT_ADDR_EXT_UIA (1 << 31) 220a7787b78STang Yuantian 2215614e71bSYork Sun /* Record of register values computed */ 2225614e71bSYork Sun typedef struct fsl_ddr_cfg_regs_s { 2235614e71bSYork Sun struct { 2245614e71bSYork Sun unsigned int bnds; 2255614e71bSYork Sun unsigned int config; 2265614e71bSYork Sun unsigned int config_2; 2275614e71bSYork Sun } cs[CONFIG_CHIP_SELECTS_PER_CTRL]; 2285614e71bSYork Sun unsigned int timing_cfg_3; 2295614e71bSYork Sun unsigned int timing_cfg_0; 2305614e71bSYork Sun unsigned int timing_cfg_1; 2315614e71bSYork Sun unsigned int timing_cfg_2; 2325614e71bSYork Sun unsigned int ddr_sdram_cfg; 2335614e71bSYork Sun unsigned int ddr_sdram_cfg_2; 23434e026f9SYork Sun unsigned int ddr_sdram_cfg_3; 2355614e71bSYork Sun unsigned int ddr_sdram_mode; 2365614e71bSYork Sun unsigned int ddr_sdram_mode_2; 2375614e71bSYork Sun unsigned int ddr_sdram_mode_3; 2385614e71bSYork Sun unsigned int ddr_sdram_mode_4; 2395614e71bSYork Sun unsigned int ddr_sdram_mode_5; 2405614e71bSYork Sun unsigned int ddr_sdram_mode_6; 2415614e71bSYork Sun unsigned int ddr_sdram_mode_7; 2425614e71bSYork Sun unsigned int ddr_sdram_mode_8; 24334e026f9SYork Sun unsigned int ddr_sdram_mode_9; 24434e026f9SYork Sun unsigned int ddr_sdram_mode_10; 24534e026f9SYork Sun unsigned int ddr_sdram_mode_11; 24634e026f9SYork Sun unsigned int ddr_sdram_mode_12; 24734e026f9SYork Sun unsigned int ddr_sdram_mode_13; 24834e026f9SYork Sun unsigned int ddr_sdram_mode_14; 24934e026f9SYork Sun unsigned int ddr_sdram_mode_15; 25034e026f9SYork Sun unsigned int ddr_sdram_mode_16; 2515614e71bSYork Sun unsigned int ddr_sdram_md_cntl; 2525614e71bSYork Sun unsigned int ddr_sdram_interval; 2535614e71bSYork Sun unsigned int ddr_data_init; 2545614e71bSYork Sun unsigned int ddr_sdram_clk_cntl; 2555614e71bSYork Sun unsigned int ddr_init_addr; 2565614e71bSYork Sun unsigned int ddr_init_ext_addr; 2575614e71bSYork Sun unsigned int timing_cfg_4; 2585614e71bSYork Sun unsigned int timing_cfg_5; 25934e026f9SYork Sun unsigned int timing_cfg_6; 26034e026f9SYork Sun unsigned int timing_cfg_7; 26134e026f9SYork Sun unsigned int timing_cfg_8; 26234e026f9SYork Sun unsigned int timing_cfg_9; 2635614e71bSYork Sun unsigned int ddr_zq_cntl; 2645614e71bSYork Sun unsigned int ddr_wrlvl_cntl; 2655614e71bSYork Sun unsigned int ddr_wrlvl_cntl_2; 2665614e71bSYork Sun unsigned int ddr_wrlvl_cntl_3; 2675614e71bSYork Sun unsigned int ddr_sr_cntr; 2685614e71bSYork Sun unsigned int ddr_sdram_rcw_1; 2695614e71bSYork Sun unsigned int ddr_sdram_rcw_2; 27034e026f9SYork Sun unsigned int ddr_sdram_rcw_3; 27134e026f9SYork Sun unsigned int ddr_sdram_rcw_4; 27234e026f9SYork Sun unsigned int ddr_sdram_rcw_5; 27334e026f9SYork Sun unsigned int ddr_sdram_rcw_6; 27434e026f9SYork Sun unsigned int dq_map_0; 27534e026f9SYork Sun unsigned int dq_map_1; 27634e026f9SYork Sun unsigned int dq_map_2; 27734e026f9SYork Sun unsigned int dq_map_3; 2785614e71bSYork Sun unsigned int ddr_eor; 2795614e71bSYork Sun unsigned int ddr_cdr1; 2805614e71bSYork Sun unsigned int ddr_cdr2; 2815614e71bSYork Sun unsigned int err_disable; 2825614e71bSYork Sun unsigned int err_int_en; 2835614e71bSYork Sun unsigned int debug[32]; 2845614e71bSYork Sun } fsl_ddr_cfg_regs_t; 2855614e71bSYork Sun 2865614e71bSYork Sun typedef struct memctl_options_partial_s { 2875614e71bSYork Sun unsigned int all_dimms_ecc_capable; 2885614e71bSYork Sun unsigned int all_dimms_tckmax_ps; 2895614e71bSYork Sun unsigned int all_dimms_burst_lengths_bitmask; 2905614e71bSYork Sun unsigned int all_dimms_registered; 2915614e71bSYork Sun unsigned int all_dimms_unbuffered; 29234e026f9SYork Sun /* unsigned int lowest_common_spd_caslat; */ 2935614e71bSYork Sun unsigned int all_dimms_minimum_trcd_ps; 2945614e71bSYork Sun } memctl_options_partial_t; 2955614e71bSYork Sun 2965614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_64 0 2975614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_32 1 2985614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_16 2 299ef87cab6SYork Sun #define DDR_CSWL_CS0 0x04000001 3005614e71bSYork Sun /* 3015614e71bSYork Sun * Generalized parameters for memory controller configuration, 3025614e71bSYork Sun * might be a little specific to the FSL memory controller 3035614e71bSYork Sun */ 3045614e71bSYork Sun typedef struct memctl_options_s { 3055614e71bSYork Sun /* 3065614e71bSYork Sun * Memory organization parameters 3075614e71bSYork Sun * 3085614e71bSYork Sun * if DIMM is present in the system 3095614e71bSYork Sun * where DIMMs are with respect to chip select 3105614e71bSYork Sun * where chip selects are with respect to memory boundaries 3115614e71bSYork Sun */ 3125614e71bSYork Sun unsigned int registered_dimm_en; /* use registered DIMM support */ 3135614e71bSYork Sun 3145614e71bSYork Sun /* Options local to a Chip Select */ 3155614e71bSYork Sun struct cs_local_opts_s { 3165614e71bSYork Sun unsigned int auto_precharge; 3175614e71bSYork Sun unsigned int odt_rd_cfg; 3185614e71bSYork Sun unsigned int odt_wr_cfg; 3195614e71bSYork Sun unsigned int odt_rtt_norm; 3205614e71bSYork Sun unsigned int odt_rtt_wr; 3215614e71bSYork Sun } cs_local_opts[CONFIG_CHIP_SELECTS_PER_CTRL]; 3225614e71bSYork Sun 3235614e71bSYork Sun /* Special configurations for chip select */ 3245614e71bSYork Sun unsigned int memctl_interleaving; 3255614e71bSYork Sun unsigned int memctl_interleaving_mode; 3265614e71bSYork Sun unsigned int ba_intlv_ctl; 3275614e71bSYork Sun unsigned int addr_hash; 3285614e71bSYork Sun 3295614e71bSYork Sun /* Operational mode parameters */ 3305614e71bSYork Sun unsigned int ecc_mode; /* Use ECC? */ 3315614e71bSYork Sun /* Initialize ECC using memory controller? */ 3325614e71bSYork Sun unsigned int ecc_init_using_memctl; 3335614e71bSYork Sun unsigned int dqs_config; /* Use DQS? maybe only with DDR2? */ 3345614e71bSYork Sun /* SREN - self-refresh during sleep */ 3355614e71bSYork Sun unsigned int self_refresh_in_sleep; 336e368c206SJoakim Tjernlund /* SR_IE - Self-refresh interrupt enable */ 337e368c206SJoakim Tjernlund unsigned int self_refresh_interrupt_en; 3385614e71bSYork Sun unsigned int dynamic_power; /* DYN_PWR */ 3395614e71bSYork Sun /* memory data width to use (16-bit, 32-bit, 64-bit) */ 3405614e71bSYork Sun unsigned int data_bus_width; 3415614e71bSYork Sun unsigned int burst_length; /* BL4, OTF and BL8 */ 3425614e71bSYork Sun /* On-The-Fly Burst Chop enable */ 3435614e71bSYork Sun unsigned int otf_burst_chop_en; 3445614e71bSYork Sun /* mirrior DIMMs for DDR3 */ 3455614e71bSYork Sun unsigned int mirrored_dimm; 3465614e71bSYork Sun unsigned int quad_rank_present; 3475614e71bSYork Sun unsigned int ap_en; /* address parity enable for RDIMM */ 3485614e71bSYork Sun unsigned int x4_en; /* enable x4 devices */ 3495614e71bSYork Sun 3505614e71bSYork Sun /* Global Timing Parameters */ 3515614e71bSYork Sun unsigned int cas_latency_override; 3525614e71bSYork Sun unsigned int cas_latency_override_value; 3535614e71bSYork Sun unsigned int use_derated_caslat; 3545614e71bSYork Sun unsigned int additive_latency_override; 3555614e71bSYork Sun unsigned int additive_latency_override_value; 3565614e71bSYork Sun 3575614e71bSYork Sun unsigned int clk_adjust; /* */ 3585614e71bSYork Sun unsigned int cpo_override; 3595614e71bSYork Sun unsigned int write_data_delay; /* DQS adjust */ 3605614e71bSYork Sun 361ef87cab6SYork Sun unsigned int cswl_override; 3625614e71bSYork Sun unsigned int wrlvl_override; 3635614e71bSYork Sun unsigned int wrlvl_sample; /* Write leveling */ 3645614e71bSYork Sun unsigned int wrlvl_start; 3655614e71bSYork Sun unsigned int wrlvl_ctl_2; 3665614e71bSYork Sun unsigned int wrlvl_ctl_3; 3675614e71bSYork Sun 3685614e71bSYork Sun unsigned int half_strength_driver_enable; 3695614e71bSYork Sun unsigned int twot_en; 3705614e71bSYork Sun unsigned int threet_en; 3715614e71bSYork Sun unsigned int bstopre; 3725614e71bSYork Sun unsigned int tfaw_window_four_activates_ps; /* tFAW -- FOUR_ACT */ 3735614e71bSYork Sun 3745614e71bSYork Sun /* Rtt impedance */ 3755614e71bSYork Sun unsigned int rtt_override; /* rtt_override enable */ 3765614e71bSYork Sun unsigned int rtt_override_value; /* that is Rtt_Nom for DDR3 */ 3775614e71bSYork Sun unsigned int rtt_wr_override_value; /* this is Rtt_WR for DDR3 */ 3785614e71bSYork Sun 3795614e71bSYork Sun /* Automatic self refresh */ 3805614e71bSYork Sun unsigned int auto_self_refresh_en; 3815614e71bSYork Sun unsigned int sr_it; 3825614e71bSYork Sun /* ZQ calibration */ 3835614e71bSYork Sun unsigned int zq_en; 3845614e71bSYork Sun /* Write leveling */ 3855614e71bSYork Sun unsigned int wrlvl_en; 3865614e71bSYork Sun /* RCW override for RDIMM */ 3875614e71bSYork Sun unsigned int rcw_override; 3885614e71bSYork Sun unsigned int rcw_1; 3895614e71bSYork Sun unsigned int rcw_2; 3905614e71bSYork Sun /* control register 1 */ 3915614e71bSYork Sun unsigned int ddr_cdr1; 3925614e71bSYork Sun unsigned int ddr_cdr2; 3935614e71bSYork Sun 3945614e71bSYork Sun unsigned int trwt_override; 3955614e71bSYork Sun unsigned int trwt; /* read-to-write turnaround */ 3965614e71bSYork Sun } memctl_options_t; 3975614e71bSYork Sun 3981d71efbbSYork Sun phys_size_t fsl_ddr_sdram(void); 3991d71efbbSYork Sun phys_size_t fsl_ddr_sdram_size(void); 4001d71efbbSYork Sun phys_size_t fsl_other_ddr_sdram(unsigned long long base, 4011d71efbbSYork Sun unsigned int first_ctrl, 4021d71efbbSYork Sun unsigned int num_ctrls, 4031d71efbbSYork Sun unsigned int dimm_slots_per_ctrl, 4041d71efbbSYork Sun int (*board_need_reset)(void), 4051d71efbbSYork Sun void (*board_reset)(void), 4061d71efbbSYork Sun void (*board_de_reset)(void)); 4075614e71bSYork Sun extern int fsl_use_spd(void); 4081d71efbbSYork Sun void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, 4095614e71bSYork Sun unsigned int ctrl_num, int step); 4105614e71bSYork Sun u32 fsl_ddr_get_intl3r(void); 4111d71efbbSYork Sun void print_ddr_info(unsigned int start_ctrl); 4125614e71bSYork Sun 4135614e71bSYork Sun static void __board_assert_mem_reset(void) 4145614e71bSYork Sun { 4155614e71bSYork Sun } 4165614e71bSYork Sun 4175614e71bSYork Sun static void __board_deassert_mem_reset(void) 4185614e71bSYork Sun { 4195614e71bSYork Sun } 4205614e71bSYork Sun 4215614e71bSYork Sun void board_assert_mem_reset(void) 4225614e71bSYork Sun __attribute__((weak, alias("__board_assert_mem_reset"))); 4235614e71bSYork Sun 4245614e71bSYork Sun void board_deassert_mem_reset(void) 4255614e71bSYork Sun __attribute__((weak, alias("__board_deassert_mem_reset"))); 4265614e71bSYork Sun 4275614e71bSYork Sun static int __board_need_mem_reset(void) 4285614e71bSYork Sun { 4295614e71bSYork Sun return 0; 4305614e71bSYork Sun } 4315614e71bSYork Sun 4325614e71bSYork Sun int board_need_mem_reset(void) 4335614e71bSYork Sun __attribute__((weak, alias("__board_need_mem_reset"))); 4345614e71bSYork Sun 435a7787b78STang Yuantian #if defined(CONFIG_DEEP_SLEEP) 436a7787b78STang Yuantian void board_mem_sleep_setup(void); 437a7787b78STang Yuantian bool is_warm_boot(void); 438a7787b78STang Yuantian int fsl_dp_resume(void); 439a7787b78STang Yuantian #endif 440aade2004STang Yuantian 4415614e71bSYork Sun /* 4425614e71bSYork Sun * The 85xx boards have a common prototype for fixed_sdram so put the 4435614e71bSYork Sun * declaration here. 4445614e71bSYork Sun */ 4455614e71bSYork Sun #ifdef CONFIG_MPC85xx 4465614e71bSYork Sun extern phys_size_t fixed_sdram(void); 4475614e71bSYork Sun #endif 4485614e71bSYork Sun 4495614e71bSYork Sun #if defined(CONFIG_DDR_ECC) 4505614e71bSYork Sun extern void ddr_enable_ecc(unsigned int dram_size); 4515614e71bSYork Sun #endif 4525614e71bSYork Sun 4535614e71bSYork Sun 4545614e71bSYork Sun typedef struct fixed_ddr_parm{ 4555614e71bSYork Sun int min_freq; 4565614e71bSYork Sun int max_freq; 4575614e71bSYork Sun fsl_ddr_cfg_regs_t *ddr_settings; 4585614e71bSYork Sun } fixed_ddr_parm_t; 4595614e71bSYork Sun #endif 460