162d7fe7cSChandan Nath /* 262d7fe7cSChandan Nath * ddr_defs.h 362d7fe7cSChandan Nath * 462d7fe7cSChandan Nath * ddr specific header 562d7fe7cSChandan Nath * 662d7fe7cSChandan Nath * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ 762d7fe7cSChandan Nath * 81a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 962d7fe7cSChandan Nath */ 1062d7fe7cSChandan Nath 1162d7fe7cSChandan Nath #ifndef _DDR_DEFS_H 1262d7fe7cSChandan Nath #define _DDR_DEFS_H 1362d7fe7cSChandan Nath 1462d7fe7cSChandan Nath #include <asm/arch/hardware.h> 15ff7ec0f9STom Rini #include <asm/emif.h> 1662d7fe7cSChandan Nath 1762d7fe7cSChandan Nath /* AM335X EMIF Register values */ 1862d7fe7cSChandan Nath #define VTP_CTRL_READY (0x1 << 5) 1962d7fe7cSChandan Nath #define VTP_CTRL_ENABLE (0x1 << 6) 2062d7fe7cSChandan Nath #define VTP_CTRL_START_EN (0x1) 21d3daba10SLokesh Vutla #ifdef CONFIG_AM43XX 22d3daba10SLokesh Vutla #define DDR_CKE_CTRL_NORMAL 0x3 23d3daba10SLokesh Vutla #else 24c48c8954STom Rini #define DDR_CKE_CTRL_NORMAL 0x1 25d3daba10SLokesh Vutla #endif 2659dcf970SVaibhav Hiremath #define PHY_EN_DYN_PWRDN (0x1 << 20) 2762d7fe7cSChandan Nath 28c00f69dbSPeter Korsgaard /* Micron MT47H128M16RT-25E */ 29c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_READ_LATENCY 0x100005 30c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_TIM1 0x0666B3C9 31c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_TIM2 0x243631CA 32c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_TIM3 0x0000033F 33c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_SDCFG 0x41805332 34c7d35befSPeter Korsgaard #define MT47H128M16RT25E_EMIF_SDREF 0x0000081a 35c7d35befSPeter Korsgaard #define MT47H128M16RT25E_RATIO 0x80 36c7d35befSPeter Korsgaard #define MT47H128M16RT25E_RD_DQS 0x12 37c7d35befSPeter Korsgaard #define MT47H128M16RT25E_PHY_WR_DATA 0x40 38c7d35befSPeter Korsgaard #define MT47H128M16RT25E_PHY_FIFO_WE 0x80 39c7d35befSPeter Korsgaard #define MT47H128M16RT25E_IOCTRL_VALUE 0x18B 4062d7fe7cSChandan Nath 41d4898ea8STom Rini /* Micron MT41J128M16JT-125 */ 42e9b13ce0SSatyanarayana, Sandhya #define MT41J128MJT125_EMIF_READ_LATENCY 0x100006 43c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_TIM1 0x0888A39B 44c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_TIM2 0x26337FDA 45c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_TIM3 0x501F830F 46c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_SDCFG 0x61C04AB2 47c7d35befSPeter Korsgaard #define MT41J128MJT125_EMIF_SDREF 0x0000093B 48c7d35befSPeter Korsgaard #define MT41J128MJT125_ZQ_CFG 0x50074BE4 49c7d35befSPeter Korsgaard #define MT41J128MJT125_RATIO 0x40 50c7d35befSPeter Korsgaard #define MT41J128MJT125_INVERT_CLKOUT 0x1 51c7d35befSPeter Korsgaard #define MT41J128MJT125_RD_DQS 0x3B 52c7d35befSPeter Korsgaard #define MT41J128MJT125_WR_DQS 0x85 53c7d35befSPeter Korsgaard #define MT41J128MJT125_PHY_WR_DATA 0xC1 54c7d35befSPeter Korsgaard #define MT41J128MJT125_PHY_FIFO_WE 0x100 55c7d35befSPeter Korsgaard #define MT41J128MJT125_IOCTRL_VALUE 0x18B 56d4898ea8STom Rini 57d8ff4fdbSLokesh Vutla /* Micron MT41J128M16JT-125 at 400MHz*/ 58d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_READ_LATENCY_400MHz 0x100007 59d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_TIM1_400MHz 0x0AAAD4DB 60d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_TIM2_400MHz 0x26437FDA 61d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_TIM3_400MHz 0x501F83FF 62d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_SDCFG_400MHz 0x61C052B2 63d8ff4fdbSLokesh Vutla #define MT41J128MJT125_EMIF_SDREF_400MHz 0x00000C30 64d8ff4fdbSLokesh Vutla #define MT41J128MJT125_ZQ_CFG_400MHz 0x50074BE4 65d8ff4fdbSLokesh Vutla #define MT41J128MJT125_RATIO_400MHz 0x80 66d8ff4fdbSLokesh Vutla #define MT41J128MJT125_INVERT_CLKOUT_400MHz 0x0 67d8ff4fdbSLokesh Vutla #define MT41J128MJT125_RD_DQS_400MHz 0x3A 68d8ff4fdbSLokesh Vutla #define MT41J128MJT125_WR_DQS_400MHz 0x3B 69d8ff4fdbSLokesh Vutla #define MT41J128MJT125_PHY_WR_DATA_400MHz 0x76 70d8ff4fdbSLokesh Vutla #define MT41J128MJT125_PHY_FIFO_WE_400MHz 0x96 71d8ff4fdbSLokesh Vutla 72da4105dfSLothar Felten /* Micron MT41K128M16JT-187E */ 73da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_READ_LATENCY 0x06 74da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_TIM1 0x0888B3DB 75da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_TIM2 0x36337FDA 76da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_TIM3 0x501F830F 77da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_SDCFG 0x61C04AB2 78da4105dfSLothar Felten #define MT41K128MJT187E_EMIF_SDREF 0x0000093B 79da4105dfSLothar Felten #define MT41K128MJT187E_ZQ_CFG 0x50074BE4 80da4105dfSLothar Felten #define MT41K128MJT187E_RATIO 0x40 81da4105dfSLothar Felten #define MT41K128MJT187E_INVERT_CLKOUT 0x1 82da4105dfSLothar Felten #define MT41K128MJT187E_RD_DQS 0x3B 83da4105dfSLothar Felten #define MT41K128MJT187E_WR_DQS 0x85 84da4105dfSLothar Felten #define MT41K128MJT187E_PHY_WR_DATA 0xC1 85da4105dfSLothar Felten #define MT41K128MJT187E_PHY_FIFO_WE 0x100 86da4105dfSLothar Felten #define MT41K128MJT187E_IOCTRL_VALUE 0x18B 87da4105dfSLothar Felten 8854e7445dSIlya Ledvich /* Micron MT41J64M16JT-125 */ 8954e7445dSIlya Ledvich #define MT41J64MJT125_EMIF_SDCFG 0x61C04A32 9054e7445dSIlya Ledvich 9154e7445dSIlya Ledvich /* Micron MT41J256M16JT-125 */ 9254e7445dSIlya Ledvich #define MT41J256MJT125_EMIF_SDCFG 0x61C04B32 9354e7445dSIlya Ledvich 941c1b7c37SLars Poeschel /* Micron MT41J256M8HX-15E */ 95e9b13ce0SSatyanarayana, Sandhya #define MT41J256M8HX15E_EMIF_READ_LATENCY 0x100006 961c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_TIM1 0x0888A39B 971c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_TIM2 0x26337FDA 981c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_TIM3 0x501F830F 991c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_SDCFG 0x61C04B32 1001c1b7c37SLars Poeschel #define MT41J256M8HX15E_EMIF_SDREF 0x0000093B 1011c1b7c37SLars Poeschel #define MT41J256M8HX15E_ZQ_CFG 0x50074BE4 1021c1b7c37SLars Poeschel #define MT41J256M8HX15E_RATIO 0x40 1031c1b7c37SLars Poeschel #define MT41J256M8HX15E_INVERT_CLKOUT 0x1 1041c1b7c37SLars Poeschel #define MT41J256M8HX15E_RD_DQS 0x3B 1051c1b7c37SLars Poeschel #define MT41J256M8HX15E_WR_DQS 0x85 1061c1b7c37SLars Poeschel #define MT41J256M8HX15E_PHY_WR_DATA 0xC1 1071c1b7c37SLars Poeschel #define MT41J256M8HX15E_PHY_FIFO_WE 0x100 1081c1b7c37SLars Poeschel #define MT41J256M8HX15E_IOCTRL_VALUE 0x18B 1091c1b7c37SLars Poeschel 110c7ba18adSTom Rini /* Micron MT41K256M16HA-125E */ 111b996a3e9STom Rini #define MT41K256M16HA125E_EMIF_READ_LATENCY 0x100007 112b996a3e9STom Rini #define MT41K256M16HA125E_EMIF_TIM1 0x0AAAD4DB 11386fdb161STom Rini #define MT41K256M16HA125E_EMIF_TIM2 0x266B7FDA 11486fdb161STom Rini #define MT41K256M16HA125E_EMIF_TIM3 0x501F867F 11586fdb161STom Rini #define MT41K256M16HA125E_EMIF_SDCFG 0x61C05332 116b996a3e9STom Rini #define MT41K256M16HA125E_EMIF_SDREF 0xC30 117c7ba18adSTom Rini #define MT41K256M16HA125E_ZQ_CFG 0x50074BE4 118b996a3e9STom Rini #define MT41K256M16HA125E_RATIO 0x80 119c7ba18adSTom Rini #define MT41K256M16HA125E_INVERT_CLKOUT 0x0 12086fdb161STom Rini #define MT41K256M16HA125E_RD_DQS 0x38 12186fdb161STom Rini #define MT41K256M16HA125E_WR_DQS 0x44 12286fdb161STom Rini #define MT41K256M16HA125E_PHY_WR_DATA 0x7D 12386fdb161STom Rini #define MT41K256M16HA125E_PHY_FIFO_WE 0x94 124c7ba18adSTom Rini #define MT41K256M16HA125E_IOCTRL_VALUE 0x18B 125c7ba18adSTom Rini 12613526f71SJeff Lance /* Micron MT41J512M8RH-125 on EVM v1.5 */ 127e9b13ce0SSatyanarayana, Sandhya #define MT41J512M8RH125_EMIF_READ_LATENCY 0x100006 12813526f71SJeff Lance #define MT41J512M8RH125_EMIF_TIM1 0x0888A39B 12913526f71SJeff Lance #define MT41J512M8RH125_EMIF_TIM2 0x26517FDA 13013526f71SJeff Lance #define MT41J512M8RH125_EMIF_TIM3 0x501F84EF 13113526f71SJeff Lance #define MT41J512M8RH125_EMIF_SDCFG 0x61C04BB2 13213526f71SJeff Lance #define MT41J512M8RH125_EMIF_SDREF 0x0000093B 13313526f71SJeff Lance #define MT41J512M8RH125_ZQ_CFG 0x50074BE4 13413526f71SJeff Lance #define MT41J512M8RH125_RATIO 0x80 13513526f71SJeff Lance #define MT41J512M8RH125_INVERT_CLKOUT 0x0 13613526f71SJeff Lance #define MT41J512M8RH125_RD_DQS 0x3B 13713526f71SJeff Lance #define MT41J512M8RH125_WR_DQS 0x3C 13813526f71SJeff Lance #define MT41J512M8RH125_PHY_FIFO_WE 0xA5 13913526f71SJeff Lance #define MT41J512M8RH125_PHY_WR_DATA 0x74 14013526f71SJeff Lance #define MT41J512M8RH125_IOCTRL_VALUE 0x18B 1411c1b7c37SLars Poeschel 142cc175e63SEnric Balletbo i Serra /* Samsung K4B2G1646E-BIH9 */ 143e9b13ce0SSatyanarayana, Sandhya #define K4B2G1646EBIH9_EMIF_READ_LATENCY 0x100007 14494b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_TIM1 0x0AAAE51B 14594b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_TIM2 0x2A1D7FDA 14694b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_TIM3 0x501F83FF 14794b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_SDCFG 0x61C052B2 14894b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_EMIF_SDREF 0x00000C30 149cc175e63SEnric Balletbo i Serra #define K4B2G1646EBIH9_ZQ_CFG 0x50074BE4 15094b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_RATIO 0x80 15194b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_INVERT_CLKOUT 0x0 15294b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_RD_DQS 0x35 15394b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_WR_DQS 0x3A 15494b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_PHY_FIFO_WE 0x97 15594b32f60SEnric Balletbo i Serra #define K4B2G1646EBIH9_PHY_WR_DATA 0x76 156cc175e63SEnric Balletbo i Serra #define K4B2G1646EBIH9_IOCTRL_VALUE 0x18B 157cc175e63SEnric Balletbo i Serra 158d3daba10SLokesh Vutla #define LPDDR2_ADDRCTRL_IOCTRL_VALUE 0x294 159d3daba10SLokesh Vutla #define LPDDR2_ADDRCTRL_WD0_IOCTRL_VALUE 0x00000000 160d3daba10SLokesh Vutla #define LPDDR2_ADDRCTRL_WD1_IOCTRL_VALUE 0x00000000 161d3daba10SLokesh Vutla #define LPDDR2_DATA0_IOCTRL_VALUE 0x20000294 162d3daba10SLokesh Vutla #define LPDDR2_DATA1_IOCTRL_VALUE 0x20000294 163d3daba10SLokesh Vutla #define LPDDR2_DATA2_IOCTRL_VALUE 0x20000294 164d3daba10SLokesh Vutla #define LPDDR2_DATA3_IOCTRL_VALUE 0x20000294 165d3daba10SLokesh Vutla 166b5e01eecSLokesh Vutla #define DDR3_ADDRCTRL_WD0_IOCTRL_VALUE 0x00000000 167b5e01eecSLokesh Vutla #define DDR3_ADDRCTRL_WD1_IOCTRL_VALUE 0x00000000 168b5e01eecSLokesh Vutla #define DDR3_ADDRCTRL_IOCTRL_VALUE 0x84 169b5e01eecSLokesh Vutla #define DDR3_DATA0_IOCTRL_VALUE 0x84 170b5e01eecSLokesh Vutla #define DDR3_DATA1_IOCTRL_VALUE 0x84 171b5e01eecSLokesh Vutla #define DDR3_DATA2_IOCTRL_VALUE 0x84 172b5e01eecSLokesh Vutla #define DDR3_DATA3_IOCTRL_VALUE 0x84 173b5e01eecSLokesh Vutla 17462d7fe7cSChandan Nath /** 1754fab8d7bSMatt Porter * Configure DMM 1764fab8d7bSMatt Porter */ 1774fab8d7bSMatt Porter void config_dmm(const struct dmm_lisa_map_regs *regs); 1784fab8d7bSMatt Porter 1794fab8d7bSMatt Porter /** 18062d7fe7cSChandan Nath * Configure SDRAM 18162d7fe7cSChandan Nath */ 1823ba65f97SMatt Porter void config_sdram(const struct emif_regs *regs, int nr); 183d3daba10SLokesh Vutla void config_sdram_emif4d5(const struct emif_regs *regs, int nr); 18462d7fe7cSChandan Nath 18562d7fe7cSChandan Nath /** 18662d7fe7cSChandan Nath * Set SDRAM timings 18762d7fe7cSChandan Nath */ 1883ba65f97SMatt Porter void set_sdram_timings(const struct emif_regs *regs, int nr); 18962d7fe7cSChandan Nath 19062d7fe7cSChandan Nath /** 19162d7fe7cSChandan Nath * Configure DDR PHY 19262d7fe7cSChandan Nath */ 1933ba65f97SMatt Porter void config_ddr_phy(const struct emif_regs *regs, int nr); 1943ba65f97SMatt Porter 1953ba65f97SMatt Porter struct ddr_cmd_regs { 1963ba65f97SMatt Porter unsigned int resv0[7]; 1973ba65f97SMatt Porter unsigned int cm0csratio; /* offset 0x01C */ 19839245c86STom Rini unsigned int resv1[3]; 1993ba65f97SMatt Porter unsigned int cm0iclkout; /* offset 0x02C */ 2003ba65f97SMatt Porter unsigned int resv2[8]; 2013ba65f97SMatt Porter unsigned int cm1csratio; /* offset 0x050 */ 20239245c86STom Rini unsigned int resv3[3]; 2033ba65f97SMatt Porter unsigned int cm1iclkout; /* offset 0x060 */ 2043ba65f97SMatt Porter unsigned int resv4[8]; 2053ba65f97SMatt Porter unsigned int cm2csratio; /* offset 0x084 */ 20639245c86STom Rini unsigned int resv5[3]; 2073ba65f97SMatt Porter unsigned int cm2iclkout; /* offset 0x094 */ 2083ba65f97SMatt Porter unsigned int resv6[3]; 2093ba65f97SMatt Porter }; 2103ba65f97SMatt Porter 2113ba65f97SMatt Porter struct ddr_data_regs { 2123ba65f97SMatt Porter unsigned int dt0rdsratio0; /* offset 0x0C8 */ 2133ba65f97SMatt Porter unsigned int resv1[4]; 2143ba65f97SMatt Porter unsigned int dt0wdsratio0; /* offset 0x0DC */ 2153ba65f97SMatt Porter unsigned int resv2[4]; 2163ba65f97SMatt Porter unsigned int dt0wiratio0; /* offset 0x0F0 */ 2173ba65f97SMatt Porter unsigned int resv3; 2183ba65f97SMatt Porter unsigned int dt0wimode0; /* offset 0x0F8 */ 2193ba65f97SMatt Porter unsigned int dt0giratio0; /* offset 0x0FC */ 2203ba65f97SMatt Porter unsigned int resv4; 2213ba65f97SMatt Porter unsigned int dt0gimode0; /* offset 0x104 */ 2223ba65f97SMatt Porter unsigned int dt0fwsratio0; /* offset 0x108 */ 2233ba65f97SMatt Porter unsigned int resv5[4]; 2243ba65f97SMatt Porter unsigned int dt0dqoffset; /* offset 0x11C */ 2253ba65f97SMatt Porter unsigned int dt0wrsratio0; /* offset 0x120 */ 2263ba65f97SMatt Porter unsigned int resv6[4]; 2273ba65f97SMatt Porter unsigned int dt0rdelays0; /* offset 0x134 */ 2283ba65f97SMatt Porter unsigned int dt0dldiff0; /* offset 0x138 */ 2293ba65f97SMatt Porter unsigned int resv7[12]; 2303ba65f97SMatt Porter }; 23162d7fe7cSChandan Nath 23262d7fe7cSChandan Nath /** 23362d7fe7cSChandan Nath * This structure represents the DDR registers on AM33XX devices. 234a74f0c7cSTom Rini * We make use of DDR_PHY_BASE_ADDR2 to address the DATA1 registers that 235a74f0c7cSTom Rini * correspond to DATA1 registers defined here. 23662d7fe7cSChandan Nath */ 23762d7fe7cSChandan Nath struct ddr_regs { 238dcf846d5STENART Antoine unsigned int resv0[3]; 239dcf846d5STENART Antoine unsigned int cm0config; /* offset 0x00C */ 240dcf846d5STENART Antoine unsigned int cm0configclk; /* offset 0x010 */ 241a74f0c7cSTom Rini unsigned int resv1[2]; 242dcf846d5STENART Antoine unsigned int cm0csratio; /* offset 0x01C */ 24339245c86STom Rini unsigned int resv2[3]; 24462d7fe7cSChandan Nath unsigned int cm0iclkout; /* offset 0x02C */ 245dcf846d5STENART Antoine unsigned int resv3[4]; 246dcf846d5STENART Antoine unsigned int cm1config; /* offset 0x040 */ 247dcf846d5STENART Antoine unsigned int cm1configclk; /* offset 0x044 */ 248dcf846d5STENART Antoine unsigned int resv4[2]; 24962d7fe7cSChandan Nath unsigned int cm1csratio; /* offset 0x050 */ 25039245c86STom Rini unsigned int resv5[3]; 25162d7fe7cSChandan Nath unsigned int cm1iclkout; /* offset 0x060 */ 252dcf846d5STENART Antoine unsigned int resv6[4]; 253dcf846d5STENART Antoine unsigned int cm2config; /* offset 0x074 */ 254dcf846d5STENART Antoine unsigned int cm2configclk; /* offset 0x078 */ 255dcf846d5STENART Antoine unsigned int resv7[2]; 25662d7fe7cSChandan Nath unsigned int cm2csratio; /* offset 0x084 */ 25739245c86STom Rini unsigned int resv8[3]; 25862d7fe7cSChandan Nath unsigned int cm2iclkout; /* offset 0x094 */ 259dcf846d5STENART Antoine unsigned int resv9[12]; 26062d7fe7cSChandan Nath unsigned int dt0rdsratio0; /* offset 0x0C8 */ 261dcf846d5STENART Antoine unsigned int resv10[4]; 26262d7fe7cSChandan Nath unsigned int dt0wdsratio0; /* offset 0x0DC */ 263dcf846d5STENART Antoine unsigned int resv11[4]; 26462d7fe7cSChandan Nath unsigned int dt0wiratio0; /* offset 0x0F0 */ 265dcf846d5STENART Antoine unsigned int resv12; 266a74f0c7cSTom Rini unsigned int dt0wimode0; /* offset 0x0F8 */ 26762d7fe7cSChandan Nath unsigned int dt0giratio0; /* offset 0x0FC */ 268dcf846d5STENART Antoine unsigned int resv13; 269a74f0c7cSTom Rini unsigned int dt0gimode0; /* offset 0x104 */ 27062d7fe7cSChandan Nath unsigned int dt0fwsratio0; /* offset 0x108 */ 271dcf846d5STENART Antoine unsigned int resv14[4]; 272a74f0c7cSTom Rini unsigned int dt0dqoffset; /* offset 0x11C */ 27362d7fe7cSChandan Nath unsigned int dt0wrsratio0; /* offset 0x120 */ 274dcf846d5STENART Antoine unsigned int resv15[4]; 27562d7fe7cSChandan Nath unsigned int dt0rdelays0; /* offset 0x134 */ 27662d7fe7cSChandan Nath unsigned int dt0dldiff0; /* offset 0x138 */ 27762d7fe7cSChandan Nath }; 27862d7fe7cSChandan Nath 27962d7fe7cSChandan Nath /** 28062d7fe7cSChandan Nath * Encapsulates DDR CMD control registers. 28162d7fe7cSChandan Nath */ 28262d7fe7cSChandan Nath struct cmd_control { 28362d7fe7cSChandan Nath unsigned long cmd0csratio; 28462d7fe7cSChandan Nath unsigned long cmd0csforce; 28562d7fe7cSChandan Nath unsigned long cmd0csdelay; 28662d7fe7cSChandan Nath unsigned long cmd0iclkout; 28762d7fe7cSChandan Nath unsigned long cmd1csratio; 28862d7fe7cSChandan Nath unsigned long cmd1csforce; 28962d7fe7cSChandan Nath unsigned long cmd1csdelay; 29062d7fe7cSChandan Nath unsigned long cmd1iclkout; 29162d7fe7cSChandan Nath unsigned long cmd2csratio; 29262d7fe7cSChandan Nath unsigned long cmd2csforce; 29362d7fe7cSChandan Nath unsigned long cmd2csdelay; 29462d7fe7cSChandan Nath unsigned long cmd2iclkout; 29562d7fe7cSChandan Nath }; 29662d7fe7cSChandan Nath 29762d7fe7cSChandan Nath /** 29862d7fe7cSChandan Nath * Encapsulates DDR DATA registers. 29962d7fe7cSChandan Nath */ 30062d7fe7cSChandan Nath struct ddr_data { 30162d7fe7cSChandan Nath unsigned long datardsratio0; 30262d7fe7cSChandan Nath unsigned long datawdsratio0; 30362d7fe7cSChandan Nath unsigned long datawiratio0; 30462d7fe7cSChandan Nath unsigned long datagiratio0; 30562d7fe7cSChandan Nath unsigned long datafwsratio0; 30662d7fe7cSChandan Nath unsigned long datawrsratio0; 30762d7fe7cSChandan Nath }; 30862d7fe7cSChandan Nath 30962d7fe7cSChandan Nath /** 31062d7fe7cSChandan Nath * Configure DDR CMD control registers 31162d7fe7cSChandan Nath */ 3123ba65f97SMatt Porter void config_cmd_ctrl(const struct cmd_control *cmd, int nr); 31362d7fe7cSChandan Nath 31462d7fe7cSChandan Nath /** 31562d7fe7cSChandan Nath * Configure DDR DATA registers 31662d7fe7cSChandan Nath */ 3173ba65f97SMatt Porter void config_ddr_data(const struct ddr_data *data, int nr); 31862d7fe7cSChandan Nath 31962d7fe7cSChandan Nath /** 32062d7fe7cSChandan Nath * This structure represents the DDR io control on AM33XX devices. 32162d7fe7cSChandan Nath */ 32262d7fe7cSChandan Nath struct ddr_cmdtctrl { 32362d7fe7cSChandan Nath unsigned int cm0ioctl; 32462d7fe7cSChandan Nath unsigned int cm1ioctl; 32562d7fe7cSChandan Nath unsigned int cm2ioctl; 32662d7fe7cSChandan Nath unsigned int resv2[12]; 32762d7fe7cSChandan Nath unsigned int dt0ioctl; 32862d7fe7cSChandan Nath unsigned int dt1ioctl; 329d3daba10SLokesh Vutla unsigned int dt2ioctrl; 330d3daba10SLokesh Vutla unsigned int dt3ioctrl; 331d3daba10SLokesh Vutla unsigned int resv3[4]; 332d3daba10SLokesh Vutla unsigned int emif_sdram_config_ext; 333d3daba10SLokesh Vutla }; 334d3daba10SLokesh Vutla 335d3daba10SLokesh Vutla struct ctrl_ioregs { 336d3daba10SLokesh Vutla unsigned int cm0ioctl; 337d3daba10SLokesh Vutla unsigned int cm1ioctl; 338d3daba10SLokesh Vutla unsigned int cm2ioctl; 339d3daba10SLokesh Vutla unsigned int dt0ioctl; 340d3daba10SLokesh Vutla unsigned int dt1ioctl; 341d3daba10SLokesh Vutla unsigned int dt2ioctrl; 342d3daba10SLokesh Vutla unsigned int dt3ioctrl; 343d3daba10SLokesh Vutla unsigned int emif_sdram_config_ext; 34462d7fe7cSChandan Nath }; 34562d7fe7cSChandan Nath 34662d7fe7cSChandan Nath /** 34762d7fe7cSChandan Nath * Configure DDR io control registers 34862d7fe7cSChandan Nath */ 349d3daba10SLokesh Vutla void config_io_ctrl(const struct ctrl_ioregs *ioregs); 35062d7fe7cSChandan Nath 35162d7fe7cSChandan Nath struct ddr_ctrl { 35262d7fe7cSChandan Nath unsigned int ddrioctrl; 35362d7fe7cSChandan Nath unsigned int resv1[325]; 35462d7fe7cSChandan Nath unsigned int ddrckectrl; 35562d7fe7cSChandan Nath }; 35662d7fe7cSChandan Nath 357*86277339STom Rini #ifdef CONFIG_TI816X 358*86277339STom Rini void config_ddr(const struct ddr_data *data, const struct cmd_control *ctrl, 359*86277339STom Rini const struct emif_regs *regs, 360*86277339STom Rini const struct dmm_lisa_map_regs *lisa_regs, int nrs); 361*86277339STom Rini #else 362d3daba10SLokesh Vutla void config_ddr(unsigned int pll, const struct ctrl_ioregs *ioregs, 363c00f69dbSPeter Korsgaard const struct ddr_data *data, const struct cmd_control *ctrl, 3643ba65f97SMatt Porter const struct emif_regs *regs, int nr); 365*86277339STom Rini #endif 366d3daba10SLokesh Vutla void emif_get_ext_phy_ctrl_const_regs(const u32 **regs, u32 *size); 36762d7fe7cSChandan Nath 36862d7fe7cSChandan Nath #endif /* _DDR_DEFS_H */ 369