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 365614e71bSYork Sun #define DDR2_RTT_OFF 0 375614e71bSYork Sun #define DDR2_RTT_75_OHM 1 385614e71bSYork Sun #define DDR2_RTT_150_OHM 2 395614e71bSYork Sun #define DDR2_RTT_50_OHM 3 405614e71bSYork Sun 415614e71bSYork Sun #if defined(CONFIG_SYS_FSL_DDR1) 425614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (1) 435614e71bSYork Sun typedef ddr1_spd_eeprom_t generic_spd_eeprom_t; 445614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 455614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR1 465614e71bSYork Sun #endif 475614e71bSYork Sun #elif defined(CONFIG_SYS_FSL_DDR2) 485614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (3) 495614e71bSYork Sun typedef ddr2_spd_eeprom_t generic_spd_eeprom_t; 505614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 515614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR2 525614e71bSYork Sun #endif 535614e71bSYork Sun #elif defined(CONFIG_SYS_FSL_DDR3) 545614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (3) /* FIXME */ 555614e71bSYork Sun typedef ddr3_spd_eeprom_t generic_spd_eeprom_t; 565614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 575614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR3 585614e71bSYork Sun #endif 5934e026f9SYork Sun #elif defined(CONFIG_SYS_FSL_DDR4) 6034e026f9SYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (3) /* FIXME */ 6134e026f9SYork Sun typedef struct ddr4_spd_eeprom_s generic_spd_eeprom_t; 6234e026f9SYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 6334e026f9SYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR4 6434e026f9SYork Sun #endif 655614e71bSYork Sun #endif /* #if defined(CONFIG_SYS_FSL_DDR1) */ 665614e71bSYork Sun 675614e71bSYork Sun #define FSL_DDR_ODT_NEVER 0x0 685614e71bSYork Sun #define FSL_DDR_ODT_CS 0x1 695614e71bSYork Sun #define FSL_DDR_ODT_ALL_OTHER_CS 0x2 705614e71bSYork Sun #define FSL_DDR_ODT_OTHER_DIMM 0x3 715614e71bSYork Sun #define FSL_DDR_ODT_ALL 0x4 725614e71bSYork Sun #define FSL_DDR_ODT_SAME_DIMM 0x5 735614e71bSYork Sun #define FSL_DDR_ODT_CS_AND_OTHER_DIMM 0x6 745614e71bSYork Sun #define FSL_DDR_ODT_OTHER_CS_ONSAMEDIMM 0x7 755614e71bSYork Sun 765614e71bSYork Sun /* define bank(chip select) interleaving mode */ 775614e71bSYork Sun #define FSL_DDR_CS0_CS1 0x40 785614e71bSYork Sun #define FSL_DDR_CS2_CS3 0x20 795614e71bSYork Sun #define FSL_DDR_CS0_CS1_AND_CS2_CS3 (FSL_DDR_CS0_CS1 | FSL_DDR_CS2_CS3) 805614e71bSYork Sun #define FSL_DDR_CS0_CS1_CS2_CS3 (FSL_DDR_CS0_CS1_AND_CS2_CS3 | 0x04) 815614e71bSYork Sun 825614e71bSYork Sun /* define memory controller interleaving mode */ 835614e71bSYork Sun #define FSL_DDR_CACHE_LINE_INTERLEAVING 0x0 845614e71bSYork Sun #define FSL_DDR_PAGE_INTERLEAVING 0x1 855614e71bSYork Sun #define FSL_DDR_BANK_INTERLEAVING 0x2 865614e71bSYork Sun #define FSL_DDR_SUPERBANK_INTERLEAVING 0x3 876b1e1254SYork Sun #define FSL_DDR_256B_INTERLEAVING 0x8 885614e71bSYork Sun #define FSL_DDR_3WAY_1KB_INTERLEAVING 0xA 895614e71bSYork Sun #define FSL_DDR_3WAY_4KB_INTERLEAVING 0xC 905614e71bSYork Sun #define FSL_DDR_3WAY_8KB_INTERLEAVING 0xD 915614e71bSYork Sun /* placeholder for 4-way interleaving */ 925614e71bSYork Sun #define FSL_DDR_4WAY_1KB_INTERLEAVING 0x1A 935614e71bSYork Sun #define FSL_DDR_4WAY_4KB_INTERLEAVING 0x1C 945614e71bSYork Sun #define FSL_DDR_4WAY_8KB_INTERLEAVING 0x1D 955614e71bSYork Sun 965614e71bSYork Sun #define SDRAM_CS_CONFIG_EN 0x80000000 975614e71bSYork Sun 985614e71bSYork Sun /* DDR_SDRAM_CFG - DDR SDRAM Control Configuration 995614e71bSYork Sun */ 1005614e71bSYork Sun #define SDRAM_CFG_MEM_EN 0x80000000 1015614e71bSYork Sun #define SDRAM_CFG_SREN 0x40000000 1025614e71bSYork Sun #define SDRAM_CFG_ECC_EN 0x20000000 1035614e71bSYork Sun #define SDRAM_CFG_RD_EN 0x10000000 1045614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_DDR1 0x02000000 1055614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_DDR2 0x03000000 1065614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_MASK 0x07000000 1075614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_SHIFT 24 1085614e71bSYork Sun #define SDRAM_CFG_DYN_PWR 0x00200000 1095614e71bSYork Sun #define SDRAM_CFG_DBW_MASK 0x00180000 1105614e71bSYork Sun #define SDRAM_CFG_DBW_SHIFT 19 1115614e71bSYork Sun #define SDRAM_CFG_32_BE 0x00080000 1125614e71bSYork Sun #define SDRAM_CFG_16_BE 0x00100000 1135614e71bSYork Sun #define SDRAM_CFG_8_BE 0x00040000 1145614e71bSYork Sun #define SDRAM_CFG_NCAP 0x00020000 1155614e71bSYork Sun #define SDRAM_CFG_2T_EN 0x00008000 1165614e71bSYork Sun #define SDRAM_CFG_BI 0x00000001 1175614e71bSYork Sun 1185614e71bSYork Sun #define SDRAM_CFG2_D_INIT 0x00000010 1195614e71bSYork Sun #define SDRAM_CFG2_ODT_CFG_MASK 0x00600000 1205614e71bSYork Sun #define SDRAM_CFG2_ODT_NEVER 0 1215614e71bSYork Sun #define SDRAM_CFG2_ODT_ONLY_WRITE 1 1225614e71bSYork Sun #define SDRAM_CFG2_ODT_ONLY_READ 2 1235614e71bSYork Sun #define SDRAM_CFG2_ODT_ALWAYS 3 1245614e71bSYork Sun 1255614e71bSYork Sun #define TIMING_CFG_2_CPO_MASK 0x0F800000 1265614e71bSYork Sun 12734e026f9SYork Sun #if defined(CONFIG_SYS_FSL_DDR_VER) && \ 12834e026f9SYork Sun (CONFIG_SYS_FSL_DDR_VER > FSL_DDR_VER_4_4) 1295614e71bSYork Sun #define RD_TO_PRE_MASK 0xf 1305614e71bSYork Sun #define RD_TO_PRE_SHIFT 13 1315614e71bSYork Sun #define WR_DATA_DELAY_MASK 0xf 1325614e71bSYork Sun #define WR_DATA_DELAY_SHIFT 9 1335614e71bSYork Sun #else 1345614e71bSYork Sun #define RD_TO_PRE_MASK 0x7 1355614e71bSYork Sun #define RD_TO_PRE_SHIFT 13 1365614e71bSYork Sun #define WR_DATA_DELAY_MASK 0x7 1375614e71bSYork Sun #define WR_DATA_DELAY_SHIFT 10 1385614e71bSYork Sun #endif 1395614e71bSYork Sun 1405614e71bSYork Sun /* DDR_MD_CNTL */ 1415614e71bSYork Sun #define MD_CNTL_MD_EN 0x80000000 1425614e71bSYork Sun #define MD_CNTL_CS_SEL_CS0 0x00000000 1435614e71bSYork Sun #define MD_CNTL_CS_SEL_CS1 0x10000000 1445614e71bSYork Sun #define MD_CNTL_CS_SEL_CS2 0x20000000 1455614e71bSYork Sun #define MD_CNTL_CS_SEL_CS3 0x30000000 1465614e71bSYork Sun #define MD_CNTL_CS_SEL_CS0_CS1 0x40000000 1475614e71bSYork Sun #define MD_CNTL_CS_SEL_CS2_CS3 0x50000000 1485614e71bSYork Sun #define MD_CNTL_MD_SEL_MR 0x00000000 1495614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR 0x01000000 1505614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR2 0x02000000 1515614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR3 0x03000000 1525614e71bSYork Sun #define MD_CNTL_SET_REF 0x00800000 1535614e71bSYork Sun #define MD_CNTL_SET_PRE 0x00400000 1545614e71bSYork Sun #define MD_CNTL_CKE_CNTL_LOW 0x00100000 1555614e71bSYork Sun #define MD_CNTL_CKE_CNTL_HIGH 0x00200000 1565614e71bSYork Sun #define MD_CNTL_WRCW 0x00080000 1575614e71bSYork Sun #define MD_CNTL_MD_VALUE(x) (x & 0x0000FFFF) 1585614e71bSYork Sun 1595614e71bSYork Sun /* DDR_CDR1 */ 1605614e71bSYork Sun #define DDR_CDR1_DHC_EN 0x80000000 1615614e71bSYork Sun #define DDR_CDR1_ODT_SHIFT 17 1625614e71bSYork Sun #define DDR_CDR1_ODT_MASK 0x6 1635614e71bSYork Sun #define DDR_CDR2_ODT_MASK 0x1 1645614e71bSYork Sun #define DDR_CDR1_ODT(x) ((x & DDR_CDR1_ODT_MASK) << DDR_CDR1_ODT_SHIFT) 1655614e71bSYork Sun #define DDR_CDR2_ODT(x) (x & DDR_CDR2_ODT_MASK) 16634e026f9SYork Sun #define DDR_CDR2_VREF_OVRD(x) (0x00008080 | ((((x) - 37) & 0x3F) << 8)) 1675614e71bSYork Sun 1685614e71bSYork Sun #if (defined(CONFIG_SYS_FSL_DDR_VER) && \ 1695614e71bSYork Sun (CONFIG_SYS_FSL_DDR_VER >= FSL_DDR_VER_4_7)) 17034e026f9SYork Sun #ifdef CONFIG_SYS_FSL_DDR3L 17134e026f9SYork Sun #define DDR_CDR_ODT_OFF 0x0 17234e026f9SYork Sun #define DDR_CDR_ODT_120ohm 0x1 17334e026f9SYork Sun #define DDR_CDR_ODT_200ohm 0x2 17434e026f9SYork Sun #define DDR_CDR_ODT_75ohm 0x3 17534e026f9SYork Sun #define DDR_CDR_ODT_60ohm 0x5 17634e026f9SYork Sun #define DDR_CDR_ODT_46ohm 0x7 17734e026f9SYork Sun #elif defined(CONFIG_SYS_FSL_DDR4) 17834e026f9SYork Sun #define DDR_CDR_ODT_OFF 0x0 17934e026f9SYork Sun #define DDR_CDR_ODT_100ohm 0x1 18034e026f9SYork Sun #define DDR_CDR_ODT_120OHM 0x2 18134e026f9SYork Sun #define DDR_CDR_ODT_80ohm 0x3 18234e026f9SYork Sun #define DDR_CDR_ODT_60ohm 0x4 18334e026f9SYork Sun #define DDR_CDR_ODT_40ohm 0x5 18434e026f9SYork Sun #define DDR_CDR_ODT_50ohm 0x6 18534e026f9SYork Sun #define DDR_CDR_ODT_30ohm 0x7 18634e026f9SYork Sun #else 1875614e71bSYork Sun #define DDR_CDR_ODT_OFF 0x0 1885614e71bSYork Sun #define DDR_CDR_ODT_120ohm 0x1 1895614e71bSYork Sun #define DDR_CDR_ODT_180ohm 0x2 1905614e71bSYork Sun #define DDR_CDR_ODT_75ohm 0x3 1915614e71bSYork Sun #define DDR_CDR_ODT_110ohm 0x4 1925614e71bSYork Sun #define DDR_CDR_ODT_60hm 0x5 1935614e71bSYork Sun #define DDR_CDR_ODT_70ohm 0x6 1945614e71bSYork Sun #define DDR_CDR_ODT_47ohm 0x7 19534e026f9SYork Sun #endif /* DDR3L */ 1965614e71bSYork Sun #else 1975614e71bSYork Sun #define DDR_CDR_ODT_75ohm 0x0 1985614e71bSYork Sun #define DDR_CDR_ODT_55ohm 0x1 1995614e71bSYork Sun #define DDR_CDR_ODT_60ohm 0x2 2005614e71bSYork Sun #define DDR_CDR_ODT_50ohm 0x3 2015614e71bSYork Sun #define DDR_CDR_ODT_150ohm 0x4 2025614e71bSYork Sun #define DDR_CDR_ODT_43ohm 0x5 2035614e71bSYork Sun #define DDR_CDR_ODT_120ohm 0x6 2045614e71bSYork Sun #endif 2055614e71bSYork Sun 2065614e71bSYork Sun /* Record of register values computed */ 2075614e71bSYork Sun typedef struct fsl_ddr_cfg_regs_s { 2085614e71bSYork Sun struct { 2095614e71bSYork Sun unsigned int bnds; 2105614e71bSYork Sun unsigned int config; 2115614e71bSYork Sun unsigned int config_2; 2125614e71bSYork Sun } cs[CONFIG_CHIP_SELECTS_PER_CTRL]; 2135614e71bSYork Sun unsigned int timing_cfg_3; 2145614e71bSYork Sun unsigned int timing_cfg_0; 2155614e71bSYork Sun unsigned int timing_cfg_1; 2165614e71bSYork Sun unsigned int timing_cfg_2; 2175614e71bSYork Sun unsigned int ddr_sdram_cfg; 2185614e71bSYork Sun unsigned int ddr_sdram_cfg_2; 21934e026f9SYork Sun unsigned int ddr_sdram_cfg_3; 2205614e71bSYork Sun unsigned int ddr_sdram_mode; 2215614e71bSYork Sun unsigned int ddr_sdram_mode_2; 2225614e71bSYork Sun unsigned int ddr_sdram_mode_3; 2235614e71bSYork Sun unsigned int ddr_sdram_mode_4; 2245614e71bSYork Sun unsigned int ddr_sdram_mode_5; 2255614e71bSYork Sun unsigned int ddr_sdram_mode_6; 2265614e71bSYork Sun unsigned int ddr_sdram_mode_7; 2275614e71bSYork Sun unsigned int ddr_sdram_mode_8; 22834e026f9SYork Sun unsigned int ddr_sdram_mode_9; 22934e026f9SYork Sun unsigned int ddr_sdram_mode_10; 23034e026f9SYork Sun unsigned int ddr_sdram_mode_11; 23134e026f9SYork Sun unsigned int ddr_sdram_mode_12; 23234e026f9SYork Sun unsigned int ddr_sdram_mode_13; 23334e026f9SYork Sun unsigned int ddr_sdram_mode_14; 23434e026f9SYork Sun unsigned int ddr_sdram_mode_15; 23534e026f9SYork Sun unsigned int ddr_sdram_mode_16; 2365614e71bSYork Sun unsigned int ddr_sdram_md_cntl; 2375614e71bSYork Sun unsigned int ddr_sdram_interval; 2385614e71bSYork Sun unsigned int ddr_data_init; 2395614e71bSYork Sun unsigned int ddr_sdram_clk_cntl; 2405614e71bSYork Sun unsigned int ddr_init_addr; 2415614e71bSYork Sun unsigned int ddr_init_ext_addr; 2425614e71bSYork Sun unsigned int timing_cfg_4; 2435614e71bSYork Sun unsigned int timing_cfg_5; 24434e026f9SYork Sun unsigned int timing_cfg_6; 24534e026f9SYork Sun unsigned int timing_cfg_7; 24634e026f9SYork Sun unsigned int timing_cfg_8; 24734e026f9SYork Sun unsigned int timing_cfg_9; 2485614e71bSYork Sun unsigned int ddr_zq_cntl; 2495614e71bSYork Sun unsigned int ddr_wrlvl_cntl; 2505614e71bSYork Sun unsigned int ddr_wrlvl_cntl_2; 2515614e71bSYork Sun unsigned int ddr_wrlvl_cntl_3; 2525614e71bSYork Sun unsigned int ddr_sr_cntr; 2535614e71bSYork Sun unsigned int ddr_sdram_rcw_1; 2545614e71bSYork Sun unsigned int ddr_sdram_rcw_2; 25534e026f9SYork Sun unsigned int ddr_sdram_rcw_3; 25634e026f9SYork Sun unsigned int ddr_sdram_rcw_4; 25734e026f9SYork Sun unsigned int ddr_sdram_rcw_5; 25834e026f9SYork Sun unsigned int ddr_sdram_rcw_6; 25934e026f9SYork Sun unsigned int dq_map_0; 26034e026f9SYork Sun unsigned int dq_map_1; 26134e026f9SYork Sun unsigned int dq_map_2; 26234e026f9SYork Sun unsigned int dq_map_3; 2635614e71bSYork Sun unsigned int ddr_eor; 2645614e71bSYork Sun unsigned int ddr_cdr1; 2655614e71bSYork Sun unsigned int ddr_cdr2; 2665614e71bSYork Sun unsigned int err_disable; 2675614e71bSYork Sun unsigned int err_int_en; 2685614e71bSYork Sun unsigned int debug[32]; 2695614e71bSYork Sun } fsl_ddr_cfg_regs_t; 2705614e71bSYork Sun 2715614e71bSYork Sun typedef struct memctl_options_partial_s { 2725614e71bSYork Sun unsigned int all_dimms_ecc_capable; 2735614e71bSYork Sun unsigned int all_dimms_tckmax_ps; 2745614e71bSYork Sun unsigned int all_dimms_burst_lengths_bitmask; 2755614e71bSYork Sun unsigned int all_dimms_registered; 2765614e71bSYork Sun unsigned int all_dimms_unbuffered; 27734e026f9SYork Sun /* unsigned int lowest_common_spd_caslat; */ 2785614e71bSYork Sun unsigned int all_dimms_minimum_trcd_ps; 2795614e71bSYork Sun } memctl_options_partial_t; 2805614e71bSYork Sun 2815614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_64 0 2825614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_32 1 2835614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_16 2 284ef87cab6SYork Sun #define DDR_CSWL_CS0 0x04000001 2855614e71bSYork Sun /* 2865614e71bSYork Sun * Generalized parameters for memory controller configuration, 2875614e71bSYork Sun * might be a little specific to the FSL memory controller 2885614e71bSYork Sun */ 2895614e71bSYork Sun typedef struct memctl_options_s { 2905614e71bSYork Sun /* 2915614e71bSYork Sun * Memory organization parameters 2925614e71bSYork Sun * 2935614e71bSYork Sun * if DIMM is present in the system 2945614e71bSYork Sun * where DIMMs are with respect to chip select 2955614e71bSYork Sun * where chip selects are with respect to memory boundaries 2965614e71bSYork Sun */ 2975614e71bSYork Sun unsigned int registered_dimm_en; /* use registered DIMM support */ 2985614e71bSYork Sun 2995614e71bSYork Sun /* Options local to a Chip Select */ 3005614e71bSYork Sun struct cs_local_opts_s { 3015614e71bSYork Sun unsigned int auto_precharge; 3025614e71bSYork Sun unsigned int odt_rd_cfg; 3035614e71bSYork Sun unsigned int odt_wr_cfg; 3045614e71bSYork Sun unsigned int odt_rtt_norm; 3055614e71bSYork Sun unsigned int odt_rtt_wr; 3065614e71bSYork Sun } cs_local_opts[CONFIG_CHIP_SELECTS_PER_CTRL]; 3075614e71bSYork Sun 3085614e71bSYork Sun /* Special configurations for chip select */ 3095614e71bSYork Sun unsigned int memctl_interleaving; 3105614e71bSYork Sun unsigned int memctl_interleaving_mode; 3115614e71bSYork Sun unsigned int ba_intlv_ctl; 3125614e71bSYork Sun unsigned int addr_hash; 3135614e71bSYork Sun 3145614e71bSYork Sun /* Operational mode parameters */ 3155614e71bSYork Sun unsigned int ecc_mode; /* Use ECC? */ 3165614e71bSYork Sun /* Initialize ECC using memory controller? */ 3175614e71bSYork Sun unsigned int ecc_init_using_memctl; 3185614e71bSYork Sun unsigned int dqs_config; /* Use DQS? maybe only with DDR2? */ 3195614e71bSYork Sun /* SREN - self-refresh during sleep */ 3205614e71bSYork Sun unsigned int self_refresh_in_sleep; 3215614e71bSYork Sun unsigned int dynamic_power; /* DYN_PWR */ 3225614e71bSYork Sun /* memory data width to use (16-bit, 32-bit, 64-bit) */ 3235614e71bSYork Sun unsigned int data_bus_width; 3245614e71bSYork Sun unsigned int burst_length; /* BL4, OTF and BL8 */ 3255614e71bSYork Sun /* On-The-Fly Burst Chop enable */ 3265614e71bSYork Sun unsigned int otf_burst_chop_en; 3275614e71bSYork Sun /* mirrior DIMMs for DDR3 */ 3285614e71bSYork Sun unsigned int mirrored_dimm; 3295614e71bSYork Sun unsigned int quad_rank_present; 3305614e71bSYork Sun unsigned int ap_en; /* address parity enable for RDIMM */ 3315614e71bSYork Sun unsigned int x4_en; /* enable x4 devices */ 3325614e71bSYork Sun 3335614e71bSYork Sun /* Global Timing Parameters */ 3345614e71bSYork Sun unsigned int cas_latency_override; 3355614e71bSYork Sun unsigned int cas_latency_override_value; 3365614e71bSYork Sun unsigned int use_derated_caslat; 3375614e71bSYork Sun unsigned int additive_latency_override; 3385614e71bSYork Sun unsigned int additive_latency_override_value; 3395614e71bSYork Sun 3405614e71bSYork Sun unsigned int clk_adjust; /* */ 3415614e71bSYork Sun unsigned int cpo_override; 3425614e71bSYork Sun unsigned int write_data_delay; /* DQS adjust */ 3435614e71bSYork Sun 344ef87cab6SYork Sun unsigned int cswl_override; 3455614e71bSYork Sun unsigned int wrlvl_override; 3465614e71bSYork Sun unsigned int wrlvl_sample; /* Write leveling */ 3475614e71bSYork Sun unsigned int wrlvl_start; 3485614e71bSYork Sun unsigned int wrlvl_ctl_2; 3495614e71bSYork Sun unsigned int wrlvl_ctl_3; 3505614e71bSYork Sun 3515614e71bSYork Sun unsigned int half_strength_driver_enable; 3525614e71bSYork Sun unsigned int twot_en; 3535614e71bSYork Sun unsigned int threet_en; 3545614e71bSYork Sun unsigned int bstopre; 3555614e71bSYork Sun unsigned int tcke_clock_pulse_width_ps; /* tCKE */ 3565614e71bSYork Sun unsigned int tfaw_window_four_activates_ps; /* tFAW -- FOUR_ACT */ 3575614e71bSYork Sun 3585614e71bSYork Sun /* Rtt impedance */ 3595614e71bSYork Sun unsigned int rtt_override; /* rtt_override enable */ 3605614e71bSYork Sun unsigned int rtt_override_value; /* that is Rtt_Nom for DDR3 */ 3615614e71bSYork Sun unsigned int rtt_wr_override_value; /* this is Rtt_WR for DDR3 */ 3625614e71bSYork Sun 3635614e71bSYork Sun /* Automatic self refresh */ 3645614e71bSYork Sun unsigned int auto_self_refresh_en; 3655614e71bSYork Sun unsigned int sr_it; 3665614e71bSYork Sun /* ZQ calibration */ 3675614e71bSYork Sun unsigned int zq_en; 3685614e71bSYork Sun /* Write leveling */ 3695614e71bSYork Sun unsigned int wrlvl_en; 3705614e71bSYork Sun /* RCW override for RDIMM */ 3715614e71bSYork Sun unsigned int rcw_override; 3725614e71bSYork Sun unsigned int rcw_1; 3735614e71bSYork Sun unsigned int rcw_2; 3745614e71bSYork Sun /* control register 1 */ 3755614e71bSYork Sun unsigned int ddr_cdr1; 3765614e71bSYork Sun unsigned int ddr_cdr2; 3775614e71bSYork Sun 3785614e71bSYork Sun unsigned int trwt_override; 3795614e71bSYork Sun unsigned int trwt; /* read-to-write turnaround */ 3805614e71bSYork Sun } memctl_options_t; 3815614e71bSYork Sun 382*1d71efbbSYork Sun phys_size_t fsl_ddr_sdram(void); 383*1d71efbbSYork Sun phys_size_t fsl_ddr_sdram_size(void); 384*1d71efbbSYork Sun phys_size_t fsl_other_ddr_sdram(unsigned long long base, 385*1d71efbbSYork Sun unsigned int first_ctrl, 386*1d71efbbSYork Sun unsigned int num_ctrls, 387*1d71efbbSYork Sun unsigned int dimm_slots_per_ctrl, 388*1d71efbbSYork Sun int (*board_need_reset)(void), 389*1d71efbbSYork Sun void (*board_reset)(void), 390*1d71efbbSYork Sun void (*board_de_reset)(void)); 3915614e71bSYork Sun extern int fsl_use_spd(void); 392*1d71efbbSYork Sun void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, 3935614e71bSYork Sun unsigned int ctrl_num, int step); 3945614e71bSYork Sun u32 fsl_ddr_get_intl3r(void); 395*1d71efbbSYork Sun void print_ddr_info(unsigned int start_ctrl); 3965614e71bSYork Sun 3975614e71bSYork Sun static void __board_assert_mem_reset(void) 3985614e71bSYork Sun { 3995614e71bSYork Sun } 4005614e71bSYork Sun 4015614e71bSYork Sun static void __board_deassert_mem_reset(void) 4025614e71bSYork Sun { 4035614e71bSYork Sun } 4045614e71bSYork Sun 4055614e71bSYork Sun void board_assert_mem_reset(void) 4065614e71bSYork Sun __attribute__((weak, alias("__board_assert_mem_reset"))); 4075614e71bSYork Sun 4085614e71bSYork Sun void board_deassert_mem_reset(void) 4095614e71bSYork Sun __attribute__((weak, alias("__board_deassert_mem_reset"))); 4105614e71bSYork Sun 4115614e71bSYork Sun static int __board_need_mem_reset(void) 4125614e71bSYork Sun { 4135614e71bSYork Sun return 0; 4145614e71bSYork Sun } 4155614e71bSYork Sun 4165614e71bSYork Sun int board_need_mem_reset(void) 4175614e71bSYork Sun __attribute__((weak, alias("__board_need_mem_reset"))); 4185614e71bSYork Sun 419aade2004STang Yuantian void __weak board_mem_sleep_setup(void) 420aade2004STang Yuantian { 421aade2004STang Yuantian } 422aade2004STang Yuantian 4235614e71bSYork Sun /* 4245614e71bSYork Sun * The 85xx boards have a common prototype for fixed_sdram so put the 4255614e71bSYork Sun * declaration here. 4265614e71bSYork Sun */ 4275614e71bSYork Sun #ifdef CONFIG_MPC85xx 4285614e71bSYork Sun extern phys_size_t fixed_sdram(void); 4295614e71bSYork Sun #endif 4305614e71bSYork Sun 4315614e71bSYork Sun #if defined(CONFIG_DDR_ECC) 4325614e71bSYork Sun extern void ddr_enable_ecc(unsigned int dram_size); 4335614e71bSYork Sun #endif 4345614e71bSYork Sun 4355614e71bSYork Sun 4365614e71bSYork Sun typedef struct fixed_ddr_parm{ 4375614e71bSYork Sun int min_freq; 4385614e71bSYork Sun int max_freq; 4395614e71bSYork Sun fsl_ddr_cfg_regs_t *ddr_settings; 4405614e71bSYork Sun } fixed_ddr_parm_t; 4415614e71bSYork Sun #endif 442