1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 3 /* Machine Specific Values for SMDK5420 board based on Exynos5 */ 4 5 #ifndef CPU_SAMSUNG_EXYNOS5420_SETUP_H 6 #define CPU_SAMSUNG_EXYNOS5420_SETUP_H 7 8 struct exynos5_dmc; 9 enum ddr_mode; 10 struct exynos5_phy_control; 11 12 #define NOT_AVAILABLE 0 13 #define DATA_MASK 0xFFFFF 14 15 #define ENABLE_BIT 0x1 16 #define DISABLE_BIT 0x0 17 #define CA_SWAP_EN (1 << 0) 18 19 /* TZPC : Register Offsets */ 20 #define TZPC0_BASE 0x10100000 21 #define TZPC1_BASE 0x10110000 22 #define TZPC2_BASE 0x10120000 23 #define TZPC3_BASE 0x10130000 24 #define TZPC4_BASE 0x10140000 25 #define TZPC5_BASE 0x10150000 26 #define TZPC6_BASE 0x10160000 27 #define TZPC7_BASE 0x10170000 28 #define TZPC8_BASE 0x10180000 29 #define TZPC9_BASE 0x10190000 30 31 #define APLL_FOUT (1 << 0) 32 #define KPLL_FOUT (1 << 0) 33 34 #define CLK_DIV_CPERI1_VAL 0x3f3f0000 35 36 /* APLL_CON1 */ 37 #define APLL_CON1_VAL (0x0020f300) 38 39 /* MPLL_CON1 */ 40 #define MPLL_CON1_VAL (0x0020f300) 41 42 /* CPLL_CON1 */ 43 #define CPLL_CON1_VAL (0x0020f300) 44 45 /* DPLL_CON1 */ 46 #define DPLL_CON1_VAL (0x0020f300) 47 48 /* GPLL_CON1 */ 49 #define GPLL_CON1_VAL (NOT_AVAILABLE) 50 51 /* EPLL_CON1, CON2 */ 52 #define EPLL_CON1_VAL 0x00000000 53 #define EPLL_CON2_VAL 0x00000080 54 55 /* VPLL_CON1, CON2 */ 56 #define VPLL_CON1_VAL 0x0020f300 57 #define VPLL_CON2_VAL NOT_AVAILABLE 58 59 /* RPLL_CON1, CON2 */ 60 #define RPLL_CON1_VAL 0x00000000 61 #define RPLL_CON2_VAL 0x00000080 62 63 /* BPLL_CON1 */ 64 #define BPLL_CON1_VAL 0x0020f300 65 66 /* SPLL_CON1 */ 67 #define SPLL_CON1_VAL 0x0020f300 68 69 /* IPLL_CON1 */ 70 #define IPLL_CON1_VAL 0x00000080 71 72 /* KPLL_CON1 */ 73 #define KPLL_CON1_VAL 0x200000 74 75 /* Set PLL */ 76 #define set_pll(mdiv, pdiv, sdiv) (1<<31 | mdiv<<16 | pdiv<<8 | sdiv) 77 78 /* CLK_SRC_CPU */ 79 /* 0 = MOUTAPLL, 1 = SCLKMPLL */ 80 #define MUX_HPM_SEL 1 81 #define MUX_CPU_SEL 0 82 #define MUX_APLL_SEL 1 83 84 #define CLK_SRC_CPU_VAL ((MUX_HPM_SEL << 20) \ 85 | (MUX_CPU_SEL << 16) \ 86 | (MUX_APLL_SEL)) 87 88 /* MEMCONTROL register bit fields */ 89 #define DMC_MEMCONTROL_CLK_STOP_DISABLE (0 << 0) 90 #define DMC_MEMCONTROL_DPWRDN_DISABLE (0 << 1) 91 #define DMC_MEMCONTROL_DPWRDN_ACTIVE_PRECHARGE (0 << 2) 92 #define DMC_MEMCONTROL_DSREF_DISABLE (0 << 5) 93 #define DMC_MEMCONTROL_DSREF_ENABLE (1 << 5) 94 #define DMC_MEMCONTROL_ADD_LAT_PALL_CYCLE(x) (x << 6) 95 96 #define DMC_MEMCONTROL_MEM_TYPE_LPDDR3 (7 << 8) 97 #define DMC_MEMCONTROL_MEM_TYPE_DDR3 (6 << 8) 98 #define DMC_MEMCONTROL_MEM_TYPE_LPDDR2 (5 << 8) 99 100 #define DMC_MEMCONTROL_MEM_WIDTH_32BIT (2 << 12) 101 102 #define DMC_MEMCONTROL_NUM_CHIP_1 (0 << 16) 103 #define DMC_MEMCONTROL_NUM_CHIP_2 (1 << 16) 104 105 #define DMC_MEMCONTROL_BL_8 (3 << 20) 106 #define DMC_MEMCONTROL_BL_4 (2 << 20) 107 108 #define DMC_MEMCONTROL_PZQ_DISABLE (0 << 24) 109 110 #define DMC_MEMCONTROL_MRR_BYTE_7_0 (0 << 25) 111 #define DMC_MEMCONTROL_MRR_BYTE_15_8 (1 << 25) 112 #define DMC_MEMCONTROL_MRR_BYTE_23_16 (2 << 25) 113 #define DMC_MEMCONTROL_MRR_BYTE_31_24 (3 << 25) 114 115 /* MEMCONFIG0 register bit fields */ 116 #define DMC_MEMCONFIGx_CHIP_MAP_INTERLEAVED (1 << 12) 117 #define DMC_MEMCONFIG_CHIP_MAP_SPLIT (2 << 12) 118 #define DMC_MEMCONFIGx_CHIP_COL_10 (3 << 8) 119 #define DMC_MEMCONFIGx_CHIP_ROW_14 (2 << 4) 120 #define DMC_MEMCONFIGx_CHIP_ROW_15 (3 << 4) 121 #define DMC_MEMCONFIGx_CHIP_ROW_16 (4 << 4) 122 #define DMC_MEMCONFIGx_CHIP_BANK_8 (3 << 0) 123 124 #define DMC_MEMBASECONFIG0_VAL DMC_MEMBASECONFIG_VAL(0x40) 125 #define DMC_MEMBASECONFIG1_VAL DMC_MEMBASECONFIG_VAL(0x80) 126 127 #define DMC_PRECHCONFIG_VAL 0xFF000000 128 #define DMC_PWRDNCONFIG_VAL 0xFFFF00FF 129 130 #define DMC_CONCONTROL_RESET_VAL 0x0FFF0000 131 #define DFI_INIT_START (1 << 28) 132 #define EMPTY (1 << 8) 133 #define AREF_EN (1 << 5) 134 135 #define DFI_INIT_COMPLETE_CHO (1 << 2) 136 #define DFI_INIT_COMPLETE_CH1 (1 << 3) 137 138 #define RDLVL_COMPLETE_CHO (1 << 14) 139 #define RDLVL_COMPLETE_CH1 (1 << 15) 140 141 #define CLK_STOP_EN (1 << 0) 142 #define DPWRDN_EN (1 << 1) 143 #define DSREF_EN (1 << 5) 144 145 /* COJCONTROL register bit fields */ 146 #define DMC_CONCONTROL_IO_PD_CON_DISABLE (0 << 3) 147 #define DMC_CONCONTROL_AREF_EN_DISABLE (0 << 5) 148 #define DMC_CONCONTROL_RD_FETCH_DISABLE (0x0 << 12) 149 #define DMC_CONCONTROL_TIMEOUT_LEVEL0 (0xFFF << 16) 150 #define DMC_CONCONTROL_DFI_INIT_START_DISABLE (0 << 28) 151 152 /* CLK_FSYS */ 153 #define CLK_SRC_FSYS0_VAL 0x33033300 154 #define CLK_DIV_FSYS0_VAL 0x0 155 #define CLK_DIV_FSYS1_VAL 0x04f13c4f 156 #define CLK_DIV_FSYS2_VAL 0x041d0000 157 158 #define DMC_CONCONTROL_IO_PD_CON(x) (x << 6) 159 160 /* CLK_DIV_CPU1 */ 161 #define HPM_RATIO 0x2 162 #define COPY_RATIO 0x0 163 164 /* CLK_DIV_CPU1 = 0x00000003 */ 165 #define CLK_DIV_CPU1_VAL ((HPM_RATIO << 4) \ 166 | (COPY_RATIO)) 167 168 /* CLK_SRC_CORE0 */ 169 #define CLK_SRC_CORE0_VAL 0x00000000 170 171 /* CLK_SRC_CORE1 */ 172 #define CLK_SRC_CORE1_VAL 0x100 173 174 /* CLK_DIV_CORE0 */ 175 #define CLK_DIV_CORE0_VAL 0x00120000 176 177 /* CLK_DIV_CORE1 */ 178 #define CLK_DIV_CORE1_VAL 0x07070700 179 180 /* CLK_DIV_SYSRGT */ 181 #define CLK_DIV_SYSRGT_VAL 0x00000111 182 183 /* CLK_DIV_ACP */ 184 #define CLK_DIV_ACP_VAL 0x12 185 186 /* CLK_DIV_SYSLFT */ 187 #define CLK_DIV_SYSLFT_VAL 0x00000311 188 189 /* CLK_SRC_CDREX */ 190 #define CLK_SRC_CDREX_VAL 0x00000001 191 #define MUX_MCLK_CDR_MSPLL (1 << 4) 192 #define MUX_BPLL_SEL_FOUTBPLL (1 << 0) 193 #define BPLL_SEL_MASK 0x7 194 #define FOUTBPLL 2 195 196 /* CLK_DIV_CDREX */ 197 #define CLK_DIV_CDREX0_VAL 0x30010100 198 #define CLK_DIV_CDREX1_VAL 0x300 199 200 #define CLK_DIV_CDREX_VAL 0x17010100 201 202 /* CLK_DIV_CPU0_VAL */ 203 #define CLK_DIV_CPU0_VAL 0x01440020 204 205 /* CLK_SRC_TOP */ 206 #define CLK_SRC_TOP0_VAL 0x11101102 207 #define CLK_SRC_TOP1_VAL 0x00200000 208 #define CLK_SRC_TOP2_VAL 0x11101010 209 #define CLK_SRC_TOP3_VAL 0x11111111 210 #define CLK_SRC_TOP4_VAL 0x11110111 211 #define CLK_SRC_TOP5_VAL 0x11111111 212 #define CLK_SRC_TOP6_VAL 0x11110111 213 #define CLK_SRC_TOP7_VAL 0x00022200 214 215 /* CLK_DIV_TOP */ 216 #define CLK_DIV_TOP0_VAL 0x22512211 217 #define CLK_DIV_TOP1_VAL 0x13200900 218 #define CLK_DIV_TOP2_VAL 0x11101110 219 220 /* APLL_LOCK */ 221 #define APLL_LOCK_VAL (0x320) 222 /* MPLL_LOCK */ 223 #define MPLL_LOCK_VAL (0x258) 224 /* BPLL_LOCK */ 225 #define BPLL_LOCK_VAL (0x258) 226 /* CPLL_LOCK */ 227 #define CPLL_LOCK_VAL (0x190) 228 /* DPLL_LOCK */ 229 #define DPLL_LOCK_VAL (0x190) 230 /* GPLL_LOCK */ 231 #define GPLL_LOCK_VAL NOT_AVAILABLE 232 /* IPLL_LOCK */ 233 #define IPLL_LOCK_VAL (0x320) 234 /* KPLL_LOCK */ 235 #define KPLL_LOCK_VAL (0x258) 236 /* SPLL_LOCK */ 237 #define SPLL_LOCK_VAL (0x320) 238 /* RPLL_LOCK */ 239 #define RPLL_LOCK_VAL (0x2328) 240 /* EPLL_LOCK */ 241 #define EPLL_LOCK_VAL (0x2328) 242 /* VPLL_LOCK */ 243 #define VPLL_LOCK_VAL (0x258) 244 245 #define MUX_APLL_SEL_MASK (1 << 0) 246 #define MUX_MPLL_SEL_MASK (1 << 8) 247 #define MPLL_SEL_MOUT_MPLLFOUT (2 << 8) 248 #define MUX_CPLL_SEL_MASK (1 << 8) 249 #define MUX_EPLL_SEL_MASK (1 << 12) 250 #define MUX_VPLL_SEL_MASK (1 << 16) 251 #define MUX_GPLL_SEL_MASK (1 << 28) 252 #define MUX_BPLL_SEL_MASK (1 << 0) 253 #define MUX_HPM_SEL_MASK (1 << 20) 254 #define HPM_SEL_SCLK_MPLL (1 << 21) 255 #define PLL_LOCKED (1 << 29) 256 #define APLL_CON0_LOCKED (1 << 29) 257 #define MPLL_CON0_LOCKED (1 << 29) 258 #define BPLL_CON0_LOCKED (1 << 29) 259 #define CPLL_CON0_LOCKED (1 << 29) 260 #define EPLL_CON0_LOCKED (1 << 29) 261 #define GPLL_CON0_LOCKED (1 << 29) 262 #define VPLL_CON0_LOCKED (1 << 29) 263 #define CLK_REG_DISABLE 0x0 264 #define TOP2_VAL 0x0110000 265 266 /* CLK_SRC_LEX */ 267 #define CLK_SRC_LEX_VAL 0x0 268 269 /* CLK_DIV_LEX */ 270 #define CLK_DIV_LEX_VAL 0x10 271 272 /* CLK_DIV_R0X */ 273 #define CLK_DIV_R0X_VAL 0x10 274 275 /* CLK_DIV_L0X */ 276 #define CLK_DIV_R1X_VAL 0x10 277 278 /* CLK_DIV_ISP2 */ 279 #define CLK_DIV_ISP2_VAL 0x1 280 281 /* CLK_SRC_KFC */ 282 #define SRC_KFC_HPM_SEL (1 << 15) 283 284 /* CLK_SRC_KFC */ 285 #define CLK_SRC_KFC_VAL 0x00008001 286 287 /* CLK_DIV_KFC */ 288 #define CLK_DIV_KFC_VAL 0x03300110 289 290 /* CLK_DIV2_RATIO */ 291 #define CLK_DIV2_RATIO 0x10111150 292 293 /* CLK_DIV4_RATIO */ 294 #define CLK_DIV4_RATIO 0x00000003 295 296 /* CLK_DIV_G2D */ 297 #define CLK_DIV_G2D 0x00000010 298 299 /* CLK_SRC_PERIC0 */ 300 #define SPDIF_SEL 1 301 #define PWM_SEL 3 302 #define UART4_SEL 3 303 #define UART3_SEL 3 304 #define UART2_SEL 3 305 #define UART1_SEL 3 306 #define UART0_SEL 3 307 /* SRC_CLOCK = SCLK_RPLL */ 308 #define CLK_SRC_PERIC0_VAL ((SPDIF_SEL << 28) \ 309 | (PWM_SEL << 24) \ 310 | (UART4_SEL << 20) \ 311 | (UART3_SEL << 16) \ 312 | (UART2_SEL << 12) \ 313 | (UART1_SEL << 8) \ 314 | (UART0_SEL << 4)) 315 316 /* CLK_SRC_PERIC1 */ 317 /* SRC_CLOCK = SCLK_MPLL */ 318 #define SPI0_SEL 3 319 #define SPI1_SEL 3 320 #define SPI2_SEL 3 321 /* SRC_CLOCK = SCLK_EPLL */ 322 #define AUDIO0_SEL 6 323 #define AUDIO1_SEL 6 324 #define AUDIO2_SEL 6 325 #define CLK_SRC_PERIC1_VAL ((SPI2_SEL << 28) \ 326 | (SPI1_SEL << 24) \ 327 | (SPI0_SEL << 20) \ 328 | (AUDIO2_SEL << 16) \ 329 | (AUDIO2_SEL << 12) \ 330 | (AUDIO2_SEL << 8)) 331 332 /* CLK_SRC_ISP */ 333 #define CLK_SRC_ISP_VAL 0x33366000 334 #define CLK_DIV_ISP0_VAL 0x13131300 335 #define CLK_DIV_ISP1_VAL 0xbb110202 336 337 /* SCLK_DIV_ISP - set SPI0/1 to 0xf = divide by 16 */ 338 #define SPI0_ISP_RATIO 0xf 339 #define SPI1_ISP_RATIO 0xf 340 #define SCLK_DIV_ISP_VAL (SPI1_ISP_RATIO << 12) \ 341 | (SPI0_ISP_RATIO << 0) 342 343 /* CLK_DIV_PERIL0 */ 344 #define PWM_RATIO 8 345 #define UART4_RATIO 9 346 #define UART3_RATIO 9 347 #define UART2_RATIO 9 348 #define UART1_RATIO 9 349 #define UART0_RATIO 9 350 351 #define CLK_DIV_PERIC0_VAL ((PWM_RATIO << 28) \ 352 | (UART4_RATIO << 24) \ 353 | (UART3_RATIO << 20) \ 354 | (UART2_RATIO << 16) \ 355 | (UART1_RATIO << 12) \ 356 | (UART0_RATIO << 8)) 357 358 /* CLK_DIV_PERIC1 */ 359 #define SPI2_RATIO 0x1 360 #define SPI1_RATIO 0x1 361 #define SPI0_RATIO 0x1 362 #define CLK_DIV_PERIC1_VAL ((SPI2_RATIO << 28) \ 363 | (SPI1_RATIO << 24) \ 364 | (SPI0_RATIO << 20)) 365 366 /* CLK_DIV_PERIC2 */ 367 #define PCM2_RATIO 0x3 368 #define PCM1_RATIO 0x3 369 #define CLK_DIV_PERIC2_VAL ((PCM2_RATIO << 24) \ 370 | (PCM1_RATIO << 16)) 371 372 /* CLK_DIV_PERIC3 */ 373 #define AUDIO2_RATIO 0x5 374 #define AUDIO1_RATIO 0x5 375 #define AUDIO0_RATIO 0x5 376 #define CLK_DIV_PERIC3_VAL ((AUDIO2_RATIO << 28) \ 377 | (AUDIO1_RATIO << 24) \ 378 | (AUDIO0_RATIO << 20)) 379 380 /* CLK_DIV_PERIC4 */ 381 #define SPI2_PRE_RATIO 0x3 382 #define SPI1_PRE_RATIO 0x3 383 #define SPI0_PRE_RATIO 0x3 384 #define CLK_DIV_PERIC4_VAL ((SPI2_PRE_RATIO << 24) \ 385 | (SPI1_PRE_RATIO << 16) \ 386 | (SPI0_PRE_RATIO << 8)) 387 388 /* CLK_DIV_FSYS2 */ 389 #define MMC2_RATIO_MASK 0xf 390 #define MMC2_RATIO_VAL 0x3 391 #define MMC2_RATIO_OFFSET 0 392 393 #define MMC2_PRE_RATIO_MASK 0xff 394 #define MMC2_PRE_RATIO_VAL 0x9 395 #define MMC2_PRE_RATIO_OFFSET 8 396 397 #define MMC3_RATIO_MASK 0xf 398 #define MMC3_RATIO_VAL 0x1 399 #define MMC3_RATIO_OFFSET 16 400 401 #define MMC3_PRE_RATIO_MASK 0xff 402 #define MMC3_PRE_RATIO_VAL 0x0 403 #define MMC3_PRE_RATIO_OFFSET 24 404 405 /* CLK_SRC_LEX */ 406 #define CLK_SRC_LEX_VAL 0x0 407 408 /* CLK_DIV_LEX */ 409 #define CLK_DIV_LEX_VAL 0x10 410 411 /* CLK_DIV_R0X */ 412 #define CLK_DIV_R0X_VAL 0x10 413 414 /* CLK_DIV_L0X */ 415 #define CLK_DIV_R1X_VAL 0x10 416 417 /* CLK_DIV_ISP2 */ 418 #define CLK_DIV_ISP2_VAL 0x1 419 420 /* CLK_SRC_DISP1_0 */ 421 #define CLK_SRC_DISP1_0_VAL 0x10006000 422 #define CLK_DIV_DISP1_0_VAL 0x01050210 423 424 /* 425 * DIV_DISP1_0 426 * For DP, divisor should be 2 427 */ 428 #define CLK_DIV_DISP1_0_FIMD1 (2 << 0) 429 430 /* CLK_GATE_IP_DISP1 */ 431 #define CLK_GATE_DP1_ALLOW (1 << 4) 432 433 /* CLK_GATE_IP_SYSRGT */ 434 #define CLK_C2C_MASK (1 << 1) 435 436 /* CLK_GATE_IP_ACP */ 437 #define CLK_SMMUG2D_MASK (1 << 7) 438 #define CLK_SMMUSSS_MASK (1 << 6) 439 #define CLK_SMMUMDMA_MASK (1 << 5) 440 #define CLK_ID_REMAPPER_MASK (1 << 4) 441 #define CLK_G2D_MASK (1 << 3) 442 #define CLK_SSS_MASK (1 << 2) 443 #define CLK_MDMA_MASK (1 << 1) 444 #define CLK_SECJTAG_MASK (1 << 0) 445 446 /* CLK_GATE_BUS_SYSLFT */ 447 #define CLK_EFCLK_MASK (1 << 16) 448 449 /* CLK_GATE_IP_ISP0 */ 450 #define CLK_UART_ISP_MASK (1 << 31) 451 #define CLK_WDT_ISP_MASK (1 << 30) 452 #define CLK_PWM_ISP_MASK (1 << 28) 453 #define CLK_MTCADC_ISP_MASK (1 << 27) 454 #define CLK_I2C1_ISP_MASK (1 << 26) 455 #define CLK_I2C0_ISP_MASK (1 << 25) 456 #define CLK_MPWM_ISP_MASK (1 << 24) 457 #define CLK_MCUCTL_ISP_MASK (1 << 23) 458 #define CLK_INT_COMB_ISP_MASK (1 << 22) 459 #define CLK_SMMU_MCUISP_MASK (1 << 13) 460 #define CLK_SMMU_SCALERP_MASK (1 << 12) 461 #define CLK_SMMU_SCALERC_MASK (1 << 11) 462 #define CLK_SMMU_FD_MASK (1 << 10) 463 #define CLK_SMMU_DRC_MASK (1 << 9) 464 #define CLK_SMMU_ISP_MASK (1 << 8) 465 #define CLK_GICISP_MASK (1 << 7) 466 #define CLK_ARM9S_MASK (1 << 6) 467 #define CLK_MCUISP_MASK (1 << 5) 468 #define CLK_SCALERP_MASK (1 << 4) 469 #define CLK_SCALERC_MASK (1 << 3) 470 #define CLK_FD_MASK (1 << 2) 471 #define CLK_DRC_MASK (1 << 1) 472 #define CLK_ISP_MASK (1 << 0) 473 474 /* CLK_GATE_IP_ISP1 */ 475 #define CLK_SPI1_ISP_MASK (1 << 13) 476 #define CLK_SPI0_ISP_MASK (1 << 12) 477 #define CLK_SMMU3DNR_MASK (1 << 7) 478 #define CLK_SMMUDIS1_MASK (1 << 6) 479 #define CLK_SMMUDIS0_MASK (1 << 5) 480 #define CLK_SMMUODC_MASK (1 << 4) 481 #define CLK_3DNR_MASK (1 << 2) 482 #define CLK_DIS_MASK (1 << 1) 483 #define CLK_ODC_MASK (1 << 0) 484 485 /* CLK_GATE_IP_GSCL */ 486 #define CLK_SMMUFIMC_LITE2_MASK (1 << 20) 487 #define CLK_SMMUFIMC_LITE1_MASK (1 << 12) 488 #define CLK_SMMUFIMC_LITE0_MASK (1 << 11) 489 #define CLK_SMMUGSCL3_MASK (1 << 10) 490 #define CLK_SMMUGSCL2_MASK (1 << 9) 491 #define CLK_SMMUGSCL1_MASK (1 << 8) 492 #define CLK_SMMUGSCL0_MASK (1 << 7) 493 #define CLK_GSCL_WRAP_B_MASK (1 << 6) 494 #define CLK_GSCL_WRAP_A_MASK (1 << 5) 495 #define CLK_CAMIF_TOP_MASK (1 << 4) 496 #define CLK_GSCL3_MASK (1 << 3) 497 #define CLK_GSCL2_MASK (1 << 2) 498 #define CLK_GSCL1_MASK (1 << 1) 499 #define CLK_GSCL0_MASK (1 << 0) 500 501 /* CLK_GATE_IP_MFC */ 502 #define CLK_SMMUMFCR_MASK (1 << 2) 503 #define CLK_SMMUMFCL_MASK (1 << 1) 504 #define CLK_MFC_MASK (1 << 0) 505 506 #define SCLK_MPWM_ISP_MASK (1 << 0) 507 508 /* CLK_GATE_IP_DISP1 */ 509 #define CLK_SMMUTVX_MASK (1 << 9) 510 #define CLK_ASYNCTVX_MASK (1 << 7) 511 #define CLK_HDMI_MASK (1 << 6) 512 #define CLK_MIXER_MASK (1 << 5) 513 #define CLK_DSIM1_MASK (1 << 3) 514 515 /* AUDIO CLK SEL */ 516 #define AUDIO0_SEL_EPLL (0x6 << 28) 517 #define AUDIO0_RATIO 0x5 518 #define PCM0_RATIO 0x3 519 #define DIV_MAU_VAL (PCM0_RATIO << 24 | AUDIO0_RATIO << 20) 520 521 /* CLK_GATE_IP_GEN */ 522 #define CLK_SMMUMDMA1_MASK (1 << 9) 523 #define CLK_SMMUJPEG_MASK (1 << 7) 524 #define CLK_SMMUROTATOR_MASK (1 << 6) 525 #define CLK_MDMA1_MASK (1 << 4) 526 #define CLK_JPEG_MASK (1 << 2) 527 #define CLK_ROTATOR_MASK (1 << 1) 528 529 /* CLK_GATE_IP_FSYS */ 530 #define CLK_WDT_IOP_MASK (1 << 30) 531 #define CLK_SMMUMCU_IOP_MASK (1 << 26) 532 #define CLK_SATA_PHY_I2C_MASK (1 << 25) 533 #define CLK_SATA_PHY_CTRL_MASK (1 << 24) 534 #define CLK_MCUCTL_MASK (1 << 23) 535 #define CLK_NFCON_MASK (1 << 22) 536 #define CLK_SMMURTIC_MASK (1 << 11) 537 #define CLK_RTIC_MASK (1 << 9) 538 #define CLK_MIPI_HSI_MASK (1 << 8) 539 #define CLK_USBOTG_MASK (1 << 7) 540 #define CLK_SATA_MASK (1 << 6) 541 #define CLK_PDMA1_MASK (1 << 2) 542 #define CLK_PDMA0_MASK (1 << 1) 543 #define CLK_MCU_IOP_MASK (1 << 0) 544 545 /* CLK_GATE_IP_PERIC */ 546 #define CLK_HS_I2C3_MASK (1 << 31) 547 #define CLK_HS_I2C2_MASK (1 << 30) 548 #define CLK_HS_I2C1_MASK (1 << 29) 549 #define CLK_HS_I2C0_MASK (1 << 28) 550 #define CLK_AC97_MASK (1 << 27) 551 #define CLK_SPDIF_MASK (1 << 26) 552 #define CLK_PCM2_MASK (1 << 23) 553 #define CLK_PCM1_MASK (1 << 22) 554 #define CLK_I2S2_MASK (1 << 21) 555 #define CLK_I2S1_MASK (1 << 20) 556 #define CLK_SPI2_MASK (1 << 18) 557 #define CLK_SPI0_MASK (1 << 16) 558 #define CLK_I2CHDMI_MASK (1 << 14) 559 #define CLK_I2C7_MASK (1 << 13) 560 #define CLK_I2C6_MASK (1 << 12) 561 #define CLK_I2C5_MASK (1 << 11) 562 #define CLK_I2C4_MASK (1 << 10) 563 #define CLK_I2C3_MASK (1 << 9) 564 #define CLK_I2C2_MASK (1 << 8) 565 #define CLK_I2C1_MASK (1 << 7) 566 #define CLK_I2C0_MASK (1 << 6) 567 568 /* CLK_GATE_IP_PERIS */ 569 #define CLK_RTC_MASK (1 << 20) 570 #define CLK_TZPC9_MASK (1 << 15) 571 #define CLK_TZPC8_MASK (1 << 14) 572 #define CLK_TZPC7_MASK (1 << 13) 573 #define CLK_TZPC6_MASK (1 << 12) 574 #define CLK_TZPC5_MASK (1 << 11) 575 #define CLK_TZPC4_MASK (1 << 10) 576 #define CLK_TZPC3_MASK (1 << 9) 577 #define CLK_TZPC2_MASK (1 << 8) 578 #define CLK_TZPC1_MASK (1 << 7) 579 #define CLK_TZPC0_MASK (1 << 6) 580 #define CLK_CHIPID_MASK (1 << 0) 581 582 /* CLK_GATE_BLOCK */ 583 #define CLK_ACP_MASK (1 << 7) 584 585 /* CLK_GATE_IP_CDREX */ 586 #define CLK_TZASC_DRBXW_MASK (1 << 23) 587 #define CLK_TZASC_DRBXR_MASK (1 << 22) 588 #define CLK_TZASC_XLBXW_MASK (1 << 21) 589 #define CLK_TZASC_XLBXR_MASK (1 << 20) 590 #define CLK_TZASC_XR1BXW_MASK (1 << 19) 591 #define CLK_TZASC_XR1BXR_MASK (1 << 18) 592 #define CLK_DPHY1_MASK (1 << 5) 593 #define CLK_DPHY0_MASK (1 << 4) 594 595 /* 596 * TZPC Register Value : 597 * R0SIZE: 0x0 : Size of secured ram 598 */ 599 #define R0SIZE 0x0 600 601 /* 602 * TZPC Decode Protection Register Value : 603 * DECPROTXSET: 0xFF : Set Decode region to non-secure 604 */ 605 #define DECPROTXSET 0xFF 606 607 #define LPDDR3PHY_CTRL_PHY_RESET (1 << 0) 608 #define LPDDR3PHY_CTRL_PHY_RESET_OFF (0 << 0) 609 610 /* FIXME(dhendrix): misleading name. The reset value is 0x17021a40, bits 12:11 611 + default to 0x3 which indicates LPDDR3. We want DDR3, so we use 0x1. */ 612 #define PHY_CON0_RESET_VAL 0x17020a40 613 #define P0_CMD_EN (1 << 14) 614 #define BYTE_RDLVL_EN (1 << 13) 615 #define CTRL_SHGATE (1 << 8) 616 617 #define PHY_CON1_RESET_VAL 0x09210100 618 #define RDLVL_PASS_ADJ_VAL 0x6 619 #define RDLVL_PASS_ADJ_OFFSET 16 620 #define CTRL_GATEDURADJ_MASK (0xf << 20) 621 #define READ_LEVELLING_DDR3 0x0100 622 623 #define PHY_CON2_RESET_VAL 0x00010004 624 #define INIT_DESKEW_EN (1 << 6) 625 #define DLL_DESKEW_EN (1 << 12) 626 #define RDLVL_GATE_EN (1 << 24) 627 #define RDLVL_EN (1 << 25) 628 #define RDLVL_INCR_ADJ (0x1 << 16) 629 630 /* DREX_PAUSE */ 631 #define DREX_PAUSE_EN (1 << 0) 632 633 #define BYPASS_EN (1 << 22) 634 635 /********-----MEMMORY VAL----------***/ 636 #define PHY_CON0_VAL 0x17021A00 637 638 #define PHY_CON12_RESET_VAL 0x10100070 639 #define PHY_CON12_VAL 0x10107F50 640 #define CTRL_START (1 << 6) 641 #define CTRL_DLL_ON (1 << 5) 642 #define CTRL_FORCE_MASK (0x7F << 8) 643 #define CTRL_LOCK_COARSE_MASK (0x7F << 10) 644 645 #define CTRL_OFFSETD_RESET_VAL 0x8 646 #define CTRL_OFFSETD_VAL 0x7F 647 648 #define CTRL_OFFSETR0 0x7F 649 #define CTRL_OFFSETR1 0x7F 650 #define CTRL_OFFSETR2 0x7F 651 #define CTRL_OFFSETR3 0x7F 652 #define PHY_CON4_VAL (CTRL_OFFSETR0 << 0 | \ 653 CTRL_OFFSETR1 << 8 | \ 654 CTRL_OFFSETR2 << 16 | \ 655 CTRL_OFFSETR3 << 24) 656 #define PHY_CON4_RESET_VAL 0x08080808 657 658 #define CTRL_OFFSETW0 0x7F 659 #define CTRL_OFFSETW1 0x7F 660 #define CTRL_OFFSETW2 0x7F 661 #define CTRL_OFFSETW3 0x7F 662 #define PHY_CON6_VAL (CTRL_OFFSETW0 << 0 | \ 663 CTRL_OFFSETW1 << 8 | \ 664 CTRL_OFFSETW2 << 16 | \ 665 CTRL_OFFSETW3 << 24) 666 #define PHY_CON6_RESET_VAL 0x08080808 667 668 #define PHY_CON14_RESET_VAL 0x001F0000 669 #define CTRL_PULLD_DQS 0xF 670 #define CTRL_PULLD_DQS_OFFSET 0 671 672 /*ZQ Configurations */ 673 #define PHY_CON16_RESET_VAL 0x08000304 674 675 #define ZQ_CLK_EN (1 << 27) 676 #define ZQ_CLK_DIV_EN (1 << 18) 677 #define ZQ_MANUAL_MODE_OFFSET 2 678 #define ZQ_LONG_CALIBRATION 0x1 679 #define ZQ_MANUAL_STR (1 << 1) 680 #define ZQ_DONE (1 << 0) 681 #define ZQ_MODE_DDS_OFFSET 24 682 683 #define LONG_CALIBRATION (ZQ_LONG_CALIBRATION << ZQ_MANUAL_MODE_OFFSET) 684 685 #define CTRL_RDLVL_GATE_ENABLE 1 686 #define CTRL_RDLVL_GATE_DISABLE 0 687 688 #define CTRL_RDLVL_DATA_ENABLE (1 << 1) 689 /* Direct Command */ 690 #define DIRECT_CMD_NOP 0x07000000 691 #define DIRECT_CMD_PALL 0x01000000 692 #define DIRECT_CMD_ZQINIT 0x0a000000 693 #define DIRECT_CMD_CHANNEL_SHIFT 28 694 #define DIRECT_CMD_CHIP_SHIFT 20 695 #define DIRECT_CMD_BANK_SHIFT 16 696 #define DIRECT_CMD_REFA (5 << 24) 697 #define DIRECT_CMD_MRS1 0x71C00 698 #define DIRECT_CMD_MRS2 0x10BFC 699 #define DIRECT_CMD_MRS3 0x0050C 700 #define DIRECT_CMD_MRS4 0x00868 701 #define DIRECT_CMD_MRS5 0x00C04 702 703 /* Drive Strength */ 704 #define IMPEDANCE_48_OHM 4 705 #define IMPEDANCE_40_OHM 5 706 #define IMPEDANCE_34_OHM 6 707 #define IMPEDANCE_30_OHM 7 708 #define PHY_CON39_VAL_48_OHM 0x09240924 709 #define PHY_CON39_VAL_40_OHM 0x0B6D0B6D 710 #define PHY_CON39_VAL_34_OHM 0x0DB60DB6 711 #define PHY_CON39_VAL_30_OHM 0x0FFF0FFF 712 713 #define CTRL_BSTLEN_OFFSET 8 714 #define CTRL_RDLAT_OFFSET 0 715 716 #define CMD_DEFAULT_LPDDR3 0xF 717 #define CMD_DEFAULT_OFFSET 0 718 #define T_WRDATA_EN 0x7 719 #define T_WRDATA_EN_DDR3 0x8 /* FIXME(dhendrix): 6 for DDR3? see T_wrdata_en */ 720 #define T_WRDATA_EN_OFFSET 16 721 #define T_WRDATA_EN_MASK 0x1f 722 723 #define PHY_CON31_VAL 0x0C183060 724 #define PHY_CON32_VAL 0x60C18306 725 #define PHY_CON33_VAL 0x00000030 726 727 #define PHY_CON31_RESET_VAL 0x0 728 #define PHY_CON32_RESET_VAL 0x0 729 #define PHY_CON33_RESET_VAL 0x0 730 731 #define SL_DLL_DYN_CON_EN (1 << 1) 732 #define FP_RESYNC (1 << 3) 733 #define CTRL_START (1 << 6) 734 735 #define DMC_AREF_EN (1 << 5) 736 #define DMC_CONCONTROL_EMPTY (1 << 8) 737 #define DFI_INIT_START (1 << 28) 738 739 #define DMC_MEMCONTROL_VAL 0x00312700 740 #define CLK_STOP_EN (1 << 0) 741 #define DPWRDN_EN (1 << 1) 742 #define DSREF_EN (1 << 5) 743 744 /* AXI base address mask */ 745 #define DMC_CHIP_MASK_256MB 0x7f0 746 #define DMC_CHIP_MASK_512MB 0x7e0 747 #define DMC_CHIP_MASK_1GB 0x7c0 748 #define DMC_CHIP_MASK_2GB 0x780 749 #define DMC_CHIP_MASK_4GB 0x700 750 751 #define MEMCONFIG_VAL 0x1323 752 #define PRECHCONFIG_DEFAULT_VAL 0xFF000000 753 #define PWRDNCONFIG_DEFAULT_VAL 0xFFFF00FF 754 755 #define DFI_INIT_COMPLETE (1 << 3) 756 757 #define BRBRSVCONTROL_VAL 0x00000033 758 #define BRBRSVCONFIG_VAL 0x88778877 759 760 /* Clock Gating Control (CGCONTROL) register */ 761 #define MEMIF_CG_EN (1 << 3) /* Memory interface clock gating */ 762 #define SCG_CG_EN (1 << 2) /* Scheduler clock gating */ 763 #define BUSIF_WR_CG_EN (1 << 1) /* Bus interface write channel clock gating */ 764 #define BUSIF_RD_CG_EN (1 << 0) /* Bus interface read channel clock gating */ 765 #define DMC_INTERNAL_CG (MEMIF_CG_EN | SCG_CG_EN | \ 766 BUSIF_WR_CG_EN | BUSIF_RD_CG_EN) 767 768 /* DMC PHY Control0 register */ 769 #define PHY_CONTROL0_RESET_VAL 0x0 770 #define MEM_TERM_EN (1 << 31) /* Termination enable for memory */ 771 #define PHY_TERM_EN (1 << 30) /* Termination enable for PHY */ 772 #define DMC_CTRL_SHGATE (1 << 29) /* Duration of DQS gating signal */ 773 #define CTRL_ATGATE (1 << 6) 774 #define FP_RSYNC (1 << 3) /* Force DLL resynchronization */ 775 776 /* Driver strength for CK, CKE, CS & CA */ 777 #define IMP_OUTPUT_DRV_40_OHM 0x5 778 #define IMP_OUTPUT_DRV_30_OHM 0x7 779 #define DA_3_DS_OFFSET 25 780 #define DA_2_DS_OFFSET 22 781 #define DA_1_DS_OFFSET 19 782 #define DA_0_DS_OFFSET 16 783 #define CA_CK_DRVR_DS_OFFSET 9 784 #define CA_CKE_DRVR_DS_OFFSET 6 785 #define CA_CS_DRVR_DS_OFFSET 3 786 #define CA_ADR_DRVR_DS_OFFSET 0 787 788 #define PHY_CON42_CTRL_BSTLEN_SHIFT 8 789 #define PHY_CON42_CTRL_RDLAT_SHIFT 0 790 791 struct mem_timings; 792 793 /* Errors that we can encounter in low-level setup */ 794 enum { 795 SETUP_ERR_OK, 796 SETUP_ERR_RDLV_COMPLETE_TIMEOUT = -1, 797 SETUP_ERR_ZQ_CALIBRATION_FAILURE = -2, 798 }; 799 800 /* Functions common between LPDDR2 and DDR3 */ 801 802 /* CPU info initialization code */ 803 void cpu_info_init(void); 804 805 void mem_ctrl_init(void); 806 /* 807 * Memory variant specific initialization code 808 * 809 * @param mem Memory timings for this memory type. 810 * @param mem_iv_size Memory interleaving size is a configurable parameter 811 * which the DMC uses to decide how to split a memory 812 * chunk into smaller chunks to support concurrent 813 * accesses; may vary across boards. 814 * @param mem_reset Reset memory during initialization. 815 * @return 0 if ok, SETUP_ERR_... if there is a problem 816 */ 817 int ddr3_mem_ctrl_init(struct mem_timings *mem, int interleave_size, int reset); 818 819 /* Memory variant specific initialization code for LPDDR3 */ 820 int lpddr3_mem_ctrl_init(int reset); 821 822 /* 823 * Configure ZQ I/O interface 824 * 825 * @param mem Memory timings for this memory type. 826 * @param phy0_ctrl Pointer to struct containing PHY0 control reg 827 * @param phy1_ctrl Pointer to struct containing PHY1 control reg 828 * @return 0 if ok, -1 on error 829 */ 830 int dmc_config_zq(struct mem_timings *mem, 831 struct exynos5_phy_control *phy0_ctrl, 832 struct exynos5_phy_control *phy1_ctrl); 833 834 /* 835 * Send NOP and MRS/EMRS Direct commands 836 * 837 * @param mem Memory timings for this memory type. 838 * @param dmc Pointer to struct of DMC registers 839 */ 840 void dmc_config_mrs(struct mem_timings *mem, struct exynos5_dmc *dmc); 841 842 /* 843 * Send PALL Direct commands 844 * 845 * @param mem Memory timings for this memory type. 846 * @param dmc Pointer to struct of DMC registers 847 */ 848 void dmc_config_prech(struct mem_timings *mem, struct exynos5_dmc *dmc); 849 850 /* 851 * Configure the memconfig and membaseconfig registers 852 * 853 * @param mem Memory timings for this memory type. 854 * @param exynos5_dmc Pointer to struct of DMC registers 855 */ 856 void dmc_config_memory(struct mem_timings *mem, struct exynos5_dmc *dmc); 857 858 /* 859 * Reset the DLL. This function is common between DDR3 and LPDDR2. 860 * However, the reset value is different. So we are passing a flag 861 * ddr_mode to distinguish between LPDDR2 and DDR3. 862 * 863 * @param exynos5_dmc Pointer to struct of DMC registers 864 * @param ddr_mode Type of DDR memory 865 */ 866 void update_reset_dll(struct exynos5_dmc *, enum ddr_mode); 867 #endif 868