linux/drivers/memory/tegra/tegra210-emc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright (c) 2015-2020, NVIDIA CORPORATION.  All rights reserved.
   4 */
   5
   6#ifndef TEGRA210_EMC_H
   7#define TEGRA210_EMC_H
   8
   9#include <linux/clk.h>
  10#include <linux/clk/tegra.h>
  11#include <linux/io.h>
  12#include <linux/platform_device.h>
  13
  14#define DVFS_FGCG_HIGH_SPEED_THRESHOLD                          1000
  15#define IOBRICK_DCC_THRESHOLD                                   2400
  16#define DVFS_FGCG_MID_SPEED_THRESHOLD                           600
  17
  18#define EMC_STATUS_UPDATE_TIMEOUT                               1000
  19
  20/* register definitions */
  21#define EMC_INTSTATUS                                           0x0
  22#define EMC_INTSTATUS_CLKCHANGE_COMPLETE                        BIT(4)
  23#define EMC_DBG                                                 0x8
  24#define EMC_DBG_WRITE_MUX_ACTIVE                                BIT(1)
  25#define EMC_DBG_WRITE_ACTIVE_ONLY                               BIT(30)
  26#define EMC_CFG                                                 0xc
  27#define EMC_CFG_DRAM_CLKSTOP_PD                                 BIT(31)
  28#define EMC_CFG_DRAM_CLKSTOP_SR                                 BIT(30)
  29#define EMC_CFG_DRAM_ACPD                                       BIT(29)
  30#define EMC_CFG_DYN_SELF_REF                                    BIT(28)
  31#define EMC_PIN                                                 0x24
  32#define EMC_PIN_PIN_CKE                                         BIT(0)
  33#define EMC_PIN_PIN_CKEB                                        BIT(1)
  34#define EMC_PIN_PIN_CKE_PER_DEV                                 BIT(2)
  35#define EMC_TIMING_CONTROL                                      0x28
  36#define EMC_RC                                                  0x2c
  37#define EMC_RFC                                                 0x30
  38#define EMC_RAS                                                 0x34
  39#define EMC_RP                                                  0x38
  40#define EMC_R2W                                                 0x3c
  41#define EMC_W2R                                                 0x40
  42#define EMC_R2P                                                 0x44
  43#define EMC_W2P                                                 0x48
  44#define EMC_RD_RCD                                              0x4c
  45#define EMC_WR_RCD                                              0x50
  46#define EMC_RRD                                                 0x54
  47#define EMC_REXT                                                0x58
  48#define EMC_WDV                                                 0x5c
  49#define EMC_QUSE                                                0x60
  50#define EMC_QRST                                                0x64
  51#define EMC_QSAFE                                               0x68
  52#define EMC_RDV                                                 0x6c
  53#define EMC_REFRESH                                             0x70
  54#define EMC_BURST_REFRESH_NUM                                   0x74
  55#define EMC_PDEX2WR                                             0x78
  56#define EMC_PDEX2RD                                             0x7c
  57#define EMC_PCHG2PDEN                                           0x80
  58#define EMC_ACT2PDEN                                            0x84
  59#define EMC_AR2PDEN                                             0x88
  60#define EMC_RW2PDEN                                             0x8c
  61#define EMC_TXSR                                                0x90
  62#define EMC_TCKE                                                0x94
  63#define EMC_TFAW                                                0x98
  64#define EMC_TRPAB                                               0x9c
  65#define EMC_TCLKSTABLE                                          0xa0
  66#define EMC_TCLKSTOP                                            0xa4
  67#define EMC_TREFBW                                              0xa8
  68#define EMC_TPPD                                                0xac
  69#define EMC_ODT_WRITE                                           0xb0
  70#define EMC_PDEX2MRR                                            0xb4
  71#define EMC_WEXT                                                0xb8
  72#define EMC_RFC_SLR                                             0xc0
  73#define EMC_MRS_WAIT_CNT2                                       0xc4
  74#define EMC_MRS_WAIT_CNT2_MRS_EXT2_WAIT_CNT_SHIFT               16
  75#define EMC_MRS_WAIT_CNT2_MRS_EXT1_WAIT_CNT_SHIFT               0
  76#define EMC_MRS_WAIT_CNT                                        0xc8
  77#define EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT                       0
  78#define EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK                        \
  79        (0x3FF << EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT)
  80
  81#define EMC_MRS                                                 0xcc
  82#define EMC_EMRS                                                0xd0
  83#define EMC_EMRS_USE_EMRS_LONG_CNT                              BIT(26)
  84#define EMC_REF                                                 0xd4
  85#define  EMC_REF_REF_CMD                                        BIT(0)
  86#define EMC_SELF_REF                                            0xe0
  87#define EMC_MRW                                                 0xe8
  88#define EMC_MRW_MRW_OP_SHIFT                                    0
  89#define EMC_MRW_MRW_OP_MASK                                     \
  90        (0xff << EMC_MRW_MRW_OP_SHIFT)
  91#define EMC_MRW_MRW_MA_SHIFT                                    16
  92#define EMC_MRW_USE_MRW_EXT_CNT                                 27
  93#define EMC_MRW_MRW_DEV_SELECTN_SHIFT                           30
  94
  95#define EMC_MRR                                                 0xec
  96#define EMC_MRR_DEV_SEL_SHIFT                                   30
  97#define EMC_MRR_DEV_SEL_MASK                                    0x3
  98#define EMC_MRR_MA_SHIFT                                        16
  99#define EMC_MRR_MA_MASK                                         0xff
 100#define EMC_MRR_DATA_SHIFT                                      0
 101#define EMC_MRR_DATA_MASK                                       0xffff
 102
 103#define EMC_FBIO_SPARE                                          0x100
 104#define EMC_FBIO_CFG5                                           0x104
 105#define EMC_FBIO_CFG5_DRAM_TYPE_SHIFT                           0
 106#define EMC_FBIO_CFG5_DRAM_TYPE_MASK                            \
 107        (0x3 << EMC_FBIO_CFG5_DRAM_TYPE_SHIFT)
 108#define EMC_FBIO_CFG5_CMD_TX_DIS                                BIT(8)
 109
 110#define EMC_PDEX2CKE                                            0x118
 111#define EMC_CKE2PDEN                                            0x11c
 112#define EMC_MPC                                                 0x128
 113#define EMC_EMRS2                                               0x12c
 114#define EMC_EMRS2_USE_EMRS2_LONG_CNT                            BIT(26)
 115#define EMC_MRW2                                                0x134
 116#define EMC_MRW3                                                0x138
 117#define EMC_MRW4                                                0x13c
 118#define EMC_R2R                                                 0x144
 119#define EMC_EINPUT                                              0x14c
 120#define EMC_EINPUT_DURATION                                     0x150
 121#define EMC_PUTERM_EXTRA                                        0x154
 122#define EMC_TCKESR                                              0x158
 123#define EMC_TPD                                                 0x15c
 124#define EMC_AUTO_CAL_CONFIG                                     0x2a4
 125#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_COMPUTE_START              BIT(0)
 126#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_MEASURE_STALL              BIT(9)
 127#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_UPDATE_STALL               BIT(10)
 128#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE                     BIT(29)
 129#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_START                      BIT(31)
 130#define EMC_EMC_STATUS                                          0x2b4
 131#define EMC_EMC_STATUS_MRR_DIVLD                                BIT(20)
 132#define EMC_EMC_STATUS_TIMING_UPDATE_STALLED                    BIT(23)
 133#define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT                  4
 134#define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_MASK                   \
 135        (0x3 << EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT)
 136#define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT               8
 137#define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_MASK                \
 138        (0x3 << EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT)
 139
 140#define EMC_CFG_2                                               0x2b8
 141#define EMC_CFG_DIG_DLL                                         0x2bc
 142#define EMC_CFG_DIG_DLL_CFG_DLL_EN                              BIT(0)
 143#define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_UNTIL_LOCK            BIT(1)
 144#define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_TRAFFIC               BIT(3)
 145#define EMC_CFG_DIG_DLL_CFG_DLL_STALL_RW_UNTIL_LOCK             BIT(4)
 146#define EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT                      6
 147#define EMC_CFG_DIG_DLL_CFG_DLL_MODE_MASK                       \
 148        (0x3 << EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT)
 149#define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT                8
 150#define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_MASK                 \
 151        (0x7 << EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT)
 152
 153#define EMC_CFG_DIG_DLL_PERIOD                                  0x2c0
 154#define EMC_DIG_DLL_STATUS                                      0x2c4
 155#define EMC_DIG_DLL_STATUS_DLL_LOCK                             BIT(15)
 156#define EMC_DIG_DLL_STATUS_DLL_PRIV_UPDATED                     BIT(17)
 157#define EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT                        0
 158#define EMC_DIG_DLL_STATUS_DLL_OUT_MASK                         \
 159        (0x7ff << EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT)
 160
 161#define EMC_CFG_DIG_DLL_1                                       0x2c8
 162#define EMC_RDV_MASK                                            0x2cc
 163#define EMC_WDV_MASK                                            0x2d0
 164#define EMC_RDV_EARLY_MASK                                      0x2d4
 165#define EMC_RDV_EARLY                                           0x2d8
 166#define EMC_AUTO_CAL_CONFIG8                                    0x2dc
 167#define EMC_ZCAL_INTERVAL                                       0x2e0
 168#define EMC_ZCAL_WAIT_CNT                                       0x2e4
 169#define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK                    0x7ff
 170#define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT                   0
 171
 172#define EMC_ZQ_CAL                                              0x2ec
 173#define EMC_ZQ_CAL_DEV_SEL_SHIFT                                30
 174#define EMC_ZQ_CAL_LONG                                         BIT(4)
 175#define EMC_ZQ_CAL_ZQ_LATCH_CMD                                 BIT(1)
 176#define EMC_ZQ_CAL_ZQ_CAL_CMD                                   BIT(0)
 177#define EMC_FDPD_CTRL_DQ                                        0x310
 178#define EMC_FDPD_CTRL_CMD                                       0x314
 179#define EMC_PMACRO_CMD_BRICK_CTRL_FDPD                          0x318
 180#define EMC_PMACRO_DATA_BRICK_CTRL_FDPD                         0x31c
 181#define EMC_PMACRO_BRICK_CTRL_RFU1                              0x330
 182#define EMC_PMACRO_BRICK_CTRL_RFU2                              0x334
 183#define EMC_TR_TIMING_0                                         0x3b4
 184#define EMC_TR_CTRL_1                                           0x3bc
 185#define EMC_TR_RDV                                              0x3c4
 186#define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE                      0x3cc
 187#define EMC_SEL_DPD_CTRL                                        0x3d8
 188#define EMC_SEL_DPD_CTRL_DATA_SEL_DPD_EN                        BIT(8)
 189#define EMC_SEL_DPD_CTRL_ODT_SEL_DPD_EN                         BIT(5)
 190#define EMC_SEL_DPD_CTRL_RESET_SEL_DPD_EN                       BIT(4)
 191#define EMC_SEL_DPD_CTRL_CA_SEL_DPD_EN                          BIT(3)
 192#define EMC_SEL_DPD_CTRL_CLK_SEL_DPD_EN                         BIT(2)
 193#define EMC_PRE_REFRESH_REQ_CNT                                 0x3dc
 194#define EMC_DYN_SELF_REF_CONTROL                                0x3e0
 195#define EMC_TXSRDLL                                             0x3e4
 196#define EMC_CCFIFO_ADDR                                         0x3e8
 197#define  EMC_CCFIFO_ADDR_STALL_BY_1 (1 << 31)
 198#define  EMC_CCFIFO_ADDR_STALL(x) (((x) & 0x7fff) << 16)
 199#define  EMC_CCFIFO_ADDR_OFFSET(x) ((x) & 0xffff)
 200#define EMC_CCFIFO_DATA                                         0x3ec
 201#define EMC_TR_QPOP                                             0x3f4
 202#define EMC_TR_RDV_MASK                                         0x3f8
 203#define EMC_TR_QSAFE                                            0x3fc
 204#define EMC_TR_QRST                                             0x400
 205#define EMC_ISSUE_QRST                                          0x428
 206#define EMC_AUTO_CAL_CONFIG2                                    0x458
 207#define EMC_AUTO_CAL_CONFIG3                                    0x45c
 208#define EMC_TR_DVFS                                             0x460
 209#define EMC_AUTO_CAL_CHANNEL                                    0x464
 210#define EMC_IBDLY                                               0x468
 211#define EMC_OBDLY                                               0x46c
 212#define EMC_TXDSRVTTGEN                                         0x480
 213#define EMC_WE_DURATION                                         0x48c
 214#define EMC_WS_DURATION                                         0x490
 215#define EMC_WEV                                                 0x494
 216#define EMC_WSV                                                 0x498
 217#define EMC_CFG_3                                               0x49c
 218#define EMC_MRW6                                                0x4a4
 219#define EMC_MRW7                                                0x4a8
 220#define EMC_MRW8                                                0x4ac
 221#define EMC_MRW9                                                0x4b0
 222#define EMC_MRW10                                               0x4b4
 223#define EMC_MRW11                                               0x4b8
 224#define EMC_MRW12                                               0x4bc
 225#define EMC_MRW13                                               0x4c0
 226#define EMC_MRW14                                               0x4c4
 227#define EMC_MRW15                                               0x4d0
 228#define EMC_CFG_SYNC                                            0x4d4
 229#define EMC_FDPD_CTRL_CMD_NO_RAMP                               0x4d8
 230#define EMC_FDPD_CTRL_CMD_NO_RAMP_CMD_DPD_NO_RAMP_ENABLE        BIT(0)
 231#define EMC_WDV_CHK                                             0x4e0
 232#define EMC_CFG_PIPE_2                                          0x554
 233#define EMC_CFG_PIPE_CLK                                        0x558
 234#define EMC_CFG_PIPE_CLK_CLK_ALWAYS_ON                          BIT(0)
 235#define EMC_CFG_PIPE_1                                          0x55c
 236#define EMC_CFG_PIPE                                            0x560
 237#define EMC_QPOP                                                0x564
 238#define EMC_QUSE_WIDTH                                          0x568
 239#define EMC_PUTERM_WIDTH                                        0x56c
 240#define EMC_AUTO_CAL_CONFIG7                                    0x574
 241#define EMC_REFCTRL2                                            0x580
 242#define EMC_FBIO_CFG7                                           0x584
 243#define EMC_FBIO_CFG7_CH0_ENABLE                                BIT(1)
 244#define EMC_FBIO_CFG7_CH1_ENABLE                                BIT(2)
 245#define EMC_DATA_BRLSHFT_0                                      0x588
 246#define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT       21
 247#define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_MASK        \
 248        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT)
 249#define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT       18
 250#define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_MASK        \
 251        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT)
 252#define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT       15
 253#define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_MASK        \
 254        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT)
 255#define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT       12
 256#define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_MASK        \
 257        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT)
 258#define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT       9
 259#define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_MASK        \
 260        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT)
 261#define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT       6
 262#define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_MASK        \
 263        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT)
 264#define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT       3
 265#define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_MASK        \
 266        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT)
 267#define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT       0
 268#define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_MASK        \
 269        (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT)
 270
 271#define EMC_DATA_BRLSHFT_1                                      0x58c
 272#define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT       21
 273#define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_MASK        \
 274        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT)
 275#define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT       18
 276#define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_MASK        \
 277        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT)
 278#define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT       15
 279#define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_MASK        \
 280        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT)
 281#define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT       12
 282#define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_MASK        \
 283        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT)
 284#define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT       9
 285#define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_MASK        \
 286        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT)
 287#define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT       6
 288#define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_MASK        \
 289        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT)
 290#define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT       3
 291#define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_MASK        \
 292        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT)
 293#define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT       0
 294#define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_MASK        \
 295        (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT)
 296
 297#define EMC_RFCPB                                               0x590
 298#define EMC_DQS_BRLSHFT_0                                       0x594
 299#define EMC_DQS_BRLSHFT_1                                       0x598
 300#define EMC_CMD_BRLSHFT_0                                       0x59c
 301#define EMC_CMD_BRLSHFT_1                                       0x5a0
 302#define EMC_CMD_BRLSHFT_2                                       0x5a4
 303#define EMC_CMD_BRLSHFT_3                                       0x5a8
 304#define EMC_QUSE_BRLSHFT_0                                      0x5ac
 305#define EMC_AUTO_CAL_CONFIG4                                    0x5b0
 306#define EMC_AUTO_CAL_CONFIG5                                    0x5b4
 307#define EMC_QUSE_BRLSHFT_1                                      0x5b8
 308#define EMC_QUSE_BRLSHFT_2                                      0x5bc
 309#define EMC_CCDMW                                               0x5c0
 310#define EMC_QUSE_BRLSHFT_3                                      0x5c4
 311#define EMC_AUTO_CAL_CONFIG6                                    0x5cc
 312#define EMC_DLL_CFG_0                                           0x5e4
 313#define EMC_DLL_CFG_1                                           0x5e8
 314#define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT             10
 315#define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_MASK              \
 316        (0x7ff << EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT)
 317
 318#define EMC_CONFIG_SAMPLE_DELAY                                 0x5f0
 319#define EMC_CFG_UPDATE                                          0x5f4
 320#define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT               9
 321#define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_MASK                \
 322        (0x3 << EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT)
 323
 324#define EMC_PMACRO_QUSE_DDLL_RANK0_0                            0x600
 325#define EMC_PMACRO_QUSE_DDLL_RANK0_1                            0x604
 326#define EMC_PMACRO_QUSE_DDLL_RANK0_2                            0x608
 327#define EMC_PMACRO_QUSE_DDLL_RANK0_3                            0x60c
 328#define EMC_PMACRO_QUSE_DDLL_RANK0_4                            0x610
 329#define EMC_PMACRO_QUSE_DDLL_RANK0_5                            0x614
 330#define EMC_PMACRO_QUSE_DDLL_RANK1_0                            0x620
 331#define EMC_PMACRO_QUSE_DDLL_RANK1_1                            0x624
 332#define EMC_PMACRO_QUSE_DDLL_RANK1_2                            0x628
 333#define EMC_PMACRO_QUSE_DDLL_RANK1_3                            0x62c
 334#define EMC_PMACRO_QUSE_DDLL_RANK1_4                            0x630
 335#define EMC_PMACRO_QUSE_DDLL_RANK1_5                            0x634
 336#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0                      0x640
 337#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT \
 338        16
 339#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_MASK  \
 340        (0x3ff <<                                                            \
 341        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT)
 342#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT \
 343        0
 344#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_MASK \
 345        (0x3ff <<                                                           \
 346        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT)
 347
 348#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1                      0x644
 349#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT \
 350        16
 351#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_MASK  \
 352        (0x3ff <<                                                            \
 353        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT)
 354#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT \
 355        0
 356#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_MASK  \
 357        (0x3ff <<                                                            \
 358        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT)
 359
 360#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2                      0x648
 361#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT  \
 362        16
 363#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_MASK  \
 364        (0x3ff <<                                                            \
 365        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT)
 366#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT \
 367        0
 368#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_MASK  \
 369        (0x3ff <<                                                            \
 370        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT)
 371
 372#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3                      0x64c
 373#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT \
 374        16
 375#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_MASK  \
 376        (0x3ff <<                                                            \
 377        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT)
 378#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT \
 379        0
 380#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_MASK  \
 381        (0x3ff <<                                                            \
 382        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT)
 383
 384#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4                      0x650
 385#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5                      0x654
 386#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0                      0x660
 387#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT \
 388        16
 389#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_MASK  \
 390        (0x3ff <<                                                            \
 391        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT)
 392#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT \
 393        0
 394#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_MASK  \
 395        (0x3ff <<                                                            \
 396        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT)
 397
 398#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1                      0x664
 399#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT \
 400        16
 401#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_MASK  \
 402        (0x3ff <<                                                            \
 403        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT)
 404#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT \
 405        0
 406#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_MASK  \
 407        (0x3ff <<                                                            \
 408        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT)
 409
 410#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2                      0x668
 411#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT \
 412        16
 413#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_MASK  \
 414        (0x3ff <<                                                            \
 415        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT)
 416#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT \
 417        0
 418#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_MASK  \
 419        (0x3ff <<                                                            \
 420        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT)
 421
 422#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3                      0x66c
 423#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT \
 424        16
 425#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_MASK  \
 426        (0x3ff <<                                                            \
 427        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT)
 428#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT \
 429        0
 430#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_MASK  \
 431        (0x3ff <<                                                            \
 432        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT)
 433
 434#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4                      0x670
 435#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5                      0x674
 436#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0                     0x680
 437#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1                     0x684
 438#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2                     0x688
 439#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3                     0x68c
 440#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4                     0x690
 441#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5                     0x694
 442#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0                     0x6a0
 443#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1                     0x6a4
 444#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2                     0x6a8
 445#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3                     0x6ac
 446#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4                     0x6b0
 447#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5                     0x6b4
 448#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0                     0x6c0
 449#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1                     0x6c4
 450#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2                     0x6c8
 451#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3                     0x6cc
 452#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0                     0x6e0
 453#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1                     0x6e4
 454#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2                     0x6e8
 455#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3                     0x6ec
 456#define EMC_PMACRO_TX_PWRD_0                                    0x720
 457#define EMC_PMACRO_TX_PWRD_1                                    0x724
 458#define EMC_PMACRO_TX_PWRD_2                                    0x728
 459#define EMC_PMACRO_TX_PWRD_3                                    0x72c
 460#define EMC_PMACRO_TX_PWRD_4                                    0x730
 461#define EMC_PMACRO_TX_PWRD_5                                    0x734
 462#define EMC_PMACRO_TX_SEL_CLK_SRC_0                             0x740
 463#define EMC_PMACRO_TX_SEL_CLK_SRC_1                             0x744
 464#define EMC_PMACRO_TX_SEL_CLK_SRC_3                             0x74c
 465#define EMC_PMACRO_TX_SEL_CLK_SRC_2                             0x748
 466#define EMC_PMACRO_TX_SEL_CLK_SRC_4                             0x750
 467#define EMC_PMACRO_TX_SEL_CLK_SRC_5                             0x754
 468#define EMC_PMACRO_DDLL_BYPASS                                  0x760
 469#define EMC_PMACRO_DDLL_PWRD_0                                  0x770
 470#define EMC_PMACRO_DDLL_PWRD_1                                  0x774
 471#define EMC_PMACRO_DDLL_PWRD_2                                  0x778
 472#define EMC_PMACRO_CMD_CTRL_0                                   0x780
 473#define EMC_PMACRO_CMD_CTRL_1                                   0x784
 474#define EMC_PMACRO_CMD_CTRL_2                                   0x788
 475#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0               0x800
 476#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1               0x804
 477#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2               0x808
 478#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3               0x80c
 479#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0               0x810
 480#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1               0x814
 481#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2               0x818
 482#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3               0x81c
 483#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0               0x820
 484#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1               0x824
 485#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2               0x828
 486#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3               0x82c
 487#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0               0x830
 488#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1               0x834
 489#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2               0x838
 490#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3               0x83c
 491#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0               0x840
 492#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1               0x844
 493#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2               0x848
 494#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3               0x84c
 495#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0               0x850
 496#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1               0x854
 497#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2               0x858
 498#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3               0x85c
 499#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0               0x860
 500#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1               0x864
 501#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2               0x868
 502#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3               0x86c
 503#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0               0x870
 504#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1               0x874
 505#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2               0x878
 506#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3               0x87c
 507#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0                0x880
 508#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1                0x884
 509#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2                0x888
 510#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3                0x88c
 511#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0                0x890
 512#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1                0x894
 513#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2                0x898
 514#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3                0x89c
 515#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0                0x8a0
 516#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1                0x8a4
 517#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2                0x8a8
 518#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3                0x8ac
 519#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0                0x8b0
 520#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1                0x8b4
 521#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2                0x8b8
 522#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3                0x8bc
 523#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0               0x900
 524#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1               0x904
 525#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2               0x908
 526#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3               0x90c
 527#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0               0x910
 528#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1               0x914
 529#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2               0x918
 530#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3               0x91c
 531#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0               0x920
 532#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1               0x924
 533#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2               0x928
 534#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3               0x92c
 535#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0               0x930
 536#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1               0x934
 537#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2               0x938
 538#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3               0x93c
 539#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0               0x940
 540#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1               0x944
 541#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2               0x948
 542#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3               0x94c
 543#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0               0x950
 544#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1               0x954
 545#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2               0x958
 546#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3               0x95c
 547#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0               0x960
 548#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1               0x964
 549#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2               0x968
 550#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3               0x96c
 551#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0               0x970
 552#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1               0x974
 553#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2               0x978
 554#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3               0x97c
 555#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0                0x980
 556#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1                0x984
 557#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2                0x988
 558#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3                0x98c
 559#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0                0x990
 560#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1                0x994
 561#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2                0x998
 562#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3                0x99c
 563#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0                0x9a0
 564#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1                0x9a4
 565#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2                0x9a8
 566#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3                0x9ac
 567#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0                0x9b0
 568#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1                0x9b4
 569#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2                0x9b8
 570#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3                0x9bc
 571#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0               0xa00
 572#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1               0xa04
 573#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2               0xa08
 574#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0               0xa10
 575#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1               0xa14
 576#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2               0xa18
 577#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0               0xa20
 578#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1               0xa24
 579#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2               0xa28
 580#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0               0xa30
 581#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1               0xa34
 582#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2               0xa38
 583#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0               0xa40
 584#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1               0xa44
 585#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2               0xa48
 586#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0               0xa50
 587#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1               0xa54
 588#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2               0xa58
 589#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0               0xa60
 590#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1               0xa64
 591#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2               0xa68
 592#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0               0xa70
 593#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1               0xa74
 594#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2               0xa78
 595#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0               0xb00
 596#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1               0xb04
 597#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2               0xb08
 598#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0               0xb10
 599#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1               0xb14
 600#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2               0xb18
 601#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0               0xb20
 602#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1               0xb24
 603#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2               0xb28
 604#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0               0xb30
 605#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1               0xb34
 606#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2               0xb38
 607#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0               0xb40
 608#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1               0xb44
 609#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2               0xb48
 610#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0               0xb50
 611#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1               0xb54
 612#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2               0xb58
 613#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0               0xb60
 614#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1               0xb64
 615#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2               0xb68
 616#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0               0xb70
 617#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1               0xb74
 618#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2               0xb78
 619#define EMC_PMACRO_IB_VREF_DQ_0                                 0xbe0
 620#define EMC_PMACRO_IB_VREF_DQ_1                                 0xbe4
 621#define EMC_PMACRO_IB_VREF_DQS_0                                0xbf0
 622#define EMC_PMACRO_IB_VREF_DQS_1                                0xbf4
 623#define EMC_PMACRO_DDLL_LONG_CMD_0                              0xc00
 624#define EMC_PMACRO_DDLL_LONG_CMD_1                              0xc04
 625#define EMC_PMACRO_DDLL_LONG_CMD_2                              0xc08
 626#define EMC_PMACRO_DDLL_LONG_CMD_3                              0xc0c
 627#define EMC_PMACRO_DDLL_LONG_CMD_4                              0xc10
 628#define EMC_PMACRO_DDLL_LONG_CMD_5                              0xc14
 629#define EMC_PMACRO_DDLL_SHORT_CMD_0                             0xc20
 630#define EMC_PMACRO_DDLL_SHORT_CMD_1                             0xc24
 631#define EMC_PMACRO_DDLL_SHORT_CMD_2                             0xc28
 632#define EMC_PMACRO_CFG_PM_GLOBAL_0                              0xc30
 633#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE0            BIT(16)
 634#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE1            BIT(17)
 635#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE2            BIT(18)
 636#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE3            BIT(19)
 637#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE4            BIT(20)
 638#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE5            BIT(21)
 639#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE6            BIT(22)
 640#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE7            BIT(23)
 641#define EMC_PMACRO_VTTGEN_CTRL_0                                0xc34
 642#define EMC_PMACRO_VTTGEN_CTRL_1                                0xc38
 643#define EMC_PMACRO_BG_BIAS_CTRL_0                               0xc3c
 644#define EMC_PMACRO_BG_BIAS_CTRL_0_BG_E_PWRD                     BIT(0)
 645#define EMC_PMACRO_BG_BIAS_CTRL_0_BGLP_E_PWRD                   BIT(2)
 646#define EMC_PMACRO_PAD_CFG_CTRL                                 0xc40
 647#define EMC_PMACRO_ZCTRL                                        0xc44
 648#define EMC_PMACRO_CMD_PAD_RX_CTRL                              0xc50
 649#define EMC_PMACRO_DATA_PAD_RX_CTRL                             0xc54
 650#define EMC_PMACRO_CMD_RX_TERM_MODE                             0xc58
 651#define EMC_PMACRO_DATA_RX_TERM_MODE                            0xc5c
 652#define EMC_PMACRO_CMD_PAD_TX_CTRL                              0xc60
 653#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_E_DCC              BIT(1)
 654#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSP_TX_E_DCC            BIT(9)
 655#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSN_TX_E_DCC            BIT(16)
 656#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_CMD_TX_E_DCC             BIT(24)
 657#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_DRVFORCEON         BIT(26)
 658
 659#define EMC_PMACRO_DATA_PAD_TX_CTRL                             0xc64
 660#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_E_IVREF             BIT(0)
 661#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_TX_E_DCC            BIT(1)
 662#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQS_E_IVREF            BIT(8)
 663#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSP_TX_E_DCC          BIT(9)
 664#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSN_TX_E_DCC          BIT(16)
 665#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_CMD_TX_E_DCC           BIT(24)
 666
 667#define EMC_PMACRO_COMMON_PAD_TX_CTRL                           0xc68
 668#define EMC_PMACRO_AUTOCAL_CFG_COMMON                           0xc78
 669#define EMC_PMACRO_AUTOCAL_CFG_COMMON_E_CAL_BYPASS_DVFS         BIT(16)
 670#define EMC_PMACRO_VTTGEN_CTRL_2                                0xcf0
 671#define EMC_PMACRO_IB_RXRT                                      0xcf4
 672#define EMC_PMACRO_TRAINING_CTRL_0                              0xcf8
 673#define EMC_PMACRO_TRAINING_CTRL_0_CH0_TRAINING_E_WRPTR         BIT(3)
 674#define EMC_PMACRO_TRAINING_CTRL_1                              0xcfc
 675#define EMC_PMACRO_TRAINING_CTRL_1_CH1_TRAINING_E_WRPTR         BIT(3)
 676#define EMC_TRAINING_CTRL                                       0xe04
 677#define EMC_TRAINING_QUSE_CORS_CTRL                             0xe0c
 678#define EMC_TRAINING_QUSE_FINE_CTRL                             0xe10
 679#define EMC_TRAINING_QUSE_CTRL_MISC                             0xe14
 680#define EMC_TRAINING_WRITE_FINE_CTRL                            0xe18
 681#define EMC_TRAINING_WRITE_CTRL_MISC                            0xe1c
 682#define EMC_TRAINING_WRITE_VREF_CTRL                            0xe20
 683#define EMC_TRAINING_READ_FINE_CTRL                             0xe24
 684#define EMC_TRAINING_READ_CTRL_MISC                             0xe28
 685#define EMC_TRAINING_READ_VREF_CTRL                             0xe2c
 686#define EMC_TRAINING_CA_FINE_CTRL                               0xe30
 687#define EMC_TRAINING_CA_CTRL_MISC                               0xe34
 688#define EMC_TRAINING_CA_CTRL_MISC1                              0xe38
 689#define EMC_TRAINING_CA_VREF_CTRL                               0xe3c
 690#define EMC_TRAINING_SETTLE                                     0xe44
 691#define EMC_TRAINING_MPC                                        0xe5c
 692#define EMC_TRAINING_VREF_SETTLE                                0xe6c
 693#define EMC_TRAINING_QUSE_VREF_CTRL                             0xed0
 694#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0                      0xed4
 695#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1                      0xed8
 696
 697#define EMC_COPY_TABLE_PARAM_PERIODIC_FIELDS                    BIT(0)
 698#define EMC_COPY_TABLE_PARAM_TRIM_REGS                          BIT(1)
 699
 700enum burst_regs_list {
 701        EMC_RP_INDEX = 6,
 702        EMC_R2P_INDEX = 9,
 703        EMC_W2P_INDEX,
 704        EMC_MRW6_INDEX = 31,
 705        EMC_REFRESH_INDEX = 41,
 706        EMC_PRE_REFRESH_REQ_CNT_INDEX = 43,
 707        EMC_TRPAB_INDEX = 59,
 708        EMC_MRW7_INDEX = 62,
 709        EMC_FBIO_CFG5_INDEX = 65,
 710        EMC_FBIO_CFG7_INDEX,
 711        EMC_CFG_DIG_DLL_INDEX,
 712        EMC_ZCAL_INTERVAL_INDEX = 139,
 713        EMC_ZCAL_WAIT_CNT_INDEX,
 714        EMC_MRS_WAIT_CNT_INDEX = 141,
 715        EMC_DLL_CFG_0_INDEX = 144,
 716        EMC_PMACRO_AUTOCAL_CFG_COMMON_INDEX = 146,
 717        EMC_CFG_INDEX = 148,
 718        EMC_DYN_SELF_REF_CONTROL_INDEX = 150,
 719        EMC_PMACRO_CMD_PAD_TX_CTRL_INDEX = 161,
 720        EMC_PMACRO_DATA_PAD_TX_CTRL_INDEX,
 721        EMC_PMACRO_COMMON_PAD_TX_CTRL_INDEX,
 722        EMC_PMACRO_BRICK_CTRL_RFU1_INDEX = 167,
 723        EMC_PMACRO_BG_BIAS_CTRL_0_INDEX = 171,
 724        EMC_MRW14_INDEX = 199,
 725        EMC_MRW15_INDEX = 220,
 726};
 727
 728enum trim_regs_list {
 729        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_INDEX = 60,
 730        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_INDEX,
 731        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_INDEX,
 732        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_INDEX,
 733        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4_INDEX,
 734        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5_INDEX,
 735        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_INDEX,
 736        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_INDEX,
 737        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_INDEX,
 738        EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_INDEX,
 739};
 740
 741enum burst_mc_regs_list {
 742        MC_EMEM_ARB_MISC0_INDEX = 20,
 743};
 744
 745enum {
 746        T_RP,
 747        T_FC_LPDDR4,
 748        T_RFC,
 749        T_PDEX,
 750        RL,
 751};
 752
 753enum {
 754        AUTO_PD = 0,
 755        MAN_SR  = 2,
 756};
 757
 758enum {
 759        ASSEMBLY = 0,
 760        ACTIVE,
 761};
 762
 763enum {
 764        C0D0U0,
 765        C0D0U1,
 766        C0D1U0,
 767        C0D1U1,
 768        C1D0U0,
 769        C1D0U1,
 770        C1D1U0,
 771        C1D1U1,
 772        DRAM_CLKTREE_NUM,
 773};
 774
 775#define VREF_REGS_PER_CHANNEL_SIZE 4
 776#define DRAM_TIMINGS_NUM 5
 777#define BURST_REGS_PER_CHANNEL_SIZE 8
 778#define TRIM_REGS_PER_CHANNEL_SIZE 10
 779#define PTFV_ARRAY_SIZE 12
 780#define SAVE_RESTORE_MOD_REGS_SIZE 12
 781#define TRAINING_MOD_REGS_SIZE 20
 782#define BURST_UP_DOWN_REGS_SIZE 24
 783#define BURST_MC_REGS_SIZE 33
 784#define TRIM_REGS_SIZE 138
 785#define BURST_REGS_SIZE 221
 786
 787struct tegra210_emc_per_channel_regs {
 788        u16 bank;
 789        u16 offset;
 790};
 791
 792struct tegra210_emc_table_register_offsets {
 793        u16 burst[BURST_REGS_SIZE];
 794        u16 trim[TRIM_REGS_SIZE];
 795        u16 burst_mc[BURST_MC_REGS_SIZE];
 796        u16 la_scale[BURST_UP_DOWN_REGS_SIZE];
 797        struct tegra210_emc_per_channel_regs burst_per_channel[BURST_REGS_PER_CHANNEL_SIZE];
 798        struct tegra210_emc_per_channel_regs trim_per_channel[TRIM_REGS_PER_CHANNEL_SIZE];
 799        struct tegra210_emc_per_channel_regs vref_per_channel[VREF_REGS_PER_CHANNEL_SIZE];
 800};
 801
 802struct tegra210_emc_timing {
 803        u32 revision;
 804        const char dvfs_ver[60];
 805        u32 rate;
 806        u32 min_volt;
 807        u32 gpu_min_volt;
 808        const char clock_src[32];
 809        u32 clk_src_emc;
 810        u32 needs_training;
 811        u32 training_pattern;
 812        u32 trained;
 813
 814        u32 periodic_training;
 815        u32 trained_dram_clktree[DRAM_CLKTREE_NUM];
 816        u32 current_dram_clktree[DRAM_CLKTREE_NUM];
 817        u32 run_clocks;
 818        u32 tree_margin;
 819
 820        u32 num_burst;
 821        u32 num_burst_per_ch;
 822        u32 num_trim;
 823        u32 num_trim_per_ch;
 824        u32 num_mc_regs;
 825        u32 num_up_down;
 826        u32 vref_num;
 827        u32 training_mod_num;
 828        u32 dram_timing_num;
 829
 830        u32 ptfv_list[PTFV_ARRAY_SIZE];
 831
 832        u32 burst_regs[BURST_REGS_SIZE];
 833        u32 burst_reg_per_ch[BURST_REGS_PER_CHANNEL_SIZE];
 834        u32 shadow_regs_ca_train[BURST_REGS_SIZE];
 835        u32 shadow_regs_quse_train[BURST_REGS_SIZE];
 836        u32 shadow_regs_rdwr_train[BURST_REGS_SIZE];
 837
 838        u32 trim_regs[TRIM_REGS_SIZE];
 839        u32 trim_perch_regs[TRIM_REGS_PER_CHANNEL_SIZE];
 840
 841        u32 vref_perch_regs[VREF_REGS_PER_CHANNEL_SIZE];
 842
 843        u32 dram_timings[DRAM_TIMINGS_NUM];
 844        u32 training_mod_regs[TRAINING_MOD_REGS_SIZE];
 845        u32 save_restore_mod_regs[SAVE_RESTORE_MOD_REGS_SIZE];
 846        u32 burst_mc_regs[BURST_MC_REGS_SIZE];
 847        u32 la_scale_regs[BURST_UP_DOWN_REGS_SIZE];
 848
 849        u32 min_mrs_wait;
 850        u32 emc_mrw;
 851        u32 emc_mrw2;
 852        u32 emc_mrw3;
 853        u32 emc_mrw4;
 854        u32 emc_mrw9;
 855        u32 emc_mrs;
 856        u32 emc_emrs;
 857        u32 emc_emrs2;
 858        u32 emc_auto_cal_config;
 859        u32 emc_auto_cal_config2;
 860        u32 emc_auto_cal_config3;
 861        u32 emc_auto_cal_config4;
 862        u32 emc_auto_cal_config5;
 863        u32 emc_auto_cal_config6;
 864        u32 emc_auto_cal_config7;
 865        u32 emc_auto_cal_config8;
 866        u32 emc_cfg_2;
 867        u32 emc_sel_dpd_ctrl;
 868        u32 emc_fdpd_ctrl_cmd_no_ramp;
 869        u32 dll_clk_src;
 870        u32 clk_out_enb_x_0_clk_enb_emc_dll;
 871        u32 latency;
 872};
 873
 874enum tegra210_emc_refresh {
 875        TEGRA210_EMC_REFRESH_NOMINAL = 0,
 876        TEGRA210_EMC_REFRESH_2X,
 877        TEGRA210_EMC_REFRESH_4X,
 878        TEGRA210_EMC_REFRESH_THROTTLE, /* 4x Refresh + derating. */
 879};
 880
 881#define DRAM_TYPE_DDR3          0
 882#define DRAM_TYPE_LPDDR4        1
 883#define DRAM_TYPE_LPDDR2        2
 884#define DRAM_TYPE_DDR2          3
 885
 886struct tegra210_emc {
 887        struct tegra_mc *mc;
 888        struct device *dev;
 889        struct clk *clk;
 890
 891        /* nominal EMC frequency table */
 892        struct tegra210_emc_timing *nominal;
 893        /* derated EMC frequency table */
 894        struct tegra210_emc_timing *derated;
 895
 896        /* currently selected table (nominal or derated) */
 897        struct tegra210_emc_timing *timings;
 898        unsigned int num_timings;
 899
 900        const struct tegra210_emc_table_register_offsets *offsets;
 901
 902        const struct tegra210_emc_sequence *sequence;
 903        spinlock_t lock;
 904
 905        void __iomem *regs, *channel[2];
 906        unsigned int num_channels;
 907        unsigned int num_devices;
 908        unsigned int dram_type;
 909
 910        struct tegra210_emc_timing *last;
 911        struct tegra210_emc_timing *next;
 912
 913        unsigned int training_interval;
 914        struct timer_list training;
 915
 916        enum tegra210_emc_refresh refresh;
 917        unsigned int refresh_poll_interval;
 918        struct timer_list refresh_timer;
 919        unsigned int temperature;
 920        atomic_t refresh_poll;
 921
 922        ktime_t clkchange_time;
 923        int clkchange_delay;
 924
 925        unsigned long resume_rate;
 926
 927        struct {
 928                struct dentry *root;
 929                unsigned long min_rate;
 930                unsigned long max_rate;
 931                unsigned int temperature;
 932        } debugfs;
 933
 934        struct tegra210_clk_emc_provider provider;
 935};
 936
 937struct tegra210_emc_sequence {
 938        u8 revision;
 939        void (*set_clock)(struct tegra210_emc *emc, u32 clksrc);
 940        u32 (*periodic_compensation)(struct tegra210_emc *emc);
 941};
 942
 943static inline void emc_writel(struct tegra210_emc *emc, u32 value,
 944                              unsigned int offset)
 945{
 946        writel_relaxed(value, emc->regs + offset);
 947}
 948
 949static inline u32 emc_readl(struct tegra210_emc *emc, unsigned int offset)
 950{
 951        return readl_relaxed(emc->regs + offset);
 952}
 953
 954static inline void emc_channel_writel(struct tegra210_emc *emc,
 955                                      unsigned int channel,
 956                                      u32 value, unsigned int offset)
 957{
 958        writel_relaxed(value, emc->channel[channel] + offset);
 959}
 960
 961static inline u32 emc_channel_readl(struct tegra210_emc *emc,
 962                                    unsigned int channel, unsigned int offset)
 963{
 964        return readl_relaxed(emc->channel[channel] + offset);
 965}
 966
 967static inline void ccfifo_writel(struct tegra210_emc *emc, u32 value,
 968                                 unsigned int offset, u32 delay)
 969{
 970        writel_relaxed(value, emc->regs + EMC_CCFIFO_DATA);
 971
 972        value = EMC_CCFIFO_ADDR_STALL_BY_1 | EMC_CCFIFO_ADDR_STALL(delay) |
 973                EMC_CCFIFO_ADDR_OFFSET(offset);
 974        writel_relaxed(value, emc->regs + EMC_CCFIFO_ADDR);
 975}
 976
 977static inline u32 div_o3(u32 a, u32 b)
 978{
 979        u32 result = a / b;
 980
 981        if ((b * result) < a)
 982                return result + 1;
 983
 984        return result;
 985}
 986
 987/* from tegra210-emc-r21021.c */
 988extern const struct tegra210_emc_sequence tegra210_emc_r21021;
 989
 990int tegra210_emc_set_refresh(struct tegra210_emc *emc,
 991                             enum tegra210_emc_refresh refresh);
 992u32 tegra210_emc_mrr_read(struct tegra210_emc *emc, unsigned int chip,
 993                          unsigned int address);
 994void tegra210_emc_do_clock_change(struct tegra210_emc *emc, u32 clksrc);
 995void tegra210_emc_set_shadow_bypass(struct tegra210_emc *emc, int set);
 996void tegra210_emc_timing_update(struct tegra210_emc *emc);
 997u32 tegra210_emc_get_dll_state(struct tegra210_emc_timing *next);
 998struct tegra210_emc_timing *tegra210_emc_find_timing(struct tegra210_emc *emc,
 999                                                     unsigned long rate);
1000void tegra210_emc_adjust_timing(struct tegra210_emc *emc,
1001                                struct tegra210_emc_timing *timing);
1002int tegra210_emc_wait_for_update(struct tegra210_emc *emc, unsigned int channel,
1003                                 unsigned int offset, u32 bit_mask, bool state);
1004unsigned long tegra210_emc_actual_osc_clocks(u32 in);
1005u32 tegra210_emc_compensate(struct tegra210_emc_timing *next, u32 offset);
1006void tegra210_emc_dll_disable(struct tegra210_emc *emc);
1007void tegra210_emc_dll_enable(struct tegra210_emc *emc);
1008u32 tegra210_emc_dll_prelock(struct tegra210_emc *emc, u32 clksrc);
1009u32 tegra210_emc_dvfs_power_ramp_down(struct tegra210_emc *emc, u32 clk,
1010                                      bool flip_backward);
1011u32 tegra210_emc_dvfs_power_ramp_up(struct tegra210_emc *emc, u32 clk,
1012                                    bool flip_backward);
1013void tegra210_emc_reset_dram_clktree_values(struct tegra210_emc_timing *timing);
1014void tegra210_emc_start_periodic_compensation(struct tegra210_emc *emc);
1015
1016#endif
1017