1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * ddr_defs.h 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * ddr specific header 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef _DDR_DEFS_H 12*4882a593Smuzhiyun #define _DDR_DEFS_H 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include <asm/arch/hardware.h> 15*4882a593Smuzhiyun #include <asm/emif.h> 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* AM335X EMIF Register values */ 18*4882a593Smuzhiyun #define VTP_CTRL_READY (0x1 << 5) 19*4882a593Smuzhiyun #define VTP_CTRL_ENABLE (0x1 << 6) 20*4882a593Smuzhiyun #define VTP_CTRL_START_EN (0x1) 21*4882a593Smuzhiyun #ifdef CONFIG_AM43XX 22*4882a593Smuzhiyun #define DDR_CKE_CTRL_NORMAL 0x3 23*4882a593Smuzhiyun #else 24*4882a593Smuzhiyun #define DDR_CKE_CTRL_NORMAL 0x1 25*4882a593Smuzhiyun #endif 26*4882a593Smuzhiyun #define PHY_EN_DYN_PWRDN (0x1 << 20) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* Micron MT47H128M16RT-25E */ 29*4882a593Smuzhiyun #define MT47H128M16RT25E_EMIF_READ_LATENCY 0x100005 30*4882a593Smuzhiyun #define MT47H128M16RT25E_EMIF_TIM1 0x0666B3C9 31*4882a593Smuzhiyun #define MT47H128M16RT25E_EMIF_TIM2 0x243631CA 32*4882a593Smuzhiyun #define MT47H128M16RT25E_EMIF_TIM3 0x0000033F 33*4882a593Smuzhiyun #define MT47H128M16RT25E_EMIF_SDCFG 0x41805332 34*4882a593Smuzhiyun #define MT47H128M16RT25E_EMIF_SDREF 0x0000081a 35*4882a593Smuzhiyun #define MT47H128M16RT25E_RATIO 0x80 36*4882a593Smuzhiyun #define MT47H128M16RT25E_RD_DQS 0x12 37*4882a593Smuzhiyun #define MT47H128M16RT25E_PHY_WR_DATA 0x40 38*4882a593Smuzhiyun #define MT47H128M16RT25E_PHY_FIFO_WE 0x80 39*4882a593Smuzhiyun #define MT47H128M16RT25E_IOCTRL_VALUE 0x18B 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* Micron MT41J128M16JT-125 */ 42*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_READ_LATENCY 0x100006 43*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_TIM1 0x0888A39B 44*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_TIM2 0x26337FDA 45*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_TIM3 0x501F830F 46*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_SDCFG 0x61C04AB2 47*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_SDREF 0x0000093B 48*4882a593Smuzhiyun #define MT41J128MJT125_ZQ_CFG 0x50074BE4 49*4882a593Smuzhiyun #define MT41J128MJT125_RATIO 0x40 50*4882a593Smuzhiyun #define MT41J128MJT125_INVERT_CLKOUT 0x1 51*4882a593Smuzhiyun #define MT41J128MJT125_RD_DQS 0x3B 52*4882a593Smuzhiyun #define MT41J128MJT125_WR_DQS 0x85 53*4882a593Smuzhiyun #define MT41J128MJT125_PHY_WR_DATA 0xC1 54*4882a593Smuzhiyun #define MT41J128MJT125_PHY_FIFO_WE 0x100 55*4882a593Smuzhiyun #define MT41J128MJT125_IOCTRL_VALUE 0x18B 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* Micron MT41J128M16JT-125 at 400MHz*/ 58*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_READ_LATENCY_400MHz 0x100007 59*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_TIM1_400MHz 0x0AAAD4DB 60*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_TIM2_400MHz 0x26437FDA 61*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_TIM3_400MHz 0x501F83FF 62*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_SDCFG_400MHz 0x61C052B2 63*4882a593Smuzhiyun #define MT41J128MJT125_EMIF_SDREF_400MHz 0x00000C30 64*4882a593Smuzhiyun #define MT41J128MJT125_ZQ_CFG_400MHz 0x50074BE4 65*4882a593Smuzhiyun #define MT41J128MJT125_RATIO_400MHz 0x80 66*4882a593Smuzhiyun #define MT41J128MJT125_INVERT_CLKOUT_400MHz 0x0 67*4882a593Smuzhiyun #define MT41J128MJT125_RD_DQS_400MHz 0x3A 68*4882a593Smuzhiyun #define MT41J128MJT125_WR_DQS_400MHz 0x3B 69*4882a593Smuzhiyun #define MT41J128MJT125_PHY_WR_DATA_400MHz 0x76 70*4882a593Smuzhiyun #define MT41J128MJT125_PHY_FIFO_WE_400MHz 0x96 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* Micron MT41K128M16JT-187E */ 73*4882a593Smuzhiyun #define MT41K128MJT187E_EMIF_READ_LATENCY 0x06 74*4882a593Smuzhiyun #define MT41K128MJT187E_EMIF_TIM1 0x0888B3DB 75*4882a593Smuzhiyun #define MT41K128MJT187E_EMIF_TIM2 0x36337FDA 76*4882a593Smuzhiyun #define MT41K128MJT187E_EMIF_TIM3 0x501F830F 77*4882a593Smuzhiyun #define MT41K128MJT187E_EMIF_SDCFG 0x61C04AB2 78*4882a593Smuzhiyun #define MT41K128MJT187E_EMIF_SDREF 0x0000093B 79*4882a593Smuzhiyun #define MT41K128MJT187E_ZQ_CFG 0x50074BE4 80*4882a593Smuzhiyun #define MT41K128MJT187E_RATIO 0x40 81*4882a593Smuzhiyun #define MT41K128MJT187E_INVERT_CLKOUT 0x1 82*4882a593Smuzhiyun #define MT41K128MJT187E_RD_DQS 0x3B 83*4882a593Smuzhiyun #define MT41K128MJT187E_WR_DQS 0x85 84*4882a593Smuzhiyun #define MT41K128MJT187E_PHY_WR_DATA 0xC1 85*4882a593Smuzhiyun #define MT41K128MJT187E_PHY_FIFO_WE 0x100 86*4882a593Smuzhiyun #define MT41K128MJT187E_IOCTRL_VALUE 0x18B 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /* Micron MT41J64M16JT-125 */ 89*4882a593Smuzhiyun #define MT41J64MJT125_EMIF_SDCFG 0x61C04A32 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /* Micron MT41J256M16JT-125 */ 92*4882a593Smuzhiyun #define MT41J256MJT125_EMIF_SDCFG 0x61C04B32 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* Micron MT41J256M8HX-15E */ 95*4882a593Smuzhiyun #define MT41J256M8HX15E_EMIF_READ_LATENCY 0x100006 96*4882a593Smuzhiyun #define MT41J256M8HX15E_EMIF_TIM1 0x0888A39B 97*4882a593Smuzhiyun #define MT41J256M8HX15E_EMIF_TIM2 0x26337FDA 98*4882a593Smuzhiyun #define MT41J256M8HX15E_EMIF_TIM3 0x501F830F 99*4882a593Smuzhiyun #define MT41J256M8HX15E_EMIF_SDCFG 0x61C04B32 100*4882a593Smuzhiyun #define MT41J256M8HX15E_EMIF_SDREF 0x0000093B 101*4882a593Smuzhiyun #define MT41J256M8HX15E_ZQ_CFG 0x50074BE4 102*4882a593Smuzhiyun #define MT41J256M8HX15E_RATIO 0x40 103*4882a593Smuzhiyun #define MT41J256M8HX15E_INVERT_CLKOUT 0x1 104*4882a593Smuzhiyun #define MT41J256M8HX15E_RD_DQS 0x3B 105*4882a593Smuzhiyun #define MT41J256M8HX15E_WR_DQS 0x85 106*4882a593Smuzhiyun #define MT41J256M8HX15E_PHY_WR_DATA 0xC1 107*4882a593Smuzhiyun #define MT41J256M8HX15E_PHY_FIFO_WE 0x100 108*4882a593Smuzhiyun #define MT41J256M8HX15E_IOCTRL_VALUE 0x18B 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /* Micron MT41K256M16HA-125E */ 111*4882a593Smuzhiyun #define MT41K256M16HA125E_EMIF_READ_LATENCY 0x100007 112*4882a593Smuzhiyun #define MT41K256M16HA125E_EMIF_TIM1 0x0AAAD4DB 113*4882a593Smuzhiyun #define MT41K256M16HA125E_EMIF_TIM2 0x266B7FDA 114*4882a593Smuzhiyun #define MT41K256M16HA125E_EMIF_TIM3 0x501F867F 115*4882a593Smuzhiyun #define MT41K256M16HA125E_EMIF_SDCFG 0x61C05332 116*4882a593Smuzhiyun #define MT41K256M16HA125E_EMIF_SDREF 0xC30 117*4882a593Smuzhiyun #define MT41K256M16HA125E_ZQ_CFG 0x50074BE4 118*4882a593Smuzhiyun #define MT41K256M16HA125E_RATIO 0x80 119*4882a593Smuzhiyun #define MT41K256M16HA125E_INVERT_CLKOUT 0x0 120*4882a593Smuzhiyun #define MT41K256M16HA125E_RD_DQS 0x38 121*4882a593Smuzhiyun #define MT41K256M16HA125E_WR_DQS 0x44 122*4882a593Smuzhiyun #define MT41K256M16HA125E_PHY_WR_DATA 0x7D 123*4882a593Smuzhiyun #define MT41K256M16HA125E_PHY_FIFO_WE 0x94 124*4882a593Smuzhiyun #define MT41K256M16HA125E_IOCTRL_VALUE 0x18B 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun /* Micron MT41J512M8RH-125 on EVM v1.5 */ 127*4882a593Smuzhiyun #define MT41J512M8RH125_EMIF_READ_LATENCY 0x100006 128*4882a593Smuzhiyun #define MT41J512M8RH125_EMIF_TIM1 0x0888A39B 129*4882a593Smuzhiyun #define MT41J512M8RH125_EMIF_TIM2 0x26517FDA 130*4882a593Smuzhiyun #define MT41J512M8RH125_EMIF_TIM3 0x501F84EF 131*4882a593Smuzhiyun #define MT41J512M8RH125_EMIF_SDCFG 0x61C04BB2 132*4882a593Smuzhiyun #define MT41J512M8RH125_EMIF_SDREF 0x0000093B 133*4882a593Smuzhiyun #define MT41J512M8RH125_ZQ_CFG 0x50074BE4 134*4882a593Smuzhiyun #define MT41J512M8RH125_RATIO 0x80 135*4882a593Smuzhiyun #define MT41J512M8RH125_INVERT_CLKOUT 0x0 136*4882a593Smuzhiyun #define MT41J512M8RH125_RD_DQS 0x3B 137*4882a593Smuzhiyun #define MT41J512M8RH125_WR_DQS 0x3C 138*4882a593Smuzhiyun #define MT41J512M8RH125_PHY_FIFO_WE 0xA5 139*4882a593Smuzhiyun #define MT41J512M8RH125_PHY_WR_DATA 0x74 140*4882a593Smuzhiyun #define MT41J512M8RH125_IOCTRL_VALUE 0x18B 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* Samsung K4B2G1646E-BIH9 */ 143*4882a593Smuzhiyun #define K4B2G1646EBIH9_EMIF_READ_LATENCY 0x100007 144*4882a593Smuzhiyun #define K4B2G1646EBIH9_EMIF_TIM1 0x0AAAE51B 145*4882a593Smuzhiyun #define K4B2G1646EBIH9_EMIF_TIM2 0x2A1D7FDA 146*4882a593Smuzhiyun #define K4B2G1646EBIH9_EMIF_TIM3 0x501F83FF 147*4882a593Smuzhiyun #define K4B2G1646EBIH9_EMIF_SDCFG 0x61C052B2 148*4882a593Smuzhiyun #define K4B2G1646EBIH9_EMIF_SDREF 0x00000C30 149*4882a593Smuzhiyun #define K4B2G1646EBIH9_ZQ_CFG 0x50074BE4 150*4882a593Smuzhiyun #define K4B2G1646EBIH9_RATIO 0x80 151*4882a593Smuzhiyun #define K4B2G1646EBIH9_INVERT_CLKOUT 0x0 152*4882a593Smuzhiyun #define K4B2G1646EBIH9_RD_DQS 0x35 153*4882a593Smuzhiyun #define K4B2G1646EBIH9_WR_DQS 0x3A 154*4882a593Smuzhiyun #define K4B2G1646EBIH9_PHY_FIFO_WE 0x97 155*4882a593Smuzhiyun #define K4B2G1646EBIH9_PHY_WR_DATA 0x76 156*4882a593Smuzhiyun #define K4B2G1646EBIH9_IOCTRL_VALUE 0x18B 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #define LPDDR2_ADDRCTRL_IOCTRL_VALUE 0x294 159*4882a593Smuzhiyun #define LPDDR2_ADDRCTRL_WD0_IOCTRL_VALUE 0x00000000 160*4882a593Smuzhiyun #define LPDDR2_ADDRCTRL_WD1_IOCTRL_VALUE 0x00000000 161*4882a593Smuzhiyun #define LPDDR2_DATA0_IOCTRL_VALUE 0x20000294 162*4882a593Smuzhiyun #define LPDDR2_DATA1_IOCTRL_VALUE 0x20000294 163*4882a593Smuzhiyun #define LPDDR2_DATA2_IOCTRL_VALUE 0x20000294 164*4882a593Smuzhiyun #define LPDDR2_DATA3_IOCTRL_VALUE 0x20000294 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun #define DDR3_ADDRCTRL_WD0_IOCTRL_VALUE 0x00000000 167*4882a593Smuzhiyun #define DDR3_ADDRCTRL_WD1_IOCTRL_VALUE 0x00000000 168*4882a593Smuzhiyun #define DDR3_ADDRCTRL_IOCTRL_VALUE 0x84 169*4882a593Smuzhiyun #define DDR3_DATA0_IOCTRL_VALUE 0x84 170*4882a593Smuzhiyun #define DDR3_DATA1_IOCTRL_VALUE 0x84 171*4882a593Smuzhiyun #define DDR3_DATA2_IOCTRL_VALUE 0x84 172*4882a593Smuzhiyun #define DDR3_DATA3_IOCTRL_VALUE 0x84 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun /** 175*4882a593Smuzhiyun * Configure DMM 176*4882a593Smuzhiyun */ 177*4882a593Smuzhiyun void config_dmm(const struct dmm_lisa_map_regs *regs); 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun /** 180*4882a593Smuzhiyun * Configure SDRAM 181*4882a593Smuzhiyun */ 182*4882a593Smuzhiyun void config_sdram(const struct emif_regs *regs, int nr); 183*4882a593Smuzhiyun void config_sdram_emif4d5(const struct emif_regs *regs, int nr); 184*4882a593Smuzhiyun 185*4882a593Smuzhiyun /** 186*4882a593Smuzhiyun * Set SDRAM timings 187*4882a593Smuzhiyun */ 188*4882a593Smuzhiyun void set_sdram_timings(const struct emif_regs *regs, int nr); 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun /** 191*4882a593Smuzhiyun * Configure DDR PHY 192*4882a593Smuzhiyun */ 193*4882a593Smuzhiyun void config_ddr_phy(const struct emif_regs *regs, int nr); 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun struct ddr_cmd_regs { 196*4882a593Smuzhiyun unsigned int resv0[7]; 197*4882a593Smuzhiyun unsigned int cm0csratio; /* offset 0x01C */ 198*4882a593Smuzhiyun unsigned int resv1[3]; 199*4882a593Smuzhiyun unsigned int cm0iclkout; /* offset 0x02C */ 200*4882a593Smuzhiyun unsigned int resv2[8]; 201*4882a593Smuzhiyun unsigned int cm1csratio; /* offset 0x050 */ 202*4882a593Smuzhiyun unsigned int resv3[3]; 203*4882a593Smuzhiyun unsigned int cm1iclkout; /* offset 0x060 */ 204*4882a593Smuzhiyun unsigned int resv4[8]; 205*4882a593Smuzhiyun unsigned int cm2csratio; /* offset 0x084 */ 206*4882a593Smuzhiyun unsigned int resv5[3]; 207*4882a593Smuzhiyun unsigned int cm2iclkout; /* offset 0x094 */ 208*4882a593Smuzhiyun unsigned int resv6[3]; 209*4882a593Smuzhiyun }; 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun struct ddr_data_regs { 212*4882a593Smuzhiyun unsigned int dt0rdsratio0; /* offset 0x0C8 */ 213*4882a593Smuzhiyun unsigned int resv1[4]; 214*4882a593Smuzhiyun unsigned int dt0wdsratio0; /* offset 0x0DC */ 215*4882a593Smuzhiyun unsigned int resv2[4]; 216*4882a593Smuzhiyun unsigned int dt0wiratio0; /* offset 0x0F0 */ 217*4882a593Smuzhiyun unsigned int resv3; 218*4882a593Smuzhiyun unsigned int dt0wimode0; /* offset 0x0F8 */ 219*4882a593Smuzhiyun unsigned int dt0giratio0; /* offset 0x0FC */ 220*4882a593Smuzhiyun unsigned int resv4; 221*4882a593Smuzhiyun unsigned int dt0gimode0; /* offset 0x104 */ 222*4882a593Smuzhiyun unsigned int dt0fwsratio0; /* offset 0x108 */ 223*4882a593Smuzhiyun unsigned int resv5[4]; 224*4882a593Smuzhiyun unsigned int dt0dqoffset; /* offset 0x11C */ 225*4882a593Smuzhiyun unsigned int dt0wrsratio0; /* offset 0x120 */ 226*4882a593Smuzhiyun unsigned int resv6[4]; 227*4882a593Smuzhiyun unsigned int dt0rdelays0; /* offset 0x134 */ 228*4882a593Smuzhiyun unsigned int dt0dldiff0; /* offset 0x138 */ 229*4882a593Smuzhiyun unsigned int resv7[12]; 230*4882a593Smuzhiyun }; 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun /** 233*4882a593Smuzhiyun * This structure represents the DDR registers on AM33XX devices. 234*4882a593Smuzhiyun * We make use of DDR_PHY_BASE_ADDR2 to address the DATA1 registers that 235*4882a593Smuzhiyun * correspond to DATA1 registers defined here. 236*4882a593Smuzhiyun */ 237*4882a593Smuzhiyun struct ddr_regs { 238*4882a593Smuzhiyun unsigned int resv0[3]; 239*4882a593Smuzhiyun unsigned int cm0config; /* offset 0x00C */ 240*4882a593Smuzhiyun unsigned int cm0configclk; /* offset 0x010 */ 241*4882a593Smuzhiyun unsigned int resv1[2]; 242*4882a593Smuzhiyun unsigned int cm0csratio; /* offset 0x01C */ 243*4882a593Smuzhiyun unsigned int resv2[3]; 244*4882a593Smuzhiyun unsigned int cm0iclkout; /* offset 0x02C */ 245*4882a593Smuzhiyun unsigned int resv3[4]; 246*4882a593Smuzhiyun unsigned int cm1config; /* offset 0x040 */ 247*4882a593Smuzhiyun unsigned int cm1configclk; /* offset 0x044 */ 248*4882a593Smuzhiyun unsigned int resv4[2]; 249*4882a593Smuzhiyun unsigned int cm1csratio; /* offset 0x050 */ 250*4882a593Smuzhiyun unsigned int resv5[3]; 251*4882a593Smuzhiyun unsigned int cm1iclkout; /* offset 0x060 */ 252*4882a593Smuzhiyun unsigned int resv6[4]; 253*4882a593Smuzhiyun unsigned int cm2config; /* offset 0x074 */ 254*4882a593Smuzhiyun unsigned int cm2configclk; /* offset 0x078 */ 255*4882a593Smuzhiyun unsigned int resv7[2]; 256*4882a593Smuzhiyun unsigned int cm2csratio; /* offset 0x084 */ 257*4882a593Smuzhiyun unsigned int resv8[3]; 258*4882a593Smuzhiyun unsigned int cm2iclkout; /* offset 0x094 */ 259*4882a593Smuzhiyun unsigned int resv9[12]; 260*4882a593Smuzhiyun unsigned int dt0rdsratio0; /* offset 0x0C8 */ 261*4882a593Smuzhiyun unsigned int resv10[4]; 262*4882a593Smuzhiyun unsigned int dt0wdsratio0; /* offset 0x0DC */ 263*4882a593Smuzhiyun unsigned int resv11[4]; 264*4882a593Smuzhiyun unsigned int dt0wiratio0; /* offset 0x0F0 */ 265*4882a593Smuzhiyun unsigned int resv12; 266*4882a593Smuzhiyun unsigned int dt0wimode0; /* offset 0x0F8 */ 267*4882a593Smuzhiyun unsigned int dt0giratio0; /* offset 0x0FC */ 268*4882a593Smuzhiyun unsigned int resv13; 269*4882a593Smuzhiyun unsigned int dt0gimode0; /* offset 0x104 */ 270*4882a593Smuzhiyun unsigned int dt0fwsratio0; /* offset 0x108 */ 271*4882a593Smuzhiyun unsigned int resv14[4]; 272*4882a593Smuzhiyun unsigned int dt0dqoffset; /* offset 0x11C */ 273*4882a593Smuzhiyun unsigned int dt0wrsratio0; /* offset 0x120 */ 274*4882a593Smuzhiyun unsigned int resv15[4]; 275*4882a593Smuzhiyun unsigned int dt0rdelays0; /* offset 0x134 */ 276*4882a593Smuzhiyun unsigned int dt0dldiff0; /* offset 0x138 */ 277*4882a593Smuzhiyun }; 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun /** 280*4882a593Smuzhiyun * Encapsulates DDR CMD control registers. 281*4882a593Smuzhiyun */ 282*4882a593Smuzhiyun struct cmd_control { 283*4882a593Smuzhiyun unsigned long cmd0csratio; 284*4882a593Smuzhiyun unsigned long cmd0csforce; 285*4882a593Smuzhiyun unsigned long cmd0csdelay; 286*4882a593Smuzhiyun unsigned long cmd0iclkout; 287*4882a593Smuzhiyun unsigned long cmd1csratio; 288*4882a593Smuzhiyun unsigned long cmd1csforce; 289*4882a593Smuzhiyun unsigned long cmd1csdelay; 290*4882a593Smuzhiyun unsigned long cmd1iclkout; 291*4882a593Smuzhiyun unsigned long cmd2csratio; 292*4882a593Smuzhiyun unsigned long cmd2csforce; 293*4882a593Smuzhiyun unsigned long cmd2csdelay; 294*4882a593Smuzhiyun unsigned long cmd2iclkout; 295*4882a593Smuzhiyun }; 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /** 298*4882a593Smuzhiyun * Encapsulates DDR DATA registers. 299*4882a593Smuzhiyun */ 300*4882a593Smuzhiyun struct ddr_data { 301*4882a593Smuzhiyun unsigned long datardsratio0; 302*4882a593Smuzhiyun unsigned long datawdsratio0; 303*4882a593Smuzhiyun unsigned long datawiratio0; 304*4882a593Smuzhiyun unsigned long datagiratio0; 305*4882a593Smuzhiyun unsigned long datafwsratio0; 306*4882a593Smuzhiyun unsigned long datawrsratio0; 307*4882a593Smuzhiyun }; 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun /** 310*4882a593Smuzhiyun * Configure DDR CMD control registers 311*4882a593Smuzhiyun */ 312*4882a593Smuzhiyun void config_cmd_ctrl(const struct cmd_control *cmd, int nr); 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun /** 315*4882a593Smuzhiyun * Configure DDR DATA registers 316*4882a593Smuzhiyun */ 317*4882a593Smuzhiyun void config_ddr_data(const struct ddr_data *data, int nr); 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun /** 320*4882a593Smuzhiyun * This structure represents the DDR io control on AM33XX devices. 321*4882a593Smuzhiyun */ 322*4882a593Smuzhiyun struct ddr_cmdtctrl { 323*4882a593Smuzhiyun unsigned int cm0ioctl; 324*4882a593Smuzhiyun unsigned int cm1ioctl; 325*4882a593Smuzhiyun unsigned int cm2ioctl; 326*4882a593Smuzhiyun unsigned int resv2[12]; 327*4882a593Smuzhiyun unsigned int dt0ioctl; 328*4882a593Smuzhiyun unsigned int dt1ioctl; 329*4882a593Smuzhiyun unsigned int dt2ioctrl; 330*4882a593Smuzhiyun unsigned int dt3ioctrl; 331*4882a593Smuzhiyun unsigned int resv3[4]; 332*4882a593Smuzhiyun unsigned int emif_sdram_config_ext; 333*4882a593Smuzhiyun }; 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun struct ctrl_ioregs { 336*4882a593Smuzhiyun unsigned int cm0ioctl; 337*4882a593Smuzhiyun unsigned int cm1ioctl; 338*4882a593Smuzhiyun unsigned int cm2ioctl; 339*4882a593Smuzhiyun unsigned int dt0ioctl; 340*4882a593Smuzhiyun unsigned int dt1ioctl; 341*4882a593Smuzhiyun unsigned int dt2ioctrl; 342*4882a593Smuzhiyun unsigned int dt3ioctrl; 343*4882a593Smuzhiyun unsigned int emif_sdram_config_ext; 344*4882a593Smuzhiyun }; 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun /** 347*4882a593Smuzhiyun * Configure DDR io control registers 348*4882a593Smuzhiyun */ 349*4882a593Smuzhiyun void config_io_ctrl(const struct ctrl_ioregs *ioregs); 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun struct ddr_ctrl { 352*4882a593Smuzhiyun unsigned int ddrioctrl; 353*4882a593Smuzhiyun unsigned int resv1[325]; 354*4882a593Smuzhiyun unsigned int ddrckectrl; 355*4882a593Smuzhiyun }; 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun #ifdef CONFIG_TI816X 358*4882a593Smuzhiyun void config_ddr(const struct ddr_data *data, const struct cmd_control *ctrl, 359*4882a593Smuzhiyun const struct emif_regs *regs, 360*4882a593Smuzhiyun const struct dmm_lisa_map_regs *lisa_regs, int nrs); 361*4882a593Smuzhiyun #else 362*4882a593Smuzhiyun void config_ddr(unsigned int pll, const struct ctrl_ioregs *ioregs, 363*4882a593Smuzhiyun const struct ddr_data *data, const struct cmd_control *ctrl, 364*4882a593Smuzhiyun const struct emif_regs *regs, int nr); 365*4882a593Smuzhiyun #endif 366*4882a593Smuzhiyun void emif_get_ext_phy_ctrl_const_regs(const u32 **regs, u32 *size); 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun #endif /* _DDR_DEFS_H */ 369