1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (C) 2020 Rockchip Electronics Co., Ltd 4 */ 5 6 #ifndef _ASM_ARCH_SDRAM_RK1126_H 7 #define _ASM_ARCH_SDRAM_RK1126_H 8 9 #include <asm/arch/dram_spec_timing.h> 10 #include <asm/arch/sdram.h> 11 #include <asm/arch/sdram_common.h> 12 #include <asm/arch/sdram_msch.h> 13 #include <asm/arch/sdram_pctl_px30.h> 14 #include <asm/arch/sdram_phy_rv1126.h> 15 16 #define AGINGX0_VAL (4) 17 #define AGING_CPU_VAL (0xff) 18 #define AGING_NPU_VAL (0xff) 19 #define AGING_OTHER_VAL (0x33) 20 21 #define PATTERN (0x5aa5f00f) 22 #define PHY_PER_DE_SKEW_DELAY (20) 23 #define PHY_RX_DQS_INNER_DELAY (5) 24 25 #define PHY_DDR3_RON_DISABLE (0) 26 #define PHY_DDR3_RON_506ohm (1) 27 #define PHY_DDR3_RON_253ohm (2) 28 #define PHY_DDR3_RON_169hm (3) 29 #define PHY_DDR3_RON_127ohm (4) 30 #define PHY_DDR3_RON_101ohm (5) 31 #define PHY_DDR3_RON_84ohm (6) 32 #define PHY_DDR3_RON_72ohm (7) 33 #define PHY_DDR3_RON_63ohm (16) 34 #define PHY_DDR3_RON_56ohm (17) 35 #define PHY_DDR3_RON_51ohm (18) 36 #define PHY_DDR3_RON_46ohm (19) 37 #define PHY_DDR3_RON_42ohm (20) 38 #define PHY_DDR3_RON_39ohm (21) 39 #define PHY_DDR3_RON_36ohm (22) 40 #define PHY_DDR3_RON_34ohm (23) 41 #define PHY_DDR3_RON_32ohm (24) 42 #define PHY_DDR3_RON_30ohm (25) 43 #define PHY_DDR3_RON_28ohm (26) 44 #define PHY_DDR3_RON_27ohm (27) 45 #define PHY_DDR3_RON_25ohm (28) 46 #define PHY_DDR3_RON_24ohm (29) 47 #define PHY_DDR3_RON_23ohm (30) 48 #define PHY_DDR3_RON_22ohm (31) 49 50 #define PHY_DDR3_RTT_DISABLE (0) 51 #define PHY_DDR3_RTT_953ohm (1) 52 #define PHY_DDR3_RTT_483ohm (2) 53 #define PHY_DDR3_RTT_320ohm (3) 54 #define PHY_DDR3_RTT_241ohm (4) 55 #define PHY_DDR3_RTT_193ohm (5) 56 #define PHY_DDR3_RTT_161ohm (6) 57 #define PHY_DDR3_RTT_138ohm (7) 58 #define PHY_DDR3_RTT_121ohm (16) 59 #define PHY_DDR3_RTT_107ohm (17) 60 #define PHY_DDR3_RTT_97ohm (18) 61 #define PHY_DDR3_RTT_88ohm (19) 62 #define PHY_DDR3_RTT_80ohm (20) 63 #define PHY_DDR3_RTT_74ohm (21) 64 #define PHY_DDR3_RTT_69ohm (22) 65 #define PHY_DDR3_RTT_64ohm (23) 66 #define PHY_DDR3_RTT_60ohm (24) 67 #define PHY_DDR3_RTT_57ohm (25) 68 #define PHY_DDR3_RTT_54ohm (26) 69 #define PHY_DDR3_RTT_51ohm (27) 70 #define PHY_DDR3_RTT_48ohm (28) 71 #define PHY_DDR3_RTT_46ohm (29) 72 #define PHY_DDR3_RTT_44ohm (30) 73 #define PHY_DDR3_RTT_42ohm (31) 74 75 #define PHY_DDR4_LPDDR3_RON_DISABLE (0) 76 #define PHY_DDR4_LPDDR3_RON_570ohm (1) 77 #define PHY_DDR4_LPDDR3_RON_285ohm (2) 78 #define PHY_DDR4_LPDDR3_RON_190ohm (3) 79 #define PHY_DDR4_LPDDR3_RON_142ohm (4) 80 #define PHY_DDR4_LPDDR3_RON_114ohm (5) 81 #define PHY_DDR4_LPDDR3_RON_95ohm (6) 82 #define PHY_DDR4_LPDDR3_RON_81ohm (7) 83 #define PHY_DDR4_LPDDR3_RON_71ohm (16) 84 #define PHY_DDR4_LPDDR3_RON_63ohm (17) 85 #define PHY_DDR4_LPDDR3_RON_57ohm (18) 86 #define PHY_DDR4_LPDDR3_RON_52ohm (19) 87 #define PHY_DDR4_LPDDR3_RON_47ohm (20) 88 #define PHY_DDR4_LPDDR3_RON_44ohm (21) 89 #define PHY_DDR4_LPDDR3_RON_41ohm (22) 90 #define PHY_DDR4_LPDDR3_RON_38ohm (23) 91 #define PHY_DDR4_LPDDR3_RON_36ohm (24) 92 #define PHY_DDR4_LPDDR3_RON_34ohm (25) 93 #define PHY_DDR4_LPDDR3_RON_32ohm (26) 94 #define PHY_DDR4_LPDDR3_RON_30ohm (27) 95 #define PHY_DDR4_LPDDR3_RON_28ohm (28) 96 #define PHY_DDR4_LPDDR3_RON_27ohm (29) 97 #define PHY_DDR4_LPDDR3_RON_26ohm (30) 98 #define PHY_DDR4_LPDDR3_RON_25ohm (31) 99 100 #define PHY_DDR4_LPDDR3_RTT_DISABLE (0) 101 #define PHY_DDR4_LPDDR3_RTT_973ohm (1) 102 #define PHY_DDR4_LPDDR3_RTT_493ohm (2) 103 #define PHY_DDR4_LPDDR3_RTT_327ohm (3) 104 #define PHY_DDR4_LPDDR3_RTT_247ohm (4) 105 #define PHY_DDR4_LPDDR3_RTT_197ohm (5) 106 #define PHY_DDR4_LPDDR3_RTT_164ohm (6) 107 #define PHY_DDR4_LPDDR3_RTT_141ohm (7) 108 #define PHY_DDR4_LPDDR3_RTT_123ohm (16) 109 #define PHY_DDR4_LPDDR3_RTT_109ohm (17) 110 #define PHY_DDR4_LPDDR3_RTT_99ohm (18) 111 #define PHY_DDR4_LPDDR3_RTT_90ohm (19) 112 #define PHY_DDR4_LPDDR3_RTT_82ohm (20) 113 #define PHY_DDR4_LPDDR3_RTT_76ohm (21) 114 #define PHY_DDR4_LPDDR3_RTT_70ohm (22) 115 #define PHY_DDR4_LPDDR3_RTT_66ohm (23) 116 #define PHY_DDR4_LPDDR3_RTT_62ohm (24) 117 #define PHY_DDR4_LPDDR3_RTT_58ohm (25) 118 #define PHY_DDR4_LPDDR3_RTT_55ohm (26) 119 #define PHY_DDR4_LPDDR3_RTT_52ohm (27) 120 #define PHY_DDR4_LPDDR3_RTT_49ohm (28) 121 #define PHY_DDR4_LPDDR3_RTT_47ohm (29) 122 #define PHY_DDR4_LPDDR3_RTT_45ohm (30) 123 #define PHY_DDR4_LPDDR3_RTT_43ohm (31) 124 125 #define PHY_LPDDR4_RON_DISABLE (0) 126 #define PHY_LPDDR4_RON_606ohm (1) 127 #define PHY_LPDDR4_RON_303ohm (2) 128 #define PHY_LPDDR4_RON_202ohm (3) 129 #define PHY_LPDDR4_RON_152ohm (4) 130 #define PHY_LPDDR4_RON_121ohm (5) 131 #define PHY_LPDDR4_RON_101ohm (6) 132 #define PHY_LPDDR4_RON_87ohm (7) 133 #define PHY_LPDDR4_RON_76ohm (16) 134 #define PHY_LPDDR4_RON_67ohm (17) 135 #define PHY_LPDDR4_RON_61ohm (18) 136 #define PHY_LPDDR4_RON_55ohm (19) 137 #define PHY_LPDDR4_RON_51ohm (20) 138 #define PHY_LPDDR4_RON_47ohm (21) 139 #define PHY_LPDDR4_RON_43ohm (22) 140 #define PHY_LPDDR4_RON_40ohm (23) 141 #define PHY_LPDDR4_RON_38ohm (24) 142 #define PHY_LPDDR4_RON_36ohm (25) 143 #define PHY_LPDDR4_RON_34ohm (26) 144 #define PHY_LPDDR4_RON_32ohm (27) 145 #define PHY_LPDDR4_RON_30ohm (28) 146 #define PHY_LPDDR4_RON_29ohm (29) 147 #define PHY_LPDDR4_RON_28ohm (30) 148 #define PHY_LPDDR4_RON_26ohm (31) 149 150 #define PHY_LPDDR4_RTT_DISABLE (0) 151 #define PHY_LPDDR4_RTT_998ohm (1) 152 #define PHY_LPDDR4_RTT_506ohm (2) 153 #define PHY_LPDDR4_RTT_336ohm (3) 154 #define PHY_LPDDR4_RTT_253ohm (4) 155 #define PHY_LPDDR4_RTT_202ohm (5) 156 #define PHY_LPDDR4_RTT_169ohm (6) 157 #define PHY_LPDDR4_RTT_144ohm (7) 158 #define PHY_LPDDR4_RTT_127ohm (16) 159 #define PHY_LPDDR4_RTT_112ohm (17) 160 #define PHY_LPDDR4_RTT_101ohm (18) 161 #define PHY_LPDDR4_RTT_92ohm (19) 162 #define PHY_LPDDR4_RTT_84ohm (20) 163 #define PHY_LPDDR4_RTT_78ohm (21) 164 #define PHY_LPDDR4_RTT_72ohm (22) 165 #define PHY_LPDDR4_RTT_67ohm (23) 166 #define PHY_LPDDR4_RTT_63ohm (24) 167 #define PHY_LPDDR4_RTT_60ohm (25) 168 #define PHY_LPDDR4_RTT_56ohm (26) 169 #define PHY_LPDDR4_RTT_53ohm (27) 170 #define PHY_LPDDR4_RTT_51ohm (28) 171 #define PHY_LPDDR4_RTT_48ohm (29) 172 #define PHY_LPDDR4_RTT_46ohm (30) 173 #define PHY_LPDDR4_RTT_44ohm (31) 174 175 #define ADD_CMD_CA (0x150) 176 #define ADD_GROUP_CS0_A (0x170) 177 #define ADD_GROUP_CS0_B (0x1d0) 178 #define ADD_GROUP_CS1_A (0x1a0) 179 #define ADD_GROUP_CS1_B (0x200) 180 181 /* PMUGRF */ 182 #define PMUGRF_OS_REG0 (0x200) 183 #define PMUGRF_OS_REG(n) (PMUGRF_OS_REG0 + (n) * 4) 184 #define PMUGRF_CON_DDRPHY_BUFFEREN_MASK (0x3 << (12 + 16)) 185 #define PMUGRF_CON_DDRPHY_BUFFEREN_EN (0x1 << 12) 186 #define PMUGRF_CON_DDRPHY_BUFFEREN_DIS (0x2 << 12) 187 188 /* DDR GRF */ 189 #define DDR_GRF_CON(n) (0 + (n) * 4) 190 #define DDR_GRF_STATUS_BASE (0X100) 191 #define DDR_GRF_STATUS(n) (DDR_GRF_STATUS_BASE + (n) * 4) 192 #define DDR_GRF_LP_CON (0x20) 193 194 #define SPLIT_MODE_32_L16_VALID (0) 195 #define SPLIT_MODE_32_H16_VALID (1) 196 #define SPLIT_MODE_16_L8_VALID (2) 197 #define SPLIT_MODE_16_H8_VALID (3) 198 199 #define DDR_GRF_SPLIT_CON (0x10) 200 #define SPLIT_MODE_MASK (0x3) 201 #define SPLIT_MODE_OFFSET (9) 202 #define SPLIT_BYPASS_MASK (1) 203 #define SPLIT_BYPASS_OFFSET (8) 204 #define SPLIT_SIZE_MASK (0xff) 205 #define SPLIT_SIZE_OFFSET (0) 206 207 /* SGRF SOC_CON13 */ 208 #define UPCTL2_ASRSTN_REQ(n) (((0x1 << 0) << 16) | ((n) << 0)) 209 #define UPCTL2_PSRSTN_REQ(n) (((0x1 << 1) << 16) | ((n) << 1)) 210 #define UPCTL2_SRSTN_REQ(n) (((0x1 << 2) << 16) | ((n) << 2)) 211 212 /* CRU define */ 213 /* CRU_PLL_CON0 */ 214 #define PB(n) ((0x1 << (15 + 16)) | ((n) << 15)) 215 #define POSTDIV1(n) ((0x7 << (12 + 16)) | ((n) << 12)) 216 #define FBDIV(n) ((0xFFF << 16) | (n)) 217 218 /* CRU_PLL_CON1 */ 219 #define RSTMODE(n) ((0x1 << (15 + 16)) | ((n) << 15)) 220 #define RST(n) ((0x1 << (14 + 16)) | ((n) << 14)) 221 #define PD(n) ((0x1 << (13 + 16)) | ((n) << 13)) 222 #define DSMPD(n) ((0x1 << (12 + 16)) | ((n) << 12)) 223 #define LOCK(n) (((n) >> 10) & 0x1) 224 #define POSTDIV2(n) ((0x7 << (6 + 16)) | ((n) << 6)) 225 #define REFDIV(n) ((0x3F << 16) | (n)) 226 227 /* CRU_MODE */ 228 #define CLOCK_FROM_XIN_OSC (0) 229 #define CLOCK_FROM_PLL (1) 230 #define CLOCK_FROM_RTC_32K (2) 231 #define DPLL_MODE(n) ((0x3 << (2 + 16)) | ((n) << 2)) 232 233 /* CRU_SOFTRESET_CON1 */ 234 #define DDRPHY_PSRSTN_REQ(n) (((0x1 << 14) << 16) | ((n) << 14)) 235 #define DDRPHY_SRSTN_REQ(n) (((0x1 << 15) << 16) | ((n) << 15)) 236 /* CRU_CLKGATE_CON2 */ 237 #define DDR_MSCH_EN_MASK ((0x1 << 10) << 16) 238 #define DDR_MSCH_EN_SHIFT (10) 239 240 /* CRU register */ 241 #define CRU_PLL_CON(pll_id, n) ((pll_id) * 0x20 + (n) * 4) 242 #define CRU_MODE (0xa0) 243 #define CRU_GLB_CNT_TH (0xb0) 244 #define CRU_CLKSEL_CON_BASE 0x100 245 #define CRU_CLKSELS_CON(i) (CRU_CLKSEL_CON_BASE + ((i) * 4)) 246 #define CRU_CLKGATE_CON_BASE 0x230 247 #define CRU_CLKGATE_CON(i) (CRU_CLKGATE_CON_BASE + ((i) * 4)) 248 #define CRU_CLKSFTRST_CON_BASE 0x300 249 #define CRU_CLKSFTRST_CON(i) (CRU_CLKSFTRST_CON_BASE + ((i) * 4)) 250 251 /* SGRF_SOC_CON12 */ 252 #define CLK_DDR_UPCTL_EN_MASK ((0x1 << 2) << 16) 253 #define CLK_DDR_UPCTL_EN_SHIFT (2) 254 #define ACLK_DDR_UPCTL_EN_MASK ((0x1 << 0) << 16) 255 #define ACLK_DDR_UPCTL_EN_SHIFT (0) 256 257 /* DDRGRF DDR CON2 */ 258 #define DFI_FREQ_CHANGE_ACK BIT(10) 259 /* DDRGRF status8 */ 260 #define DFI_FREQ_CHANGE_REQ BIT(19) 261 262 struct rv1126_ddrgrf { 263 u32 ddr_grf_con[4]; 264 u32 grf_ddrsplit_con; 265 u32 reserved1[(0x20 - 0x10) / 4 - 1]; 266 u32 ddr_grf_lp_con; 267 u32 reserved2[(0x40 - 0x20) / 4 - 1]; 268 u32 grf_ddrphy_con[6]; 269 u32 reserved3[(0x100 - 0x54) / 4 - 1]; 270 u32 ddr_grf_status[18]; 271 u32 reserved4[(0x150 - 0x144) / 4 - 1]; 272 u32 grf_ddrhold_status; 273 u32 reserved5[(0x160 - 0x150) / 4 - 1]; 274 u32 grf_ddrphy_status[2]; 275 }; 276 277 struct rv1126_ddr_phy_regs { 278 u32 phy[8][2]; 279 }; 280 281 struct msch_regs { 282 u32 coreid; 283 u32 revisionid; 284 u32 deviceconf; 285 u32 devicesize; 286 u32 ddrtiminga0; 287 u32 ddrtimingb0; 288 u32 ddrtimingc0; 289 u32 devtodev0; 290 u32 reserved1[(0x110 - 0x20) / 4]; 291 u32 ddrmode; 292 u32 ddr4timing; 293 u32 reserved2[(0x1000 - 0x118) / 4]; 294 u32 agingx0; 295 u32 reserved3[(0x1040 - 0x1004) / 4]; 296 u32 aging0; 297 u32 aging1; 298 u32 aging2; 299 u32 aging3; 300 }; 301 302 struct sdram_msch_timings { 303 union noc_ddrtiminga0 ddrtiminga0; 304 union noc_ddrtimingb0 ddrtimingb0; 305 union noc_ddrtimingc0 ddrtimingc0; 306 union noc_devtodev0 devtodev0; 307 union noc_ddrmode ddrmode; 308 union noc_ddr4timing ddr4timing; 309 u32 agingx0; 310 u32 aging0; 311 u32 aging1; 312 u32 aging2; 313 u32 aging3; 314 }; 315 316 struct rv1126_sdram_channel { 317 struct sdram_cap_info cap_info; 318 struct sdram_msch_timings noc_timings; 319 }; 320 321 struct rv1126_sdram_params { 322 struct rv1126_sdram_channel ch; 323 struct sdram_base_params base; 324 struct ddr_pctl_regs pctl_regs; 325 struct rv1126_ddr_phy_regs phy_regs; 326 }; 327 328 struct rv1126_fsp_param { 329 u32 flag; 330 u32 freq_mhz; 331 332 /* dram size */ 333 u32 dq_odt; 334 u32 ca_odt; 335 u32 ds_pdds; 336 u32 vref_ca[2]; 337 u32 vref_dq[2]; 338 339 /* phy side */ 340 u32 wr_dq_drv; 341 u32 wr_ca_drv; 342 u32 wr_ckcs_drv; 343 u32 rd_odt; 344 u32 rd_odt_up_en; 345 u32 rd_odt_down_en; 346 u32 vref_inner; 347 u32 vref_out; 348 u32 lp4_drv_pd_en; 349 350 struct sdram_msch_timings noc_timings; 351 }; 352 353 #define MAX_IDX (4) 354 #define FSP_FLAG (0xfead0001) 355 #define SHARE_MEM_BASE (0x100000) 356 /* 357 * Borrow share memory space to temporarily store FSP parame. 358 * In the stage of DDR init write FSP parame to this space. 359 * In the stage of trust init move FSP parame to SRAM space 360 * from share memory space. 361 */ 362 #define FSP_PARAM_STORE_ADDR (SHARE_MEM_BASE) 363 364 #endif /* _ASM_ARCH_SDRAM_RK1126_H */ 365