1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright 2021 NXP 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef FSL_MMDC_H 9*91f16700Schasinglulu #define FSL_MMDC_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu /* PHY Write Leveling Configuration and Error Status Register (MPWLGCR) */ 12*91f16700Schasinglulu #define MPWLGCR_HW_WL_EN (1 << 0) 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* PHY Pre-defined Compare and CA delay-line Configuration (MPPDCMPR2) */ 15*91f16700Schasinglulu #define MPPDCMPR2_MPR_COMPARE_EN (1 << 0) 16*91f16700Schasinglulu 17*91f16700Schasinglulu 18*91f16700Schasinglulu /* MMDC PHY Read DQS gating control register 0 (MPDGCTRL0) */ 19*91f16700Schasinglulu #define AUTO_RD_DQS_GATING_CALIBRATION_EN (1 << 28) 20*91f16700Schasinglulu 21*91f16700Schasinglulu /* MMDC PHY Read Delay HW Calibration Control Register (MPRDDLHWCTL) */ 22*91f16700Schasinglulu #define MPRDDLHWCTL_AUTO_RD_CALIBRATION_EN (1 << 4) 23*91f16700Schasinglulu 24*91f16700Schasinglulu /* MMDC Core Power Saving Control and Status Register (MMDC_MAPSR) */ 25*91f16700Schasinglulu #define MMDC_MAPSR_PWR_SAV_CTRL_STAT 0x00001067 26*91f16700Schasinglulu 27*91f16700Schasinglulu /* MMDC Core Refresh Control Register (MMDC_MDREF) */ 28*91f16700Schasinglulu #define MDREF_START_REFRESH (1 << 0) 29*91f16700Schasinglulu 30*91f16700Schasinglulu /* MMDC Core Special Command Register (MDSCR) */ 31*91f16700Schasinglulu #define CMD_ADDR_MSB_MR_OP(x) (x << 24) 32*91f16700Schasinglulu #define CMD_ADDR_LSB_MR_ADDR(x) (x << 16) 33*91f16700Schasinglulu #define MDSCR_DISABLE_CFG_REQ (0 << 15) 34*91f16700Schasinglulu #define MDSCR_ENABLE_CON_REQ (1 << 15) 35*91f16700Schasinglulu #define MDSCR_CON_ACK (1 << 14) 36*91f16700Schasinglulu #define MDSCR_WL_EN (1 << 9) 37*91f16700Schasinglulu #define CMD_NORMAL (0 << 4) 38*91f16700Schasinglulu #define CMD_PRECHARGE (1 << 4) 39*91f16700Schasinglulu #define CMD_AUTO_REFRESH (2 << 4) 40*91f16700Schasinglulu #define CMD_LOAD_MODE_REG (3 << 4) 41*91f16700Schasinglulu #define CMD_ZQ_CALIBRATION (4 << 4) 42*91f16700Schasinglulu #define CMD_PRECHARGE_BANK_OPEN (5 << 4) 43*91f16700Schasinglulu #define CMD_MRR (6 << 4) 44*91f16700Schasinglulu #define CMD_BANK_ADDR_0 0x0 45*91f16700Schasinglulu #define CMD_BANK_ADDR_1 0x1 46*91f16700Schasinglulu #define CMD_BANK_ADDR_2 0x2 47*91f16700Schasinglulu #define CMD_BANK_ADDR_3 0x3 48*91f16700Schasinglulu #define CMD_BANK_ADDR_4 0x4 49*91f16700Schasinglulu #define CMD_BANK_ADDR_5 0x5 50*91f16700Schasinglulu #define CMD_BANK_ADDR_6 0x6 51*91f16700Schasinglulu #define CMD_BANK_ADDR_7 0x7 52*91f16700Schasinglulu 53*91f16700Schasinglulu /* MMDC Core Control Register (MDCTL) */ 54*91f16700Schasinglulu #define MDCTL_SDE0 (U(1) << 31) 55*91f16700Schasinglulu #define MDCTL_SDE1 (1 << 30) 56*91f16700Schasinglulu 57*91f16700Schasinglulu /* MMDC PHY ZQ HW control register (MMDC_MPZQHWCTRL) */ 58*91f16700Schasinglulu #define MPZQHWCTRL_ZQ_HW_FORCE (1 << 16) 59*91f16700Schasinglulu 60*91f16700Schasinglulu /* MMDC PHY Measure Unit Register (MMDC_MPMUR0) */ 61*91f16700Schasinglulu #define MMDC_MPMUR0_FRC_MSR (1 << 11) 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* MMDC PHY Read delay-lines Configuration Register (MMDC_MPRDDLCTL) */ 64*91f16700Schasinglulu /* default 64 for a quarter cycle delay */ 65*91f16700Schasinglulu #define MMDC_MPRDDLCTL_DEFAULT_DELAY 0x40404040 66*91f16700Schasinglulu 67*91f16700Schasinglulu /* MMDC Registers */ 68*91f16700Schasinglulu struct mmdc_regs { 69*91f16700Schasinglulu unsigned int mdctl; 70*91f16700Schasinglulu unsigned int mdpdc; 71*91f16700Schasinglulu unsigned int mdotc; 72*91f16700Schasinglulu unsigned int mdcfg0; 73*91f16700Schasinglulu unsigned int mdcfg1; 74*91f16700Schasinglulu unsigned int mdcfg2; 75*91f16700Schasinglulu unsigned int mdmisc; 76*91f16700Schasinglulu unsigned int mdscr; 77*91f16700Schasinglulu unsigned int mdref; 78*91f16700Schasinglulu unsigned int res1[2]; 79*91f16700Schasinglulu unsigned int mdrwd; 80*91f16700Schasinglulu unsigned int mdor; 81*91f16700Schasinglulu unsigned int mdmrr; 82*91f16700Schasinglulu unsigned int mdcfg3lp; 83*91f16700Schasinglulu unsigned int mdmr4; 84*91f16700Schasinglulu unsigned int mdasp; 85*91f16700Schasinglulu unsigned int res2[239]; 86*91f16700Schasinglulu unsigned int maarcr; 87*91f16700Schasinglulu unsigned int mapsr; 88*91f16700Schasinglulu unsigned int maexidr0; 89*91f16700Schasinglulu unsigned int maexidr1; 90*91f16700Schasinglulu unsigned int madpcr0; 91*91f16700Schasinglulu unsigned int madpcr1; 92*91f16700Schasinglulu unsigned int madpsr0; 93*91f16700Schasinglulu unsigned int madpsr1; 94*91f16700Schasinglulu unsigned int madpsr2; 95*91f16700Schasinglulu unsigned int madpsr3; 96*91f16700Schasinglulu unsigned int madpsr4; 97*91f16700Schasinglulu unsigned int madpsr5; 98*91f16700Schasinglulu unsigned int masbs0; 99*91f16700Schasinglulu unsigned int masbs1; 100*91f16700Schasinglulu unsigned int res3[2]; 101*91f16700Schasinglulu unsigned int magenp; 102*91f16700Schasinglulu unsigned int res4[239]; 103*91f16700Schasinglulu unsigned int mpzqhwctrl; 104*91f16700Schasinglulu unsigned int mpzqswctrl; 105*91f16700Schasinglulu unsigned int mpwlgcr; 106*91f16700Schasinglulu unsigned int mpwldectrl0; 107*91f16700Schasinglulu unsigned int mpwldectrl1; 108*91f16700Schasinglulu unsigned int mpwldlst; 109*91f16700Schasinglulu unsigned int mpodtctrl; 110*91f16700Schasinglulu unsigned int mprddqby0dl; 111*91f16700Schasinglulu unsigned int mprddqby1dl; 112*91f16700Schasinglulu unsigned int mprddqby2dl; 113*91f16700Schasinglulu unsigned int mprddqby3dl; 114*91f16700Schasinglulu unsigned int mpwrdqby0dl; 115*91f16700Schasinglulu unsigned int mpwrdqby1dl; 116*91f16700Schasinglulu unsigned int mpwrdqby2dl; 117*91f16700Schasinglulu unsigned int mpwrdqby3dl; 118*91f16700Schasinglulu unsigned int mpdgctrl0; 119*91f16700Schasinglulu unsigned int mpdgctrl1; 120*91f16700Schasinglulu unsigned int mpdgdlst0; 121*91f16700Schasinglulu unsigned int mprddlctl; 122*91f16700Schasinglulu unsigned int mprddlst; 123*91f16700Schasinglulu unsigned int mpwrdlctl; 124*91f16700Schasinglulu unsigned int mpwrdlst; 125*91f16700Schasinglulu unsigned int mpsdctrl; 126*91f16700Schasinglulu unsigned int mpzqlp2ctl; 127*91f16700Schasinglulu unsigned int mprddlhwctl; 128*91f16700Schasinglulu unsigned int mpwrdlhwctl; 129*91f16700Schasinglulu unsigned int mprddlhwst0; 130*91f16700Schasinglulu unsigned int mprddlhwst1; 131*91f16700Schasinglulu unsigned int mpwrdlhwst0; 132*91f16700Schasinglulu unsigned int mpwrdlhwst1; 133*91f16700Schasinglulu unsigned int mpwlhwerr; 134*91f16700Schasinglulu unsigned int mpdghwst0; 135*91f16700Schasinglulu unsigned int mpdghwst1; 136*91f16700Schasinglulu unsigned int mpdghwst2; 137*91f16700Schasinglulu unsigned int mpdghwst3; 138*91f16700Schasinglulu unsigned int mppdcmpr1; 139*91f16700Schasinglulu unsigned int mppdcmpr2; 140*91f16700Schasinglulu unsigned int mpswdar0; 141*91f16700Schasinglulu unsigned int mpswdrdr0; 142*91f16700Schasinglulu unsigned int mpswdrdr1; 143*91f16700Schasinglulu unsigned int mpswdrdr2; 144*91f16700Schasinglulu unsigned int mpswdrdr3; 145*91f16700Schasinglulu unsigned int mpswdrdr4; 146*91f16700Schasinglulu unsigned int mpswdrdr5; 147*91f16700Schasinglulu unsigned int mpswdrdr6; 148*91f16700Schasinglulu unsigned int mpswdrdr7; 149*91f16700Schasinglulu unsigned int mpmur0; 150*91f16700Schasinglulu unsigned int mpwrcadl; 151*91f16700Schasinglulu unsigned int mpdccr; 152*91f16700Schasinglulu }; 153*91f16700Schasinglulu 154*91f16700Schasinglulu struct fsl_mmdc_info { 155*91f16700Schasinglulu unsigned int mdctl; 156*91f16700Schasinglulu unsigned int mdpdc; 157*91f16700Schasinglulu unsigned int mdotc; 158*91f16700Schasinglulu unsigned int mdcfg0; 159*91f16700Schasinglulu unsigned int mdcfg1; 160*91f16700Schasinglulu unsigned int mdcfg2; 161*91f16700Schasinglulu unsigned int mdmisc; 162*91f16700Schasinglulu unsigned int mdref; 163*91f16700Schasinglulu unsigned int mdrwd; 164*91f16700Schasinglulu unsigned int mdor; 165*91f16700Schasinglulu unsigned int mdasp; 166*91f16700Schasinglulu unsigned int mpodtctrl; 167*91f16700Schasinglulu unsigned int mpzqhwctrl; 168*91f16700Schasinglulu unsigned int mprddlctl; 169*91f16700Schasinglulu }; 170*91f16700Schasinglulu 171*91f16700Schasinglulu void mmdc_init(const struct fsl_mmdc_info *priv, uintptr_t nxp_ddr_addr); 172*91f16700Schasinglulu 173*91f16700Schasinglulu #endif /* FSL_MMDC_H */ 174