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