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