/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2015-2020, NVIDIA CORPORATION. All rights reserved.
*/
#ifndef TEGRA210_EMC_H
#define TEGRA210_EMC_H
#include <linux/clk.h>
#include <linux/clk/tegra.h>
#include <linux/io.h>
#include <linux/platform_device.h>
#define DVFS_FGCG_HIGH_SPEED_THRESHOLD 1000
#define IOBRICK_DCC_THRESHOLD 2400
#define DVFS_FGCG_MID_SPEED_THRESHOLD 600
#define EMC_STATUS_UPDATE_TIMEOUT 1000
/* register definitions */
#define EMC_INTSTATUS 0 x0
#define EMC_INTSTATUS_CLKCHANGE_COMPLETE BIT(4 )
#define EMC_DBG 0 x8
#define EMC_DBG_WRITE_MUX_ACTIVE BIT(1 )
#define EMC_DBG_WRITE_ACTIVE_ONLY BIT(30 )
#define EMC_CFG 0 xc
#define EMC_CFG_DRAM_CLKSTOP_PD BIT(31 )
#define EMC_CFG_DRAM_CLKSTOP_SR BIT(30 )
#define EMC_CFG_DRAM_ACPD BIT(29 )
#define EMC_CFG_DYN_SELF_REF BIT(28 )
#define EMC_PIN 0 x24
#define EMC_PIN_PIN_CKE BIT(0 )
#define EMC_PIN_PIN_CKEB BIT(1 )
#define EMC_PIN_PIN_CKE_PER_DEV BIT(2 )
#define EMC_TIMING_CONTROL 0 x28
#define EMC_RC 0 x2c
#define EMC_RFC 0 x30
#define EMC_RAS 0 x34
#define EMC_RP 0 x38
#define EMC_R2W 0 x3c
#define EMC_W2R 0 x40
#define EMC_R2P 0 x44
#define EMC_W2P 0 x48
#define EMC_RD_RCD 0 x4c
#define EMC_WR_RCD 0 x50
#define EMC_RRD 0 x54
#define EMC_REXT 0 x58
#define EMC_WDV 0 x5c
#define EMC_QUSE 0 x60
#define EMC_QRST 0 x64
#define EMC_QSAFE 0 x68
#define EMC_RDV 0 x6c
#define EMC_REFRESH 0 x70
#define EMC_BURST_REFRESH_NUM 0 x74
#define EMC_PDEX2WR 0 x78
#define EMC_PDEX2RD 0 x7c
#define EMC_PCHG2PDEN 0 x80
#define EMC_ACT2PDEN 0 x84
#define EMC_AR2PDEN 0 x88
#define EMC_RW2PDEN 0 x8c
#define EMC_TXSR 0 x90
#define EMC_TCKE 0 x94
#define EMC_TFAW 0 x98
#define EMC_TRPAB 0 x9c
#define EMC_TCLKSTABLE 0 xa0
#define EMC_TCLKSTOP 0 xa4
#define EMC_TREFBW 0 xa8
#define EMC_TPPD 0 xac
#define EMC_ODT_WRITE 0 xb0
#define EMC_PDEX2MRR 0 xb4
#define EMC_WEXT 0 xb8
#define EMC_RFC_SLR 0 xc0
#define EMC_MRS_WAIT_CNT2 0 xc4
#define EMC_MRS_WAIT_CNT2_MRS_EXT2_WAIT_CNT_SHIFT 16
#define EMC_MRS_WAIT_CNT2_MRS_EXT1_WAIT_CNT_SHIFT 0
#define EMC_MRS_WAIT_CNT 0 xc8
#define EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT 0
#define EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK \
(0 x3FF << EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT)
#define EMC_MRS 0 xcc
#define EMC_EMRS 0 xd0
#define EMC_EMRS_USE_EMRS_LONG_CNT BIT(26 )
#define EMC_REF 0 xd4
#define EMC_REF_REF_CMD BIT(0 )
#define EMC_SELF_REF 0 xe0
#define EMC_MRW 0 xe8
#define EMC_MRW_MRW_OP_SHIFT 0
#define EMC_MRW_MRW_OP_MASK \
(0 xff << EMC_MRW_MRW_OP_SHIFT)
#define EMC_MRW_MRW_MA_SHIFT 16
#define EMC_MRW_USE_MRW_EXT_CNT 27
#define EMC_MRW_MRW_DEV_SELECTN_SHIFT 30
#define EMC_MRR 0 xec
#define EMC_MRR_DEV_SEL_SHIFT 30
#define EMC_MRR_DEV_SEL_MASK 0 x3
#define EMC_MRR_MA_SHIFT 16
#define EMC_MRR_MA_MASK 0 xff
#define EMC_MRR_DATA_SHIFT 0
#define EMC_MRR_DATA_MASK 0 xffff
#define EMC_FBIO_SPARE 0 x100
#define EMC_FBIO_CFG5 0 x104
#define EMC_FBIO_CFG5_DRAM_TYPE_SHIFT 0
#define EMC_FBIO_CFG5_DRAM_TYPE_MASK \
(0 x3 << EMC_FBIO_CFG5_DRAM_TYPE_SHIFT)
#define EMC_FBIO_CFG5_CMD_TX_DIS BIT(8 )
#define EMC_PDEX2CKE 0 x118
#define EMC_CKE2PDEN 0 x11c
#define EMC_MPC 0 x128
#define EMC_EMRS2 0 x12c
#define EMC_EMRS2_USE_EMRS2_LONG_CNT BIT(26 )
#define EMC_MRW2 0 x134
#define EMC_MRW3 0 x138
#define EMC_MRW4 0 x13c
#define EMC_R2R 0 x144
#define EMC_EINPUT 0 x14c
#define EMC_EINPUT_DURATION 0 x150
#define EMC_PUTERM_EXTRA 0 x154
#define EMC_TCKESR 0 x158
#define EMC_TPD 0 x15c
#define EMC_AUTO_CAL_CONFIG 0 x2a4
#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_COMPUTE_START BIT(0 )
#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_MEASURE_STALL BIT(9 )
#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_UPDATE_STALL BIT(10 )
#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE BIT(29 )
#define EMC_AUTO_CAL_CONFIG_AUTO_CAL_START BIT(31 )
#define EMC_EMC_STATUS 0 x2b4
#define EMC_EMC_STATUS_MRR_DIVLD BIT(20 )
#define EMC_EMC_STATUS_TIMING_UPDATE_STALLED BIT(23 )
#define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT 4
#define EMC_EMC_STATUS_DRAM_IN_POWERDOWN_MASK \
(0 x3 << EMC_EMC_STATUS_DRAM_IN_POWERDOWN_SHIFT)
#define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT 8
#define EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_MASK \
(0 x3 << EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT)
#define EMC_CFG_2 0 x2b8
#define EMC_CFG_DIG_DLL 0 x2bc
#define EMC_CFG_DIG_DLL_CFG_DLL_EN BIT(0 )
#define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_UNTIL_LOCK BIT(1 )
#define EMC_CFG_DIG_DLL_CFG_DLL_STALL_ALL_TRAFFIC BIT(3 )
#define EMC_CFG_DIG_DLL_CFG_DLL_STALL_RW_UNTIL_LOCK BIT(4 )
#define EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT 6
#define EMC_CFG_DIG_DLL_CFG_DLL_MODE_MASK \
(0 x3 << EMC_CFG_DIG_DLL_CFG_DLL_MODE_SHIFT)
#define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT 8
#define EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_MASK \
(0 x7 << EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT)
#define EMC_CFG_DIG_DLL_PERIOD 0 x2c0
#define EMC_DIG_DLL_STATUS 0 x2c4
#define EMC_DIG_DLL_STATUS_DLL_LOCK BIT(15 )
#define EMC_DIG_DLL_STATUS_DLL_PRIV_UPDATED BIT(17 )
#define EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT 0
#define EMC_DIG_DLL_STATUS_DLL_OUT_MASK \
(0 x7ff << EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT)
#define EMC_CFG_DIG_DLL_1 0 x2c8
#define EMC_RDV_MASK 0 x2cc
#define EMC_WDV_MASK 0 x2d0
#define EMC_RDV_EARLY_MASK 0 x2d4
#define EMC_RDV_EARLY 0 x2d8
#define EMC_AUTO_CAL_CONFIG8 0 x2dc
#define EMC_ZCAL_INTERVAL 0 x2e0
#define EMC_ZCAL_WAIT_CNT 0 x2e4
#define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK 0 x7ff
#define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT 0
#define EMC_ZQ_CAL 0 x2ec
#define EMC_ZQ_CAL_DEV_SEL_SHIFT 30
#define EMC_ZQ_CAL_LONG BIT(4 )
#define EMC_ZQ_CAL_ZQ_LATCH_CMD BIT(1 )
#define EMC_ZQ_CAL_ZQ_CAL_CMD BIT(0 )
#define EMC_FDPD_CTRL_DQ 0 x310
#define EMC_FDPD_CTRL_CMD 0 x314
#define EMC_PMACRO_CMD_BRICK_CTRL_FDPD 0 x318
#define EMC_PMACRO_DATA_BRICK_CTRL_FDPD 0 x31c
#define EMC_PMACRO_BRICK_CTRL_RFU1 0 x330
#define EMC_PMACRO_BRICK_CTRL_RFU2 0 x334
#define EMC_TR_TIMING_0 0 x3b4
#define EMC_TR_CTRL_1 0 x3bc
#define EMC_TR_RDV 0 x3c4
#define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE 0 x3cc
#define EMC_SEL_DPD_CTRL 0 x3d8
#define EMC_SEL_DPD_CTRL_DATA_SEL_DPD_EN BIT(8 )
#define EMC_SEL_DPD_CTRL_ODT_SEL_DPD_EN BIT(5 )
#define EMC_SEL_DPD_CTRL_RESET_SEL_DPD_EN BIT(4 )
#define EMC_SEL_DPD_CTRL_CA_SEL_DPD_EN BIT(3 )
#define EMC_SEL_DPD_CTRL_CLK_SEL_DPD_EN BIT(2 )
#define EMC_PRE_REFRESH_REQ_CNT 0 x3dc
#define EMC_DYN_SELF_REF_CONTROL 0 x3e0
#define EMC_TXSRDLL 0 x3e4
#define EMC_CCFIFO_ADDR 0 x3e8
#define EMC_CCFIFO_ADDR_STALL_BY_1 (1 << 31 )
#define EMC_CCFIFO_ADDR_STALL(x) (((x) & 0 x7fff) << 16 )
#define EMC_CCFIFO_ADDR_OFFSET(x) ((x) & 0 xffff)
#define EMC_CCFIFO_DATA 0 x3ec
#define EMC_TR_QPOP 0 x3f4
#define EMC_TR_RDV_MASK 0 x3f8
#define EMC_TR_QSAFE 0 x3fc
#define EMC_TR_QRST 0 x400
#define EMC_ISSUE_QRST 0 x428
#define EMC_AUTO_CAL_CONFIG2 0 x458
#define EMC_AUTO_CAL_CONFIG3 0 x45c
#define EMC_TR_DVFS 0 x460
#define EMC_AUTO_CAL_CHANNEL 0 x464
#define EMC_IBDLY 0 x468
#define EMC_OBDLY 0 x46c
#define EMC_TXDSRVTTGEN 0 x480
#define EMC_WE_DURATION 0 x48c
#define EMC_WS_DURATION 0 x490
#define EMC_WEV 0 x494
#define EMC_WSV 0 x498
#define EMC_CFG_3 0 x49c
#define EMC_MRW6 0 x4a4
#define EMC_MRW7 0 x4a8
#define EMC_MRW8 0 x4ac
#define EMC_MRW9 0 x4b0
#define EMC_MRW10 0 x4b4
#define EMC_MRW11 0 x4b8
#define EMC_MRW12 0 x4bc
#define EMC_MRW13 0 x4c0
#define EMC_MRW14 0 x4c4
#define EMC_MRW15 0 x4d0
#define EMC_CFG_SYNC 0 x4d4
#define EMC_FDPD_CTRL_CMD_NO_RAMP 0 x4d8
#define EMC_FDPD_CTRL_CMD_NO_RAMP_CMD_DPD_NO_RAMP_ENABLE BIT(0 )
#define EMC_WDV_CHK 0 x4e0
#define EMC_CFG_PIPE_2 0 x554
#define EMC_CFG_PIPE_CLK 0 x558
#define EMC_CFG_PIPE_CLK_CLK_ALWAYS_ON BIT(0 )
#define EMC_CFG_PIPE_1 0 x55c
#define EMC_CFG_PIPE 0 x560
#define EMC_QPOP 0 x564
#define EMC_QUSE_WIDTH 0 x568
#define EMC_PUTERM_WIDTH 0 x56c
#define EMC_AUTO_CAL_CONFIG7 0 x574
#define EMC_REFCTRL2 0 x580
#define EMC_FBIO_CFG7 0 x584
#define EMC_FBIO_CFG7_CH0_ENABLE BIT(1 )
#define EMC_FBIO_CFG7_CH1_ENABLE BIT(2 )
#define EMC_DATA_BRLSHFT_0 0 x588
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT 21
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT 18
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE6_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT 15
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE5_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT 12
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE4_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT 9
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE3_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT 6
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE2_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT 3
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE1_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT 0
#define EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1 0 x58c
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT 21
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT 18
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE6_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT 15
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE5_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT 12
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE4_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT 9
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE3_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT 6
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE2_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT 3
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE1_DATA_BRLSHFT_SHIFT)
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT 0
#define EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_MASK \
(0 x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT)
#define EMC_RFCPB 0 x590
#define EMC_DQS_BRLSHFT_0 0 x594
#define EMC_DQS_BRLSHFT_1 0 x598
#define EMC_CMD_BRLSHFT_0 0 x59c
#define EMC_CMD_BRLSHFT_1 0 x5a0
#define EMC_CMD_BRLSHFT_2 0 x5a4
#define EMC_CMD_BRLSHFT_3 0 x5a8
#define EMC_QUSE_BRLSHFT_0 0 x5ac
#define EMC_AUTO_CAL_CONFIG4 0 x5b0
#define EMC_AUTO_CAL_CONFIG5 0 x5b4
#define EMC_QUSE_BRLSHFT_1 0 x5b8
#define EMC_QUSE_BRLSHFT_2 0 x5bc
#define EMC_CCDMW 0 x5c0
#define EMC_QUSE_BRLSHFT_3 0 x5c4
#define EMC_AUTO_CAL_CONFIG6 0 x5cc
#define EMC_DLL_CFG_0 0 x5e4
#define EMC_DLL_CFG_1 0 x5e8
#define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT 10
#define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_MASK \
(0 x7ff << EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT)
#define EMC_CONFIG_SAMPLE_DELAY 0 x5f0
#define EMC_CFG_UPDATE 0 x5f4
#define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT 9
#define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_MASK \
(0 x3 << EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT)
#define EMC_PMACRO_QUSE_DDLL_RANK0_0 0 x600
#define EMC_PMACRO_QUSE_DDLL_RANK0_1 0 x604
#define EMC_PMACRO_QUSE_DDLL_RANK0_2 0 x608
#define EMC_PMACRO_QUSE_DDLL_RANK0_3 0 x60c
#define EMC_PMACRO_QUSE_DDLL_RANK0_4 0 x610
#define EMC_PMACRO_QUSE_DDLL_RANK0_5 0 x614
#define EMC_PMACRO_QUSE_DDLL_RANK1_0 0 x620
#define EMC_PMACRO_QUSE_DDLL_RANK1_1 0 x624
#define EMC_PMACRO_QUSE_DDLL_RANK1_2 0 x628
#define EMC_PMACRO_QUSE_DDLL_RANK1_3 0 x62c
#define EMC_PMACRO_QUSE_DDLL_RANK1_4 0 x630
#define EMC_PMACRO_QUSE_DDLL_RANK1_5 0 x634
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0 0 x640
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE1_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1 0 x644
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE3_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2 0 x648
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE5_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3 0 x64c
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE7_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4 0 x650
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5 0 x654
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0 0 x660
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE1_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1 0 x664
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE3_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2 0 x668
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE5_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3 0 x66c
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT \
16
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE7_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT \
0
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_MASK \
(0 x3ff << \
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT)
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4 0 x670
#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5 0 x674
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0 0 x680
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1 0 x684
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2 0 x688
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3 0 x68c
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4 0 x690
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5 0 x694
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0 0 x6a0
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1 0 x6a4
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2 0 x6a8
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3 0 x6ac
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4 0 x6b0
#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5 0 x6b4
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0 0 x6c0
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1 0 x6c4
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2 0 x6c8
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3 0 x6cc
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0 0 x6e0
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1 0 x6e4
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2 0 x6e8
#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3 0 x6ec
#define EMC_PMACRO_TX_PWRD_0 0 x720
#define EMC_PMACRO_TX_PWRD_1 0 x724
#define EMC_PMACRO_TX_PWRD_2 0 x728
#define EMC_PMACRO_TX_PWRD_3 0 x72c
#define EMC_PMACRO_TX_PWRD_4 0 x730
#define EMC_PMACRO_TX_PWRD_5 0 x734
#define EMC_PMACRO_TX_SEL_CLK_SRC_0 0 x740
#define EMC_PMACRO_TX_SEL_CLK_SRC_1 0 x744
#define EMC_PMACRO_TX_SEL_CLK_SRC_3 0 x74c
#define EMC_PMACRO_TX_SEL_CLK_SRC_2 0 x748
#define EMC_PMACRO_TX_SEL_CLK_SRC_4 0 x750
#define EMC_PMACRO_TX_SEL_CLK_SRC_5 0 x754
#define EMC_PMACRO_DDLL_BYPASS 0 x760
#define EMC_PMACRO_DDLL_PWRD_0 0 x770
#define EMC_PMACRO_DDLL_PWRD_1 0 x774
#define EMC_PMACRO_DDLL_PWRD_2 0 x778
#define EMC_PMACRO_CMD_CTRL_0 0 x780
#define EMC_PMACRO_CMD_CTRL_1 0 x784
#define EMC_PMACRO_CMD_CTRL_2 0 x788
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0 x800
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0 x804
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0 x808
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3 0 x80c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0 x810
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0 x814
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0 x818
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3 0 x81c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0 x820
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0 x824
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0 x828
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3 0 x82c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0 x830
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0 x834
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0 x838
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3 0 x83c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0 x840
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0 x844
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0 x848
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3 0 x84c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0 x850
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0 x854
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0 x858
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3 0 x85c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0 x860
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0 x864
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0 x868
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3 0 x86c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0 x870
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0 x874
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0 x878
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3 0 x87c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0 0 x880
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1 0 x884
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2 0 x888
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3 0 x88c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0 0 x890
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1 0 x894
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2 0 x898
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3 0 x89c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0 0 x8a0
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1 0 x8a4
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2 0 x8a8
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3 0 x8ac
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0 0 x8b0
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1 0 x8b4
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2 0 x8b8
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3 0 x8bc
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0 x900
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0 x904
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0 x908
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3 0 x90c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0 x910
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0 x914
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0 x918
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3 0 x91c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0 x920
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0 x924
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0 x928
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3 0 x92c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0 x930
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0 x934
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0 x938
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3 0 x93c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0 x940
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0 x944
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0 x948
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3 0 x94c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0 x950
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0 x954
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0 x958
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3 0 x95c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0 x960
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0 x964
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0 x968
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3 0 x96c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0 x970
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0 x974
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0 x978
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3 0 x97c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0 0 x980
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1 0 x984
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2 0 x988
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3 0 x98c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0 0 x990
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1 0 x994
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2 0 x998
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3 0 x99c
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0 0 x9a0
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1 0 x9a4
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2 0 x9a8
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3 0 x9ac
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0 0 x9b0
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1 0 x9b4
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2 0 x9b8
#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3 0 x9bc
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0 xa00
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0 xa04
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0 xa08
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0 xa10
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0 xa14
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0 xa18
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0 xa20
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0 xa24
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0 xa28
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0 xa30
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0 xa34
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0 xa38
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0 xa40
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0 xa44
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0 xa48
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0 xa50
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0 xa54
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0 xa58
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0 xa60
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0 xa64
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0 xa68
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0 xa70
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0 xa74
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0 xa78
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0 xb00
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0 xb04
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0 xb08
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0 xb10
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0 xb14
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0 xb18
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0 xb20
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0 xb24
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0 xb28
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0 xb30
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0 xb34
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0 xb38
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0 xb40
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0 xb44
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0 xb48
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0 xb50
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0 xb54
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0 xb58
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0 xb60
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0 xb64
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0 xb68
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0 xb70
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0 xb74
#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0 xb78
#define EMC_PMACRO_IB_VREF_DQ_0 0 xbe0
#define EMC_PMACRO_IB_VREF_DQ_1 0 xbe4
#define EMC_PMACRO_IB_VREF_DQS_0 0 xbf0
#define EMC_PMACRO_IB_VREF_DQS_1 0 xbf4
#define EMC_PMACRO_DDLL_LONG_CMD_0 0 xc00
#define EMC_PMACRO_DDLL_LONG_CMD_1 0 xc04
#define EMC_PMACRO_DDLL_LONG_CMD_2 0 xc08
#define EMC_PMACRO_DDLL_LONG_CMD_3 0 xc0c
#define EMC_PMACRO_DDLL_LONG_CMD_4 0 xc10
#define EMC_PMACRO_DDLL_LONG_CMD_5 0 xc14
#define EMC_PMACRO_DDLL_SHORT_CMD_0 0 xc20
#define EMC_PMACRO_DDLL_SHORT_CMD_1 0 xc24
#define EMC_PMACRO_DDLL_SHORT_CMD_2 0 xc28
#define EMC_PMACRO_CFG_PM_GLOBAL_0 0 xc30
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE0 BIT(16 )
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE1 BIT(17 )
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE2 BIT(18 )
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE3 BIT(19 )
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE4 BIT(20 )
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE5 BIT(21 )
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE6 BIT(22 )
#define EMC_PMACRO_CFG_PM_GLOBAL_0_DISABLE_CFG_BYTE7 BIT(23 )
#define EMC_PMACRO_VTTGEN_CTRL_0 0 xc34
#define EMC_PMACRO_VTTGEN_CTRL_1 0 xc38
#define EMC_PMACRO_BG_BIAS_CTRL_0 0 xc3c
#define EMC_PMACRO_BG_BIAS_CTRL_0_BG_E_PWRD BIT(0 )
#define EMC_PMACRO_BG_BIAS_CTRL_0_BGLP_E_PWRD BIT(2 )
#define EMC_PMACRO_PAD_CFG_CTRL 0 xc40
#define EMC_PMACRO_ZCTRL 0 xc44
#define EMC_PMACRO_CMD_PAD_RX_CTRL 0 xc50
#define EMC_PMACRO_DATA_PAD_RX_CTRL 0 xc54
#define EMC_PMACRO_CMD_RX_TERM_MODE 0 xc58
#define EMC_PMACRO_DATA_RX_TERM_MODE 0 xc5c
#define EMC_PMACRO_CMD_PAD_TX_CTRL 0 xc60
#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_E_DCC BIT(1 )
#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSP_TX_E_DCC BIT(9 )
#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQSN_TX_E_DCC BIT(16 )
#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_CMD_TX_E_DCC BIT(24 )
#define EMC_PMACRO_CMD_PAD_TX_CTRL_CMD_DQ_TX_DRVFORCEON BIT(26 )
#define EMC_PMACRO_DATA_PAD_TX_CTRL 0 xc64
#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_E_IVREF BIT(0 )
#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQ_TX_E_DCC BIT(1 )
#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQS_E_IVREF BIT(8 )
#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSP_TX_E_DCC BIT(9 )
#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_DQSN_TX_E_DCC BIT(16 )
#define EMC_PMACRO_DATA_PAD_TX_CTRL_DATA_CMD_TX_E_DCC BIT(24 )
#define EMC_PMACRO_COMMON_PAD_TX_CTRL 0 xc68
#define EMC_PMACRO_AUTOCAL_CFG_COMMON 0 xc78
#define EMC_PMACRO_AUTOCAL_CFG_COMMON_E_CAL_BYPASS_DVFS BIT(16 )
#define EMC_PMACRO_VTTGEN_CTRL_2 0 xcf0
#define EMC_PMACRO_IB_RXRT 0 xcf4
#define EMC_PMACRO_TRAINING_CTRL_0 0 xcf8
#define EMC_PMACRO_TRAINING_CTRL_0_CH0_TRAINING_E_WRPTR BIT(3 )
#define EMC_PMACRO_TRAINING_CTRL_1 0 xcfc
#define EMC_PMACRO_TRAINING_CTRL_1_CH1_TRAINING_E_WRPTR BIT(3 )
#define EMC_TRAINING_CTRL 0 xe04
#define EMC_TRAINING_QUSE_CORS_CTRL 0 xe0c
#define EMC_TRAINING_QUSE_FINE_CTRL 0 xe10
#define EMC_TRAINING_QUSE_CTRL_MISC 0 xe14
#define EMC_TRAINING_WRITE_FINE_CTRL 0 xe18
#define EMC_TRAINING_WRITE_CTRL_MISC 0 xe1c
#define EMC_TRAINING_WRITE_VREF_CTRL 0 xe20
#define EMC_TRAINING_READ_FINE_CTRL 0 xe24
#define EMC_TRAINING_READ_CTRL_MISC 0 xe28
#define EMC_TRAINING_READ_VREF_CTRL 0 xe2c
#define EMC_TRAINING_CA_FINE_CTRL 0 xe30
#define EMC_TRAINING_CA_CTRL_MISC 0 xe34
#define EMC_TRAINING_CA_CTRL_MISC1 0 xe38
#define EMC_TRAINING_CA_VREF_CTRL 0 xe3c
#define EMC_TRAINING_SETTLE 0 xe44
#define EMC_TRAINING_MPC 0 xe5c
#define EMC_TRAINING_VREF_SETTLE 0 xe6c
#define EMC_TRAINING_QUSE_VREF_CTRL 0 xed0
#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0 0 xed4
#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1 0 xed8
#define EMC_COPY_TABLE_PARAM_PERIODIC_FIELDS BIT(0 )
#define EMC_COPY_TABLE_PARAM_TRIM_REGS BIT(1 )
enum burst_regs_list {
EMC_RP_INDEX = 6 ,
EMC_R2P_INDEX = 9 ,
EMC_W2P_INDEX,
EMC_MRW6_INDEX = 31 ,
EMC_REFRESH_INDEX = 41 ,
EMC_PRE_REFRESH_REQ_CNT_INDEX = 43 ,
EMC_TRPAB_INDEX = 59 ,
EMC_MRW7_INDEX = 62 ,
EMC_FBIO_CFG5_INDEX = 65 ,
EMC_FBIO_CFG7_INDEX,
EMC_CFG_DIG_DLL_INDEX,
EMC_ZCAL_INTERVAL_INDEX = 139 ,
EMC_ZCAL_WAIT_CNT_INDEX,
EMC_MRS_WAIT_CNT_INDEX = 141 ,
EMC_DLL_CFG_0_INDEX = 144 ,
EMC_PMACRO_AUTOCAL_CFG_COMMON_INDEX = 146 ,
EMC_CFG_INDEX = 148 ,
EMC_DYN_SELF_REF_CONTROL_INDEX = 150 ,
EMC_PMACRO_CMD_PAD_TX_CTRL_INDEX = 161 ,
EMC_PMACRO_DATA_PAD_TX_CTRL_INDEX,
EMC_PMACRO_COMMON_PAD_TX_CTRL_INDEX,
EMC_PMACRO_BRICK_CTRL_RFU1_INDEX = 167 ,
EMC_PMACRO_BG_BIAS_CTRL_0_INDEX = 171 ,
EMC_MRW14_INDEX = 199 ,
EMC_MRW15_INDEX = 220 ,
};
enum trim_regs_list {
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_INDEX = 60 ,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_INDEX,
EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_INDEX,
};
enum burst_mc_regs_list {
MC_EMEM_ARB_MISC0_INDEX = 20 ,
};
enum {
T_RP,
T_FC_LPDDR4,
T_RFC,
T_PDEX,
RL,
};
enum {
AUTO_PD = 0 ,
MAN_SR = 2 ,
};
enum {
ASSEMBLY = 0 ,
ACTIVE,
};
enum {
C0D0U0,
C0D0U1,
C0D1U0,
C0D1U1,
C1D0U0,
C1D0U1,
C1D1U0,
C1D1U1,
DRAM_CLKTREE_NUM,
};
#define VREF_REGS_PER_CHANNEL_SIZE 4
#define DRAM_TIMINGS_NUM 5
#define BURST_REGS_PER_CHANNEL_SIZE 8
#define TRIM_REGS_PER_CHANNEL_SIZE 10
#define PTFV_ARRAY_SIZE 12
#define SAVE_RESTORE_MOD_REGS_SIZE 12
#define TRAINING_MOD_REGS_SIZE 20
#define BURST_UP_DOWN_REGS_SIZE 24
#define BURST_MC_REGS_SIZE 33
#define TRIM_REGS_SIZE 138
#define BURST_REGS_SIZE 221
struct tegra210_emc_per_channel_regs {
u16 bank;
u16 offset;
};
struct tegra210_emc_table_register_offsets {
u16 burst[BURST_REGS_SIZE];
u16 trim[TRIM_REGS_SIZE];
u16 burst_mc[BURST_MC_REGS_SIZE];
u16 la_scale[BURST_UP_DOWN_REGS_SIZE];
struct tegra210_emc_per_channel_regs burst_per_channel[BURST_REGS_PER_CHANNEL_SIZE];
struct tegra210_emc_per_channel_regs trim_per_channel[TRIM_REGS_PER_CHANNEL_SIZE];
struct tegra210_emc_per_channel_regs vref_per_channel[VREF_REGS_PER_CHANNEL_SIZE];
};
struct tegra210_emc_timing {
u32 revision;
const char dvfs_ver[60 ];
u32 rate;
u32 min_volt;
u32 gpu_min_volt;
const char clock_src[32 ];
u32 clk_src_emc;
u32 needs_training;
u32 training_pattern;
u32 trained;
u32 periodic_training;
u32 trained_dram_clktree[DRAM_CLKTREE_NUM];
u32 current_dram_clktree[DRAM_CLKTREE_NUM];
u32 run_clocks;
u32 tree_margin;
u32 num_burst;
u32 num_burst_per_ch;
u32 num_trim;
u32 num_trim_per_ch;
u32 num_mc_regs;
u32 num_up_down;
u32 vref_num;
u32 training_mod_num;
u32 dram_timing_num;
u32 ptfv_list[PTFV_ARRAY_SIZE];
u32 burst_regs[BURST_REGS_SIZE];
u32 burst_reg_per_ch[BURST_REGS_PER_CHANNEL_SIZE];
u32 shadow_regs_ca_train[BURST_REGS_SIZE];
u32 shadow_regs_quse_train[BURST_REGS_SIZE];
u32 shadow_regs_rdwr_train[BURST_REGS_SIZE];
u32 trim_regs[TRIM_REGS_SIZE];
u32 trim_perch_regs[TRIM_REGS_PER_CHANNEL_SIZE];
u32 vref_perch_regs[VREF_REGS_PER_CHANNEL_SIZE];
u32 dram_timings[DRAM_TIMINGS_NUM];
u32 training_mod_regs[TRAINING_MOD_REGS_SIZE];
u32 save_restore_mod_regs[SAVE_RESTORE_MOD_REGS_SIZE];
u32 burst_mc_regs[BURST_MC_REGS_SIZE];
u32 la_scale_regs[BURST_UP_DOWN_REGS_SIZE];
u32 min_mrs_wait;
u32 emc_mrw;
u32 emc_mrw2;
u32 emc_mrw3;
u32 emc_mrw4;
u32 emc_mrw9;
u32 emc_mrs;
u32 emc_emrs;
u32 emc_emrs2;
u32 emc_auto_cal_config;
u32 emc_auto_cal_config2;
u32 emc_auto_cal_config3;
u32 emc_auto_cal_config4;
u32 emc_auto_cal_config5;
u32 emc_auto_cal_config6;
u32 emc_auto_cal_config7;
u32 emc_auto_cal_config8;
u32 emc_cfg_2;
u32 emc_sel_dpd_ctrl;
u32 emc_fdpd_ctrl_cmd_no_ramp;
u32 dll_clk_src;
u32 clk_out_enb_x_0_clk_enb_emc_dll;
u32 latency;
};
enum tegra210_emc_refresh {
TEGRA210_EMC_REFRESH_NOMINAL = 0 ,
TEGRA210_EMC_REFRESH_2X,
TEGRA210_EMC_REFRESH_4X,
TEGRA210_EMC_REFRESH_THROTTLE, /* 4x Refresh + derating. */
};
#define DRAM_TYPE_DDR3 0
#define DRAM_TYPE_LPDDR4 1
#define DRAM_TYPE_LPDDR2 2
#define DRAM_TYPE_DDR2 3
struct tegra210_emc {
struct tegra_mc *mc;
struct device *dev;
struct clk *clk;
/* nominal EMC frequency table */
struct tegra210_emc_timing *nominal;
/* derated EMC frequency table */
struct tegra210_emc_timing *derated;
/* currently selected table (nominal or derated) */
struct tegra210_emc_timing *timings;
unsigned int num_timings;
const struct tegra210_emc_table_register_offsets *offsets;
const struct tegra210_emc_sequence *sequence;
spinlock_t lock;
void __iomem *regs, *channel[2 ];
unsigned int num_channels;
unsigned int num_devices;
unsigned int dram_type;
struct tegra210_emc_timing *last;
struct tegra210_emc_timing *next;
unsigned int training_interval;
struct timer_list training;
enum tegra210_emc_refresh refresh;
unsigned int refresh_poll_interval;
struct timer_list refresh_timer;
unsigned int temperature;
atomic_t refresh_poll;
ktime_t clkchange_time;
int clkchange_delay;
unsigned long resume_rate;
struct {
struct dentry *root;
unsigned long min_rate;
unsigned long max_rate;
unsigned int temperature;
} debugfs;
struct tegra210_clk_emc_provider provider;
};
struct tegra210_emc_sequence {
u8 revision;
void (*set_clock)(struct tegra210_emc *emc, u32 clksrc);
u32 (*periodic_compensation)(struct tegra210_emc *emc);
};
static inline void emc_writel(struct tegra210_emc *emc, u32 value,
unsigned int offset)
{
writel_relaxed(value, emc->regs + offset);
}
static inline u32 emc_readl(struct tegra210_emc *emc, unsigned int offset)
{
return readl_relaxed(emc->regs + offset);
}
static inline void emc_channel_writel(struct tegra210_emc *emc,
unsigned int channel,
u32 value, unsigned int offset)
{
writel_relaxed(value, emc->channel[channel] + offset);
}
static inline u32 emc_channel_readl(struct tegra210_emc *emc,
unsigned int channel, unsigned int offset)
{
return readl_relaxed(emc->channel[channel] + offset);
}
static inline void ccfifo_writel(struct tegra210_emc *emc, u32 value,
unsigned int offset, u32 delay)
{
writel_relaxed(value, emc->regs + EMC_CCFIFO_DATA);
value = EMC_CCFIFO_ADDR_STALL_BY_1 | EMC_CCFIFO_ADDR_STALL(delay) |
EMC_CCFIFO_ADDR_OFFSET(offset);
writel_relaxed(value, emc->regs + EMC_CCFIFO_ADDR);
}
static inline u32 div_o3(u32 a, u32 b)
{
u32 result = a / b;
if ((b * result) < a)
return result + 1 ;
return result;
}
/* from tegra210-emc-r21021.c */
extern const struct tegra210_emc_sequence tegra210_emc_r21021;
int tegra210_emc_set_refresh(struct tegra210_emc *emc,
enum tegra210_emc_refresh refresh);
u32 tegra210_emc_mrr_read(struct tegra210_emc *emc, unsigned int chip,
unsigned int address);
void tegra210_emc_do_clock_change(struct tegra210_emc *emc, u32 clksrc);
void tegra210_emc_set_shadow_bypass(struct tegra210_emc *emc, int set);
void tegra210_emc_timing_update(struct tegra210_emc *emc);
u32 tegra210_emc_get_dll_state(struct tegra210_emc_timing *next);
struct tegra210_emc_timing *tegra210_emc_find_timing(struct tegra210_emc *emc,
unsigned long rate);
void tegra210_emc_adjust_timing(struct tegra210_emc *emc,
struct tegra210_emc_timing *timing);
int tegra210_emc_wait_for_update(struct tegra210_emc *emc, unsigned int channel,
unsigned int offset, u32 bit_mask, bool state);
unsigned long tegra210_emc_actual_osc_clocks(u32 in);
u32 tegra210_emc_compensate(struct tegra210_emc_timing *next, u32 offset);
void tegra210_emc_dll_disable(struct tegra210_emc *emc);
void tegra210_emc_dll_enable(struct tegra210_emc *emc);
u32 tegra210_emc_dll_prelock(struct tegra210_emc *emc, u32 clksrc);
u32 tegra210_emc_dvfs_power_ramp_down(struct tegra210_emc *emc, u32 clk,
bool flip_backward);
u32 tegra210_emc_dvfs_power_ramp_up(struct tegra210_emc *emc, u32 clk,
bool flip_backward);
void tegra210_emc_reset_dram_clktree_values(struct tegra210_emc_timing *timing);
void tegra210_emc_start_periodic_compensation(struct tegra210_emc *emc);
#endif
Messung V0.5 in Prozent C=93 H=91 G=91
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland