| /* 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 0x0 |
| #define EMC_INTSTATUS_CLKCHANGE_COMPLETE BIT(4) |
| #define EMC_DBG 0x8 |
| #define EMC_DBG_WRITE_MUX_ACTIVE BIT(1) |
| #define EMC_DBG_WRITE_ACTIVE_ONLY BIT(30) |
| #define EMC_CFG 0xc |
| #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 0x24 |
| #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 0x28 |
| #define EMC_RC 0x2c |
| #define EMC_RFC 0x30 |
| #define EMC_RAS 0x34 |
| #define EMC_RP 0x38 |
| #define EMC_R2W 0x3c |
| #define EMC_W2R 0x40 |
| #define EMC_R2P 0x44 |
| #define EMC_W2P 0x48 |
| #define EMC_RD_RCD 0x4c |
| #define EMC_WR_RCD 0x50 |
| #define EMC_RRD 0x54 |
| #define EMC_REXT 0x58 |
| #define EMC_WDV 0x5c |
| #define EMC_QUSE 0x60 |
| #define EMC_QRST 0x64 |
| #define EMC_QSAFE 0x68 |
| #define EMC_RDV 0x6c |
| #define EMC_REFRESH 0x70 |
| #define EMC_BURST_REFRESH_NUM 0x74 |
| #define EMC_PDEX2WR 0x78 |
| #define EMC_PDEX2RD 0x7c |
| #define EMC_PCHG2PDEN 0x80 |
| #define EMC_ACT2PDEN 0x84 |
| #define EMC_AR2PDEN 0x88 |
| #define EMC_RW2PDEN 0x8c |
| #define EMC_TXSR 0x90 |
| #define EMC_TCKE 0x94 |
| #define EMC_TFAW 0x98 |
| #define EMC_TRPAB 0x9c |
| #define EMC_TCLKSTABLE 0xa0 |
| #define EMC_TCLKSTOP 0xa4 |
| #define EMC_TREFBW 0xa8 |
| #define EMC_TPPD 0xac |
| #define EMC_ODT_WRITE 0xb0 |
| #define EMC_PDEX2MRR 0xb4 |
| #define EMC_WEXT 0xb8 |
| #define EMC_RFC_SLR 0xc0 |
| #define EMC_MRS_WAIT_CNT2 0xc4 |
| #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 0xc8 |
| #define EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT 0 |
| #define EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK \ |
| (0x3FF << EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT) |
| |
| #define EMC_MRS 0xcc |
| #define EMC_EMRS 0xd0 |
| #define EMC_EMRS_USE_EMRS_LONG_CNT BIT(26) |
| #define EMC_REF 0xd4 |
| #define EMC_REF_REF_CMD BIT(0) |
| #define EMC_SELF_REF 0xe0 |
| #define EMC_MRW 0xe8 |
| #define EMC_MRW_MRW_OP_SHIFT 0 |
| #define EMC_MRW_MRW_OP_MASK \ |
| (0xff << 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 0xec |
| #define EMC_MRR_DEV_SEL_SHIFT 30 |
| #define EMC_MRR_DEV_SEL_MASK 0x3 |
| #define EMC_MRR_MA_SHIFT 16 |
| #define EMC_MRR_MA_MASK 0xff |
| #define EMC_MRR_DATA_SHIFT 0 |
| #define EMC_MRR_DATA_MASK 0xffff |
| |
| #define EMC_FBIO_SPARE 0x100 |
| #define EMC_FBIO_CFG5 0x104 |
| #define EMC_FBIO_CFG5_DRAM_TYPE_SHIFT 0 |
| #define EMC_FBIO_CFG5_DRAM_TYPE_MASK \ |
| (0x3 << EMC_FBIO_CFG5_DRAM_TYPE_SHIFT) |
| #define EMC_FBIO_CFG5_CMD_TX_DIS BIT(8) |
| |
| #define EMC_PDEX2CKE 0x118 |
| #define EMC_CKE2PDEN 0x11c |
| #define EMC_MPC 0x128 |
| #define EMC_EMRS2 0x12c |
| #define EMC_EMRS2_USE_EMRS2_LONG_CNT BIT(26) |
| #define EMC_MRW2 0x134 |
| #define EMC_MRW3 0x138 |
| #define EMC_MRW4 0x13c |
| #define EMC_R2R 0x144 |
| #define EMC_EINPUT 0x14c |
| #define EMC_EINPUT_DURATION 0x150 |
| #define EMC_PUTERM_EXTRA 0x154 |
| #define EMC_TCKESR 0x158 |
| #define EMC_TPD 0x15c |
| #define EMC_AUTO_CAL_CONFIG 0x2a4 |
| #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 0x2b4 |
| #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 \ |
| (0x3 << 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 \ |
| (0x3 << EMC_EMC_STATUS_DRAM_IN_SELF_REFRESH_SHIFT) |
| |
| #define EMC_CFG_2 0x2b8 |
| #define EMC_CFG_DIG_DLL 0x2bc |
| #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 \ |
| (0x3 << 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 \ |
| (0x7 << EMC_CFG_DIG_DLL_CFG_DLL_LOCK_LIMIT_SHIFT) |
| |
| #define EMC_CFG_DIG_DLL_PERIOD 0x2c0 |
| #define EMC_DIG_DLL_STATUS 0x2c4 |
| #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 \ |
| (0x7ff << EMC_DIG_DLL_STATUS_DLL_OUT_SHIFT) |
| |
| #define EMC_CFG_DIG_DLL_1 0x2c8 |
| #define EMC_RDV_MASK 0x2cc |
| #define EMC_WDV_MASK 0x2d0 |
| #define EMC_RDV_EARLY_MASK 0x2d4 |
| #define EMC_RDV_EARLY 0x2d8 |
| #define EMC_AUTO_CAL_CONFIG8 0x2dc |
| #define EMC_ZCAL_INTERVAL 0x2e0 |
| #define EMC_ZCAL_WAIT_CNT 0x2e4 |
| #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_MASK 0x7ff |
| #define EMC_ZCAL_WAIT_CNT_ZCAL_WAIT_CNT_SHIFT 0 |
| |
| #define EMC_ZQ_CAL 0x2ec |
| #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 0x310 |
| #define EMC_FDPD_CTRL_CMD 0x314 |
| #define EMC_PMACRO_CMD_BRICK_CTRL_FDPD 0x318 |
| #define EMC_PMACRO_DATA_BRICK_CTRL_FDPD 0x31c |
| #define EMC_PMACRO_BRICK_CTRL_RFU1 0x330 |
| #define EMC_PMACRO_BRICK_CTRL_RFU2 0x334 |
| #define EMC_TR_TIMING_0 0x3b4 |
| #define EMC_TR_CTRL_1 0x3bc |
| #define EMC_TR_RDV 0x3c4 |
| #define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE 0x3cc |
| #define EMC_SEL_DPD_CTRL 0x3d8 |
| #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 0x3dc |
| #define EMC_DYN_SELF_REF_CONTROL 0x3e0 |
| #define EMC_TXSRDLL 0x3e4 |
| #define EMC_CCFIFO_ADDR 0x3e8 |
| #define EMC_CCFIFO_ADDR_STALL_BY_1 (1 << 31) |
| #define EMC_CCFIFO_ADDR_STALL(x) (((x) & 0x7fff) << 16) |
| #define EMC_CCFIFO_ADDR_OFFSET(x) ((x) & 0xffff) |
| #define EMC_CCFIFO_DATA 0x3ec |
| #define EMC_TR_QPOP 0x3f4 |
| #define EMC_TR_RDV_MASK 0x3f8 |
| #define EMC_TR_QSAFE 0x3fc |
| #define EMC_TR_QRST 0x400 |
| #define EMC_ISSUE_QRST 0x428 |
| #define EMC_AUTO_CAL_CONFIG2 0x458 |
| #define EMC_AUTO_CAL_CONFIG3 0x45c |
| #define EMC_TR_DVFS 0x460 |
| #define EMC_AUTO_CAL_CHANNEL 0x464 |
| #define EMC_IBDLY 0x468 |
| #define EMC_OBDLY 0x46c |
| #define EMC_TXDSRVTTGEN 0x480 |
| #define EMC_WE_DURATION 0x48c |
| #define EMC_WS_DURATION 0x490 |
| #define EMC_WEV 0x494 |
| #define EMC_WSV 0x498 |
| #define EMC_CFG_3 0x49c |
| #define EMC_MRW6 0x4a4 |
| #define EMC_MRW7 0x4a8 |
| #define EMC_MRW8 0x4ac |
| #define EMC_MRW9 0x4b0 |
| #define EMC_MRW10 0x4b4 |
| #define EMC_MRW11 0x4b8 |
| #define EMC_MRW12 0x4bc |
| #define EMC_MRW13 0x4c0 |
| #define EMC_MRW14 0x4c4 |
| #define EMC_MRW15 0x4d0 |
| #define EMC_CFG_SYNC 0x4d4 |
| #define EMC_FDPD_CTRL_CMD_NO_RAMP 0x4d8 |
| #define EMC_FDPD_CTRL_CMD_NO_RAMP_CMD_DPD_NO_RAMP_ENABLE BIT(0) |
| #define EMC_WDV_CHK 0x4e0 |
| #define EMC_CFG_PIPE_2 0x554 |
| #define EMC_CFG_PIPE_CLK 0x558 |
| #define EMC_CFG_PIPE_CLK_CLK_ALWAYS_ON BIT(0) |
| #define EMC_CFG_PIPE_1 0x55c |
| #define EMC_CFG_PIPE 0x560 |
| #define EMC_QPOP 0x564 |
| #define EMC_QUSE_WIDTH 0x568 |
| #define EMC_PUTERM_WIDTH 0x56c |
| #define EMC_AUTO_CAL_CONFIG7 0x574 |
| #define EMC_REFCTRL2 0x580 |
| #define EMC_FBIO_CFG7 0x584 |
| #define EMC_FBIO_CFG7_CH0_ENABLE BIT(1) |
| #define EMC_FBIO_CFG7_CH1_ENABLE BIT(2) |
| #define EMC_DATA_BRLSHFT_0 0x588 |
| #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_SHIFT 21 |
| #define EMC_DATA_BRLSHFT_0_RANK0_BYTE7_DATA_BRLSHFT_MASK \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << EMC_DATA_BRLSHFT_0_RANK0_BYTE0_DATA_BRLSHFT_SHIFT) |
| |
| #define EMC_DATA_BRLSHFT_1 0x58c |
| #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_SHIFT 21 |
| #define EMC_DATA_BRLSHFT_1_RANK1_BYTE7_DATA_BRLSHFT_MASK \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << 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 \ |
| (0x7 << EMC_DATA_BRLSHFT_1_RANK1_BYTE0_DATA_BRLSHFT_SHIFT) |
| |
| #define EMC_RFCPB 0x590 |
| #define EMC_DQS_BRLSHFT_0 0x594 |
| #define EMC_DQS_BRLSHFT_1 0x598 |
| #define EMC_CMD_BRLSHFT_0 0x59c |
| #define EMC_CMD_BRLSHFT_1 0x5a0 |
| #define EMC_CMD_BRLSHFT_2 0x5a4 |
| #define EMC_CMD_BRLSHFT_3 0x5a8 |
| #define EMC_QUSE_BRLSHFT_0 0x5ac |
| #define EMC_AUTO_CAL_CONFIG4 0x5b0 |
| #define EMC_AUTO_CAL_CONFIG5 0x5b4 |
| #define EMC_QUSE_BRLSHFT_1 0x5b8 |
| #define EMC_QUSE_BRLSHFT_2 0x5bc |
| #define EMC_CCDMW 0x5c0 |
| #define EMC_QUSE_BRLSHFT_3 0x5c4 |
| #define EMC_AUTO_CAL_CONFIG6 0x5cc |
| #define EMC_DLL_CFG_0 0x5e4 |
| #define EMC_DLL_CFG_1 0x5e8 |
| #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT 10 |
| #define EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_MASK \ |
| (0x7ff << EMC_DLL_CFG_1_DDLLCAL_CTRL_START_TRIM_SHIFT) |
| |
| #define EMC_CONFIG_SAMPLE_DELAY 0x5f0 |
| #define EMC_CFG_UPDATE 0x5f4 |
| #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT 9 |
| #define EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_MASK \ |
| (0x3 << EMC_CFG_UPDATE_UPDATE_DLL_IN_UPDATE_SHIFT) |
| |
| #define EMC_PMACRO_QUSE_DDLL_RANK0_0 0x600 |
| #define EMC_PMACRO_QUSE_DDLL_RANK0_1 0x604 |
| #define EMC_PMACRO_QUSE_DDLL_RANK0_2 0x608 |
| #define EMC_PMACRO_QUSE_DDLL_RANK0_3 0x60c |
| #define EMC_PMACRO_QUSE_DDLL_RANK0_4 0x610 |
| #define EMC_PMACRO_QUSE_DDLL_RANK0_5 0x614 |
| #define EMC_PMACRO_QUSE_DDLL_RANK1_0 0x620 |
| #define EMC_PMACRO_QUSE_DDLL_RANK1_1 0x624 |
| #define EMC_PMACRO_QUSE_DDLL_RANK1_2 0x628 |
| #define EMC_PMACRO_QUSE_DDLL_RANK1_3 0x62c |
| #define EMC_PMACRO_QUSE_DDLL_RANK1_4 0x630 |
| #define EMC_PMACRO_QUSE_DDLL_RANK1_5 0x634 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0 0x640 |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0_OB_DDLL_LONG_DQ_RANK0_BYTE0_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1 0x644 |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1_OB_DDLL_LONG_DQ_RANK0_BYTE2_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2 0x648 |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2_OB_DDLL_LONG_DQ_RANK0_BYTE4_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3 0x64c |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3_OB_DDLL_LONG_DQ_RANK0_BYTE6_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4 0x650 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5 0x654 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0 0x660 |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0_OB_DDLL_LONG_DQ_RANK1_BYTE0_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1 0x664 |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1_OB_DDLL_LONG_DQ_RANK1_BYTE2_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2 0x668 |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2_OB_DDLL_LONG_DQ_RANK1_BYTE4_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3 0x66c |
| #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 \ |
| (0x3ff << \ |
| 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 \ |
| (0x3ff << \ |
| EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3_OB_DDLL_LONG_DQ_RANK1_BYTE6_SHIFT) |
| |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4 0x670 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5 0x674 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0 0x680 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1 0x684 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2 0x688 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3 0x68c |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4 0x690 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5 0x694 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0 0x6a0 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1 0x6a4 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2 0x6a8 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3 0x6ac |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4 0x6b0 |
| #define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5 0x6b4 |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0 0x6c0 |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1 0x6c4 |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2 0x6c8 |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3 0x6cc |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0 0x6e0 |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1 0x6e4 |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2 0x6e8 |
| #define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3 0x6ec |
| #define EMC_PMACRO_TX_PWRD_0 0x720 |
| #define EMC_PMACRO_TX_PWRD_1 0x724 |
| #define EMC_PMACRO_TX_PWRD_2 0x728 |
| #define EMC_PMACRO_TX_PWRD_3 0x72c |
| #define EMC_PMACRO_TX_PWRD_4 0x730 |
| #define EMC_PMACRO_TX_PWRD_5 0x734 |
| #define EMC_PMACRO_TX_SEL_CLK_SRC_0 0x740 |
| #define EMC_PMACRO_TX_SEL_CLK_SRC_1 0x744 |
| #define EMC_PMACRO_TX_SEL_CLK_SRC_3 0x74c |
| #define EMC_PMACRO_TX_SEL_CLK_SRC_2 0x748 |
| #define EMC_PMACRO_TX_SEL_CLK_SRC_4 0x750 |
| #define EMC_PMACRO_TX_SEL_CLK_SRC_5 0x754 |
| #define EMC_PMACRO_DDLL_BYPASS 0x760 |
| #define EMC_PMACRO_DDLL_PWRD_0 0x770 |
| #define EMC_PMACRO_DDLL_PWRD_1 0x774 |
| #define EMC_PMACRO_DDLL_PWRD_2 0x778 |
| #define EMC_PMACRO_CMD_CTRL_0 0x780 |
| #define EMC_PMACRO_CMD_CTRL_1 0x784 |
| #define EMC_PMACRO_CMD_CTRL_2 0x788 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0x800 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0x804 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0x808 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3 0x80c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0x810 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0x814 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0x818 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3 0x81c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0x820 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0x824 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0x828 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3 0x82c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0x830 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0x834 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0x838 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3 0x83c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0x840 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0x844 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0x848 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3 0x84c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0x850 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0x854 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0x858 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3 0x85c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0x860 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0x864 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0x868 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3 0x86c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0x870 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0x874 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0x878 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3 0x87c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0 0x880 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1 0x884 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2 0x888 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3 0x88c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0 0x890 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1 0x894 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2 0x898 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3 0x89c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0 0x8a0 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1 0x8a4 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2 0x8a8 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3 0x8ac |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0 0x8b0 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1 0x8b4 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2 0x8b8 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3 0x8bc |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0x900 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0x904 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0x908 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3 0x90c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0x910 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0x914 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0x918 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3 0x91c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0x920 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0x924 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0x928 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3 0x92c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0x930 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0x934 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0x938 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3 0x93c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0x940 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0x944 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0x948 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3 0x94c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0x950 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0x954 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0x958 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3 0x95c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0x960 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0x964 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0x968 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3 0x96c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0x970 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0x974 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0x978 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3 0x97c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0 0x980 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1 0x984 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2 0x988 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3 0x98c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0 0x990 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1 0x994 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2 0x998 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3 0x99c |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0 0x9a0 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1 0x9a4 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2 0x9a8 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3 0x9ac |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0 0x9b0 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1 0x9b4 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2 0x9b8 |
| #define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3 0x9bc |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0 0xa00 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1 0xa04 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2 0xa08 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0 0xa10 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1 0xa14 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2 0xa18 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0 0xa20 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1 0xa24 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2 0xa28 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0 0xa30 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1 0xa34 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2 0xa38 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0 0xa40 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1 0xa44 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2 0xa48 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0 0xa50 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1 0xa54 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2 0xa58 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0 0xa60 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1 0xa64 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2 0xa68 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0 0xa70 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1 0xa74 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2 0xa78 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0 0xb00 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1 0xb04 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2 0xb08 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0 0xb10 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1 0xb14 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2 0xb18 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0 0xb20 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1 0xb24 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2 0xb28 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0 0xb30 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1 0xb34 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2 0xb38 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0 0xb40 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1 0xb44 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2 0xb48 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0 0xb50 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1 0xb54 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2 0xb58 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0 0xb60 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1 0xb64 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2 0xb68 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0 0xb70 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1 0xb74 |
| #define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2 0xb78 |
| #define EMC_PMACRO_IB_VREF_DQ_0 0xbe0 |
| #define EMC_PMACRO_IB_VREF_DQ_1 0xbe4 |
| #define EMC_PMACRO_IB_VREF_DQS_0 0xbf0 |
| #define EMC_PMACRO_IB_VREF_DQS_1 0xbf4 |
| #define EMC_PMACRO_DDLL_LONG_CMD_0 0xc00 |
| #define EMC_PMACRO_DDLL_LONG_CMD_1 0xc04 |
| #define EMC_PMACRO_DDLL_LONG_CMD_2 0xc08 |
| #define EMC_PMACRO_DDLL_LONG_CMD_3 0xc0c |
| #define EMC_PMACRO_DDLL_LONG_CMD_4 0xc10 |
| #define EMC_PMACRO_DDLL_LONG_CMD_5 0xc14 |
| #define EMC_PMACRO_DDLL_SHORT_CMD_0 0xc20 |
| #define EMC_PMACRO_DDLL_SHORT_CMD_1 0xc24 |
| #define EMC_PMACRO_DDLL_SHORT_CMD_2 0xc28 |
| #define EMC_PMACRO_CFG_PM_GLOBAL_0 0xc30 |
| #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 0xc34 |
| #define EMC_PMACRO_VTTGEN_CTRL_1 0xc38 |
| #define EMC_PMACRO_BG_BIAS_CTRL_0 0xc3c |
| #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 0xc40 |
| #define EMC_PMACRO_ZCTRL 0xc44 |
| #define EMC_PMACRO_CMD_PAD_RX_CTRL 0xc50 |
| #define EMC_PMACRO_DATA_PAD_RX_CTRL 0xc54 |
| #define EMC_PMACRO_CMD_RX_TERM_MODE 0xc58 |
| #define EMC_PMACRO_DATA_RX_TERM_MODE 0xc5c |
| #define EMC_PMACRO_CMD_PAD_TX_CTRL 0xc60 |
| #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 0xc64 |
| #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 0xc68 |
| #define EMC_PMACRO_AUTOCAL_CFG_COMMON 0xc78 |
| #define EMC_PMACRO_AUTOCAL_CFG_COMMON_E_CAL_BYPASS_DVFS BIT(16) |
| #define EMC_PMACRO_VTTGEN_CTRL_2 0xcf0 |
| #define EMC_PMACRO_IB_RXRT 0xcf4 |
| #define EMC_PMACRO_TRAINING_CTRL_0 0xcf8 |
| #define EMC_PMACRO_TRAINING_CTRL_0_CH0_TRAINING_E_WRPTR BIT(3) |
| #define EMC_PMACRO_TRAINING_CTRL_1 0xcfc |
| #define EMC_PMACRO_TRAINING_CTRL_1_CH1_TRAINING_E_WRPTR BIT(3) |
| #define EMC_TRAINING_CTRL 0xe04 |
| #define EMC_TRAINING_QUSE_CORS_CTRL 0xe0c |
| #define EMC_TRAINING_QUSE_FINE_CTRL 0xe10 |
| #define EMC_TRAINING_QUSE_CTRL_MISC 0xe14 |
| #define EMC_TRAINING_WRITE_FINE_CTRL 0xe18 |
| #define EMC_TRAINING_WRITE_CTRL_MISC 0xe1c |
| #define EMC_TRAINING_WRITE_VREF_CTRL 0xe20 |
| #define EMC_TRAINING_READ_FINE_CTRL 0xe24 |
| #define EMC_TRAINING_READ_CTRL_MISC 0xe28 |
| #define EMC_TRAINING_READ_VREF_CTRL 0xe2c |
| #define EMC_TRAINING_CA_FINE_CTRL 0xe30 |
| #define EMC_TRAINING_CA_CTRL_MISC 0xe34 |
| #define EMC_TRAINING_CA_CTRL_MISC1 0xe38 |
| #define EMC_TRAINING_CA_VREF_CTRL 0xe3c |
| #define EMC_TRAINING_SETTLE 0xe44 |
| #define EMC_TRAINING_MPC 0xe5c |
| #define EMC_TRAINING_VREF_SETTLE 0xe6c |
| #define EMC_TRAINING_QUSE_VREF_CTRL 0xed0 |
| #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0 0xed4 |
| #define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1 0xed8 |
| |
| #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 |