cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tegra210-emc.h (39849B)


      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