Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Copyright (c) 2015-2020, NVIDIA CORPORATION.  All rights reserved.
0004  */
0005 
0006 #ifndef TEGRA210_EMC_H
0007 #define TEGRA210_EMC_H
0008 
0009 #include <linux/clk.h>
0010 #include <linux/clk/tegra.h>
0011 #include <linux/io.h>
0012 #include <linux/platform_device.h>
0013 
0014 #define DVFS_FGCG_HIGH_SPEED_THRESHOLD              1000
0015 #define IOBRICK_DCC_THRESHOLD                   2400
0016 #define DVFS_FGCG_MID_SPEED_THRESHOLD               600
0017 
0018 #define EMC_STATUS_UPDATE_TIMEOUT               1000
0019 
0020 /* register definitions */
0021 #define EMC_INTSTATUS                       0x0
0022 #define EMC_INTSTATUS_CLKCHANGE_COMPLETE            BIT(4)
0023 #define EMC_DBG                         0x8
0024 #define EMC_DBG_WRITE_MUX_ACTIVE                BIT(1)
0025 #define EMC_DBG_WRITE_ACTIVE_ONLY               BIT(30)
0026 #define EMC_CFG                         0xc
0027 #define EMC_CFG_DRAM_CLKSTOP_PD                 BIT(31)
0028 #define EMC_CFG_DRAM_CLKSTOP_SR                 BIT(30)
0029 #define EMC_CFG_DRAM_ACPD                   BIT(29)
0030 #define EMC_CFG_DYN_SELF_REF                    BIT(28)
0031 #define EMC_PIN                         0x24
0032 #define EMC_PIN_PIN_CKE                     BIT(0)
0033 #define EMC_PIN_PIN_CKEB                    BIT(1)
0034 #define EMC_PIN_PIN_CKE_PER_DEV                 BIT(2)
0035 #define EMC_TIMING_CONTROL                  0x28
0036 #define EMC_RC                          0x2c
0037 #define EMC_RFC                         0x30
0038 #define EMC_RAS                         0x34
0039 #define EMC_RP                          0x38
0040 #define EMC_R2W                         0x3c
0041 #define EMC_W2R                         0x40
0042 #define EMC_R2P                         0x44
0043 #define EMC_W2P                         0x48
0044 #define EMC_RD_RCD                      0x4c
0045 #define EMC_WR_RCD                      0x50
0046 #define EMC_RRD                         0x54
0047 #define EMC_REXT                        0x58
0048 #define EMC_WDV                         0x5c
0049 #define EMC_QUSE                        0x60
0050 #define EMC_QRST                        0x64
0051 #define EMC_QSAFE                       0x68
0052 #define EMC_RDV                         0x6c
0053 #define EMC_REFRESH                     0x70
0054 #define EMC_BURST_REFRESH_NUM                   0x74
0055 #define EMC_PDEX2WR                     0x78
0056 #define EMC_PDEX2RD                     0x7c
0057 #define EMC_PCHG2PDEN                       0x80
0058 #define EMC_ACT2PDEN                        0x84
0059 #define EMC_AR2PDEN                     0x88
0060 #define EMC_RW2PDEN                     0x8c
0061 #define EMC_TXSR                        0x90
0062 #define EMC_TCKE                        0x94
0063 #define EMC_TFAW                        0x98
0064 #define EMC_TRPAB                       0x9c
0065 #define EMC_TCLKSTABLE                      0xa0
0066 #define EMC_TCLKSTOP                        0xa4
0067 #define EMC_TREFBW                      0xa8
0068 #define EMC_TPPD                        0xac
0069 #define EMC_ODT_WRITE                       0xb0
0070 #define EMC_PDEX2MRR                        0xb4
0071 #define EMC_WEXT                        0xb8
0072 #define EMC_RFC_SLR                     0xc0
0073 #define EMC_MRS_WAIT_CNT2                   0xc4
0074 #define EMC_MRS_WAIT_CNT2_MRS_EXT2_WAIT_CNT_SHIFT       16
0075 #define EMC_MRS_WAIT_CNT2_MRS_EXT1_WAIT_CNT_SHIFT       0
0076 #define EMC_MRS_WAIT_CNT                    0xc8
0077 #define EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT           0
0078 #define EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK            \
0079     (0x3FF << EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT)
0080 
0081 #define EMC_MRS                         0xcc
0082 #define EMC_EMRS                        0xd0
0083 #define EMC_EMRS_USE_EMRS_LONG_CNT              BIT(26)
0084 #define EMC_REF                         0xd4
0085 #define  EMC_REF_REF_CMD                    BIT(0)
0086 #define EMC_SELF_REF                        0xe0
0087 #define EMC_MRW                         0xe8
0088 #define EMC_MRW_MRW_OP_SHIFT                    0
0089 #define EMC_MRW_MRW_OP_MASK                 \
0090     (0xff << EMC_MRW_MRW_OP_SHIFT)
0091 #define EMC_MRW_MRW_MA_SHIFT                    16
0092 #define EMC_MRW_USE_MRW_EXT_CNT                 27
0093 #define EMC_MRW_MRW_DEV_SELECTN_SHIFT               30
0094 
0095 #define EMC_MRR                         0xec
0096 #define EMC_MRR_DEV_SEL_SHIFT                   30
0097 #define EMC_MRR_DEV_SEL_MASK                    0x3
0098 #define EMC_MRR_MA_SHIFT                    16
0099 #define EMC_MRR_MA_MASK                     0xff
0100 #define EMC_MRR_DATA_SHIFT                  0
0101 #define EMC_MRR_DATA_MASK                   0xffff
0102 
0103 #define EMC_FBIO_SPARE                      0x100
0104 #define EMC_FBIO_CFG5                       0x104
0105 #define EMC_FBIO_CFG5_DRAM_TYPE_SHIFT               0
0106 #define EMC_FBIO_CFG5_DRAM_TYPE_MASK                \
0107     (0x3 << EMC_FBIO_CFG5_DRAM_TYPE_SHIFT)
0108 #define EMC_FBIO_CFG5_CMD_TX_DIS                BIT(8)
0109 
0110 #define EMC_PDEX2CKE                        0x118
0111 #define EMC_CKE2PDEN                        0x11c
0112 #define EMC_MPC                         0x128
0113 #define EMC_EMRS2                       0x12c
0114 #define EMC_EMRS2_USE_EMRS2_LONG_CNT                BIT(26)
0115 #define EMC_MRW2                        0x134
0116 #define EMC_MRW3                        0x138
0117 #define EMC_MRW4                        0x13c
0118 #define EMC_R2R                         0x144
0119 #define EMC_EINPUT                      0x14c
0120 #define EMC_EINPUT_DURATION                 0x150
0121 #define EMC_PUTERM_EXTRA                    0x154
0122 #define EMC_TCKESR                      0x158
0123 #define EMC_TPD                         0x15c
0124 #define EMC_AUTO_CAL_CONFIG                 0x2a4
0125 #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_COMPUTE_START      BIT(0)
0126 #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_MEASURE_STALL      BIT(9)
0127 #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_UPDATE_STALL       BIT(10)
0128 #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE         BIT(29)
0129 #define EMC_AUTO_CAL_CONFIG_AUTO_CAL_START          BIT(31)
0130 #define EMC_EMC_STATUS                      0x2b4
0131 #define EMC_EMC_STATUS_MRR_DIVLD                BIT(20)
0132 #define EMC_EMC_STATUS_TIMING_UPDATE_STALLED            BIT(23)
0133 #define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT          4
0134 #define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_MASK           \
0135     (0x3 << EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT)
0136 #define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT       8
0137 #define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_MASK        \
0138     (0x3 << EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT)
0139 
0140 #define EMC_CFG_2                       0x2b8
0141 #define EMC_CFG_DIG_DLL                     0x2bc
0142 #define EMC_CFG_DIG_DLL_CFG_DLL_EN              BIT(0)
0143 #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_UNTIL_LOCK        BIT(1)
0144 #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_TRAFFIC       BIT(3)
0145 #define EMC_CFG_DIG_DLL_CFG_DLL_STALL_RW_UNTIL_LOCK     BIT(4)
0146 #define EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT          6
0147 #define EMC_CFG_DIG_DLL_CFG_DLL_MODE_MASK           \
0148     (0x3 << EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT)
0149 #define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT        8
0150 #define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_MASK         \
0151     (0x7 << EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT)
0152 
0153 #define EMC_CFG_DIG_DLL_PERIOD                  0x2c0
0154 #define EMC_DIG_DLL_STATUS                  0x2c4
0155 #define EMC_DIG_DLL_STATUS_DLL_LOCK             BIT(15)
0156 #define EMC_DIG_DLL_STATUS_DLL_PRIV_UPDATED         BIT(17)
0157 #define EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT            0
0158 #define EMC_DIG_DLL_STATUS_DLL_OUT_MASK             \
0159     (0x7ff << EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT)
0160 
0161 #define EMC_CFG_DIG_DLL_1                   0x2c8
0162 #define EMC_RDV_MASK                        0x2cc
0163 #define EMC_WDV_MASK                        0x2d0
0164 #define EMC_RDV_EARLY_MASK                  0x2d4
0165 #define EMC_RDV_EARLY                       0x2d8
0166 #define EMC_AUTO_CAL_CONFIG8                    0x2dc
0167 #define EMC_ZCAL_INTERVAL                   0x2e0
0168 #define EMC_ZCAL_WAIT_CNT                   0x2e4
0169 #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK            0x7ff
0170 #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT           0
0171 
0172 #define EMC_ZQ_CAL                      0x2ec
0173 #define EMC_ZQ_CAL_DEV_SEL_SHIFT                30
0174 #define EMC_ZQ_CAL_LONG                     BIT(4)
0175 #define EMC_ZQ_CAL_ZQ_LATCH_CMD                 BIT(1)
0176 #define EMC_ZQ_CAL_ZQ_CAL_CMD                   BIT(0)
0177 #define EMC_FDPD_CTRL_DQ                    0x310
0178 #define EMC_FDPD_CTRL_CMD                   0x314
0179 #define EMC_PMACRO_CMD_BRICK_CTRL_FDPD              0x318
0180 #define EMC_PMACRO_DATA_BRICK_CTRL_FDPD             0x31c
0181 #define EMC_PMACRO_BRICK_CTRL_RFU1              0x330
0182 #define EMC_PMACRO_BRICK_CTRL_RFU2              0x334
0183 #define EMC_TR_TIMING_0                     0x3b4
0184 #define EMC_TR_CTRL_1                       0x3bc
0185 #define EMC_TR_RDV                      0x3c4
0186 #define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE          0x3cc
0187 #define EMC_SEL_DPD_CTRL                    0x3d8
0188 #define EMC_SEL_DPD_CTRL_DATA_SEL_DPD_EN            BIT(8)
0189 #define EMC_SEL_DPD_CTRL_ODT_SEL_DPD_EN             BIT(5)
0190 #define EMC_SEL_DPD_CTRL_RESET_SEL_DPD_EN           BIT(4)
0191 #define EMC_SEL_DPD_CTRL_CA_SEL_DPD_EN              BIT(3)
0192 #define EMC_SEL_DPD_CTRL_CLK_SEL_DPD_EN             BIT(2)
0193 #define EMC_PRE_REFRESH_REQ_CNT                 0x3dc
0194 #define EMC_DYN_SELF_REF_CONTROL                0x3e0
0195 #define EMC_TXSRDLL                     0x3e4
0196 #define EMC_CCFIFO_ADDR                     0x3e8
0197 #define  EMC_CCFIFO_ADDR_STALL_BY_1 (1 << 31)
0198 #define  EMC_CCFIFO_ADDR_STALL(x) (((x) & 0x7fff) << 16)
0199 #define  EMC_CCFIFO_ADDR_OFFSET(x) ((x) & 0xffff)
0200 #define EMC_CCFIFO_DATA                     0x3ec
0201 #define EMC_TR_QPOP                     0x3f4
0202 #define EMC_TR_RDV_MASK                     0x3f8
0203 #define EMC_TR_QSAFE                        0x3fc
0204 #define EMC_TR_QRST                     0x400
0205 #define EMC_ISSUE_QRST                      0x428
0206 #define EMC_AUTO_CAL_CONFIG2                    0x458
0207 #define EMC_AUTO_CAL_CONFIG3                    0x45c
0208 #define EMC_TR_DVFS                     0x460
0209 #define EMC_AUTO_CAL_CHANNEL                    0x464
0210 #define EMC_IBDLY                       0x468
0211 #define EMC_OBDLY                       0x46c
0212 #define EMC_TXDSRVTTGEN                     0x480
0213 #define EMC_WE_DURATION                     0x48c
0214 #define EMC_WS_DURATION                     0x490
0215 #define EMC_WEV                         0x494
0216 #define EMC_WSV                         0x498
0217 #define EMC_CFG_3                       0x49c
0218 #define EMC_MRW6                        0x4a4
0219 #define EMC_MRW7                        0x4a8
0220 #define EMC_MRW8                        0x4ac
0221 #define EMC_MRW9                        0x4b0
0222 #define EMC_MRW10                       0x4b4
0223 #define EMC_MRW11                       0x4b8
0224 #define EMC_MRW12                       0x4bc
0225 #define EMC_MRW13                       0x4c0
0226 #define EMC_MRW14                       0x4c4
0227 #define EMC_MRW15                       0x4d0
0228 #define EMC_CFG_SYNC                        0x4d4
0229 #define EMC_FDPD_CTRL_CMD_NO_RAMP               0x4d8
0230 #define EMC_FDPD_CTRL_CMD_NO_RAMP_CMD_DPD_NO_RAMP_ENABLE    BIT(0)
0231 #define EMC_WDV_CHK                     0x4e0
0232 #define EMC_CFG_PIPE_2                      0x554
0233 #define EMC_CFG_PIPE_CLK                    0x558
0234 #define EMC_CFG_PIPE_CLK_CLK_ALWAYS_ON              BIT(0)
0235 #define EMC_CFG_PIPE_1                      0x55c
0236 #define EMC_CFG_PIPE                        0x560
0237 #define EMC_QPOP                        0x564
0238 #define EMC_QUSE_WIDTH                      0x568
0239 #define EMC_PUTERM_WIDTH                    0x56c
0240 #define EMC_AUTO_CAL_CONFIG7                    0x574
0241 #define EMC_REFCTRL2                        0x580
0242 #define EMC_FBIO_CFG7                       0x584
0243 #define EMC_FBIO_CFG7_CH0_ENABLE                BIT(1)
0244 #define EMC_FBIO_CFG7_CH1_ENABLE                BIT(2)
0245 #define EMC_DATA_BRLSHFT_0                  0x588
0246 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT   21
0247 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_MASK    \
0248     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT)
0249 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT   18
0250 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_MASK    \
0251     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT)
0252 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT   15
0253 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_MASK    \
0254     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT)
0255 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT   12
0256 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_MASK    \
0257     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT)
0258 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT   9
0259 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_MASK    \
0260     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT)
0261 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT   6
0262 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_MASK    \
0263     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT)
0264 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT   3
0265 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_MASK    \
0266     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT)
0267 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT   0
0268 #define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_MASK    \
0269     (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT)
0270 
0271 #define EMC_DATA_BRLSHFT_1                  0x58c
0272 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT   21
0273 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_MASK    \
0274     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT)
0275 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT   18
0276 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_MASK    \
0277     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT)
0278 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT   15
0279 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_MASK    \
0280     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT)
0281 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT   12
0282 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_MASK    \
0283     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT)
0284 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT   9
0285 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_MASK    \
0286     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT)
0287 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT   6
0288 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_MASK    \
0289     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT)
0290 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT   3
0291 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_MASK    \
0292     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT)
0293 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT   0
0294 #define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_MASK    \
0295     (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT)
0296 
0297 #define EMC_RFCPB                       0x590
0298 #define EMC_DQS_BRLSHFT_0                   0x594
0299 #define EMC_DQS_BRLSHFT_1                   0x598
0300 #define EMC_CMD_BRLSHFT_0                   0x59c
0301 #define EMC_CMD_BRLSHFT_1                   0x5a0
0302 #define EMC_CMD_BRLSHFT_2                   0x5a4
0303 #define EMC_CMD_BRLSHFT_3                   0x5a8
0304 #define EMC_QUSE_BRLSHFT_0                  0x5ac
0305 #define EMC_AUTO_CAL_CONFIG4                    0x5b0
0306 #define EMC_AUTO_CAL_CONFIG5                    0x5b4
0307 #define EMC_QUSE_BRLSHFT_1                  0x5b8
0308 #define EMC_QUSE_BRLSHFT_2                  0x5bc
0309 #define EMC_CCDMW                       0x5c0
0310 #define EMC_QUSE_BRLSHFT_3                  0x5c4
0311 #define EMC_AUTO_CAL_CONFIG6                    0x5cc
0312 #define EMC_DLL_CFG_0                       0x5e4
0313 #define EMC_DLL_CFG_1                       0x5e8
0314 #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT     10
0315 #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_MASK      \
0316     (0x7ff << EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT)
0317 
0318 #define EMC_CONFIG_SAMPLE_DELAY                 0x5f0
0319 #define EMC_CFG_UPDATE                      0x5f4
0320 #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT       9
0321 #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_MASK        \
0322     (0x3 << EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT)
0323 
0324 #define EMC_PMACRO_QUSE_DDLL_RANK0_0                0x600
0325 #define EMC_PMACRO_QUSE_DDLL_RANK0_1                0x604
0326 #define EMC_PMACRO_QUSE_DDLL_RANK0_2                0x608
0327 #define EMC_PMACRO_QUSE_DDLL_RANK0_3                0x60c
0328 #define EMC_PMACRO_QUSE_DDLL_RANK0_4                0x610
0329 #define EMC_PMACRO_QUSE_DDLL_RANK0_5                0x614
0330 #define EMC_PMACRO_QUSE_DDLL_RANK1_0                0x620
0331 #define EMC_PMACRO_QUSE_DDLL_RANK1_1                0x624
0332 #define EMC_PMACRO_QUSE_DDLL_RANK1_2                0x628
0333 #define EMC_PMACRO_QUSE_DDLL_RANK1_3                0x62c
0334 #define EMC_PMACRO_QUSE_DDLL_RANK1_4                0x630
0335 #define EMC_PMACRO_QUSE_DDLL_RANK1_5                0x634
0336 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0          0x640
0337 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT \
0338     16
0339 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_MASK  \
0340     (0x3ff <<                                \
0341     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT)
0342 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT \
0343     0
0344 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_MASK \
0345     (0x3ff <<                               \
0346     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT)
0347 
0348 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1          0x644
0349 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT \
0350     16
0351 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_MASK  \
0352     (0x3ff <<                                \
0353     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT)
0354 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT \
0355     0
0356 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_MASK  \
0357     (0x3ff <<                                \
0358     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT)
0359 
0360 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2          0x648
0361 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT  \
0362     16
0363 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_MASK  \
0364     (0x3ff <<                                \
0365     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT)
0366 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT \
0367     0
0368 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_MASK  \
0369     (0x3ff <<                                \
0370     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT)
0371 
0372 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3          0x64c
0373 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT \
0374     16
0375 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_MASK  \
0376     (0x3ff <<                                \
0377     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT)
0378 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT \
0379     0
0380 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_MASK  \
0381     (0x3ff <<                                \
0382     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT)
0383 
0384 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4          0x650
0385 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5          0x654
0386 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0          0x660
0387 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT \
0388     16
0389 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_MASK  \
0390     (0x3ff <<                                \
0391     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT)
0392 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT \
0393     0
0394 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_MASK  \
0395     (0x3ff <<                                \
0396     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT)
0397 
0398 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1          0x664
0399 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT \
0400     16
0401 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_MASK  \
0402     (0x3ff <<                                \
0403     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT)
0404 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT \
0405     0
0406 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_MASK  \
0407     (0x3ff <<                                \
0408     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT)
0409 
0410 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2          0x668
0411 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT \
0412     16
0413 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_MASK  \
0414     (0x3ff <<                                \
0415     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT)
0416 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT \
0417     0
0418 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_MASK  \
0419     (0x3ff <<                                \
0420     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT)
0421 
0422 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3          0x66c
0423 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT \
0424     16
0425 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_MASK  \
0426     (0x3ff <<                                \
0427     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT)
0428 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT \
0429     0
0430 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_MASK  \
0431     (0x3ff <<                                \
0432     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT)
0433 
0434 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4          0x670
0435 #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5          0x674
0436 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0         0x680
0437 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1         0x684
0438 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2         0x688
0439 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3         0x68c
0440 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4         0x690
0441 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5         0x694
0442 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0         0x6a0
0443 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1         0x6a4
0444 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2         0x6a8
0445 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3         0x6ac
0446 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4         0x6b0
0447 #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5         0x6b4
0448 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0         0x6c0
0449 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1         0x6c4
0450 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2         0x6c8
0451 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3         0x6cc
0452 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0         0x6e0
0453 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1         0x6e4
0454 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2         0x6e8
0455 #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3         0x6ec
0456 #define EMC_PMACRO_TX_PWRD_0                    0x720
0457 #define EMC_PMACRO_TX_PWRD_1                    0x724
0458 #define EMC_PMACRO_TX_PWRD_2                    0x728
0459 #define EMC_PMACRO_TX_PWRD_3                    0x72c
0460 #define EMC_PMACRO_TX_PWRD_4                    0x730
0461 #define EMC_PMACRO_TX_PWRD_5                    0x734
0462 #define EMC_PMACRO_TX_SEL_CLK_SRC_0             0x740
0463 #define EMC_PMACRO_TX_SEL_CLK_SRC_1             0x744
0464 #define EMC_PMACRO_TX_SEL_CLK_SRC_3             0x74c
0465 #define EMC_PMACRO_TX_SEL_CLK_SRC_2             0x748
0466 #define EMC_PMACRO_TX_SEL_CLK_SRC_4             0x750
0467 #define EMC_PMACRO_TX_SEL_CLK_SRC_5             0x754
0468 #define EMC_PMACRO_DDLL_BYPASS                  0x760
0469 #define EMC_PMACRO_DDLL_PWRD_0                  0x770
0470 #define EMC_PMACRO_DDLL_PWRD_1                  0x774
0471 #define EMC_PMACRO_DDLL_PWRD_2                  0x778
0472 #define EMC_PMACRO_CMD_CTRL_0                   0x780
0473 #define EMC_PMACRO_CMD_CTRL_1                   0x784
0474 #define EMC_PMACRO_CMD_CTRL_2                   0x788
0475 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0       0x800
0476 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1       0x804
0477 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2       0x808
0478 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3       0x80c
0479 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0       0x810
0480 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1       0x814
0481 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2       0x818
0482 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3       0x81c
0483 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0       0x820
0484 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1       0x824
0485 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2       0x828
0486 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3       0x82c
0487 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0       0x830
0488 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1       0x834
0489 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2       0x838
0490 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3       0x83c
0491 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0       0x840
0492 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1       0x844
0493 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2       0x848
0494 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3       0x84c
0495 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0       0x850
0496 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1       0x854
0497 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2       0x858
0498 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3       0x85c
0499 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0       0x860
0500 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1       0x864
0501 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2       0x868
0502 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3       0x86c
0503 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0       0x870
0504 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1       0x874
0505 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2       0x878
0506 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3       0x87c
0507 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0        0x880
0508 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1        0x884
0509 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2        0x888
0510 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3        0x88c
0511 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0        0x890
0512 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1        0x894
0513 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2        0x898
0514 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3        0x89c
0515 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0        0x8a0
0516 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1        0x8a4
0517 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2        0x8a8
0518 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3        0x8ac
0519 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0        0x8b0
0520 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1        0x8b4
0521 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2        0x8b8
0522 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3        0x8bc
0523 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0       0x900
0524 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1       0x904
0525 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2       0x908
0526 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3       0x90c
0527 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0       0x910
0528 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1       0x914
0529 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2       0x918
0530 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3       0x91c
0531 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0       0x920
0532 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1       0x924
0533 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2       0x928
0534 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3       0x92c
0535 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0       0x930
0536 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1       0x934
0537 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2       0x938
0538 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3       0x93c
0539 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0       0x940
0540 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1       0x944
0541 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2       0x948
0542 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3       0x94c
0543 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0       0x950
0544 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1       0x954
0545 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2       0x958
0546 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3       0x95c
0547 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0       0x960
0548 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1       0x964
0549 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2       0x968
0550 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3       0x96c
0551 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0       0x970
0552 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1       0x974
0553 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2       0x978
0554 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3       0x97c
0555 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0        0x980
0556 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1        0x984
0557 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2        0x988
0558 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3        0x98c
0559 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0        0x990
0560 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1        0x994
0561 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2        0x998
0562 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3        0x99c
0563 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0        0x9a0
0564 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1        0x9a4
0565 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2        0x9a8
0566 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3        0x9ac
0567 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0        0x9b0
0568 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1        0x9b4
0569 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2        0x9b8
0570 #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3        0x9bc
0571 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0       0xa00
0572 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1       0xa04
0573 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2       0xa08
0574 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0       0xa10
0575 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1       0xa14
0576 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2       0xa18
0577 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0       0xa20
0578 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1       0xa24
0579 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2       0xa28
0580 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0       0xa30
0581 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1       0xa34
0582 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2       0xa38
0583 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0       0xa40
0584 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1       0xa44
0585 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2       0xa48
0586 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0       0xa50
0587 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1       0xa54
0588 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2       0xa58
0589 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0       0xa60
0590 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1       0xa64
0591 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2       0xa68
0592 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0       0xa70
0593 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1       0xa74
0594 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2       0xa78
0595 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0       0xb00
0596 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1       0xb04
0597 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2       0xb08
0598 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0       0xb10
0599 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1       0xb14
0600 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2       0xb18
0601 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0       0xb20
0602 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1       0xb24
0603 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2       0xb28
0604 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0       0xb30
0605 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1       0xb34
0606 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2       0xb38
0607 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0       0xb40
0608 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1       0xb44
0609 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2       0xb48
0610 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0       0xb50
0611 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1       0xb54
0612 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2       0xb58
0613 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0       0xb60
0614 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1       0xb64
0615 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2       0xb68
0616 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0       0xb70
0617 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1       0xb74
0618 #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2       0xb78
0619 #define EMC_PMACRO_IB_VREF_DQ_0                 0xbe0
0620 #define EMC_PMACRO_IB_VREF_DQ_1                 0xbe4
0621 #define EMC_PMACRO_IB_VREF_DQS_0                0xbf0
0622 #define EMC_PMACRO_IB_VREF_DQS_1                0xbf4
0623 #define EMC_PMACRO_DDLL_LONG_CMD_0              0xc00
0624 #define EMC_PMACRO_DDLL_LONG_CMD_1              0xc04
0625 #define EMC_PMACRO_DDLL_LONG_CMD_2              0xc08
0626 #define EMC_PMACRO_DDLL_LONG_CMD_3              0xc0c
0627 #define EMC_PMACRO_DDLL_LONG_CMD_4              0xc10
0628 #define EMC_PMACRO_DDLL_LONG_CMD_5              0xc14
0629 #define EMC_PMACRO_DDLL_SHORT_CMD_0             0xc20
0630 #define EMC_PMACRO_DDLL_SHORT_CMD_1             0xc24
0631 #define EMC_PMACRO_DDLL_SHORT_CMD_2             0xc28
0632 #define EMC_PMACRO_CFG_PM_GLOBAL_0              0xc30
0633 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE0        BIT(16)
0634 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE1        BIT(17)
0635 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE2        BIT(18)
0636 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE3        BIT(19)
0637 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE4        BIT(20)
0638 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE5        BIT(21)
0639 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE6        BIT(22)
0640 #define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE7        BIT(23)
0641 #define EMC_PMACRO_VTTGEN_CTRL_0                0xc34
0642 #define EMC_PMACRO_VTTGEN_CTRL_1                0xc38
0643 #define EMC_PMACRO_BG_BIAS_CTRL_0               0xc3c
0644 #define EMC_PMACRO_BG_BIAS_CTRL_0_BG_E_PWRD         BIT(0)
0645 #define EMC_PMACRO_BG_BIAS_CTRL_0_BGLP_E_PWRD           BIT(2)
0646 #define EMC_PMACRO_PAD_CFG_CTRL                 0xc40
0647 #define EMC_PMACRO_ZCTRL                    0xc44
0648 #define EMC_PMACRO_CMD_PAD_RX_CTRL              0xc50
0649 #define EMC_PMACRO_DATA_PAD_RX_CTRL             0xc54
0650 #define EMC_PMACRO_CMD_RX_TERM_MODE             0xc58
0651 #define EMC_PMACRO_DATA_RX_TERM_MODE                0xc5c
0652 #define EMC_PMACRO_CMD_PAD_TX_CTRL              0xc60
0653 #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_E_DCC      BIT(1)
0654 #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSP_TX_E_DCC        BIT(9)
0655 #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSN_TX_E_DCC        BIT(16)
0656 #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_CMD_TX_E_DCC     BIT(24)
0657 #define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_DRVFORCEON     BIT(26)
0658 
0659 #define EMC_PMACRO_DATA_PAD_TX_CTRL             0xc64
0660 #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_E_IVREF     BIT(0)
0661 #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_TX_E_DCC        BIT(1)
0662 #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQS_E_IVREF        BIT(8)
0663 #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSP_TX_E_DCC      BIT(9)
0664 #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSN_TX_E_DCC      BIT(16)
0665 #define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_CMD_TX_E_DCC       BIT(24)
0666 
0667 #define EMC_PMACRO_COMMON_PAD_TX_CTRL               0xc68
0668 #define EMC_PMACRO_AUTOCAL_CFG_COMMON               0xc78
0669 #define EMC_PMACRO_AUTOCAL_CFG_COMMON_E_CAL_BYPASS_DVFS     BIT(16)
0670 #define EMC_PMACRO_VTTGEN_CTRL_2                0xcf0
0671 #define EMC_PMACRO_IB_RXRT                  0xcf4
0672 #define EMC_PMACRO_TRAINING_CTRL_0              0xcf8
0673 #define EMC_PMACRO_TRAINING_CTRL_0_CH0_TRAINING_E_WRPTR     BIT(3)
0674 #define EMC_PMACRO_TRAINING_CTRL_1              0xcfc
0675 #define EMC_PMACRO_TRAINING_CTRL_1_CH1_TRAINING_E_WRPTR     BIT(3)
0676 #define EMC_TRAINING_CTRL                   0xe04
0677 #define EMC_TRAINING_QUSE_CORS_CTRL             0xe0c
0678 #define EMC_TRAINING_QUSE_FINE_CTRL             0xe10
0679 #define EMC_TRAINING_QUSE_CTRL_MISC             0xe14
0680 #define EMC_TRAINING_WRITE_FINE_CTRL                0xe18
0681 #define EMC_TRAINING_WRITE_CTRL_MISC                0xe1c
0682 #define EMC_TRAINING_WRITE_VREF_CTRL                0xe20
0683 #define EMC_TRAINING_READ_FINE_CTRL             0xe24
0684 #define EMC_TRAINING_READ_CTRL_MISC             0xe28
0685 #define EMC_TRAINING_READ_VREF_CTRL             0xe2c
0686 #define EMC_TRAINING_CA_FINE_CTRL               0xe30
0687 #define EMC_TRAINING_CA_CTRL_MISC               0xe34
0688 #define EMC_TRAINING_CA_CTRL_MISC1              0xe38
0689 #define EMC_TRAINING_CA_VREF_CTRL               0xe3c
0690 #define EMC_TRAINING_SETTLE                 0xe44
0691 #define EMC_TRAINING_MPC                    0xe5c
0692 #define EMC_TRAINING_VREF_SETTLE                0xe6c
0693 #define EMC_TRAINING_QUSE_VREF_CTRL             0xed0
0694 #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0          0xed4
0695 #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1          0xed8
0696 
0697 #define EMC_COPY_TABLE_PARAM_PERIODIC_FIELDS            BIT(0)
0698 #define EMC_COPY_TABLE_PARAM_TRIM_REGS              BIT(1)
0699 
0700 enum burst_regs_list {
0701     EMC_RP_INDEX = 6,
0702     EMC_R2P_INDEX = 9,
0703     EMC_W2P_INDEX,
0704     EMC_MRW6_INDEX = 31,
0705     EMC_REFRESH_INDEX = 41,
0706     EMC_PRE_REFRESH_REQ_CNT_INDEX = 43,
0707     EMC_TRPAB_INDEX = 59,
0708     EMC_MRW7_INDEX = 62,
0709     EMC_FBIO_CFG5_INDEX = 65,
0710     EMC_FBIO_CFG7_INDEX,
0711     EMC_CFG_DIG_DLL_INDEX,
0712     EMC_ZCAL_INTERVAL_INDEX = 139,
0713     EMC_ZCAL_WAIT_CNT_INDEX,
0714     EMC_MRS_WAIT_CNT_INDEX = 141,
0715     EMC_DLL_CFG_0_INDEX = 144,
0716     EMC_PMACRO_AUTOCAL_CFG_COMMON_INDEX = 146,
0717     EMC_CFG_INDEX = 148,
0718     EMC_DYN_SELF_REF_CONTROL_INDEX = 150,
0719     EMC_PMACRO_CMD_PAD_TX_CTRL_INDEX = 161,
0720     EMC_PMACRO_DATA_PAD_TX_CTRL_INDEX,
0721     EMC_PMACRO_COMMON_PAD_TX_CTRL_INDEX,
0722     EMC_PMACRO_BRICK_CTRL_RFU1_INDEX = 167,
0723     EMC_PMACRO_BG_BIAS_CTRL_0_INDEX = 171,
0724     EMC_MRW14_INDEX = 199,
0725     EMC_MRW15_INDEX = 220,
0726 };
0727 
0728 enum trim_regs_list {
0729     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_INDEX = 60,
0730     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_INDEX,
0731     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_INDEX,
0732     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_INDEX,
0733     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4_INDEX,
0734     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5_INDEX,
0735     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_INDEX,
0736     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_INDEX,
0737     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_INDEX,
0738     EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_INDEX,
0739 };
0740 
0741 enum burst_mc_regs_list {
0742     MC_EMEM_ARB_MISC0_INDEX = 20,
0743 };
0744 
0745 enum {
0746     T_RP,
0747     T_FC_LPDDR4,
0748     T_RFC,
0749     T_PDEX,
0750     RL,
0751 };
0752 
0753 enum {
0754     AUTO_PD = 0,
0755     MAN_SR  = 2,
0756 };
0757 
0758 enum {
0759     ASSEMBLY = 0,
0760     ACTIVE,
0761 };
0762 
0763 enum {
0764     C0D0U0,
0765     C0D0U1,
0766     C0D1U0,
0767     C0D1U1,
0768     C1D0U0,
0769     C1D0U1,
0770     C1D1U0,
0771     C1D1U1,
0772     DRAM_CLKTREE_NUM,
0773 };
0774 
0775 #define VREF_REGS_PER_CHANNEL_SIZE 4
0776 #define DRAM_TIMINGS_NUM 5
0777 #define BURST_REGS_PER_CHANNEL_SIZE 8
0778 #define TRIM_REGS_PER_CHANNEL_SIZE 10
0779 #define PTFV_ARRAY_SIZE 12
0780 #define SAVE_RESTORE_MOD_REGS_SIZE 12
0781 #define TRAINING_MOD_REGS_SIZE 20
0782 #define BURST_UP_DOWN_REGS_SIZE 24
0783 #define BURST_MC_REGS_SIZE 33
0784 #define TRIM_REGS_SIZE 138
0785 #define BURST_REGS_SIZE 221
0786 
0787 struct tegra210_emc_per_channel_regs {
0788     u16 bank;
0789     u16 offset;
0790 };
0791 
0792 struct tegra210_emc_table_register_offsets {
0793     u16 burst[BURST_REGS_SIZE];
0794     u16 trim[TRIM_REGS_SIZE];
0795     u16 burst_mc[BURST_MC_REGS_SIZE];
0796     u16 la_scale[BURST_UP_DOWN_REGS_SIZE];
0797     struct tegra210_emc_per_channel_regs burst_per_channel[BURST_REGS_PER_CHANNEL_SIZE];
0798     struct tegra210_emc_per_channel_regs trim_per_channel[TRIM_REGS_PER_CHANNEL_SIZE];
0799     struct tegra210_emc_per_channel_regs vref_per_channel[VREF_REGS_PER_CHANNEL_SIZE];
0800 };
0801 
0802 struct tegra210_emc_timing {
0803     u32 revision;
0804     const char dvfs_ver[60];
0805     u32 rate;
0806     u32 min_volt;
0807     u32 gpu_min_volt;
0808     const char clock_src[32];
0809     u32 clk_src_emc;
0810     u32 needs_training;
0811     u32 training_pattern;
0812     u32 trained;
0813 
0814     u32 periodic_training;
0815     u32 trained_dram_clktree[DRAM_CLKTREE_NUM];
0816     u32 current_dram_clktree[DRAM_CLKTREE_NUM];
0817     u32 run_clocks;
0818     u32 tree_margin;
0819 
0820     u32 num_burst;
0821     u32 num_burst_per_ch;
0822     u32 num_trim;
0823     u32 num_trim_per_ch;
0824     u32 num_mc_regs;
0825     u32 num_up_down;
0826     u32 vref_num;
0827     u32 training_mod_num;
0828     u32 dram_timing_num;
0829 
0830     u32 ptfv_list[PTFV_ARRAY_SIZE];
0831 
0832     u32 burst_regs[BURST_REGS_SIZE];
0833     u32 burst_reg_per_ch[BURST_REGS_PER_CHANNEL_SIZE];
0834     u32 shadow_regs_ca_train[BURST_REGS_SIZE];
0835     u32 shadow_regs_quse_train[BURST_REGS_SIZE];
0836     u32 shadow_regs_rdwr_train[BURST_REGS_SIZE];
0837 
0838     u32 trim_regs[TRIM_REGS_SIZE];
0839     u32 trim_perch_regs[TRIM_REGS_PER_CHANNEL_SIZE];
0840 
0841     u32 vref_perch_regs[VREF_REGS_PER_CHANNEL_SIZE];
0842 
0843     u32 dram_timings[DRAM_TIMINGS_NUM];
0844     u32 training_mod_regs[TRAINING_MOD_REGS_SIZE];
0845     u32 save_restore_mod_regs[SAVE_RESTORE_MOD_REGS_SIZE];
0846     u32 burst_mc_regs[BURST_MC_REGS_SIZE];
0847     u32 la_scale_regs[BURST_UP_DOWN_REGS_SIZE];
0848 
0849     u32 min_mrs_wait;
0850     u32 emc_mrw;
0851     u32 emc_mrw2;
0852     u32 emc_mrw3;
0853     u32 emc_mrw4;
0854     u32 emc_mrw9;
0855     u32 emc_mrs;
0856     u32 emc_emrs;
0857     u32 emc_emrs2;
0858     u32 emc_auto_cal_config;
0859     u32 emc_auto_cal_config2;
0860     u32 emc_auto_cal_config3;
0861     u32 emc_auto_cal_config4;
0862     u32 emc_auto_cal_config5;
0863     u32 emc_auto_cal_config6;
0864     u32 emc_auto_cal_config7;
0865     u32 emc_auto_cal_config8;
0866     u32 emc_cfg_2;
0867     u32 emc_sel_dpd_ctrl;
0868     u32 emc_fdpd_ctrl_cmd_no_ramp;
0869     u32 dll_clk_src;
0870     u32 clk_out_enb_x_0_clk_enb_emc_dll;
0871     u32 latency;
0872 };
0873 
0874 enum tegra210_emc_refresh {
0875     TEGRA210_EMC_REFRESH_NOMINAL = 0,
0876     TEGRA210_EMC_REFRESH_2X,
0877     TEGRA210_EMC_REFRESH_4X,
0878     TEGRA210_EMC_REFRESH_THROTTLE, /* 4x Refresh + derating. */
0879 };
0880 
0881 #define DRAM_TYPE_DDR3      0
0882 #define DRAM_TYPE_LPDDR4    1
0883 #define DRAM_TYPE_LPDDR2    2
0884 #define DRAM_TYPE_DDR2      3
0885 
0886 struct tegra210_emc {
0887     struct tegra_mc *mc;
0888     struct device *dev;
0889     struct clk *clk;
0890 
0891     /* nominal EMC frequency table */
0892     struct tegra210_emc_timing *nominal;
0893     /* derated EMC frequency table */
0894     struct tegra210_emc_timing *derated;
0895 
0896     /* currently selected table (nominal or derated) */
0897     struct tegra210_emc_timing *timings;
0898     unsigned int num_timings;
0899 
0900     const struct tegra210_emc_table_register_offsets *offsets;
0901 
0902     const struct tegra210_emc_sequence *sequence;
0903     spinlock_t lock;
0904 
0905     void __iomem *regs, *channel[2];
0906     unsigned int num_channels;
0907     unsigned int num_devices;
0908     unsigned int dram_type;
0909 
0910     struct tegra210_emc_timing *last;
0911     struct tegra210_emc_timing *next;
0912 
0913     unsigned int training_interval;
0914     struct timer_list training;
0915 
0916     enum tegra210_emc_refresh refresh;
0917     unsigned int refresh_poll_interval;
0918     struct timer_list refresh_timer;
0919     unsigned int temperature;
0920     atomic_t refresh_poll;
0921 
0922     ktime_t clkchange_time;
0923     int clkchange_delay;
0924 
0925     unsigned long resume_rate;
0926 
0927     struct {
0928         struct dentry *root;
0929         unsigned long min_rate;
0930         unsigned long max_rate;
0931         unsigned int temperature;
0932     } debugfs;
0933 
0934     struct tegra210_clk_emc_provider provider;
0935 };
0936 
0937 struct tegra210_emc_sequence {
0938     u8 revision;
0939     void (*set_clock)(struct tegra210_emc *emc, u32 clksrc);
0940     u32 (*periodic_compensation)(struct tegra210_emc *emc);
0941 };
0942 
0943 static inline void emc_writel(struct tegra210_emc *emc, u32 value,
0944                   unsigned int offset)
0945 {
0946     writel_relaxed(value, emc->regs + offset);
0947 }
0948 
0949 static inline u32 emc_readl(struct tegra210_emc *emc, unsigned int offset)
0950 {
0951     return readl_relaxed(emc->regs + offset);
0952 }
0953 
0954 static inline void emc_channel_writel(struct tegra210_emc *emc,
0955                       unsigned int channel,
0956                       u32 value, unsigned int offset)
0957 {
0958     writel_relaxed(value, emc->channel[channel] + offset);
0959 }
0960 
0961 static inline u32 emc_channel_readl(struct tegra210_emc *emc,
0962                     unsigned int channel, unsigned int offset)
0963 {
0964     return readl_relaxed(emc->channel[channel] + offset);
0965 }
0966 
0967 static inline void ccfifo_writel(struct tegra210_emc *emc, u32 value,
0968                  unsigned int offset, u32 delay)
0969 {
0970     writel_relaxed(value, emc->regs + EMC_CCFIFO_DATA);
0971 
0972     value = EMC_CCFIFO_ADDR_STALL_BY_1 | EMC_CCFIFO_ADDR_STALL(delay) |
0973         EMC_CCFIFO_ADDR_OFFSET(offset);
0974     writel_relaxed(value, emc->regs + EMC_CCFIFO_ADDR);
0975 }
0976 
0977 static inline u32 div_o3(u32 a, u32 b)
0978 {
0979     u32 result = a / b;
0980 
0981     if ((b * result) < a)
0982         return result + 1;
0983 
0984     return result;
0985 }
0986 
0987 /* from tegra210-emc-r21021.c */
0988 extern const struct tegra210_emc_sequence tegra210_emc_r21021;
0989 
0990 int tegra210_emc_set_refresh(struct tegra210_emc *emc,
0991                  enum tegra210_emc_refresh refresh);
0992 u32 tegra210_emc_mrr_read(struct tegra210_emc *emc, unsigned int chip,
0993               unsigned int address);
0994 void tegra210_emc_do_clock_change(struct tegra210_emc *emc, u32 clksrc);
0995 void tegra210_emc_set_shadow_bypass(struct tegra210_emc *emc, int set);
0996 void tegra210_emc_timing_update(struct tegra210_emc *emc);
0997 u32 tegra210_emc_get_dll_state(struct tegra210_emc_timing *next);
0998 struct tegra210_emc_timing *tegra210_emc_find_timing(struct tegra210_emc *emc,
0999                              unsigned long rate);
1000 void tegra210_emc_adjust_timing(struct tegra210_emc *emc,
1001                 struct tegra210_emc_timing *timing);
1002 int tegra210_emc_wait_for_update(struct tegra210_emc *emc, unsigned int channel,
1003                  unsigned int offset, u32 bit_mask, bool state);
1004 unsigned long tegra210_emc_actual_osc_clocks(u32 in);
1005 u32 tegra210_emc_compensate(struct tegra210_emc_timing *next, u32 offset);
1006 void tegra210_emc_dll_disable(struct tegra210_emc *emc);
1007 void tegra210_emc_dll_enable(struct tegra210_emc *emc);
1008 u32 tegra210_emc_dll_prelock(struct tegra210_emc *emc, u32 clksrc);
1009 u32 tegra210_emc_dvfs_power_ramp_down(struct tegra210_emc *emc, u32 clk,
1010                       bool flip_backward);
1011 u32 tegra210_emc_dvfs_power_ramp_up(struct tegra210_emc *emc, u32 clk,
1012                     bool flip_backward);
1013 void tegra210_emc_reset_dram_clktree_values(struct tegra210_emc_timing *timing);
1014 void tegra210_emc_start_periodic_compensation(struct tegra210_emc *emc);
1015 
1016 #endif