1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Machine Specific Values for SMDK5250 board based on EXYNOS5 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2012 Samsung Electronics 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef _SMDK5250_SETUP_H 10*4882a593Smuzhiyun #define _SMDK5250_SETUP_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <config.h> 13*4882a593Smuzhiyun #include <asm/arch/dmc.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define NOT_AVAILABLE 0 16*4882a593Smuzhiyun #define DATA_MASK 0xFFFFF 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define ENABLE_BIT 0x1 19*4882a593Smuzhiyun #define DISABLE_BIT 0x0 20*4882a593Smuzhiyun #define CA_SWAP_EN (1 << 0) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun /* Set PLL */ 23*4882a593Smuzhiyun #define set_pll(mdiv, pdiv, sdiv) (1<<31 | mdiv<<16 | pdiv<<8 | sdiv) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* MEMCONTROL register bit fields */ 26*4882a593Smuzhiyun #define DMC_MEMCONTROL_CLK_STOP_DISABLE (0 << 0) 27*4882a593Smuzhiyun #define DMC_MEMCONTROL_DPWRDN_DISABLE (0 << 1) 28*4882a593Smuzhiyun #define DMC_MEMCONTROL_DPWRDN_ACTIVE_PRECHARGE (0 << 2) 29*4882a593Smuzhiyun #define DMC_MEMCONTROL_TP_DISABLE (0 << 4) 30*4882a593Smuzhiyun #define DMC_MEMCONTROL_DSREF_DISABLE (0 << 5) 31*4882a593Smuzhiyun #define DMC_MEMCONTROL_DSREF_ENABLE (1 << 5) 32*4882a593Smuzhiyun #define DMC_MEMCONTROL_ADD_LAT_PALL_CYCLE(x) (x << 6) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_TYPE_LPDDR3 (7 << 8) 35*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_TYPE_DDR3 (6 << 8) 36*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_TYPE_LPDDR2 (5 << 8) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define DMC_MEMCONTROL_MEM_WIDTH_32BIT (2 << 12) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #define DMC_MEMCONTROL_NUM_CHIP_1 (0 << 16) 41*4882a593Smuzhiyun #define DMC_MEMCONTROL_NUM_CHIP_2 (1 << 16) 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define DMC_MEMCONTROL_BL_8 (3 << 20) 44*4882a593Smuzhiyun #define DMC_MEMCONTROL_BL_4 (2 << 20) 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define DMC_MEMCONTROL_PZQ_DISABLE (0 << 24) 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_7_0 (0 << 25) 49*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_15_8 (1 << 25) 50*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_23_16 (2 << 25) 51*4882a593Smuzhiyun #define DMC_MEMCONTROL_MRR_BYTE_31_24 (3 << 25) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* MEMCONFIG0 register bit fields */ 54*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_MAP_INTERLEAVED (1 << 12) 55*4882a593Smuzhiyun #define DMC_MEMCONFIG_CHIP_MAP_SPLIT (2 << 12) 56*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_COL_10 (3 << 8) 57*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_ROW_14 (2 << 4) 58*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_ROW_15 (3 << 4) 59*4882a593Smuzhiyun #define DMC_MEMCONFIGX_CHIP_BANK_8 (3 << 0) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun #define DMC_MEMBASECONFIGX_CHIP_BASE(x) (x << 16) 62*4882a593Smuzhiyun #define DMC_MEMBASECONFIGX_CHIP_MASK(x) (x << 0) 63*4882a593Smuzhiyun #define DMC_MEMBASECONFIG_VAL(x) ( \ 64*4882a593Smuzhiyun DMC_MEMBASECONFIGX_CHIP_BASE(x) | \ 65*4882a593Smuzhiyun DMC_MEMBASECONFIGX_CHIP_MASK(0x780) \ 66*4882a593Smuzhiyun ) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* 69*4882a593Smuzhiyun * As we use channel interleaving, therefore value of the base address 70*4882a593Smuzhiyun * register must be set as half of the bus base address 71*4882a593Smuzhiyun * RAM start addess is 0x2000_0000 which means chip_base is 0x20, so 72*4882a593Smuzhiyun * we need to set half 0x10 to the membaseconfigx registers 73*4882a593Smuzhiyun * see exynos5420 UM section 17.17.3.21 for more. 74*4882a593Smuzhiyun */ 75*4882a593Smuzhiyun #define DMC_CHIP_BASE_0 0x10 76*4882a593Smuzhiyun #define DMC_CHIP_BASE_1 0x50 77*4882a593Smuzhiyun #define DMC_CHIP_MASK 0x7C0 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun #define DMC_MEMBASECONFIG0_VAL DMC_MEMBASECONFIG_VAL(0x40) 80*4882a593Smuzhiyun #define DMC_MEMBASECONFIG1_VAL DMC_MEMBASECONFIG_VAL(0x80) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define DMC_PRECHCONFIG_VAL 0xFF000000 83*4882a593Smuzhiyun #define DMC_PWRDNCONFIG_VAL 0xFFFF00FF 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun #define DMC_CONCONTROL_RESET_VAL 0x0FFF0000 86*4882a593Smuzhiyun #define DFI_INIT_START (1 << 28) 87*4882a593Smuzhiyun #define EMPTY (1 << 8) 88*4882a593Smuzhiyun #define AREF_EN (1 << 5) 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define DFI_INIT_COMPLETE_CHO (1 << 2) 91*4882a593Smuzhiyun #define DFI_INIT_COMPLETE_CH1 (1 << 3) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #define RDLVL_COMPLETE_CHO (1 << 14) 94*4882a593Smuzhiyun #define RDLVL_COMPLETE_CH1 (1 << 15) 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #define CLK_STOP_EN (1 << 0) 97*4882a593Smuzhiyun #define DPWRDN_EN (1 << 1) 98*4882a593Smuzhiyun #define DSREF_EN (1 << 5) 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun /* COJCONTROL register bit fields */ 101*4882a593Smuzhiyun #define DMC_CONCONTROL_IO_PD_CON_DISABLE (0 << 3) 102*4882a593Smuzhiyun #define DMC_CONCONTROL_IO_PD_CON_ENABLE (1 << 3) 103*4882a593Smuzhiyun #define DMC_CONCONTROL_AREF_EN_DISABLE (0 << 5) 104*4882a593Smuzhiyun #define DMC_CONCONTROL_AREF_EN_ENABLE (1 << 5) 105*4882a593Smuzhiyun #define DMC_CONCONTROL_EMPTY_DISABLE (0 << 8) 106*4882a593Smuzhiyun #define DMC_CONCONTROL_EMPTY_ENABLE (1 << 8) 107*4882a593Smuzhiyun #define DMC_CONCONTROL_RD_FETCH_DISABLE (0x0 << 12) 108*4882a593Smuzhiyun #define DMC_CONCONTROL_TIMEOUT_LEVEL0 (0xFFF << 16) 109*4882a593Smuzhiyun #define DMC_CONCONTROL_DFI_INIT_START_DISABLE (0 << 28) 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #define DMC_CONCONTROL_VAL 0x1FFF2101 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun #define DREX_CONCONTROL_VAL DMC_CONCONTROL_VAL \ 114*4882a593Smuzhiyun | DMC_CONCONTROL_AREF_EN_ENABLE \ 115*4882a593Smuzhiyun | DMC_CONCONTROL_IO_PD_CON_ENABLE 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun #define DMC_CONCONTROL_IO_PD_CON(x) (x << 6) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* CLK_DIV_CPU1 */ 120*4882a593Smuzhiyun #define HPM_RATIO 0x2 121*4882a593Smuzhiyun #define COPY_RATIO 0x0 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun /* CLK_DIV_CPU1 = 0x00000003 */ 124*4882a593Smuzhiyun #define CLK_DIV_CPU1_VAL ((HPM_RATIO << 4) \ 125*4882a593Smuzhiyun | (COPY_RATIO)) 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun /* CLK_SRC_CORE0 */ 128*4882a593Smuzhiyun #define CLK_SRC_CORE0_VAL 0x00000000 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun /* CLK_SRC_CORE1 */ 131*4882a593Smuzhiyun #define CLK_SRC_CORE1_VAL 0x100 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun /* CLK_DIV_CORE0 */ 134*4882a593Smuzhiyun #define CLK_DIV_CORE0_VAL 0x00120000 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun /* CLK_DIV_CORE1 */ 137*4882a593Smuzhiyun #define CLK_DIV_CORE1_VAL 0x07070700 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun /* CLK_DIV_SYSRGT */ 140*4882a593Smuzhiyun #define CLK_DIV_SYSRGT_VAL 0x00000111 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* CLK_DIV_ACP */ 143*4882a593Smuzhiyun #define CLK_DIV_ACP_VAL 0x12 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* CLK_DIV_SYSLFT */ 146*4882a593Smuzhiyun #define CLK_DIV_SYSLFT_VAL 0x00000311 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun #define MUX_APLL_SEL_MASK (1 << 0) 149*4882a593Smuzhiyun #define MUX_MPLL_SEL_MASK (1 << 8) 150*4882a593Smuzhiyun #define MPLL_SEL_MOUT_MPLLFOUT (2 << 8) 151*4882a593Smuzhiyun #define MUX_CPLL_SEL_MASK (1 << 8) 152*4882a593Smuzhiyun #define MUX_EPLL_SEL_MASK (1 << 12) 153*4882a593Smuzhiyun #define MUX_VPLL_SEL_MASK (1 << 16) 154*4882a593Smuzhiyun #define MUX_GPLL_SEL_MASK (1 << 28) 155*4882a593Smuzhiyun #define MUX_BPLL_SEL_MASK (1 << 0) 156*4882a593Smuzhiyun #define MUX_HPM_SEL_MASK (1 << 20) 157*4882a593Smuzhiyun #define HPM_SEL_SCLK_MPLL (1 << 21) 158*4882a593Smuzhiyun #define PLL_LOCKED (1 << 29) 159*4882a593Smuzhiyun #define APLL_CON0_LOCKED (1 << 29) 160*4882a593Smuzhiyun #define MPLL_CON0_LOCKED (1 << 29) 161*4882a593Smuzhiyun #define BPLL_CON0_LOCKED (1 << 29) 162*4882a593Smuzhiyun #define CPLL_CON0_LOCKED (1 << 29) 163*4882a593Smuzhiyun #define EPLL_CON0_LOCKED (1 << 29) 164*4882a593Smuzhiyun #define GPLL_CON0_LOCKED (1 << 29) 165*4882a593Smuzhiyun #define VPLL_CON0_LOCKED (1 << 29) 166*4882a593Smuzhiyun #define CLK_REG_DISABLE 0x0 167*4882a593Smuzhiyun #define TOP2_VAL 0x0110000 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun /* SCLK_SRC_ISP - set SPI0/1 to 6 = SCLK_MPLL_USER */ 170*4882a593Smuzhiyun #define SPI0_ISP_SEL 6 171*4882a593Smuzhiyun #define SPI1_ISP_SEL 6 172*4882a593Smuzhiyun #define SCLK_SRC_ISP_VAL (SPI1_ISP_SEL << 4) \ 173*4882a593Smuzhiyun | (SPI0_ISP_SEL << 0) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* SCLK_DIV_ISP - set SPI0/1 to 0xf = divide by 16 */ 176*4882a593Smuzhiyun #define SPI0_ISP_RATIO 0xf 177*4882a593Smuzhiyun #define SPI1_ISP_RATIO 0xf 178*4882a593Smuzhiyun #define SCLK_DIV_ISP_VAL (SPI1_ISP_RATIO << 12) \ 179*4882a593Smuzhiyun | (SPI0_ISP_RATIO << 0) 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun /* CLK_DIV_FSYS2 */ 182*4882a593Smuzhiyun #define MMC2_RATIO_MASK 0xf 183*4882a593Smuzhiyun #define MMC2_RATIO_VAL 0x3 184*4882a593Smuzhiyun #define MMC2_RATIO_OFFSET 0 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun #define MMC2_PRE_RATIO_MASK 0xff 187*4882a593Smuzhiyun #define MMC2_PRE_RATIO_VAL 0x9 188*4882a593Smuzhiyun #define MMC2_PRE_RATIO_OFFSET 8 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun #define MMC3_RATIO_MASK 0xf 191*4882a593Smuzhiyun #define MMC3_RATIO_VAL 0x1 192*4882a593Smuzhiyun #define MMC3_RATIO_OFFSET 16 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun #define MMC3_PRE_RATIO_MASK 0xff 195*4882a593Smuzhiyun #define MMC3_PRE_RATIO_VAL 0x0 196*4882a593Smuzhiyun #define MMC3_PRE_RATIO_OFFSET 24 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun /* CLK_SRC_LEX */ 199*4882a593Smuzhiyun #define CLK_SRC_LEX_VAL 0x0 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun /* CLK_DIV_LEX */ 202*4882a593Smuzhiyun #define CLK_DIV_LEX_VAL 0x10 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun /* CLK_DIV_R0X */ 205*4882a593Smuzhiyun #define CLK_DIV_R0X_VAL 0x10 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun /* CLK_DIV_L0X */ 208*4882a593Smuzhiyun #define CLK_DIV_R1X_VAL 0x10 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun /* CLK_DIV_ISP2 */ 211*4882a593Smuzhiyun #define CLK_DIV_ISP2_VAL 0x1 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun /* CLK_SRC_KFC */ 214*4882a593Smuzhiyun #define SRC_KFC_HPM_SEL (1 << 15) 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun /* CLK_SRC_KFC */ 217*4882a593Smuzhiyun #define CLK_SRC_KFC_VAL 0x00008001 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun /* CLK_DIV_KFC */ 220*4882a593Smuzhiyun #define CLK_DIV_KFC_VAL 0x03300110 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun /* CLK_DIV2_RATIO */ 223*4882a593Smuzhiyun #define CLK_DIV2_RATIO 0x10111150 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun /* CLK_DIV4_RATIO */ 226*4882a593Smuzhiyun #define CLK_DIV4_RATIO 0x00000003 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun /* CLK_DIV_G2D */ 229*4882a593Smuzhiyun #define CLK_DIV_G2D 0x00000010 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun /* 232*4882a593Smuzhiyun * DIV_DISP1_0 233*4882a593Smuzhiyun * For DP, divisor should be 2 234*4882a593Smuzhiyun */ 235*4882a593Smuzhiyun #define CLK_DIV_DISP1_0_FIMD1 (2 << 0) 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun /* CLK_GATE_IP_DISP1 */ 238*4882a593Smuzhiyun #define CLK_GATE_DP1_ALLOW (1 << 4) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun /* AUDIO CLK SEL */ 241*4882a593Smuzhiyun #define AUDIO0_SEL_EPLL (0x6 << 28) 242*4882a593Smuzhiyun #define AUDIO0_RATIO 0x5 243*4882a593Smuzhiyun #define PCM0_RATIO 0x3 244*4882a593Smuzhiyun #define DIV_MAU_VAL (PCM0_RATIO << 24 | AUDIO0_RATIO << 20) 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun /* CLK_SRC_CDREX */ 247*4882a593Smuzhiyun #define MUX_MCLK_CDR_MSPLL (1 << 4) 248*4882a593Smuzhiyun #define MUX_BPLL_SEL_FOUTBPLL (1 << 0) 249*4882a593Smuzhiyun #define BPLL_SEL_MASK 0x7 250*4882a593Smuzhiyun #define FOUTBPLL 2 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun #define DDR3PHY_CTRL_PHY_RESET (1 << 0) 253*4882a593Smuzhiyun #define DDR3PHY_CTRL_PHY_RESET_OFF (0 << 0) 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #define PHY_CON0_RESET_VAL 0x17020a40 256*4882a593Smuzhiyun #define P0_CMD_EN (1 << 14) 257*4882a593Smuzhiyun #define BYTE_RDLVL_EN (1 << 13) 258*4882a593Smuzhiyun #define CTRL_SHGATE (1 << 8) 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun #define PHY_CON1_RESET_VAL 0x09210100 261*4882a593Smuzhiyun #define RDLVL_PASS_ADJ_VAL 0x6 262*4882a593Smuzhiyun #define RDLVL_PASS_ADJ_OFFSET 16 263*4882a593Smuzhiyun #define CTRL_GATEDURADJ_MASK (0xf << 20) 264*4882a593Smuzhiyun #define READ_LEVELLING_DDR3 0x0100 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun #define PHY_CON2_RESET_VAL 0x00010004 267*4882a593Smuzhiyun #define INIT_DESKEW_EN (1 << 6) 268*4882a593Smuzhiyun #define DLL_DESKEW_EN (1 << 12) 269*4882a593Smuzhiyun #define RDLVL_GATE_EN (1 << 24) 270*4882a593Smuzhiyun #define RDLVL_EN (1 << 25) 271*4882a593Smuzhiyun #define RDLVL_INCR_ADJ (0x1 << 16) 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun /* DREX_PAUSE */ 274*4882a593Smuzhiyun #define DREX_PAUSE_EN (1 << 0) 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun #define BYPASS_EN (1 << 22) 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun /* MEMMORY VAL */ 279*4882a593Smuzhiyun #define PHY_CON0_VAL 0x17021A00 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun #define PHY_CON12_RESET_VAL 0x10100070 282*4882a593Smuzhiyun #define PHY_CON12_VAL 0x10107F50 283*4882a593Smuzhiyun #define CTRL_START (1 << 6) 284*4882a593Smuzhiyun #define CTRL_DLL_ON (1 << 5) 285*4882a593Smuzhiyun #define CTRL_LOCK_COARSE_OFFSET 10 286*4882a593Smuzhiyun #define CTRL_LOCK_COARSE_MASK (0x7F << CTRL_LOCK_COARSE_OFFSET) 287*4882a593Smuzhiyun #define CTRL_LOCK_COARSE(x) (((x) & CTRL_LOCK_COARSE_MASK) >> \ 288*4882a593Smuzhiyun CTRL_LOCK_COARSE_OFFSET) 289*4882a593Smuzhiyun #define CTRL_FORCE_MASK (0x7F << 8) 290*4882a593Smuzhiyun #define CTRL_FINE_LOCKED 0x7 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun #define CTRL_OFFSETD_RESET_VAL 0x8 293*4882a593Smuzhiyun #define CTRL_OFFSETD_VAL 0x7F 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun #define CTRL_OFFSETR0 0x7F 296*4882a593Smuzhiyun #define CTRL_OFFSETR1 0x7F 297*4882a593Smuzhiyun #define CTRL_OFFSETR2 0x7F 298*4882a593Smuzhiyun #define CTRL_OFFSETR3 0x7F 299*4882a593Smuzhiyun #define PHY_CON4_VAL (CTRL_OFFSETR0 << 0 | \ 300*4882a593Smuzhiyun CTRL_OFFSETR1 << 8 | \ 301*4882a593Smuzhiyun CTRL_OFFSETR2 << 16 | \ 302*4882a593Smuzhiyun CTRL_OFFSETR3 << 24) 303*4882a593Smuzhiyun #define PHY_CON4_RESET_VAL 0x08080808 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun #define CTRL_OFFSETW0 0x7F 306*4882a593Smuzhiyun #define CTRL_OFFSETW1 0x7F 307*4882a593Smuzhiyun #define CTRL_OFFSETW2 0x7F 308*4882a593Smuzhiyun #define CTRL_OFFSETW3 0x7F 309*4882a593Smuzhiyun #define PHY_CON6_VAL (CTRL_OFFSETW0 << 0 | \ 310*4882a593Smuzhiyun CTRL_OFFSETW1 << 8 | \ 311*4882a593Smuzhiyun CTRL_OFFSETW2 << 16 | \ 312*4882a593Smuzhiyun CTRL_OFFSETW3 << 24) 313*4882a593Smuzhiyun #define PHY_CON6_RESET_VAL 0x08080808 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun #define PHY_CON14_RESET_VAL 0x001F0000 316*4882a593Smuzhiyun #define CTRL_PULLD_DQS 0xF 317*4882a593Smuzhiyun #define CTRL_PULLD_DQS_OFFSET 0 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun /* ZQ Configurations */ 320*4882a593Smuzhiyun #define PHY_CON16_RESET_VAL 0x08000304 321*4882a593Smuzhiyun 322*4882a593Smuzhiyun #define ZQ_CLK_EN (1 << 27) 323*4882a593Smuzhiyun #define ZQ_CLK_DIV_EN (1 << 18) 324*4882a593Smuzhiyun #define ZQ_MANUAL_STR (1 << 1) 325*4882a593Smuzhiyun #define ZQ_DONE (1 << 0) 326*4882a593Smuzhiyun #define ZQ_MODE_DDS_OFFSET 24 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun #define CTRL_RDLVL_GATE_ENABLE 1 329*4882a593Smuzhiyun #define CTRL_RDLVL_GATE_DISABLE 0 330*4882a593Smuzhiyun #define CTRL_RDLVL_DATA_ENABLE 2 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun /* Direct Command */ 333*4882a593Smuzhiyun #define DIRECT_CMD_NOP 0x07000000 334*4882a593Smuzhiyun #define DIRECT_CMD_PALL 0x01000000 335*4882a593Smuzhiyun #define DIRECT_CMD_ZQINIT 0x0a000000 336*4882a593Smuzhiyun #define DIRECT_CMD_CHANNEL_SHIFT 28 337*4882a593Smuzhiyun #define DIRECT_CMD_CHIP_SHIFT 20 338*4882a593Smuzhiyun #define DIRECT_CMD_BANK_SHIFT 16 339*4882a593Smuzhiyun #define DIRECT_CMD_REFA (5 << 24) 340*4882a593Smuzhiyun #define DIRECT_CMD_MRS1 0x71C00 341*4882a593Smuzhiyun #define DIRECT_CMD_MRS2 0x10BFC 342*4882a593Smuzhiyun #define DIRECT_CMD_MRS3 0x0050C 343*4882a593Smuzhiyun #define DIRECT_CMD_MRS4 0x00868 344*4882a593Smuzhiyun #define DIRECT_CMD_MRS5 0x00C04 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun /* Drive Strength */ 347*4882a593Smuzhiyun #define IMPEDANCE_48_OHM 4 348*4882a593Smuzhiyun #define IMPEDANCE_40_OHM 5 349*4882a593Smuzhiyun #define IMPEDANCE_34_OHM 6 350*4882a593Smuzhiyun #define IMPEDANCE_30_OHM 7 351*4882a593Smuzhiyun #define PHY_CON39_VAL_48_OHM 0x09240924 352*4882a593Smuzhiyun #define PHY_CON39_VAL_40_OHM 0x0B6D0B6D 353*4882a593Smuzhiyun #define PHY_CON39_VAL_34_OHM 0x0DB60DB6 354*4882a593Smuzhiyun #define PHY_CON39_VAL_30_OHM 0x0FFF0FFF 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun #define CTRL_BSTLEN_OFFSET 8 357*4882a593Smuzhiyun #define CTRL_RDLAT_OFFSET 0 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun #define CMD_DEFAULT_LPDDR3 0xF 360*4882a593Smuzhiyun #define CMD_DEFUALT_OFFSET 0 361*4882a593Smuzhiyun #define T_WRDATA_EN 0x7 362*4882a593Smuzhiyun #define T_WRDATA_EN_DDR3 0x8 363*4882a593Smuzhiyun #define T_WRDATA_EN_OFFSET 16 364*4882a593Smuzhiyun #define T_WRDATA_EN_MASK 0x1f 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun #define PHY_CON31_VAL 0x0C183060 367*4882a593Smuzhiyun #define PHY_CON32_VAL 0x60C18306 368*4882a593Smuzhiyun #define PHY_CON33_VAL 0x00000030 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun #define PHY_CON31_RESET_VAL 0x0 371*4882a593Smuzhiyun #define PHY_CON32_RESET_VAL 0x0 372*4882a593Smuzhiyun #define PHY_CON33_RESET_VAL 0x0 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun #define SL_DLL_DYN_CON_EN (1 << 1) 375*4882a593Smuzhiyun #define FP_RESYNC (1 << 3) 376*4882a593Smuzhiyun #define CTRL_START (1 << 6) 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun #define DMC_AREF_EN (1 << 5) 379*4882a593Smuzhiyun #define DMC_CONCONTROL_EMPTY (1 << 8) 380*4882a593Smuzhiyun #define DFI_INIT_START (1 << 28) 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun #define DMC_MEMCONTROL_VAL 0x00312700 383*4882a593Smuzhiyun #define CLK_STOP_EN (1 << 0) 384*4882a593Smuzhiyun #define DPWRDN_EN (1 << 1) 385*4882a593Smuzhiyun #define DSREF_EN (1 << 5) 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun #define MEMBASECONFIG_CHIP_MASK_VAL 0x7E0 388*4882a593Smuzhiyun #define MEMBASECONFIG_CHIP_MASK_OFFSET 0 389*4882a593Smuzhiyun #define MEMBASECONFIG0_CHIP_BASE_VAL 0x20 390*4882a593Smuzhiyun #define MEMBASECONFIG1_CHIP_BASE_VAL 0x40 391*4882a593Smuzhiyun #define CHIP_BASE_OFFSET 16 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun #define MEMCONFIG_VAL 0x1323 394*4882a593Smuzhiyun #define PRECHCONFIG_DEFAULT_VAL 0xFF000000 395*4882a593Smuzhiyun #define PWRDNCONFIG_DEFAULT_VAL 0xFFFF00FF 396*4882a593Smuzhiyun 397*4882a593Smuzhiyun #define TIMINGAREF_VAL 0x5d 398*4882a593Smuzhiyun #define TIMINGROW_VAL 0x345A8692 399*4882a593Smuzhiyun #define TIMINGDATA_VAL 0x3630065C 400*4882a593Smuzhiyun #define TIMINGPOWER_VAL 0x50380336 401*4882a593Smuzhiyun #define DFI_INIT_COMPLETE (1 << 3) 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun #define BRBRSVCONTROL_VAL 0x00000033 404*4882a593Smuzhiyun #define BRBRSVCONFIG_VAL 0x88778877 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun /* Clock Gating Control (CGCONTROL) register */ 407*4882a593Smuzhiyun #define MEMIF_CG_EN (1 << 3) /* Memory interface clock gating */ 408*4882a593Smuzhiyun #define SCG_CG_EN (1 << 2) /* Scheduler clock gating */ 409*4882a593Smuzhiyun #define BUSIF_WR_CG_EN (1 << 1) /* Bus interface write channel clock gating */ 410*4882a593Smuzhiyun #define BUSIF_RD_CG_EN (1 << 0) /* Bus interface read channel clock gating */ 411*4882a593Smuzhiyun #define DMC_INTERNAL_CG (MEMIF_CG_EN | SCG_CG_EN | \ 412*4882a593Smuzhiyun BUSIF_WR_CG_EN | BUSIF_RD_CG_EN) 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun /* DMC PHY Control0 register */ 415*4882a593Smuzhiyun #define PHY_CONTROL0_RESET_VAL 0x0 416*4882a593Smuzhiyun #define MEM_TERM_EN (1 << 31) /* Termination enable for memory */ 417*4882a593Smuzhiyun #define PHY_TERM_EN (1 << 30) /* Termination enable for PHY */ 418*4882a593Smuzhiyun #define DMC_CTRL_SHGATE (1 << 29) /* Duration of DQS gating signal */ 419*4882a593Smuzhiyun #define FP_RSYNC (1 << 3) /* Force DLL resyncronization */ 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /* Driver strength for CK, CKE, CS & CA */ 422*4882a593Smuzhiyun #define IMP_OUTPUT_DRV_40_OHM 0x5 423*4882a593Smuzhiyun #define IMP_OUTPUT_DRV_30_OHM 0x7 424*4882a593Smuzhiyun #define DA_3_DS_OFFSET 25 425*4882a593Smuzhiyun #define DA_2_DS_OFFSET 22 426*4882a593Smuzhiyun #define DA_1_DS_OFFSET 19 427*4882a593Smuzhiyun #define DA_0_DS_OFFSET 16 428*4882a593Smuzhiyun #define CA_CK_DRVR_DS_OFFSET 9 429*4882a593Smuzhiyun #define CA_CKE_DRVR_DS_OFFSET 6 430*4882a593Smuzhiyun #define CA_CS_DRVR_DS_OFFSET 3 431*4882a593Smuzhiyun #define CA_ADR_DRVR_DS_OFFSET 0 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun #define PHY_CON42_CTRL_BSTLEN_SHIFT 8 434*4882a593Smuzhiyun #define PHY_CON42_CTRL_RDLAT_SHIFT 0 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun /* 437*4882a593Smuzhiyun * Definitions that differ with SoC's. 438*4882a593Smuzhiyun * Below is the part defining macros for Exynos5250. 439*4882a593Smuzhiyun * Else part introduces macros for Exynos5420. 440*4882a593Smuzhiyun */ 441*4882a593Smuzhiyun #ifndef CONFIG_EXYNOS5420 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun /* APLL_CON1 */ 444*4882a593Smuzhiyun #define APLL_CON1_VAL (0x00203800) 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun /* MPLL_CON1 */ 447*4882a593Smuzhiyun #define MPLL_CON1_VAL (0x00203800) 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun /* CPLL_CON1 */ 450*4882a593Smuzhiyun #define CPLL_CON1_VAL (0x00203800) 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun /* DPLL_CON1 */ 453*4882a593Smuzhiyun #define DPLL_CON1_VAL (NOT_AVAILABLE) 454*4882a593Smuzhiyun 455*4882a593Smuzhiyun /* GPLL_CON1 */ 456*4882a593Smuzhiyun #define GPLL_CON1_VAL (0x00203800) 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun /* EPLL_CON1, CON2 */ 459*4882a593Smuzhiyun #define EPLL_CON1_VAL 0x00000000 460*4882a593Smuzhiyun #define EPLL_CON2_VAL 0x00000080 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun /* VPLL_CON1, CON2 */ 463*4882a593Smuzhiyun #define VPLL_CON1_VAL 0x00000000 464*4882a593Smuzhiyun #define VPLL_CON2_VAL 0x00000080 465*4882a593Smuzhiyun 466*4882a593Smuzhiyun /* RPLL_CON1, CON2 */ 467*4882a593Smuzhiyun #define RPLL_CON1_VAL NOT_AVAILABLE 468*4882a593Smuzhiyun #define RPLL_CON2_VAL NOT_AVAILABLE 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun /* BPLL_CON1 */ 471*4882a593Smuzhiyun #define BPLL_CON1_VAL 0x00203800 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun /* SPLL_CON1 */ 474*4882a593Smuzhiyun #define SPLL_CON1_VAL NOT_AVAILABLE 475*4882a593Smuzhiyun 476*4882a593Smuzhiyun /* IPLL_CON1 */ 477*4882a593Smuzhiyun #define IPLL_CON1_VAL NOT_AVAILABLE 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun /* KPLL_CON1 */ 480*4882a593Smuzhiyun #define KPLL_CON1_VAL NOT_AVAILABLE 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun /* CLK_SRC_ISP */ 483*4882a593Smuzhiyun #define CLK_SRC_ISP_VAL NOT_AVAILABLE 484*4882a593Smuzhiyun #define CLK_DIV_ISP0_VAL 0x31 485*4882a593Smuzhiyun #define CLK_DIV_ISP1_VAL 0x0 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun /* CLK_FSYS */ 488*4882a593Smuzhiyun #define CLK_SRC_FSYS0_VAL 0x66666 489*4882a593Smuzhiyun #define CLK_DIV_FSYS0_VAL 0x0BB00000 490*4882a593Smuzhiyun #define CLK_DIV_FSYS1_VAL NOT_AVAILABLE 491*4882a593Smuzhiyun #define CLK_DIV_FSYS2_VAL NOT_AVAILABLE 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun /* CLK_SRC_CPU */ 494*4882a593Smuzhiyun /* 0 = MOUTAPLL, 1 = SCLKMPLL */ 495*4882a593Smuzhiyun #define MUX_HPM_SEL 0 496*4882a593Smuzhiyun #define MUX_CPU_SEL 0 497*4882a593Smuzhiyun #define MUX_APLL_SEL 1 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun #define CLK_SRC_CPU_VAL ((MUX_HPM_SEL << 20) \ 500*4882a593Smuzhiyun | (MUX_CPU_SEL << 16) \ 501*4882a593Smuzhiyun | (MUX_APLL_SEL)) 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun /* CLK_SRC_CDREX */ 504*4882a593Smuzhiyun #define CLK_SRC_CDREX_VAL 0x1 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun /* CLK_DIV_CDREX */ 507*4882a593Smuzhiyun #define CLK_DIV_CDREX0_VAL NOT_AVAILABLE 508*4882a593Smuzhiyun #define CLK_DIV_CDREX1_VAL NOT_AVAILABLE 509*4882a593Smuzhiyun 510*4882a593Smuzhiyun /* CLK_DIV_CPU0_VAL */ 511*4882a593Smuzhiyun #define CLK_DIV_CPU0_VAL NOT_AVAILABLE 512*4882a593Smuzhiyun 513*4882a593Smuzhiyun #define MCLK_CDREX2_RATIO 0x0 514*4882a593Smuzhiyun #define ACLK_EFCON_RATIO 0x1 515*4882a593Smuzhiyun #define MCLK_DPHY_RATIO 0x1 516*4882a593Smuzhiyun #define MCLK_CDREX_RATIO 0x1 517*4882a593Smuzhiyun #define ACLK_C2C_200_RATIO 0x1 518*4882a593Smuzhiyun #define C2C_CLK_400_RATIO 0x1 519*4882a593Smuzhiyun #define PCLK_CDREX_RATIO 0x1 520*4882a593Smuzhiyun #define ACLK_CDREX_RATIO 0x1 521*4882a593Smuzhiyun 522*4882a593Smuzhiyun #define CLK_DIV_CDREX_VAL ((MCLK_DPHY_RATIO << 24) \ 523*4882a593Smuzhiyun | (C2C_CLK_400_RATIO << 6) \ 524*4882a593Smuzhiyun | (PCLK_CDREX_RATIO << 4) \ 525*4882a593Smuzhiyun | (ACLK_CDREX_RATIO)) 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun /* CLK_SRC_TOP0 */ 528*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_SEL 0x0 529*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_MID_SEL 0x0 530*4882a593Smuzhiyun #define MUX_ACLK_400_G3D_MID_SEL 0x0 531*4882a593Smuzhiyun #define MUX_ACLK_333_SEL 0x0 532*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_SEL 0x0 533*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_MID_SEL 0x0 534*4882a593Smuzhiyun #define MUX_ACLK_200_SEL 0x0 535*4882a593Smuzhiyun #define MUX_ACLK_166_SEL 0x0 536*4882a593Smuzhiyun #define CLK_SRC_TOP0_VAL ((MUX_ACLK_300_GSCL_SEL << 25) \ 537*4882a593Smuzhiyun | (MUX_ACLK_300_GSCL_MID_SEL << 24) \ 538*4882a593Smuzhiyun | (MUX_ACLK_400_G3D_MID_SEL << 20) \ 539*4882a593Smuzhiyun | (MUX_ACLK_333_SEL << 16) \ 540*4882a593Smuzhiyun | (MUX_ACLK_300_DISP1_SEL << 15) \ 541*4882a593Smuzhiyun | (MUX_ACLK_300_DISP1_MID_SEL << 14) \ 542*4882a593Smuzhiyun | (MUX_ACLK_200_SEL << 12) \ 543*4882a593Smuzhiyun | (MUX_ACLK_166_SEL << 8)) 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun /* CLK_SRC_TOP1 */ 546*4882a593Smuzhiyun #define MUX_ACLK_400_G3D_SEL 0x1 547*4882a593Smuzhiyun #define MUX_ACLK_400_ISP_SEL 0x0 548*4882a593Smuzhiyun #define MUX_ACLK_400_IOP_SEL 0x0 549*4882a593Smuzhiyun #define MUX_ACLK_MIPI_HSI_TXBASE_SEL 0x0 550*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_MID1_SEL 0x0 551*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_MID1_SEL 0x0 552*4882a593Smuzhiyun #define CLK_SRC_TOP1_VAL ((MUX_ACLK_400_G3D_SEL << 28) \ 553*4882a593Smuzhiyun |(MUX_ACLK_400_ISP_SEL << 24) \ 554*4882a593Smuzhiyun |(MUX_ACLK_400_IOP_SEL << 20) \ 555*4882a593Smuzhiyun |(MUX_ACLK_MIPI_HSI_TXBASE_SEL << 16) \ 556*4882a593Smuzhiyun |(MUX_ACLK_300_GSCL_MID1_SEL << 12) \ 557*4882a593Smuzhiyun |(MUX_ACLK_300_DISP1_MID1_SEL << 8)) 558*4882a593Smuzhiyun 559*4882a593Smuzhiyun /* CLK_SRC_TOP2 */ 560*4882a593Smuzhiyun #define MUX_GPLL_SEL 0x1 561*4882a593Smuzhiyun #define MUX_BPLL_USER_SEL 0x0 562*4882a593Smuzhiyun #define MUX_MPLL_USER_SEL 0x0 563*4882a593Smuzhiyun #define MUX_VPLL_SEL 0x1 564*4882a593Smuzhiyun #define MUX_EPLL_SEL 0x1 565*4882a593Smuzhiyun #define MUX_CPLL_SEL 0x1 566*4882a593Smuzhiyun #define VPLLSRC_SEL 0x0 567*4882a593Smuzhiyun #define CLK_SRC_TOP2_VAL ((MUX_GPLL_SEL << 28) \ 568*4882a593Smuzhiyun | (MUX_BPLL_USER_SEL << 24) \ 569*4882a593Smuzhiyun | (MUX_MPLL_USER_SEL << 20) \ 570*4882a593Smuzhiyun | (MUX_VPLL_SEL << 16) \ 571*4882a593Smuzhiyun | (MUX_EPLL_SEL << 12) \ 572*4882a593Smuzhiyun | (MUX_CPLL_SEL << 8) \ 573*4882a593Smuzhiyun | (VPLLSRC_SEL)) 574*4882a593Smuzhiyun /* CLK_SRC_TOP3 */ 575*4882a593Smuzhiyun #define MUX_ACLK_333_SUB_SEL 0x1 576*4882a593Smuzhiyun #define MUX_ACLK_400_SUB_SEL 0x1 577*4882a593Smuzhiyun #define MUX_ACLK_266_ISP_SUB_SEL 0x1 578*4882a593Smuzhiyun #define MUX_ACLK_266_GPS_SUB_SEL 0x0 579*4882a593Smuzhiyun #define MUX_ACLK_300_GSCL_SUB_SEL 0x1 580*4882a593Smuzhiyun #define MUX_ACLK_266_GSCL_SUB_SEL 0x1 581*4882a593Smuzhiyun #define MUX_ACLK_300_DISP1_SUB_SEL 0x1 582*4882a593Smuzhiyun #define MUX_ACLK_200_DISP1_SUB_SEL 0x1 583*4882a593Smuzhiyun #define CLK_SRC_TOP3_VAL ((MUX_ACLK_333_SUB_SEL << 24) \ 584*4882a593Smuzhiyun | (MUX_ACLK_400_SUB_SEL << 20) \ 585*4882a593Smuzhiyun | (MUX_ACLK_266_ISP_SUB_SEL << 16) \ 586*4882a593Smuzhiyun | (MUX_ACLK_266_GPS_SUB_SEL << 12) \ 587*4882a593Smuzhiyun | (MUX_ACLK_300_GSCL_SUB_SEL << 10) \ 588*4882a593Smuzhiyun | (MUX_ACLK_266_GSCL_SUB_SEL << 8) \ 589*4882a593Smuzhiyun | (MUX_ACLK_300_DISP1_SUB_SEL << 6) \ 590*4882a593Smuzhiyun | (MUX_ACLK_200_DISP1_SUB_SEL << 4)) 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun #define CLK_SRC_TOP4_VAL NOT_AVAILABLE 593*4882a593Smuzhiyun #define CLK_SRC_TOP5_VAL NOT_AVAILABLE 594*4882a593Smuzhiyun #define CLK_SRC_TOP6_VAL NOT_AVAILABLE 595*4882a593Smuzhiyun #define CLK_SRC_TOP7_VAL NOT_AVAILABLE 596*4882a593Smuzhiyun 597*4882a593Smuzhiyun /* CLK_DIV_TOP0 */ 598*4882a593Smuzhiyun #define ACLK_300_DISP1_RATIO 0x2 599*4882a593Smuzhiyun #define ACLK_400_G3D_RATIO 0x0 600*4882a593Smuzhiyun #define ACLK_333_RATIO 0x0 601*4882a593Smuzhiyun #define ACLK_266_RATIO 0x2 602*4882a593Smuzhiyun #define ACLK_200_RATIO 0x3 603*4882a593Smuzhiyun #define ACLK_166_RATIO 0x1 604*4882a593Smuzhiyun #define ACLK_133_RATIO 0x1 605*4882a593Smuzhiyun #define ACLK_66_RATIO 0x5 606*4882a593Smuzhiyun 607*4882a593Smuzhiyun #define CLK_DIV_TOP0_VAL ((ACLK_300_DISP1_RATIO << 28) \ 608*4882a593Smuzhiyun | (ACLK_400_G3D_RATIO << 24) \ 609*4882a593Smuzhiyun | (ACLK_333_RATIO << 20) \ 610*4882a593Smuzhiyun | (ACLK_266_RATIO << 16) \ 611*4882a593Smuzhiyun | (ACLK_200_RATIO << 12) \ 612*4882a593Smuzhiyun | (ACLK_166_RATIO << 8) \ 613*4882a593Smuzhiyun | (ACLK_133_RATIO << 4) \ 614*4882a593Smuzhiyun | (ACLK_66_RATIO)) 615*4882a593Smuzhiyun 616*4882a593Smuzhiyun /* CLK_DIV_TOP1 */ 617*4882a593Smuzhiyun #define ACLK_MIPI_HSI_TX_BASE_RATIO 0x3 618*4882a593Smuzhiyun #define ACLK_66_PRE_RATIO 0x1 619*4882a593Smuzhiyun #define ACLK_400_ISP_RATIO 0x1 620*4882a593Smuzhiyun #define ACLK_400_IOP_RATIO 0x1 621*4882a593Smuzhiyun #define ACLK_300_GSCL_RATIO 0x2 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun #define CLK_DIV_TOP1_VAL ((ACLK_MIPI_HSI_TX_BASE_RATIO << 28) \ 624*4882a593Smuzhiyun | (ACLK_66_PRE_RATIO << 24) \ 625*4882a593Smuzhiyun | (ACLK_400_ISP_RATIO << 20) \ 626*4882a593Smuzhiyun | (ACLK_400_IOP_RATIO << 16) \ 627*4882a593Smuzhiyun | (ACLK_300_GSCL_RATIO << 12)) 628*4882a593Smuzhiyun 629*4882a593Smuzhiyun #define CLK_DIV_TOP2_VAL NOT_AVAILABLE 630*4882a593Smuzhiyun 631*4882a593Smuzhiyun /* PLL Lock Value Factor */ 632*4882a593Smuzhiyun #define PLL_LOCK_FACTOR 250 633*4882a593Smuzhiyun #define PLL_X_LOCK_FACTOR 3000 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun /* CLK_SRC_PERIC0 */ 636*4882a593Smuzhiyun #define PWM_SEL 6 637*4882a593Smuzhiyun #define UART3_SEL 6 638*4882a593Smuzhiyun #define UART2_SEL 6 639*4882a593Smuzhiyun #define UART1_SEL 6 640*4882a593Smuzhiyun #define UART0_SEL 6 641*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_MPLL */ 642*4882a593Smuzhiyun #define CLK_SRC_PERIC0_VAL ((PWM_SEL << 24) \ 643*4882a593Smuzhiyun | (UART3_SEL << 12) \ 644*4882a593Smuzhiyun | (UART2_SEL << 8) \ 645*4882a593Smuzhiyun | (UART1_SEL << 4) \ 646*4882a593Smuzhiyun | (UART0_SEL)) 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun /* CLK_SRC_PERIC1 */ 649*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_MPLL */ 650*4882a593Smuzhiyun #define SPI0_SEL 6 651*4882a593Smuzhiyun #define SPI1_SEL 6 652*4882a593Smuzhiyun #define SPI2_SEL 6 653*4882a593Smuzhiyun #define CLK_SRC_PERIC1_VAL ((SPI2_SEL << 24) \ 654*4882a593Smuzhiyun | (SPI1_SEL << 20) \ 655*4882a593Smuzhiyun | (SPI0_SEL << 16)) 656*4882a593Smuzhiyun 657*4882a593Smuzhiyun /* CLK_DIV_PERIL0 */ 658*4882a593Smuzhiyun #define UART5_RATIO 7 659*4882a593Smuzhiyun #define UART4_RATIO 7 660*4882a593Smuzhiyun #define UART3_RATIO 7 661*4882a593Smuzhiyun #define UART2_RATIO 7 662*4882a593Smuzhiyun #define UART1_RATIO 7 663*4882a593Smuzhiyun #define UART0_RATIO 7 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun #define CLK_DIV_PERIC0_VAL ((UART3_RATIO << 12) \ 666*4882a593Smuzhiyun | (UART2_RATIO << 8) \ 667*4882a593Smuzhiyun | (UART1_RATIO << 4) \ 668*4882a593Smuzhiyun | (UART0_RATIO)) 669*4882a593Smuzhiyun /* CLK_DIV_PERIC1 */ 670*4882a593Smuzhiyun #define SPI1_RATIO 0x7 671*4882a593Smuzhiyun #define SPI0_RATIO 0xf 672*4882a593Smuzhiyun #define SPI1_SUB_RATIO 0x0 673*4882a593Smuzhiyun #define SPI0_SUB_RATIO 0x0 674*4882a593Smuzhiyun #define CLK_DIV_PERIC1_VAL ((SPI1_SUB_RATIO << 24) \ 675*4882a593Smuzhiyun | ((SPI1_RATIO << 16) \ 676*4882a593Smuzhiyun | (SPI0_SUB_RATIO << 8) \ 677*4882a593Smuzhiyun | (SPI0_RATIO << 0))) 678*4882a593Smuzhiyun 679*4882a593Smuzhiyun /* CLK_DIV_PERIC2 */ 680*4882a593Smuzhiyun #define SPI2_RATIO 0xf 681*4882a593Smuzhiyun #define SPI2_SUB_RATIO 0x0 682*4882a593Smuzhiyun #define CLK_DIV_PERIC2_VAL ((SPI2_SUB_RATIO << 8) \ 683*4882a593Smuzhiyun | (SPI2_RATIO << 0)) 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun /* CLK_DIV_PERIC3 */ 686*4882a593Smuzhiyun #define PWM_RATIO 8 687*4882a593Smuzhiyun #define CLK_DIV_PERIC3_VAL (PWM_RATIO << 0) 688*4882a593Smuzhiyun 689*4882a593Smuzhiyun 690*4882a593Smuzhiyun /* CLK_DIV_PERIC4 */ 691*4882a593Smuzhiyun #define CLK_DIV_PERIC4_VAL NOT_AVAILABLE 692*4882a593Smuzhiyun 693*4882a593Smuzhiyun /* CLK_SRC_DISP1_0 */ 694*4882a593Smuzhiyun #define CLK_SRC_DISP1_0_VAL 0x6 695*4882a593Smuzhiyun #define CLK_DIV_DISP1_0_VAL NOT_AVAILABLE 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun #define APLL_FOUT (1 << 0) 698*4882a593Smuzhiyun #define KPLL_FOUT NOT_AVAILABLE 699*4882a593Smuzhiyun 700*4882a593Smuzhiyun #define CLK_DIV_CPERI1_VAL NOT_AVAILABLE 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun #else 703*4882a593Smuzhiyun 704*4882a593Smuzhiyun #define CPU_CONFIG_STATUS_OFFSET 0x80 705*4882a593Smuzhiyun #define CPU_RST_FLAG_VAL 0xFCBA0D10 706*4882a593Smuzhiyun #define PAD_RETENTION_DRAM_COREBLK_VAL 0x10000000 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun /* APLL_CON1 */ 709*4882a593Smuzhiyun #define APLL_CON1_VAL (0x0020F300) 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun /* MPLL_CON1 */ 712*4882a593Smuzhiyun #define MPLL_CON1_VAL (0x0020F300) 713*4882a593Smuzhiyun 714*4882a593Smuzhiyun 715*4882a593Smuzhiyun /* CPLL_CON1 */ 716*4882a593Smuzhiyun #define CPLL_CON1_VAL 0x0020f300 717*4882a593Smuzhiyun 718*4882a593Smuzhiyun /* DPLL_CON1 */ 719*4882a593Smuzhiyun #define DPLL_CON1_VAL (0x0020F300) 720*4882a593Smuzhiyun 721*4882a593Smuzhiyun /* GPLL_CON1 */ 722*4882a593Smuzhiyun #define GPLL_CON1_VAL (NOT_AVAILABLE) 723*4882a593Smuzhiyun 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun /* EPLL_CON1, CON2 */ 726*4882a593Smuzhiyun #define EPLL_CON1_VAL 0x00000000 727*4882a593Smuzhiyun #define EPLL_CON2_VAL 0x00000080 728*4882a593Smuzhiyun 729*4882a593Smuzhiyun /* VPLL_CON1, CON2 */ 730*4882a593Smuzhiyun #define VPLL_CON1_VAL 0x0020f300 731*4882a593Smuzhiyun #define VPLL_CON2_VAL NOT_AVAILABLE 732*4882a593Smuzhiyun 733*4882a593Smuzhiyun /* RPLL_CON1, CON2 */ 734*4882a593Smuzhiyun #define RPLL_CON1_VAL 0x00000000 735*4882a593Smuzhiyun #define RPLL_CON2_VAL 0x00000080 736*4882a593Smuzhiyun 737*4882a593Smuzhiyun /* BPLL_CON1 */ 738*4882a593Smuzhiyun #define BPLL_CON1_VAL 0x0020f300 739*4882a593Smuzhiyun 740*4882a593Smuzhiyun /* SPLL_CON1 */ 741*4882a593Smuzhiyun #define SPLL_CON1_VAL 0x0020f300 742*4882a593Smuzhiyun 743*4882a593Smuzhiyun /* IPLL_CON1 */ 744*4882a593Smuzhiyun #define IPLL_CON1_VAL 0x00000080 745*4882a593Smuzhiyun 746*4882a593Smuzhiyun /* KPLL_CON1 */ 747*4882a593Smuzhiyun #define KPLL_CON1_VAL 0x200000 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun /* CLK_SRC_ISP */ 750*4882a593Smuzhiyun #define CLK_SRC_ISP_VAL 0x33366000 751*4882a593Smuzhiyun #define CLK_DIV_ISP0_VAL 0x13131300 752*4882a593Smuzhiyun #define CLK_DIV_ISP1_VAL 0xbb110202 753*4882a593Smuzhiyun 754*4882a593Smuzhiyun 755*4882a593Smuzhiyun /* CLK_FSYS */ 756*4882a593Smuzhiyun #define CLK_SRC_FSYS0_VAL 0x33033300 757*4882a593Smuzhiyun #define CLK_DIV_FSYS0_VAL 0x0 758*4882a593Smuzhiyun #define CLK_DIV_FSYS1_VAL 0x04f13c4f 759*4882a593Smuzhiyun #define CLK_DIV_FSYS2_VAL 0x041d0000 760*4882a593Smuzhiyun 761*4882a593Smuzhiyun /* CLK_SRC_CPU */ 762*4882a593Smuzhiyun /* 0 = MOUTAPLL, 1 = SCLKMPLL */ 763*4882a593Smuzhiyun #define MUX_HPM_SEL 1 764*4882a593Smuzhiyun #define MUX_CPU_SEL 0 765*4882a593Smuzhiyun #define MUX_APLL_SEL 1 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun #define CLK_SRC_CPU_VAL ((MUX_HPM_SEL << 20) \ 768*4882a593Smuzhiyun | (MUX_CPU_SEL << 16) \ 769*4882a593Smuzhiyun | (MUX_APLL_SEL)) 770*4882a593Smuzhiyun 771*4882a593Smuzhiyun /* CLK_SRC_CDREX */ 772*4882a593Smuzhiyun #define CLK_SRC_CDREX_VAL 0x00000011 773*4882a593Smuzhiyun 774*4882a593Smuzhiyun /* CLK_DIV_CDREX */ 775*4882a593Smuzhiyun #define CLK_DIV_CDREX0_VAL 0x30010100 776*4882a593Smuzhiyun #define CLK_DIV_CDREX1_VAL 0x300 777*4882a593Smuzhiyun 778*4882a593Smuzhiyun #define CLK_DIV_CDREX_VAL 0x17010100 779*4882a593Smuzhiyun 780*4882a593Smuzhiyun /* CLK_DIV_CPU0_VAL */ 781*4882a593Smuzhiyun #define CLK_DIV_CPU0_VAL 0x01440020 782*4882a593Smuzhiyun 783*4882a593Smuzhiyun /* CLK_SRC_TOP */ 784*4882a593Smuzhiyun #define CLK_SRC_TOP0_VAL 0x12221222 785*4882a593Smuzhiyun #define CLK_SRC_TOP1_VAL 0x00100200 786*4882a593Smuzhiyun #define CLK_SRC_TOP2_VAL 0x11101000 787*4882a593Smuzhiyun #define CLK_SRC_TOP3_VAL 0x11111111 788*4882a593Smuzhiyun #define CLK_SRC_TOP4_VAL 0x11110111 789*4882a593Smuzhiyun #define CLK_SRC_TOP5_VAL 0x11111101 790*4882a593Smuzhiyun #define CLK_SRC_TOP6_VAL 0x11110111 791*4882a593Smuzhiyun #define CLK_SRC_TOP7_VAL 0x00022200 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun /* CLK_DIV_TOP */ 794*4882a593Smuzhiyun #define CLK_DIV_TOP0_VAL 0x23712311 795*4882a593Smuzhiyun #define CLK_DIV_TOP1_VAL 0x13100B00 796*4882a593Smuzhiyun #define CLK_DIV_TOP2_VAL 0x11101100 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun /* PLL Lock Value Factor */ 799*4882a593Smuzhiyun #define PLL_LOCK_FACTOR 200 800*4882a593Smuzhiyun #define PLL_X_LOCK_FACTOR 3000 801*4882a593Smuzhiyun 802*4882a593Smuzhiyun /* CLK_SRC_PERIC0 */ 803*4882a593Smuzhiyun #define SPDIF_SEL 1 804*4882a593Smuzhiyun #define PWM_SEL 3 805*4882a593Smuzhiyun #define UART4_SEL 3 806*4882a593Smuzhiyun #define UART3_SEL 3 807*4882a593Smuzhiyun #define UART2_SEL 3 808*4882a593Smuzhiyun #define UART1_SEL 3 809*4882a593Smuzhiyun #define UART0_SEL 3 810*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_RPLL */ 811*4882a593Smuzhiyun #define CLK_SRC_PERIC0_VAL ((SPDIF_SEL << 28) \ 812*4882a593Smuzhiyun | (PWM_SEL << 24) \ 813*4882a593Smuzhiyun | (UART4_SEL << 20) \ 814*4882a593Smuzhiyun | (UART3_SEL << 16) \ 815*4882a593Smuzhiyun | (UART2_SEL << 12) \ 816*4882a593Smuzhiyun | (UART1_SEL << 8) \ 817*4882a593Smuzhiyun | (UART0_SEL << 4)) 818*4882a593Smuzhiyun 819*4882a593Smuzhiyun /* CLK_SRC_PERIC1 */ 820*4882a593Smuzhiyun /* SRC_CLOCK = SCLK_EPLL */ 821*4882a593Smuzhiyun #define SPI0_SEL 6 822*4882a593Smuzhiyun #define SPI1_SEL 6 823*4882a593Smuzhiyun #define SPI2_SEL 6 824*4882a593Smuzhiyun #define AUDIO0_SEL 6 825*4882a593Smuzhiyun #define AUDIO1_SEL 6 826*4882a593Smuzhiyun #define AUDIO2_SEL 6 827*4882a593Smuzhiyun #define CLK_SRC_PERIC1_VAL ((SPI2_SEL << 28) \ 828*4882a593Smuzhiyun | (SPI1_SEL << 24) \ 829*4882a593Smuzhiyun | (SPI0_SEL << 20) \ 830*4882a593Smuzhiyun | (AUDIO2_SEL << 16) \ 831*4882a593Smuzhiyun | (AUDIO2_SEL << 12) \ 832*4882a593Smuzhiyun | (AUDIO2_SEL << 8)) 833*4882a593Smuzhiyun 834*4882a593Smuzhiyun /* CLK_DIV_PERIC0 */ 835*4882a593Smuzhiyun #define PWM_RATIO 8 836*4882a593Smuzhiyun #define UART4_RATIO 9 837*4882a593Smuzhiyun #define UART3_RATIO 9 838*4882a593Smuzhiyun #define UART2_RATIO 9 839*4882a593Smuzhiyun #define UART1_RATIO 9 840*4882a593Smuzhiyun #define UART0_RATIO 9 841*4882a593Smuzhiyun 842*4882a593Smuzhiyun #define CLK_DIV_PERIC0_VAL ((PWM_RATIO << 28) \ 843*4882a593Smuzhiyun | (UART4_RATIO << 24) \ 844*4882a593Smuzhiyun | (UART3_RATIO << 20) \ 845*4882a593Smuzhiyun | (UART2_RATIO << 16) \ 846*4882a593Smuzhiyun | (UART1_RATIO << 12) \ 847*4882a593Smuzhiyun | (UART0_RATIO << 8)) 848*4882a593Smuzhiyun /* CLK_DIV_PERIC1 */ 849*4882a593Smuzhiyun #define SPI2_RATIO 0x1 850*4882a593Smuzhiyun #define SPI1_RATIO 0x1 851*4882a593Smuzhiyun #define SPI0_RATIO 0x1 852*4882a593Smuzhiyun #define CLK_DIV_PERIC1_VAL ((SPI2_RATIO << 28) \ 853*4882a593Smuzhiyun | (SPI1_RATIO << 24) \ 854*4882a593Smuzhiyun | (SPI0_RATIO << 20)) 855*4882a593Smuzhiyun 856*4882a593Smuzhiyun /* CLK_DIV_PERIC2 */ 857*4882a593Smuzhiyun #define PCM2_RATIO 0x3 858*4882a593Smuzhiyun #define PCM1_RATIO 0x3 859*4882a593Smuzhiyun #define CLK_DIV_PERIC2_VAL ((PCM2_RATIO << 24) \ 860*4882a593Smuzhiyun | (PCM1_RATIO << 16)) 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun /* CLK_DIV_PERIC3 */ 863*4882a593Smuzhiyun #define AUDIO2_RATIO 0x5 864*4882a593Smuzhiyun #define AUDIO1_RATIO 0x5 865*4882a593Smuzhiyun #define AUDIO0_RATIO 0x5 866*4882a593Smuzhiyun #define CLK_DIV_PERIC3_VAL ((AUDIO2_RATIO << 28) \ 867*4882a593Smuzhiyun | (AUDIO1_RATIO << 24) \ 868*4882a593Smuzhiyun | (AUDIO0_RATIO << 20)) 869*4882a593Smuzhiyun 870*4882a593Smuzhiyun /* CLK_DIV_PERIC4 */ 871*4882a593Smuzhiyun #define SPI2_PRE_RATIO 0x2 872*4882a593Smuzhiyun #define SPI1_PRE_RATIO 0x2 873*4882a593Smuzhiyun #define SPI0_PRE_RATIO 0x2 874*4882a593Smuzhiyun #define CLK_DIV_PERIC4_VAL ((SPI2_PRE_RATIO << 24) \ 875*4882a593Smuzhiyun | (SPI1_PRE_RATIO << 16) \ 876*4882a593Smuzhiyun | (SPI0_PRE_RATIO << 8)) 877*4882a593Smuzhiyun 878*4882a593Smuzhiyun /* CLK_SRC_DISP1_0 */ 879*4882a593Smuzhiyun #define CLK_SRC_DISP1_0_VAL 0x10666600 880*4882a593Smuzhiyun #define CLK_DIV_DISP1_0_VAL 0x01050211 881*4882a593Smuzhiyun 882*4882a593Smuzhiyun #define APLL_FOUT (1 << 0) 883*4882a593Smuzhiyun #define KPLL_FOUT (1 << 0) 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun #define CLK_DIV_CPERI1_VAL 0x3f3f0000 886*4882a593Smuzhiyun #endif 887*4882a593Smuzhiyun 888*4882a593Smuzhiyun struct mem_timings; 889*4882a593Smuzhiyun 890*4882a593Smuzhiyun /* Errors that we can encourter in low-level setup */ 891*4882a593Smuzhiyun enum { 892*4882a593Smuzhiyun SETUP_ERR_OK, 893*4882a593Smuzhiyun SETUP_ERR_RDLV_COMPLETE_TIMEOUT = -1, 894*4882a593Smuzhiyun SETUP_ERR_ZQ_CALIBRATION_FAILURE = -2, 895*4882a593Smuzhiyun }; 896*4882a593Smuzhiyun 897*4882a593Smuzhiyun /* 898*4882a593Smuzhiyun * Memory variant specific initialization code for DDR3 899*4882a593Smuzhiyun * 900*4882a593Smuzhiyun * @param mem Memory timings for this memory type. 901*4882a593Smuzhiyun * @param reset Reset DDR PHY during initialization. 902*4882a593Smuzhiyun * @return 0 if ok, SETUP_ERR_... if there is a problem 903*4882a593Smuzhiyun */ 904*4882a593Smuzhiyun int ddr3_mem_ctrl_init(struct mem_timings *mem, int reset); 905*4882a593Smuzhiyun 906*4882a593Smuzhiyun /* Memory variant specific initialization code for LPDDR3 */ 907*4882a593Smuzhiyun void lpddr3_mem_ctrl_init(void); 908*4882a593Smuzhiyun 909*4882a593Smuzhiyun /* 910*4882a593Smuzhiyun * Configure ZQ I/O interface 911*4882a593Smuzhiyun * 912*4882a593Smuzhiyun * @param mem Memory timings for this memory type. 913*4882a593Smuzhiyun * @param phy0_con16 Register address for dmc_phy0->phy_con16 914*4882a593Smuzhiyun * @param phy1_con16 Register address for dmc_phy1->phy_con16 915*4882a593Smuzhiyun * @param phy0_con17 Register address for dmc_phy0->phy_con17 916*4882a593Smuzhiyun * @param phy1_con17 Register address for dmc_phy1->phy_con17 917*4882a593Smuzhiyun * @return 0 if ok, -1 on error 918*4882a593Smuzhiyun */ 919*4882a593Smuzhiyun int dmc_config_zq(struct mem_timings *mem, uint32_t *phy0_con16, 920*4882a593Smuzhiyun uint32_t *phy1_con16, uint32_t *phy0_con17, 921*4882a593Smuzhiyun uint32_t *phy1_con17); 922*4882a593Smuzhiyun /* 923*4882a593Smuzhiyun * Send NOP and MRS/EMRS Direct commands 924*4882a593Smuzhiyun * 925*4882a593Smuzhiyun * @param mem Memory timings for this memory type. 926*4882a593Smuzhiyun * @param directcmd Register address for dmc_phy->directcmd 927*4882a593Smuzhiyun */ 928*4882a593Smuzhiyun void dmc_config_mrs(struct mem_timings *mem, uint32_t *directcmd); 929*4882a593Smuzhiyun 930*4882a593Smuzhiyun /* 931*4882a593Smuzhiyun * Send PALL Direct commands 932*4882a593Smuzhiyun * 933*4882a593Smuzhiyun * @param mem Memory timings for this memory type. 934*4882a593Smuzhiyun * @param directcmd Register address for dmc_phy->directcmd 935*4882a593Smuzhiyun */ 936*4882a593Smuzhiyun void dmc_config_prech(struct mem_timings *mem, uint32_t *directcmd); 937*4882a593Smuzhiyun 938*4882a593Smuzhiyun /* 939*4882a593Smuzhiyun * Reset the DLL. This function is common between DDR3 and LPDDR2. 940*4882a593Smuzhiyun * However, the reset value is different. So we are passing a flag 941*4882a593Smuzhiyun * ddr_mode to distinguish between LPDDR2 and DDR3. 942*4882a593Smuzhiyun * 943*4882a593Smuzhiyun * @param phycontrol0 Register address for dmc_phy->phycontrol0 944*4882a593Smuzhiyun * @param ddr_mode Type of DDR memory 945*4882a593Smuzhiyun */ 946*4882a593Smuzhiyun void update_reset_dll(uint32_t *phycontrol0, enum ddr_mode); 947*4882a593Smuzhiyun #endif 948