1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 2014 Samsung Electronics 3*4882a593Smuzhiyun * Przemyslaw Marczak <p.marczak@samsung.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __ODROIDU3_SETUP__ 9*4882a593Smuzhiyun #define __ODROIDU3_SETUP__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* A/M PLL_CON0 */ 12*4882a593Smuzhiyun #define SDIV(x) ((x) & 0x7) 13*4882a593Smuzhiyun #define PDIV(x) (((x) & 0x3f) << 8) 14*4882a593Smuzhiyun #define MDIV(x) (((x) & 0x3ff) << 16) 15*4882a593Smuzhiyun #define FSEL(x) (((x) & 0x1) << 27) 16*4882a593Smuzhiyun #define PLL_LOCKED_BIT (0x1 << 29) 17*4882a593Smuzhiyun #define PLL_ENABLE(x) (((x) & 0x1) << 31) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* CLK_SRC_CPU */ 20*4882a593Smuzhiyun #define MUX_APLL_SEL(x) ((x) & 0x1) 21*4882a593Smuzhiyun #define MUX_CORE_SEL(x) (((x) & 0x1) << 16) 22*4882a593Smuzhiyun #define MUX_HPM_SEL(x) (((x) & 0x1) << 20) 23*4882a593Smuzhiyun #define MUX_MPLL_USER_SEL_C(x) (((x) & 0x1) << 24) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define MUX_STAT_CHANGING 0x100 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* CLK_MUX_STAT_CPU */ 28*4882a593Smuzhiyun #define APLL_SEL(x) ((x) & 0x7) 29*4882a593Smuzhiyun #define CORE_SEL(x) (((x) & 0x7) << 16) 30*4882a593Smuzhiyun #define HPM_SEL(x) (((x) & 0x7) << 20) 31*4882a593Smuzhiyun #define MPLL_USER_SEL_C(x) (((x) & 0x7) << 24) 32*4882a593Smuzhiyun #define MUX_STAT_CPU_CHANGING (APLL_SEL(MUX_STAT_CHANGING) | \ 33*4882a593Smuzhiyun CORE_SEL(MUX_STAT_CHANGING) | \ 34*4882a593Smuzhiyun HPM_SEL(MUX_STAT_CHANGING) | \ 35*4882a593Smuzhiyun MPLL_USER_SEL_C(MUX_STAT_CHANGING)) 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* CLK_DIV_CPU0 */ 38*4882a593Smuzhiyun #define CORE_RATIO(x) ((x) & 0x7) 39*4882a593Smuzhiyun #define COREM0_RATIO(x) (((x) & 0x7) << 4) 40*4882a593Smuzhiyun #define COREM1_RATIO(x) (((x) & 0x7) << 8) 41*4882a593Smuzhiyun #define PERIPH_RATIO(x) (((x) & 0x7) << 12) 42*4882a593Smuzhiyun #define ATB_RATIO(x) (((x) & 0x7) << 16) 43*4882a593Smuzhiyun #define PCLK_DBG_RATIO(x) (((x) & 0x7) << 20) 44*4882a593Smuzhiyun #define APLL_RATIO(x) (((x) & 0x7) << 24) 45*4882a593Smuzhiyun #define CORE2_RATIO(x) (((x) & 0x7) << 28) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /* CLK_DIV_STAT_CPU0 */ 48*4882a593Smuzhiyun #define DIV_CORE(x) ((x) & 0x1) 49*4882a593Smuzhiyun #define DIV_COREM0(x) (((x) & 0x1) << 4) 50*4882a593Smuzhiyun #define DIV_COREM1(x) (((x) & 0x1) << 8) 51*4882a593Smuzhiyun #define DIV_PERIPH(x) (((x) & 0x1) << 12) 52*4882a593Smuzhiyun #define DIV_ATB(x) (((x) & 0x1) << 16) 53*4882a593Smuzhiyun #define DIV_PCLK_DBG(x) (((x) & 0x1) << 20) 54*4882a593Smuzhiyun #define DIV_APLL(x) (((x) & 0x1) << 24) 55*4882a593Smuzhiyun #define DIV_CORE2(x) (((x) & 0x1) << 28) 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #define DIV_STAT_CHANGING 0x1 58*4882a593Smuzhiyun #define DIV_STAT_CPU0_CHANGING (DIV_CORE(DIV_STAT_CHANGING) | \ 59*4882a593Smuzhiyun DIV_COREM0(DIV_STAT_CHANGING) | \ 60*4882a593Smuzhiyun DIV_COREM1(DIV_STAT_CHANGING) | \ 61*4882a593Smuzhiyun DIV_PERIPH(DIV_STAT_CHANGING) | \ 62*4882a593Smuzhiyun DIV_ATB(DIV_STAT_CHANGING) | \ 63*4882a593Smuzhiyun DIV_PCLK_DBG(DIV_STAT_CHANGING) | \ 64*4882a593Smuzhiyun DIV_APLL(DIV_STAT_CHANGING) | \ 65*4882a593Smuzhiyun DIV_CORE2(DIV_STAT_CHANGING)) 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* CLK_DIV_CPU1 */ 68*4882a593Smuzhiyun #define COPY_RATIO(x) ((x) & 0x7) 69*4882a593Smuzhiyun #define HPM_RATIO(x) (((x) & 0x7) << 4) 70*4882a593Smuzhiyun #define CORES_RATIO(x) (((x) & 0x7) << 8) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun /* CLK_DIV_STAT_CPU1 */ 73*4882a593Smuzhiyun #define DIV_COPY(x) ((x) & 0x7) 74*4882a593Smuzhiyun #define DIV_HPM(x) (((x) & 0x1) << 4) 75*4882a593Smuzhiyun #define DIV_CORES(x) (((x) & 0x1) << 8) 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define DIV_STAT_CPU1_CHANGING (DIV_COPY(DIV_STAT_CHANGING) | \ 78*4882a593Smuzhiyun DIV_HPM(DIV_STAT_CHANGING) | \ 79*4882a593Smuzhiyun DIV_CORES(DIV_STAT_CHANGING)) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun /* CLK_SRC_DMC */ 82*4882a593Smuzhiyun #define MUX_C2C_SEL(x) ((x) & 0x1) 83*4882a593Smuzhiyun #define MUX_DMC_BUS_SEL(x) (((x) & 0x1) << 4) 84*4882a593Smuzhiyun #define MUX_DPHY_SEL(x) (((x) & 0x1) << 8) 85*4882a593Smuzhiyun #define MUX_MPLL_SEL(x) (((x) & 0x1) << 12) 86*4882a593Smuzhiyun #define MUX_PWI_SEL(x) (((x) & 0xf) << 16) 87*4882a593Smuzhiyun #define MUX_G2D_ACP0_SEL(x) (((x) & 0x1) << 20) 88*4882a593Smuzhiyun #define MUX_G2D_ACP1_SEL(x) (((x) & 0x1) << 24) 89*4882a593Smuzhiyun #define MUX_G2D_ACP_SEL(x) (((x) & 0x1) << 28) 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /* CLK_MUX_STAT_DMC */ 92*4882a593Smuzhiyun #define C2C_SEL(x) (((x)) & 0x7) 93*4882a593Smuzhiyun #define DMC_BUS_SEL(x) (((x) & 0x7) << 4) 94*4882a593Smuzhiyun #define DPHY_SEL(x) (((x) & 0x7) << 8) 95*4882a593Smuzhiyun #define MPLL_SEL(x) (((x) & 0x7) << 12) 96*4882a593Smuzhiyun /* #define PWI_SEL(x) (((x) & 0xf) << 16) - Reserved */ 97*4882a593Smuzhiyun #define G2D_ACP0_SEL(x) (((x) & 0x7) << 20) 98*4882a593Smuzhiyun #define G2D_ACP1_SEL(x) (((x) & 0x7) << 24) 99*4882a593Smuzhiyun #define G2D_ACP_SEL(x) (((x) & 0x7) << 28) 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #define MUX_STAT_DMC_CHANGING (C2C_SEL(MUX_STAT_CHANGING) | \ 102*4882a593Smuzhiyun DMC_BUS_SEL(MUX_STAT_CHANGING) | \ 103*4882a593Smuzhiyun DPHY_SEL(MUX_STAT_CHANGING) | \ 104*4882a593Smuzhiyun MPLL_SEL(MUX_STAT_CHANGING) |\ 105*4882a593Smuzhiyun G2D_ACP0_SEL(MUX_STAT_CHANGING) | \ 106*4882a593Smuzhiyun G2D_ACP1_SEL(MUX_STAT_CHANGING) | \ 107*4882a593Smuzhiyun G2D_ACP_SEL(MUX_STAT_CHANGING)) 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun /* CLK_DIV_DMC0 */ 110*4882a593Smuzhiyun #define ACP_RATIO(x) ((x) & 0x7) 111*4882a593Smuzhiyun #define ACP_PCLK_RATIO(x) (((x) & 0x7) << 4) 112*4882a593Smuzhiyun #define DPHY_RATIO(x) (((x) & 0x7) << 8) 113*4882a593Smuzhiyun #define DMC_RATIO(x) (((x) & 0x7) << 12) 114*4882a593Smuzhiyun #define DMCD_RATIO(x) (((x) & 0x7) << 16) 115*4882a593Smuzhiyun #define DMCP_RATIO(x) (((x) & 0x7) << 20) 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* CLK_DIV_STAT_DMC0 */ 118*4882a593Smuzhiyun #define DIV_ACP(x) ((x) & 0x1) 119*4882a593Smuzhiyun #define DIV_ACP_PCLK(x) (((x) & 0x1) << 4) 120*4882a593Smuzhiyun #define DIV_DPHY(x) (((x) & 0x1) << 8) 121*4882a593Smuzhiyun #define DIV_DMC(x) (((x) & 0x1) << 12) 122*4882a593Smuzhiyun #define DIV_DMCD(x) (((x) & 0x1) << 16) 123*4882a593Smuzhiyun #define DIV_DMCP(x) (((x) & 0x1) << 20) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun #define DIV_STAT_DMC0_CHANGING (DIV_ACP(DIV_STAT_CHANGING) | \ 126*4882a593Smuzhiyun DIV_ACP_PCLK(DIV_STAT_CHANGING) | \ 127*4882a593Smuzhiyun DIV_DPHY(DIV_STAT_CHANGING) | \ 128*4882a593Smuzhiyun DIV_DMC(DIV_STAT_CHANGING) | \ 129*4882a593Smuzhiyun DIV_DMCD(DIV_STAT_CHANGING) | \ 130*4882a593Smuzhiyun DIV_DMCP(DIV_STAT_CHANGING)) 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun /* CLK_DIV_DMC1 */ 133*4882a593Smuzhiyun #define G2D_ACP_RATIO(x) ((x) & 0xf) 134*4882a593Smuzhiyun #define C2C_RATIO(x) (((x) & 0x7) << 4) 135*4882a593Smuzhiyun #define PWI_RATIO(x) (((x) & 0xf) << 8) 136*4882a593Smuzhiyun #define C2C_ACLK_RATIO(x) (((x) & 0x7) << 12) 137*4882a593Smuzhiyun #define DVSEM_RATIO(x) (((x) & 0x7f) << 16) 138*4882a593Smuzhiyun #define DPM_RATIO(x) (((x) & 0x7f) << 24) 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun /* CLK_DIV_STAT_DMC1 */ 141*4882a593Smuzhiyun #define DIV_G2D_ACP(x) ((x) & 0x1) 142*4882a593Smuzhiyun #define DIV_C2C(x) (((x) & 0x1) << 4) 143*4882a593Smuzhiyun #define DIV_PWI(x) (((x) & 0x1) << 8) 144*4882a593Smuzhiyun #define DIV_C2C_ACLK(x) (((x) & 0x1) << 12) 145*4882a593Smuzhiyun #define DIV_DVSEM(x) (((x) & 0x1) << 16) 146*4882a593Smuzhiyun #define DIV_DPM(x) (((x) & 0x1) << 24) 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun #define DIV_STAT_DMC1_CHANGING (DIV_G2D_ACP(DIV_STAT_CHANGING) | \ 149*4882a593Smuzhiyun DIV_C2C(DIV_STAT_CHANGING) | \ 150*4882a593Smuzhiyun DIV_PWI(DIV_STAT_CHANGING) | \ 151*4882a593Smuzhiyun DIV_C2C_ACLK(DIV_STAT_CHANGING) | \ 152*4882a593Smuzhiyun DIV_DVSEM(DIV_STAT_CHANGING) | \ 153*4882a593Smuzhiyun DIV_DPM(DIV_STAT_CHANGING)) 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun /* Set CLK_SRC_PERIL0 */ 156*4882a593Smuzhiyun #define UART4_SEL(x) (((x) & 0xf) << 16) 157*4882a593Smuzhiyun #define UART3_SEL(x) (((x) & 0xf) << 12) 158*4882a593Smuzhiyun #define UART2_SEL(x) (((x) & 0xf) << 8) 159*4882a593Smuzhiyun #define UART1_SEL(x) (((x) & 0xf) << 4) 160*4882a593Smuzhiyun #define UART0_SEL(x) ((x) & 0xf) 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun /* Set CLK_DIV_PERIL0 */ 163*4882a593Smuzhiyun #define UART4_RATIO(x) (((x) & 0xf) << 16) 164*4882a593Smuzhiyun #define UART3_RATIO(x) (((x) & 0xf) << 12) 165*4882a593Smuzhiyun #define UART2_RATIO(x) (((x) & 0xf) << 8) 166*4882a593Smuzhiyun #define UART1_RATIO(x) (((x) & 0xf) << 4) 167*4882a593Smuzhiyun #define UART0_RATIO(x) ((x) & 0xf) 168*4882a593Smuzhiyun 169*4882a593Smuzhiyun /* Set CLK_DIV_STAT_PERIL0 */ 170*4882a593Smuzhiyun #define DIV_UART4(x) (((x) & 0x1) << 16) 171*4882a593Smuzhiyun #define DIV_UART3(x) (((x) & 0x1) << 12) 172*4882a593Smuzhiyun #define DIV_UART2(x) (((x) & 0x1) << 8) 173*4882a593Smuzhiyun #define DIV_UART1(x) (((x) & 0x1) << 4) 174*4882a593Smuzhiyun #define DIV_UART0(x) ((x) & 0x1) 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun #define DIV_STAT_PERIL0_CHANGING (DIV_UART4(DIV_STAT_CHANGING) | \ 177*4882a593Smuzhiyun DIV_UART3(DIV_STAT_CHANGING) | \ 178*4882a593Smuzhiyun DIV_UART2(DIV_STAT_CHANGING) | \ 179*4882a593Smuzhiyun DIV_UART1(DIV_STAT_CHANGING) | \ 180*4882a593Smuzhiyun DIV_UART0(DIV_STAT_CHANGING)) 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun /* CLK_DIV_FSYS1 */ 183*4882a593Smuzhiyun #define MMC0_RATIO(x) ((x) & 0xf) 184*4882a593Smuzhiyun #define MMC0_PRE_RATIO(x) (((x) & 0xff) << 8) 185*4882a593Smuzhiyun #define MMC1_RATIO(x) (((x) & 0xf) << 16) 186*4882a593Smuzhiyun #define MMC1_PRE_RATIO(x) (((x) & 0xff) << 24) 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun /* CLK_DIV_STAT_FSYS1 */ 189*4882a593Smuzhiyun #define DIV_MMC0(x) ((x) & 1) 190*4882a593Smuzhiyun #define DIV_MMC0_PRE(x) (((x) & 1) << 8) 191*4882a593Smuzhiyun #define DIV_MMC1(x) (((x) & 1) << 16) 192*4882a593Smuzhiyun #define DIV_MMC1_PRE(x) (((x) & 1) << 24) 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun #define DIV_STAT_FSYS1_CHANGING (DIV_MMC0(DIV_STAT_CHANGING) | \ 195*4882a593Smuzhiyun DIV_MMC0_PRE(DIV_STAT_CHANGING) | \ 196*4882a593Smuzhiyun DIV_MMC1(DIV_STAT_CHANGING) | \ 197*4882a593Smuzhiyun DIV_MMC1_PRE(DIV_STAT_CHANGING)) 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun /* CLK_DIV_FSYS2 */ 200*4882a593Smuzhiyun #define MMC2_RATIO(x) ((x) & 0xf) 201*4882a593Smuzhiyun #define MMC2_PRE_RATIO(x) (((x) & 0xff) << 8) 202*4882a593Smuzhiyun #define MMC3_RATIO(x) (((x) & 0xf) << 16) 203*4882a593Smuzhiyun #define MMC3_PRE_RATIO(x) (((x) & 0xff) << 24) 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun /* CLK_DIV_STAT_FSYS2 */ 206*4882a593Smuzhiyun #define DIV_MMC2(x) ((x) & 0x1) 207*4882a593Smuzhiyun #define DIV_MMC2_PRE(x) (((x) & 0x1) << 8) 208*4882a593Smuzhiyun #define DIV_MMC3(x) (((x) & 0x1) << 16) 209*4882a593Smuzhiyun #define DIV_MMC3_PRE(x) (((x) & 0x1) << 24) 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun #define DIV_STAT_FSYS2_CHANGING (DIV_MMC2(DIV_STAT_CHANGING) | \ 212*4882a593Smuzhiyun DIV_MMC2_PRE(DIV_STAT_CHANGING) | \ 213*4882a593Smuzhiyun DIV_MMC3(DIV_STAT_CHANGING) | \ 214*4882a593Smuzhiyun DIV_MMC3_PRE(DIV_STAT_CHANGING)) 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun /* CLK_DIV_FSYS3 */ 217*4882a593Smuzhiyun #define MMC4_RATIO(x) ((x) & 0x7) 218*4882a593Smuzhiyun #define MMC4_PRE_RATIO(x) (((x) & 0xff) << 8) 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* CLK_DIV_STAT_FSYS3 */ 221*4882a593Smuzhiyun #define DIV_MMC4(x) ((x) & 0x1) 222*4882a593Smuzhiyun #define DIV_MMC4_PRE(x) (((x) & 0x1) << 8) 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun #define DIV_STAT_FSYS3_CHANGING (DIV_MMC4(DIV_STAT_CHANGING) | \ 225*4882a593Smuzhiyun DIV_MMC4_PRE(DIV_STAT_CHANGING)) 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun /* XCL205 GPIO config - Odroid U3 */ 228*4882a593Smuzhiyun #define XCL205_GPIO_BASE EXYNOS4X12_GPIO_PART1_BASE 229*4882a593Smuzhiyun #define XCL205_EN_GPIO_OFFSET 0x20 /* GPA1 */ 230*4882a593Smuzhiyun #define XCL205_EN_GPIO_PIN 1 231*4882a593Smuzhiyun #define XCL205_EN_GPIO_CON (XCL205_GPIO_BASE + \ 232*4882a593Smuzhiyun XCL205_EN_GPIO_OFFSET) 233*4882a593Smuzhiyun #define XCL205_EN_GPIO_CON_CFG (S5P_GPIO_OUTPUT << \ 234*4882a593Smuzhiyun 4 * XCL205_EN_GPIO_PIN) 235*4882a593Smuzhiyun #define XCL205_EN_GPIO_DAT_CFG (0x1 << XCL205_EN_GPIO_PIN) 236*4882a593Smuzhiyun #define XCL205_EN_GPIO_PUD_CFG (S5P_GPIO_PULL_UP << \ 237*4882a593Smuzhiyun 2 * XCL205_EN_GPIO_PIN) 238*4882a593Smuzhiyun #define XCL205_EN_GPIO_DRV_CFG (S5P_GPIO_DRV_4X << \ 239*4882a593Smuzhiyun 2 * XCL205_EN_GPIO_PIN) 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun #define XCL205_STATE_GPIO_OFFSET 0x80 /* GPC1 */ 242*4882a593Smuzhiyun #define XCL205_STATE_GPIO_PIN 2 243*4882a593Smuzhiyun #define XCL205_STATE_GPIO_CON (XCL205_GPIO_BASE + \ 244*4882a593Smuzhiyun XCL205_STATE_GPIO_OFFSET) 245*4882a593Smuzhiyun #define XCL205_STATE_GPIO_DAT XCL205_STATE_GPIO_CON + 0x4 246*4882a593Smuzhiyun #define XCL205_STATE_GPIO_CON_CFG (S5P_GPIO_INPUT << \ 247*4882a593Smuzhiyun 4 * XCL205_STATE_GPIO_PIN) 248*4882a593Smuzhiyun #define XCL205_STATE_GPIO_PUD_CFG (S5P_GPIO_PULL_NONE << \ 249*4882a593Smuzhiyun 2 * XCL205_STATE_GPIO_PIN) 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun #ifdef CONFIG_BOARD_TYPES 252*4882a593Smuzhiyun extern void sdelay(unsigned long); 253*4882a593Smuzhiyun #endif 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun #endif /*__ODROIDU3_SETUP__ */ 256