19fb0777eSKever Yang /* 29fb0777eSKever Yang * Copyright (C) 2016-2017 Rockchip Electronics Co., Ltd 39fb0777eSKever Yang * 49fb0777eSKever Yang * SPDX-License-Identifier: GPL-2.0+ 59fb0777eSKever Yang */ 69fb0777eSKever Yang 79fb0777eSKever Yang #ifndef _ASM_ARCH_SDRAM_RK3328_H 89fb0777eSKever Yang #define _ASM_ARCH_SDRAM_RK3328_H 9*16bd7102SYouMin Chen #include <asm/arch/sdram_common.h> 10*16bd7102SYouMin Chen #include <asm/arch/sdram_pctl_px30.h> 11*16bd7102SYouMin Chen #include <asm/arch/sdram_phy_px30.h> 12*16bd7102SYouMin Chen #include <asm/arch/sdram_phy_ron_rtt_px30.h> 139fb0777eSKever Yang 149fb0777eSKever Yang #define SR_IDLE 93 159fb0777eSKever Yang #define PD_IDLE 13 169fb0777eSKever Yang #define SDRAM_ADDR 0x00000000 179fb0777eSKever Yang 189fb0777eSKever Yang /* noc registers define */ 199fb0777eSKever Yang #define DDRCONF 0x8 209fb0777eSKever Yang #define DDRTIMING 0xc 219fb0777eSKever Yang #define DDRMODE 0x10 229fb0777eSKever Yang #define READLATENCY 0x14 239fb0777eSKever Yang #define AGING0 0x18 249fb0777eSKever Yang #define AGING1 0x1c 259fb0777eSKever Yang #define AGING2 0x20 269fb0777eSKever Yang #define AGING3 0x24 279fb0777eSKever Yang #define AGING4 0x28 289fb0777eSKever Yang #define AGING5 0x2c 299fb0777eSKever Yang #define ACTIVATE 0x38 309fb0777eSKever Yang #define DEVTODEV 0x3c 319fb0777eSKever Yang #define DDR4TIMING 0x40 329fb0777eSKever Yang 339fb0777eSKever Yang /* DDR GRF */ 349fb0777eSKever Yang #define DDR_GRF_CON(n) (0 + (n) * 4) 359fb0777eSKever Yang #define DDR_GRF_STATUS_BASE (0X100) 369fb0777eSKever Yang #define DDR_GRF_STATUS(n) (DDR_GRF_STATUS_BASE + (n) * 4) 379fb0777eSKever Yang 389fb0777eSKever Yang /* CRU_SOFTRESET_CON5 */ 39*16bd7102SYouMin Chen #define ddrphy_psrstn_req(n) (((0x1 << 15) << 16) | ((n) << 15)) 40*16bd7102SYouMin Chen #define ddrphy_srstn_req(n) (((0x1 << 14) << 16) | ((n) << 14)) 41*16bd7102SYouMin Chen #define ddrctrl_psrstn_req(n) (((0x1 << 13) << 16) | ((n) << 13)) 42*16bd7102SYouMin Chen #define ddrctrl_srstn_req(n) (((0x1 << 12) << 16) | ((n) << 12)) 43*16bd7102SYouMin Chen #define ddrmsch_srstn_req(n) (((0x1 << 11) << 16) | ((n) << 11)) 44*16bd7102SYouMin Chen #define msch_srstn_req(n) (((0x1 << 9) << 16) | ((n) << 9)) 45*16bd7102SYouMin Chen #define dfimon_srstn_req(n) (((0x1 << 8) << 16) | ((n) << 8)) 46*16bd7102SYouMin Chen #define grf_ddr_srstn_req(n) (((0x1 << 7) << 16) | ((n) << 7)) 479fb0777eSKever Yang /* CRU_SOFTRESET_CON9 */ 48*16bd7102SYouMin Chen #define ddrctrl_asrstn_req(n) (((0x1 << 9) << 16) | ((n) << 9)) 499fb0777eSKever Yang 509fb0777eSKever Yang /* CRU register */ 519fb0777eSKever Yang #define CRU_PLL_CON(pll_id, n) ((pll_id) * 0x20 + (n) * 4) 529fb0777eSKever Yang #define CRU_MODE (0x80) 539fb0777eSKever Yang #define CRU_GLB_CNT_TH (0x90) 549fb0777eSKever Yang #define CRU_CLKSEL_CON_BASE 0x100 559fb0777eSKever Yang #define CRU_CLKSELS_CON(i) (CRU_CLKSEL_CON_BASE + ((i) * 4)) 569fb0777eSKever Yang #define CRU_CLKGATE_CON_BASE 0x200 579fb0777eSKever Yang #define CRU_CLKGATE_CON(i) (CRU_CLKGATE_CON_BASE + ((i) * 4)) 589fb0777eSKever Yang #define CRU_CLKSFTRST_CON_BASE 0x300 599fb0777eSKever Yang #define CRU_CLKSFTRST_CON(i) (CRU_CLKSFTRST_CON_BASE + ((i) * 4)) 609fb0777eSKever Yang 619fb0777eSKever Yang /* CRU_PLL_CON0 */ 629fb0777eSKever Yang #define PB(n) ((0x1 << (15 + 16)) | ((n) << 15)) 639fb0777eSKever Yang #define POSTDIV1(n) ((0x7 << (12 + 16)) | ((n) << 12)) 649fb0777eSKever Yang #define FBDIV(n) ((0xFFF << 16) | (n)) 659fb0777eSKever Yang 669fb0777eSKever Yang /* CRU_PLL_CON1 */ 679fb0777eSKever Yang #define RSTMODE(n) ((0x1 << (15 + 16)) | ((n) << 15)) 689fb0777eSKever Yang #define RST(n) ((0x1 << (14 + 16)) | ((n) << 14)) 699fb0777eSKever Yang #define PD(n) ((0x1 << (13 + 16)) | ((n) << 13)) 709fb0777eSKever Yang #define DSMPD(n) ((0x1 << (12 + 16)) | ((n) << 12)) 719fb0777eSKever Yang #define LOCK(n) (((n) >> 10) & 0x1) 729fb0777eSKever Yang #define POSTDIV2(n) ((0x7 << (6 + 16)) | ((n) << 6)) 739fb0777eSKever Yang #define REFDIV(n) ((0x3F << 16) | (n)) 749fb0777eSKever Yang 759fb0777eSKever Yang u16 ddr_cfg_2_rbc[] = { 76*16bd7102SYouMin Chen /* 779fb0777eSKever Yang * [5:4] row(13+n) 789fb0777eSKever Yang * [3] cs(0:0 cs, 1:2 cs) 799fb0777eSKever Yang * [2] bank(0:0bank,1:8bank) 809fb0777eSKever Yang * [1:0] col(11+n) 81*16bd7102SYouMin Chen */ 829fb0777eSKever Yang /* row, cs, bank, col */ 839fb0777eSKever Yang ((3 << 4) | (0 << 3) | (1 << 2) | 0), 849fb0777eSKever Yang ((3 << 4) | (0 << 3) | (1 << 2) | 1), 859fb0777eSKever Yang ((2 << 4) | (0 << 3) | (1 << 2) | 2), 869fb0777eSKever Yang ((3 << 4) | (0 << 3) | (1 << 2) | 2), 879fb0777eSKever Yang ((2 << 4) | (0 << 3) | (1 << 2) | 3), 889fb0777eSKever Yang ((3 << 4) | (1 << 3) | (1 << 2) | 0), 899fb0777eSKever Yang ((3 << 4) | (1 << 3) | (1 << 2) | 1), 909fb0777eSKever Yang ((2 << 4) | (1 << 3) | (1 << 2) | 2), 919fb0777eSKever Yang ((3 << 4) | (0 << 3) | (0 << 2) | 1), 929fb0777eSKever Yang ((2 << 4) | (0 << 3) | (1 << 2) | 1), 939fb0777eSKever Yang }; 949fb0777eSKever Yang 959fb0777eSKever Yang u16 ddr4_cfg_2_rbc[] = { 969fb0777eSKever Yang /*************************** 979fb0777eSKever Yang * [6] cs 0:0cs 1:2 cs 989fb0777eSKever Yang * [5:3] row(13+n) 999fb0777eSKever Yang * [2] cs(0:0 cs, 1:2 cs) 1009fb0777eSKever Yang * [1] bw 0: 16bit 1:32bit 1019fb0777eSKever Yang * [0] diebw 0:8bit 1:16bit 1029fb0777eSKever Yang ***************************/ 1039fb0777eSKever Yang /* cs, row, cs, bw, diebw */ 1049fb0777eSKever Yang ((0 << 6) | (3 << 3) | (0 << 2) | (1 << 1) | 0), 1059fb0777eSKever Yang ((1 << 6) | (2 << 3) | (0 << 2) | (1 << 1) | 0), 1069fb0777eSKever Yang ((0 << 6) | (4 << 3) | (0 << 2) | (0 << 1) | 0), 1079fb0777eSKever Yang ((1 << 6) | (3 << 3) | (0 << 2) | (0 << 1) | 0), 1089fb0777eSKever Yang ((0 << 6) | (4 << 3) | (0 << 2) | (1 << 1) | 1), 1099fb0777eSKever Yang ((1 << 6) | (3 << 3) | (0 << 2) | (1 << 1) | 1), 1109fb0777eSKever Yang ((1 << 6) | (4 << 3) | (0 << 2) | (0 << 1) | 1), 1119fb0777eSKever Yang ((0 << 6) | (2 << 3) | (1 << 2) | (1 << 1) | 0), 1129fb0777eSKever Yang ((0 << 6) | (3 << 3) | (1 << 2) | (0 << 1) | 0), 1139fb0777eSKever Yang ((0 << 6) | (3 << 3) | (1 << 2) | (1 << 1) | 1), 1149fb0777eSKever Yang ((0 << 6) | (4 << 3) | (1 << 2) | (0 << 1) | 1), 1159fb0777eSKever Yang }; 1169fb0777eSKever Yang 1179fb0777eSKever Yang u32 addrmap[21][9] = { 1189fb0777eSKever Yang /* map0 map1 map2 map3 map4 map5 map6 map7 map8 */ 1199fb0777eSKever Yang {22, 0x00070707, 0x00000000, 0x1f000000, 0x00001f1f, 0x06060606, 1209fb0777eSKever Yang 0x06060606, 0x00000f0f, 0x3f3f}, 1219fb0777eSKever Yang {23, 0x00080808, 0x00000000, 0x00000000, 0x00001f1f, 0x07070707, 1229fb0777eSKever Yang 0x07070707, 0x00000f0f, 0x3f3f}, 1239fb0777eSKever Yang {23, 0x00090909, 0x00000000, 0x00000000, 0x00001f00, 0x08080808, 1249fb0777eSKever Yang 0x0f080808, 0x00000f0f, 0x3f3f}, 1259fb0777eSKever Yang {24, 0x00090909, 0x00000000, 0x00000000, 0x00001f00, 0x08080808, 1269fb0777eSKever Yang 0x08080808, 0x00000f0f, 0x3f3f}, 1279fb0777eSKever Yang {24, 0x000a0a0a, 0x00000000, 0x00000000, 0x00000000, 0x09090909, 1289fb0777eSKever Yang 0x0f090909, 0x00000f0f, 0x3f3f}, 1299fb0777eSKever Yang {6, 0x00070707, 0x00000000, 0x1f000000, 0x00001f1f, 0x07070707, 1309fb0777eSKever Yang 0x07070707, 0x00000f0f, 0x3f3f}, 1319fb0777eSKever Yang {7, 0x00080808, 0x00000000, 0x00000000, 0x00001f1f, 0x08080808, 1329fb0777eSKever Yang 0x08080808, 0x00000f0f, 0x3f3f}, 1339fb0777eSKever Yang {8, 0x00090909, 0x00000000, 0x00000000, 0x00001f00, 0x09090909, 1349fb0777eSKever Yang 0x0f090909, 0x00000f0f, 0x3f3f}, 1359fb0777eSKever Yang {22, 0x001f0808, 0x00000000, 0x00000000, 0x00001f1f, 0x06060606, 1369fb0777eSKever Yang 0x06060606, 0x00000f0f, 0x3f3f}, 1379fb0777eSKever Yang {23, 0x00080808, 0x00000000, 0x00000000, 0x00001f1f, 0x07070707, 1389fb0777eSKever Yang 0x0f070707, 0x00000f0f, 0x3f3f}, 1399fb0777eSKever Yang 1409fb0777eSKever Yang {24, 0x003f0a0a, 0x01010100, 0x01010101, 0x00001f1f, 0x08080808, 1419fb0777eSKever Yang 0x08080808, 0x00000f0f, 0x0801}, 1429fb0777eSKever Yang {23, 0x003f0a0a, 0x01010100, 0x01010101, 0x00001f1f, 0x08080808, 1439fb0777eSKever Yang 0x0f080808, 0x00000f0f, 0x0801}, 1449fb0777eSKever Yang {24, 0x003f0909, 0x00000007, 0x1f000000, 0x00001f1f, 0x07070707, 1459fb0777eSKever Yang 0x07070707, 0x00000f07, 0x0700}, 1469fb0777eSKever Yang {23, 0x003f0909, 0x00000007, 0x1f000000, 0x00001f1f, 0x07070707, 1479fb0777eSKever Yang 0x07070707, 0x00000f0f, 0x0700}, 1489fb0777eSKever Yang {24, 0x003f0909, 0x01010100, 0x01010101, 0x00001f1f, 0x07070707, 1499fb0777eSKever Yang 0x07070707, 0x00000f07, 0x3f01}, 1509fb0777eSKever Yang {23, 0x003f0909, 0x01010100, 0x01010101, 0x00001f1f, 0x07070707, 1519fb0777eSKever Yang 0x07070707, 0x00000f0f, 0x3f01}, 1529fb0777eSKever Yang {24, 0x003f0808, 0x00000007, 0x1f000000, 0x00001f1f, 0x06060606, 1539fb0777eSKever Yang 0x06060606, 0x00000f06, 0x3f00}, 1549fb0777eSKever Yang {8, 0x003f0a0a, 0x01010100, 0x01010101, 0x00001f1f, 0x09090909, 1559fb0777eSKever Yang 0x0f090909, 0x00000f0f, 0x0801}, 1569fb0777eSKever Yang {7, 0x003f0909, 0x00000007, 0x1f000000, 0x00001f1f, 0x08080808, 1579fb0777eSKever Yang 0x08080808, 0x00000f0f, 0x0700}, 1589fb0777eSKever Yang {7, 0x003f0909, 0x01010100, 0x01010101, 0x00001f1f, 0x08080808, 1599fb0777eSKever Yang 0x08080808, 0x00000f0f, 0x3f01}, 1609fb0777eSKever Yang 1619fb0777eSKever Yang {6, 0x003f0808, 0x00000007, 0x1f000000, 0x00001f1f, 0x07070707, 1629fb0777eSKever Yang 0x07070707, 0x00000f07, 0x3f00} 1639fb0777eSKever Yang }; 1649fb0777eSKever Yang 165*16bd7102SYouMin Chen struct rk3328_ddr_grf_regs { 166*16bd7102SYouMin Chen u32 ddr_grf_con[4]; 167*16bd7102SYouMin Chen u32 reserved[(0x100 - 0x10) / 4]; 168*16bd7102SYouMin Chen u32 ddr_grf_status[11]; 1699fb0777eSKever Yang }; 1709fb0777eSKever Yang 171*16bd7102SYouMin Chen union noc_ddrtiming { 172*16bd7102SYouMin Chen u32 d32; 173*16bd7102SYouMin Chen struct { 174*16bd7102SYouMin Chen unsigned acttoact:6; 175*16bd7102SYouMin Chen unsigned rdtomiss:6; 176*16bd7102SYouMin Chen unsigned wrtomiss:6; 177*16bd7102SYouMin Chen unsigned burstlen:3; 178*16bd7102SYouMin Chen unsigned rdtowr:5; 179*16bd7102SYouMin Chen unsigned wrtord:5; 180*16bd7102SYouMin Chen unsigned bwratio:1; 181*16bd7102SYouMin Chen } b; 182*16bd7102SYouMin Chen }; 183*16bd7102SYouMin Chen 184*16bd7102SYouMin Chen union noc_activate { 185*16bd7102SYouMin Chen u32 d32; 186*16bd7102SYouMin Chen struct { 187*16bd7102SYouMin Chen unsigned rrd:4; 188*16bd7102SYouMin Chen unsigned faw:6; 189*16bd7102SYouMin Chen unsigned fawbank:1; 190*16bd7102SYouMin Chen unsigned reserved1:21; 191*16bd7102SYouMin Chen } b; 192*16bd7102SYouMin Chen }; 193*16bd7102SYouMin Chen 194*16bd7102SYouMin Chen union noc_devtodev { 195*16bd7102SYouMin Chen u32 d32; 196*16bd7102SYouMin Chen struct { 197*16bd7102SYouMin Chen unsigned busrdtord:2; 198*16bd7102SYouMin Chen unsigned busrdtowr:2; 199*16bd7102SYouMin Chen unsigned buswrtord:2; 200*16bd7102SYouMin Chen unsigned reserved2:26; 201*16bd7102SYouMin Chen } b; 202*16bd7102SYouMin Chen }; 203*16bd7102SYouMin Chen 204*16bd7102SYouMin Chen union noc_ddr4timing { 205*16bd7102SYouMin Chen u32 d32; 206*16bd7102SYouMin Chen struct { 207*16bd7102SYouMin Chen unsigned ccdl:3; 208*16bd7102SYouMin Chen unsigned wrtordl:5; 209*16bd7102SYouMin Chen unsigned rrdl:4; 210*16bd7102SYouMin Chen unsigned reserved2:20; 211*16bd7102SYouMin Chen } b; 212*16bd7102SYouMin Chen }; 213*16bd7102SYouMin Chen 214*16bd7102SYouMin Chen union noc_ddrmode { 215*16bd7102SYouMin Chen u32 d32; 216*16bd7102SYouMin Chen struct { 217*16bd7102SYouMin Chen unsigned autoprecharge:1; 218*16bd7102SYouMin Chen unsigned bwratioextended:1; 219*16bd7102SYouMin Chen unsigned reserved3:30; 220*16bd7102SYouMin Chen } b; 221*16bd7102SYouMin Chen }; 222*16bd7102SYouMin Chen 223*16bd7102SYouMin Chen struct msch_regs { 2249fb0777eSKever Yang u32 coreid; 2259fb0777eSKever Yang u32 revisionid; 2269fb0777eSKever Yang u32 ddrconf; 2279fb0777eSKever Yang u32 ddrtiming; 2289fb0777eSKever Yang u32 ddrmode; 2299fb0777eSKever Yang u32 readlatency; 2309fb0777eSKever Yang u32 aging0; 2319fb0777eSKever Yang u32 aging1; 2329fb0777eSKever Yang u32 aging2; 2339fb0777eSKever Yang u32 aging3; 2349fb0777eSKever Yang u32 aging4; 2359fb0777eSKever Yang u32 aging5; 2369fb0777eSKever Yang u32 reserved[2]; 2379fb0777eSKever Yang u32 activate; 2389fb0777eSKever Yang u32 devtodev; 2399fb0777eSKever Yang u32 ddr4_timing; 2409fb0777eSKever Yang }; 2419fb0777eSKever Yang 242*16bd7102SYouMin Chen struct sdram_msch_timings { 243*16bd7102SYouMin Chen union noc_ddrtiming ddrtiming; 244*16bd7102SYouMin Chen union noc_ddrmode ddrmode; 245*16bd7102SYouMin Chen u32 readlatency; 246*16bd7102SYouMin Chen union noc_activate activate; 247*16bd7102SYouMin Chen union noc_devtodev devtodev; 248*16bd7102SYouMin Chen union noc_ddr4timing ddr4timing; 249*16bd7102SYouMin Chen u32 agingx0; 2509fb0777eSKever Yang }; 2519fb0777eSKever Yang 2529fb0777eSKever Yang struct rk3328_sdram_channel { 253*16bd7102SYouMin Chen struct sdram_cap_info cap_info; 254*16bd7102SYouMin Chen struct sdram_msch_timings noc_timings; 2559fb0777eSKever Yang }; 2569fb0777eSKever Yang 2579fb0777eSKever Yang struct rk3328_sdram_params { 2589fb0777eSKever Yang struct rk3328_sdram_channel ch; 259*16bd7102SYouMin Chen struct sdram_base_params base; 260*16bd7102SYouMin Chen struct ddr_pctl_regs pctl_regs; 261*16bd7102SYouMin Chen struct ddr_phy_regs phy_regs; 262*16bd7102SYouMin Chen struct ddr_phy_skew skew; 2639fb0777eSKever Yang }; 2649fb0777eSKever Yang 2659fb0777eSKever Yang #endif 266