1*5614e71bSYork Sun /* 2*5614e71bSYork Sun * Copyright 2008-2011 Freescale Semiconductor, Inc. 3*5614e71bSYork Sun * 4*5614e71bSYork Sun * This program is free software; you can redistribute it and/or 5*5614e71bSYork Sun * modify it under the terms of the GNU General Public License 6*5614e71bSYork Sun * Version 2 as published by the Free Software Foundation. 7*5614e71bSYork Sun */ 8*5614e71bSYork Sun 9*5614e71bSYork Sun #ifndef FSL_DDR_MEMCTL_H 10*5614e71bSYork Sun #define FSL_DDR_MEMCTL_H 11*5614e71bSYork Sun 12*5614e71bSYork Sun /* 13*5614e71bSYork Sun * Pick a basic DDR Technology. 14*5614e71bSYork Sun */ 15*5614e71bSYork Sun #include <ddr_spd.h> 16*5614e71bSYork Sun 17*5614e71bSYork Sun #define SDRAM_TYPE_DDR1 2 18*5614e71bSYork Sun #define SDRAM_TYPE_DDR2 3 19*5614e71bSYork Sun #define SDRAM_TYPE_LPDDR1 6 20*5614e71bSYork Sun #define SDRAM_TYPE_DDR3 7 21*5614e71bSYork Sun 22*5614e71bSYork Sun #define DDR_BL4 4 /* burst length 4 */ 23*5614e71bSYork Sun #define DDR_BC4 DDR_BL4 /* burst chop for ddr3 */ 24*5614e71bSYork Sun #define DDR_OTF 6 /* on-the-fly BC4 and BL8 */ 25*5614e71bSYork Sun #define DDR_BL8 8 /* burst length 8 */ 26*5614e71bSYork Sun 27*5614e71bSYork Sun #define DDR3_RTT_OFF 0 28*5614e71bSYork Sun #define DDR3_RTT_60_OHM 1 /* RTT_Nom = RZQ/4 */ 29*5614e71bSYork Sun #define DDR3_RTT_120_OHM 2 /* RTT_Nom = RZQ/2 */ 30*5614e71bSYork Sun #define DDR3_RTT_40_OHM 3 /* RTT_Nom = RZQ/6 */ 31*5614e71bSYork Sun #define DDR3_RTT_20_OHM 4 /* RTT_Nom = RZQ/12 */ 32*5614e71bSYork Sun #define DDR3_RTT_30_OHM 5 /* RTT_Nom = RZQ/8 */ 33*5614e71bSYork Sun 34*5614e71bSYork Sun #define DDR2_RTT_OFF 0 35*5614e71bSYork Sun #define DDR2_RTT_75_OHM 1 36*5614e71bSYork Sun #define DDR2_RTT_150_OHM 2 37*5614e71bSYork Sun #define DDR2_RTT_50_OHM 3 38*5614e71bSYork Sun 39*5614e71bSYork Sun #if defined(CONFIG_SYS_FSL_DDR1) 40*5614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (1) 41*5614e71bSYork Sun typedef ddr1_spd_eeprom_t generic_spd_eeprom_t; 42*5614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 43*5614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR1 44*5614e71bSYork Sun #endif 45*5614e71bSYork Sun #elif defined(CONFIG_SYS_FSL_DDR2) 46*5614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (3) 47*5614e71bSYork Sun typedef ddr2_spd_eeprom_t generic_spd_eeprom_t; 48*5614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 49*5614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR2 50*5614e71bSYork Sun #endif 51*5614e71bSYork Sun #elif defined(CONFIG_SYS_FSL_DDR3) 52*5614e71bSYork Sun #define FSL_DDR_MIN_TCKE_PULSE_WIDTH_DDR (3) /* FIXME */ 53*5614e71bSYork Sun typedef ddr3_spd_eeprom_t generic_spd_eeprom_t; 54*5614e71bSYork Sun #ifndef CONFIG_FSL_SDRAM_TYPE 55*5614e71bSYork Sun #define CONFIG_FSL_SDRAM_TYPE SDRAM_TYPE_DDR3 56*5614e71bSYork Sun #endif 57*5614e71bSYork Sun #endif /* #if defined(CONFIG_SYS_FSL_DDR1) */ 58*5614e71bSYork Sun 59*5614e71bSYork Sun #define FSL_DDR_ODT_NEVER 0x0 60*5614e71bSYork Sun #define FSL_DDR_ODT_CS 0x1 61*5614e71bSYork Sun #define FSL_DDR_ODT_ALL_OTHER_CS 0x2 62*5614e71bSYork Sun #define FSL_DDR_ODT_OTHER_DIMM 0x3 63*5614e71bSYork Sun #define FSL_DDR_ODT_ALL 0x4 64*5614e71bSYork Sun #define FSL_DDR_ODT_SAME_DIMM 0x5 65*5614e71bSYork Sun #define FSL_DDR_ODT_CS_AND_OTHER_DIMM 0x6 66*5614e71bSYork Sun #define FSL_DDR_ODT_OTHER_CS_ONSAMEDIMM 0x7 67*5614e71bSYork Sun 68*5614e71bSYork Sun /* define bank(chip select) interleaving mode */ 69*5614e71bSYork Sun #define FSL_DDR_CS0_CS1 0x40 70*5614e71bSYork Sun #define FSL_DDR_CS2_CS3 0x20 71*5614e71bSYork Sun #define FSL_DDR_CS0_CS1_AND_CS2_CS3 (FSL_DDR_CS0_CS1 | FSL_DDR_CS2_CS3) 72*5614e71bSYork Sun #define FSL_DDR_CS0_CS1_CS2_CS3 (FSL_DDR_CS0_CS1_AND_CS2_CS3 | 0x04) 73*5614e71bSYork Sun 74*5614e71bSYork Sun /* define memory controller interleaving mode */ 75*5614e71bSYork Sun #define FSL_DDR_CACHE_LINE_INTERLEAVING 0x0 76*5614e71bSYork Sun #define FSL_DDR_PAGE_INTERLEAVING 0x1 77*5614e71bSYork Sun #define FSL_DDR_BANK_INTERLEAVING 0x2 78*5614e71bSYork Sun #define FSL_DDR_SUPERBANK_INTERLEAVING 0x3 79*5614e71bSYork Sun #define FSL_DDR_3WAY_1KB_INTERLEAVING 0xA 80*5614e71bSYork Sun #define FSL_DDR_3WAY_4KB_INTERLEAVING 0xC 81*5614e71bSYork Sun #define FSL_DDR_3WAY_8KB_INTERLEAVING 0xD 82*5614e71bSYork Sun /* placeholder for 4-way interleaving */ 83*5614e71bSYork Sun #define FSL_DDR_4WAY_1KB_INTERLEAVING 0x1A 84*5614e71bSYork Sun #define FSL_DDR_4WAY_4KB_INTERLEAVING 0x1C 85*5614e71bSYork Sun #define FSL_DDR_4WAY_8KB_INTERLEAVING 0x1D 86*5614e71bSYork Sun 87*5614e71bSYork Sun #define SDRAM_CS_CONFIG_EN 0x80000000 88*5614e71bSYork Sun 89*5614e71bSYork Sun /* DDR_SDRAM_CFG - DDR SDRAM Control Configuration 90*5614e71bSYork Sun */ 91*5614e71bSYork Sun #define SDRAM_CFG_MEM_EN 0x80000000 92*5614e71bSYork Sun #define SDRAM_CFG_SREN 0x40000000 93*5614e71bSYork Sun #define SDRAM_CFG_ECC_EN 0x20000000 94*5614e71bSYork Sun #define SDRAM_CFG_RD_EN 0x10000000 95*5614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_DDR1 0x02000000 96*5614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_DDR2 0x03000000 97*5614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_MASK 0x07000000 98*5614e71bSYork Sun #define SDRAM_CFG_SDRAM_TYPE_SHIFT 24 99*5614e71bSYork Sun #define SDRAM_CFG_DYN_PWR 0x00200000 100*5614e71bSYork Sun #define SDRAM_CFG_DBW_MASK 0x00180000 101*5614e71bSYork Sun #define SDRAM_CFG_DBW_SHIFT 19 102*5614e71bSYork Sun #define SDRAM_CFG_32_BE 0x00080000 103*5614e71bSYork Sun #define SDRAM_CFG_16_BE 0x00100000 104*5614e71bSYork Sun #define SDRAM_CFG_8_BE 0x00040000 105*5614e71bSYork Sun #define SDRAM_CFG_NCAP 0x00020000 106*5614e71bSYork Sun #define SDRAM_CFG_2T_EN 0x00008000 107*5614e71bSYork Sun #define SDRAM_CFG_BI 0x00000001 108*5614e71bSYork Sun 109*5614e71bSYork Sun #define SDRAM_CFG2_D_INIT 0x00000010 110*5614e71bSYork Sun #define SDRAM_CFG2_ODT_CFG_MASK 0x00600000 111*5614e71bSYork Sun #define SDRAM_CFG2_ODT_NEVER 0 112*5614e71bSYork Sun #define SDRAM_CFG2_ODT_ONLY_WRITE 1 113*5614e71bSYork Sun #define SDRAM_CFG2_ODT_ONLY_READ 2 114*5614e71bSYork Sun #define SDRAM_CFG2_ODT_ALWAYS 3 115*5614e71bSYork Sun 116*5614e71bSYork Sun #define TIMING_CFG_2_CPO_MASK 0x0F800000 117*5614e71bSYork Sun 118*5614e71bSYork Sun #if defined(CONFIG_P4080) 119*5614e71bSYork Sun #define RD_TO_PRE_MASK 0xf 120*5614e71bSYork Sun #define RD_TO_PRE_SHIFT 13 121*5614e71bSYork Sun #define WR_DATA_DELAY_MASK 0xf 122*5614e71bSYork Sun #define WR_DATA_DELAY_SHIFT 9 123*5614e71bSYork Sun #else 124*5614e71bSYork Sun #define RD_TO_PRE_MASK 0x7 125*5614e71bSYork Sun #define RD_TO_PRE_SHIFT 13 126*5614e71bSYork Sun #define WR_DATA_DELAY_MASK 0x7 127*5614e71bSYork Sun #define WR_DATA_DELAY_SHIFT 10 128*5614e71bSYork Sun #endif 129*5614e71bSYork Sun 130*5614e71bSYork Sun /* DDR_MD_CNTL */ 131*5614e71bSYork Sun #define MD_CNTL_MD_EN 0x80000000 132*5614e71bSYork Sun #define MD_CNTL_CS_SEL_CS0 0x00000000 133*5614e71bSYork Sun #define MD_CNTL_CS_SEL_CS1 0x10000000 134*5614e71bSYork Sun #define MD_CNTL_CS_SEL_CS2 0x20000000 135*5614e71bSYork Sun #define MD_CNTL_CS_SEL_CS3 0x30000000 136*5614e71bSYork Sun #define MD_CNTL_CS_SEL_CS0_CS1 0x40000000 137*5614e71bSYork Sun #define MD_CNTL_CS_SEL_CS2_CS3 0x50000000 138*5614e71bSYork Sun #define MD_CNTL_MD_SEL_MR 0x00000000 139*5614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR 0x01000000 140*5614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR2 0x02000000 141*5614e71bSYork Sun #define MD_CNTL_MD_SEL_EMR3 0x03000000 142*5614e71bSYork Sun #define MD_CNTL_SET_REF 0x00800000 143*5614e71bSYork Sun #define MD_CNTL_SET_PRE 0x00400000 144*5614e71bSYork Sun #define MD_CNTL_CKE_CNTL_LOW 0x00100000 145*5614e71bSYork Sun #define MD_CNTL_CKE_CNTL_HIGH 0x00200000 146*5614e71bSYork Sun #define MD_CNTL_WRCW 0x00080000 147*5614e71bSYork Sun #define MD_CNTL_MD_VALUE(x) (x & 0x0000FFFF) 148*5614e71bSYork Sun 149*5614e71bSYork Sun /* DDR_CDR1 */ 150*5614e71bSYork Sun #define DDR_CDR1_DHC_EN 0x80000000 151*5614e71bSYork Sun #define DDR_CDR1_ODT_SHIFT 17 152*5614e71bSYork Sun #define DDR_CDR1_ODT_MASK 0x6 153*5614e71bSYork Sun #define DDR_CDR2_ODT_MASK 0x1 154*5614e71bSYork Sun #define DDR_CDR1_ODT(x) ((x & DDR_CDR1_ODT_MASK) << DDR_CDR1_ODT_SHIFT) 155*5614e71bSYork Sun #define DDR_CDR2_ODT(x) (x & DDR_CDR2_ODT_MASK) 156*5614e71bSYork Sun 157*5614e71bSYork Sun #if (defined(CONFIG_SYS_FSL_DDR_VER) && \ 158*5614e71bSYork Sun (CONFIG_SYS_FSL_DDR_VER >= FSL_DDR_VER_4_7)) 159*5614e71bSYork Sun #define DDR_CDR_ODT_OFF 0x0 160*5614e71bSYork Sun #define DDR_CDR_ODT_120ohm 0x1 161*5614e71bSYork Sun #define DDR_CDR_ODT_180ohm 0x2 162*5614e71bSYork Sun #define DDR_CDR_ODT_75ohm 0x3 163*5614e71bSYork Sun #define DDR_CDR_ODT_110ohm 0x4 164*5614e71bSYork Sun #define DDR_CDR_ODT_60hm 0x5 165*5614e71bSYork Sun #define DDR_CDR_ODT_70ohm 0x6 166*5614e71bSYork Sun #define DDR_CDR_ODT_47ohm 0x7 167*5614e71bSYork Sun #else 168*5614e71bSYork Sun #define DDR_CDR_ODT_75ohm 0x0 169*5614e71bSYork Sun #define DDR_CDR_ODT_55ohm 0x1 170*5614e71bSYork Sun #define DDR_CDR_ODT_60ohm 0x2 171*5614e71bSYork Sun #define DDR_CDR_ODT_50ohm 0x3 172*5614e71bSYork Sun #define DDR_CDR_ODT_150ohm 0x4 173*5614e71bSYork Sun #define DDR_CDR_ODT_43ohm 0x5 174*5614e71bSYork Sun #define DDR_CDR_ODT_120ohm 0x6 175*5614e71bSYork Sun #endif 176*5614e71bSYork Sun 177*5614e71bSYork Sun /* Record of register values computed */ 178*5614e71bSYork Sun typedef struct fsl_ddr_cfg_regs_s { 179*5614e71bSYork Sun struct { 180*5614e71bSYork Sun unsigned int bnds; 181*5614e71bSYork Sun unsigned int config; 182*5614e71bSYork Sun unsigned int config_2; 183*5614e71bSYork Sun } cs[CONFIG_CHIP_SELECTS_PER_CTRL]; 184*5614e71bSYork Sun unsigned int timing_cfg_3; 185*5614e71bSYork Sun unsigned int timing_cfg_0; 186*5614e71bSYork Sun unsigned int timing_cfg_1; 187*5614e71bSYork Sun unsigned int timing_cfg_2; 188*5614e71bSYork Sun unsigned int ddr_sdram_cfg; 189*5614e71bSYork Sun unsigned int ddr_sdram_cfg_2; 190*5614e71bSYork Sun unsigned int ddr_sdram_mode; 191*5614e71bSYork Sun unsigned int ddr_sdram_mode_2; 192*5614e71bSYork Sun unsigned int ddr_sdram_mode_3; 193*5614e71bSYork Sun unsigned int ddr_sdram_mode_4; 194*5614e71bSYork Sun unsigned int ddr_sdram_mode_5; 195*5614e71bSYork Sun unsigned int ddr_sdram_mode_6; 196*5614e71bSYork Sun unsigned int ddr_sdram_mode_7; 197*5614e71bSYork Sun unsigned int ddr_sdram_mode_8; 198*5614e71bSYork Sun unsigned int ddr_sdram_md_cntl; 199*5614e71bSYork Sun unsigned int ddr_sdram_interval; 200*5614e71bSYork Sun unsigned int ddr_data_init; 201*5614e71bSYork Sun unsigned int ddr_sdram_clk_cntl; 202*5614e71bSYork Sun unsigned int ddr_init_addr; 203*5614e71bSYork Sun unsigned int ddr_init_ext_addr; 204*5614e71bSYork Sun unsigned int timing_cfg_4; 205*5614e71bSYork Sun unsigned int timing_cfg_5; 206*5614e71bSYork Sun unsigned int ddr_zq_cntl; 207*5614e71bSYork Sun unsigned int ddr_wrlvl_cntl; 208*5614e71bSYork Sun unsigned int ddr_wrlvl_cntl_2; 209*5614e71bSYork Sun unsigned int ddr_wrlvl_cntl_3; 210*5614e71bSYork Sun unsigned int ddr_sr_cntr; 211*5614e71bSYork Sun unsigned int ddr_sdram_rcw_1; 212*5614e71bSYork Sun unsigned int ddr_sdram_rcw_2; 213*5614e71bSYork Sun unsigned int ddr_eor; 214*5614e71bSYork Sun unsigned int ddr_cdr1; 215*5614e71bSYork Sun unsigned int ddr_cdr2; 216*5614e71bSYork Sun unsigned int err_disable; 217*5614e71bSYork Sun unsigned int err_int_en; 218*5614e71bSYork Sun unsigned int debug[32]; 219*5614e71bSYork Sun } fsl_ddr_cfg_regs_t; 220*5614e71bSYork Sun 221*5614e71bSYork Sun typedef struct memctl_options_partial_s { 222*5614e71bSYork Sun unsigned int all_dimms_ecc_capable; 223*5614e71bSYork Sun unsigned int all_dimms_tckmax_ps; 224*5614e71bSYork Sun unsigned int all_dimms_burst_lengths_bitmask; 225*5614e71bSYork Sun unsigned int all_dimms_registered; 226*5614e71bSYork Sun unsigned int all_dimms_unbuffered; 227*5614e71bSYork Sun /* unsigned int lowest_common_SPD_caslat; */ 228*5614e71bSYork Sun unsigned int all_dimms_minimum_trcd_ps; 229*5614e71bSYork Sun } memctl_options_partial_t; 230*5614e71bSYork Sun 231*5614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_64 0 232*5614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_32 1 233*5614e71bSYork Sun #define DDR_DATA_BUS_WIDTH_16 2 234*5614e71bSYork Sun /* 235*5614e71bSYork Sun * Generalized parameters for memory controller configuration, 236*5614e71bSYork Sun * might be a little specific to the FSL memory controller 237*5614e71bSYork Sun */ 238*5614e71bSYork Sun typedef struct memctl_options_s { 239*5614e71bSYork Sun /* 240*5614e71bSYork Sun * Memory organization parameters 241*5614e71bSYork Sun * 242*5614e71bSYork Sun * if DIMM is present in the system 243*5614e71bSYork Sun * where DIMMs are with respect to chip select 244*5614e71bSYork Sun * where chip selects are with respect to memory boundaries 245*5614e71bSYork Sun */ 246*5614e71bSYork Sun unsigned int registered_dimm_en; /* use registered DIMM support */ 247*5614e71bSYork Sun 248*5614e71bSYork Sun /* Options local to a Chip Select */ 249*5614e71bSYork Sun struct cs_local_opts_s { 250*5614e71bSYork Sun unsigned int auto_precharge; 251*5614e71bSYork Sun unsigned int odt_rd_cfg; 252*5614e71bSYork Sun unsigned int odt_wr_cfg; 253*5614e71bSYork Sun unsigned int odt_rtt_norm; 254*5614e71bSYork Sun unsigned int odt_rtt_wr; 255*5614e71bSYork Sun } cs_local_opts[CONFIG_CHIP_SELECTS_PER_CTRL]; 256*5614e71bSYork Sun 257*5614e71bSYork Sun /* Special configurations for chip select */ 258*5614e71bSYork Sun unsigned int memctl_interleaving; 259*5614e71bSYork Sun unsigned int memctl_interleaving_mode; 260*5614e71bSYork Sun unsigned int ba_intlv_ctl; 261*5614e71bSYork Sun unsigned int addr_hash; 262*5614e71bSYork Sun 263*5614e71bSYork Sun /* Operational mode parameters */ 264*5614e71bSYork Sun unsigned int ecc_mode; /* Use ECC? */ 265*5614e71bSYork Sun /* Initialize ECC using memory controller? */ 266*5614e71bSYork Sun unsigned int ecc_init_using_memctl; 267*5614e71bSYork Sun unsigned int dqs_config; /* Use DQS? maybe only with DDR2? */ 268*5614e71bSYork Sun /* SREN - self-refresh during sleep */ 269*5614e71bSYork Sun unsigned int self_refresh_in_sleep; 270*5614e71bSYork Sun unsigned int dynamic_power; /* DYN_PWR */ 271*5614e71bSYork Sun /* memory data width to use (16-bit, 32-bit, 64-bit) */ 272*5614e71bSYork Sun unsigned int data_bus_width; 273*5614e71bSYork Sun unsigned int burst_length; /* BL4, OTF and BL8 */ 274*5614e71bSYork Sun /* On-The-Fly Burst Chop enable */ 275*5614e71bSYork Sun unsigned int otf_burst_chop_en; 276*5614e71bSYork Sun /* mirrior DIMMs for DDR3 */ 277*5614e71bSYork Sun unsigned int mirrored_dimm; 278*5614e71bSYork Sun unsigned int quad_rank_present; 279*5614e71bSYork Sun unsigned int ap_en; /* address parity enable for RDIMM */ 280*5614e71bSYork Sun unsigned int x4_en; /* enable x4 devices */ 281*5614e71bSYork Sun 282*5614e71bSYork Sun /* Global Timing Parameters */ 283*5614e71bSYork Sun unsigned int cas_latency_override; 284*5614e71bSYork Sun unsigned int cas_latency_override_value; 285*5614e71bSYork Sun unsigned int use_derated_caslat; 286*5614e71bSYork Sun unsigned int additive_latency_override; 287*5614e71bSYork Sun unsigned int additive_latency_override_value; 288*5614e71bSYork Sun 289*5614e71bSYork Sun unsigned int clk_adjust; /* */ 290*5614e71bSYork Sun unsigned int cpo_override; 291*5614e71bSYork Sun unsigned int write_data_delay; /* DQS adjust */ 292*5614e71bSYork Sun 293*5614e71bSYork Sun unsigned int wrlvl_override; 294*5614e71bSYork Sun unsigned int wrlvl_sample; /* Write leveling */ 295*5614e71bSYork Sun unsigned int wrlvl_start; 296*5614e71bSYork Sun unsigned int wrlvl_ctl_2; 297*5614e71bSYork Sun unsigned int wrlvl_ctl_3; 298*5614e71bSYork Sun 299*5614e71bSYork Sun unsigned int half_strength_driver_enable; 300*5614e71bSYork Sun unsigned int twot_en; 301*5614e71bSYork Sun unsigned int threet_en; 302*5614e71bSYork Sun unsigned int bstopre; 303*5614e71bSYork Sun unsigned int tcke_clock_pulse_width_ps; /* tCKE */ 304*5614e71bSYork Sun unsigned int tfaw_window_four_activates_ps; /* tFAW -- FOUR_ACT */ 305*5614e71bSYork Sun 306*5614e71bSYork Sun /* Rtt impedance */ 307*5614e71bSYork Sun unsigned int rtt_override; /* rtt_override enable */ 308*5614e71bSYork Sun unsigned int rtt_override_value; /* that is Rtt_Nom for DDR3 */ 309*5614e71bSYork Sun unsigned int rtt_wr_override_value; /* this is Rtt_WR for DDR3 */ 310*5614e71bSYork Sun 311*5614e71bSYork Sun /* Automatic self refresh */ 312*5614e71bSYork Sun unsigned int auto_self_refresh_en; 313*5614e71bSYork Sun unsigned int sr_it; 314*5614e71bSYork Sun /* ZQ calibration */ 315*5614e71bSYork Sun unsigned int zq_en; 316*5614e71bSYork Sun /* Write leveling */ 317*5614e71bSYork Sun unsigned int wrlvl_en; 318*5614e71bSYork Sun /* RCW override for RDIMM */ 319*5614e71bSYork Sun unsigned int rcw_override; 320*5614e71bSYork Sun unsigned int rcw_1; 321*5614e71bSYork Sun unsigned int rcw_2; 322*5614e71bSYork Sun /* control register 1 */ 323*5614e71bSYork Sun unsigned int ddr_cdr1; 324*5614e71bSYork Sun unsigned int ddr_cdr2; 325*5614e71bSYork Sun 326*5614e71bSYork Sun unsigned int trwt_override; 327*5614e71bSYork Sun unsigned int trwt; /* read-to-write turnaround */ 328*5614e71bSYork Sun } memctl_options_t; 329*5614e71bSYork Sun 330*5614e71bSYork Sun extern phys_size_t fsl_ddr_sdram(void); 331*5614e71bSYork Sun extern phys_size_t fsl_ddr_sdram_size(void); 332*5614e71bSYork Sun extern int fsl_use_spd(void); 333*5614e71bSYork Sun extern void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs, 334*5614e71bSYork Sun unsigned int ctrl_num, int step); 335*5614e71bSYork Sun u32 fsl_ddr_get_intl3r(void); 336*5614e71bSYork Sun 337*5614e71bSYork Sun static void __board_assert_mem_reset(void) 338*5614e71bSYork Sun { 339*5614e71bSYork Sun } 340*5614e71bSYork Sun 341*5614e71bSYork Sun static void __board_deassert_mem_reset(void) 342*5614e71bSYork Sun { 343*5614e71bSYork Sun } 344*5614e71bSYork Sun 345*5614e71bSYork Sun void board_assert_mem_reset(void) 346*5614e71bSYork Sun __attribute__((weak, alias("__board_assert_mem_reset"))); 347*5614e71bSYork Sun 348*5614e71bSYork Sun void board_deassert_mem_reset(void) 349*5614e71bSYork Sun __attribute__((weak, alias("__board_deassert_mem_reset"))); 350*5614e71bSYork Sun 351*5614e71bSYork Sun static int __board_need_mem_reset(void) 352*5614e71bSYork Sun { 353*5614e71bSYork Sun return 0; 354*5614e71bSYork Sun } 355*5614e71bSYork Sun 356*5614e71bSYork Sun int board_need_mem_reset(void) 357*5614e71bSYork Sun __attribute__((weak, alias("__board_need_mem_reset"))); 358*5614e71bSYork Sun 359*5614e71bSYork Sun /* 360*5614e71bSYork Sun * The 85xx boards have a common prototype for fixed_sdram so put the 361*5614e71bSYork Sun * declaration here. 362*5614e71bSYork Sun */ 363*5614e71bSYork Sun #ifdef CONFIG_MPC85xx 364*5614e71bSYork Sun extern phys_size_t fixed_sdram(void); 365*5614e71bSYork Sun #endif 366*5614e71bSYork Sun 367*5614e71bSYork Sun #if defined(CONFIG_DDR_ECC) 368*5614e71bSYork Sun extern void ddr_enable_ecc(unsigned int dram_size); 369*5614e71bSYork Sun #endif 370*5614e71bSYork Sun 371*5614e71bSYork Sun 372*5614e71bSYork Sun typedef struct fixed_ddr_parm{ 373*5614e71bSYork Sun int min_freq; 374*5614e71bSYork Sun int max_freq; 375*5614e71bSYork Sun fsl_ddr_cfg_regs_t *ddr_settings; 376*5614e71bSYork Sun } fixed_ddr_parm_t; 377*5614e71bSYork Sun #endif 378