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