1*83d290c5STom Rini /* SPDX-License-Identifier: Intel */ 2b829f12aSBin Meng /* 3b829f12aSBin Meng * Copyright (C) 2013, Intel Corporation 4b829f12aSBin Meng * Copyright (C) 2015, Bin Meng <bmeng.cn@gmail.com> 5b829f12aSBin Meng * 6b829f12aSBin Meng * Ported from Intel released Quark UEFI BIOS 7b829f12aSBin Meng * QuarkSocPkg/QuarkNorthCluster/MemoryInit/Pei 8b829f12aSBin Meng */ 9b829f12aSBin Meng 10b829f12aSBin Meng #ifndef _SMC_H_ 11b829f12aSBin Meng #define _SMC_H_ 12b829f12aSBin Meng 13b829f12aSBin Meng /* System Memory Controller Register Defines */ 14b829f12aSBin Meng 15b829f12aSBin Meng /* Memory Controller Message Bus Registers Offsets */ 16b829f12aSBin Meng #define DRP 0x00 17b829f12aSBin Meng #define DTR0 0x01 18b829f12aSBin Meng #define DTR1 0x02 19b829f12aSBin Meng #define DTR2 0x03 20b829f12aSBin Meng #define DTR3 0x04 21b829f12aSBin Meng #define DTR4 0x05 22b829f12aSBin Meng #define DPMC0 0x06 23b829f12aSBin Meng #define DPMC1 0x07 24b829f12aSBin Meng #define DRFC 0x08 25b829f12aSBin Meng #define DSCH 0x09 26312cc39eSBin Meng #define DCAL 0x0a 27312cc39eSBin Meng #define DRMC 0x0b 28312cc39eSBin Meng #define PMSTS 0x0c 29312cc39eSBin Meng #define DCO 0x0f 30b829f12aSBin Meng #define DSTAT 0x20 31312cc39eSBin Meng #define SSKPD0 0x4a 32312cc39eSBin Meng #define SSKPD1 0x4b 33b829f12aSBin Meng #define DECCCTRL 0x60 34b829f12aSBin Meng #define DECCSTAT 0x61 35b829f12aSBin Meng #define DECCSBECNT 0x62 36b829f12aSBin Meng #define DECCSBECA 0x68 37b829f12aSBin Meng #define DECCSBECS 0x69 38312cc39eSBin Meng #define DECCDBECA 0x6a 39312cc39eSBin Meng #define DECCDBECS 0x6b 40b829f12aSBin Meng #define DFUSESTAT 0x70 41b829f12aSBin Meng #define SCRMSEED 0x80 42b829f12aSBin Meng #define SCRMLO 0x81 43b829f12aSBin Meng #define SCRMHI 0x82 44b829f12aSBin Meng 45312cc39eSBin Meng /* DRP register defines */ 46312cc39eSBin Meng #define DRP_RKEN0 (1 << 0) 47312cc39eSBin Meng #define DRP_RKEN1 (1 << 1) 48312cc39eSBin Meng #define DRP_PRI64BSPLITEN (1 << 13) 49312cc39eSBin Meng #define DRP_ADDRMAP_MAP0 (1 << 14) 50312cc39eSBin Meng #define DRP_ADDRMAP_MAP1 (1 << 15) 51312cc39eSBin Meng #define DRP_ADDRMAP_MASK 0x0000c000 52312cc39eSBin Meng 53312cc39eSBin Meng /* DTR0 register defines */ 54312cc39eSBin Meng #define DTR0_DFREQ_MASK 0x00000003 55312cc39eSBin Meng #define DTR0_TRP_MASK 0x000000f0 56312cc39eSBin Meng #define DTR0_TRCD_MASK 0x00000f00 57312cc39eSBin Meng #define DTR0_TCL_MASK 0x00007000 58312cc39eSBin Meng 59312cc39eSBin Meng /* DTR1 register defines */ 60312cc39eSBin Meng #define DTR1_TWCL_MASK 0x00000007 61312cc39eSBin Meng #define DTR1_TCMD_MASK 0x00000030 62312cc39eSBin Meng #define DTR1_TWTP_MASK 0x00000f00 63312cc39eSBin Meng #define DTR1_TCCD_12CLK (1 << 12) 64312cc39eSBin Meng #define DTR1_TCCD_18CLK (1 << 13) 65312cc39eSBin Meng #define DTR1_TCCD_MASK 0x00003000 66312cc39eSBin Meng #define DTR1_TFAW_MASK 0x000f0000 67312cc39eSBin Meng #define DTR1_TRAS_MASK 0x00f00000 68312cc39eSBin Meng #define DTR1_TRRD_MASK 0x03000000 69312cc39eSBin Meng #define DTR1_TRTP_MASK 0x70000000 70312cc39eSBin Meng 71312cc39eSBin Meng /* DTR2 register defines */ 72312cc39eSBin Meng #define DTR2_TRRDR_MASK 0x00000007 73312cc39eSBin Meng #define DTR2_TWWDR_MASK 0x00000700 74312cc39eSBin Meng #define DTR2_TRWDR_MASK 0x000f0000 75312cc39eSBin Meng 76312cc39eSBin Meng /* DTR3 register defines */ 77312cc39eSBin Meng #define DTR3_TWRDR_MASK 0x00000007 78312cc39eSBin Meng #define DTR3_TXXXX_MASK 0x00000070 79312cc39eSBin Meng #define DTR3_TRWSR_MASK 0x00000f00 80312cc39eSBin Meng #define DTR3_TWRSR_MASK 0x0001e000 81312cc39eSBin Meng #define DTR3_TXP_MASK 0x00c00000 82312cc39eSBin Meng 83312cc39eSBin Meng /* DTR4 register defines */ 84312cc39eSBin Meng #define DTR4_WRODTSTRT_MASK 0x00000003 85312cc39eSBin Meng #define DTR4_WRODTSTOP_MASK 0x00000070 86312cc39eSBin Meng #define DTR4_XXXX1_MASK 0x00000700 87312cc39eSBin Meng #define DTR4_XXXX2_MASK 0x00007000 88312cc39eSBin Meng #define DTR4_ODTDIS (1 << 15) 89312cc39eSBin Meng #define DTR4_TRGSTRDIS (1 << 16) 90312cc39eSBin Meng 91312cc39eSBin Meng /* DPMC0 register defines */ 92312cc39eSBin Meng #define DPMC0_PCLSTO_MASK 0x00070000 93312cc39eSBin Meng #define DPMC0_PREAPWDEN (1 << 21) 94312cc39eSBin Meng #define DPMC0_DYNSREN (1 << 23) 95312cc39eSBin Meng #define DPMC0_CLKGTDIS (1 << 24) 96312cc39eSBin Meng #define DPMC0_DISPWRDN (1 << 25) 97312cc39eSBin Meng #define DPMC0_ENPHYCLKGATE (1 << 29) 98312cc39eSBin Meng 99312cc39eSBin Meng /* DRFC register defines */ 100312cc39eSBin Meng #define DRFC_TREFI_MASK 0x00007000 101312cc39eSBin Meng #define DRFC_REFDBTCLR (1 << 21) 102312cc39eSBin Meng 103312cc39eSBin Meng /* DSCH register defines */ 104312cc39eSBin Meng #define DSCH_OOODIS (1 << 8) 105312cc39eSBin Meng #define DSCH_OOOST3DIS (1 << 9) 106312cc39eSBin Meng #define DSCH_NEWBYPDIS (1 << 12) 107312cc39eSBin Meng 108312cc39eSBin Meng /* DCAL register defines */ 109312cc39eSBin Meng #define DCAL_ZQCINT_MASK 0x00000700 110312cc39eSBin Meng #define DCAL_SRXZQCL_MASK 0x00003000 111312cc39eSBin Meng 112312cc39eSBin Meng /* DRMC register defines */ 113312cc39eSBin Meng #define DRMC_CKEMODE (1 << 4) 114312cc39eSBin Meng #define DRMC_ODTMODE (1 << 12) 115312cc39eSBin Meng #define DRMC_COLDWAKE (1 << 16) 116312cc39eSBin Meng 117312cc39eSBin Meng /* PMSTS register defines */ 118312cc39eSBin Meng #define PMSTS_DISR (1 << 0) 119312cc39eSBin Meng 120312cc39eSBin Meng /* DCO register defines */ 121312cc39eSBin Meng #define DCO_DRPLOCK (1 << 0) 122312cc39eSBin Meng #define DCO_CPGCLOCK (1 << 8) 123312cc39eSBin Meng #define DCO_PMICTL (1 << 28) 124312cc39eSBin Meng #define DCO_PMIDIS (1 << 29) 125312cc39eSBin Meng #define DCO_IC (1 << 31) 126312cc39eSBin Meng 127312cc39eSBin Meng /* DECCCTRL register defines */ 128312cc39eSBin Meng #define DECCCTRL_SBEEN (1 << 0) 129312cc39eSBin Meng #define DECCCTRL_DBEEN (1 << 1) 130312cc39eSBin Meng #define DECCCTRL_ENCBGEN (1 << 17) 131312cc39eSBin Meng 132b829f12aSBin Meng /* DRAM init command */ 133b829f12aSBin Meng #define DCMD_MRS1(rnk, dat) (0 | ((rnk) << 22) | (1 << 3) | ((dat) << 6)) 134b829f12aSBin Meng #define DCMD_REF(rnk) (1 | ((rnk) << 22)) 135b829f12aSBin Meng #define DCMD_PRE(rnk) (2 | ((rnk) << 22)) 136312cc39eSBin Meng #define DCMD_PREA(rnk) (2 | ((rnk) << 22) | (0x400 << 6)) 137b829f12aSBin Meng #define DCMD_ACT(rnk, row) (3 | ((rnk) << 22) | ((row) << 6)) 138b829f12aSBin Meng #define DCMD_WR(rnk, col) (4 | ((rnk) << 22) | ((col) << 6)) 139b829f12aSBin Meng #define DCMD_RD(rnk, col) (5 | ((rnk) << 22) | ((col) << 6)) 140b829f12aSBin Meng #define DCMD_ZQCS(rnk) (6 | ((rnk) << 22)) 141312cc39eSBin Meng #define DCMD_ZQCL(rnk) (6 | ((rnk) << 22) | (0x400 << 6)) 142b829f12aSBin Meng #define DCMD_NOP(rnk) (7 | ((rnk) << 22)) 143b829f12aSBin Meng 144312cc39eSBin Meng #define DDR3_EMRS1_DIC_40 0 145312cc39eSBin Meng #define DDR3_EMRS1_DIC_34 1 146b829f12aSBin Meng 147312cc39eSBin Meng #define DDR3_EMRS1_RTTNOM_0 0 148312cc39eSBin Meng #define DDR3_EMRS1_RTTNOM_60 0x04 149312cc39eSBin Meng #define DDR3_EMRS1_RTTNOM_120 0x40 150312cc39eSBin Meng #define DDR3_EMRS1_RTTNOM_40 0x44 151312cc39eSBin Meng #define DDR3_EMRS1_RTTNOM_20 0x200 152312cc39eSBin Meng #define DDR3_EMRS1_RTTNOM_30 0x204 153b829f12aSBin Meng 154b829f12aSBin Meng #define DDR3_EMRS2_RTTWR_60 (1 << 9) 155b829f12aSBin Meng #define DDR3_EMRS2_RTTWR_120 (1 << 10) 156b829f12aSBin Meng 157b829f12aSBin Meng /* BEGIN DDRIO Registers */ 158b829f12aSBin Meng 159b829f12aSBin Meng /* DDR IOs & COMPs */ 160b829f12aSBin Meng #define DDRIODQ_BL_OFFSET 0x0800 161b829f12aSBin Meng #define DDRIODQ_CH_OFFSET ((NUM_BYTE_LANES / 2) * DDRIODQ_BL_OFFSET) 162b829f12aSBin Meng #define DDRIOCCC_CH_OFFSET 0x0800 163b829f12aSBin Meng #define DDRCOMP_CH_OFFSET 0x0100 164b829f12aSBin Meng 165b829f12aSBin Meng /* CH0-BL01-DQ */ 166b829f12aSBin Meng #define DQOBSCKEBBCTL 0x0000 167b829f12aSBin Meng #define DQDLLTXCTL 0x0004 168b829f12aSBin Meng #define DQDLLRXCTL 0x0008 169312cc39eSBin Meng #define DQMDLLCTL 0x000c 170b829f12aSBin Meng #define B0RXIOBUFCTL 0x0010 171b829f12aSBin Meng #define B0VREFCTL 0x0014 172b829f12aSBin Meng #define B0RXOFFSET1 0x0018 173312cc39eSBin Meng #define B0RXOFFSET0 0x001c 174b829f12aSBin Meng #define B1RXIOBUFCTL 0x0020 175b829f12aSBin Meng #define B1VREFCTL 0x0024 176b829f12aSBin Meng #define B1RXOFFSET1 0x0028 177312cc39eSBin Meng #define B1RXOFFSET0 0x002c 178b829f12aSBin Meng #define DQDFTCTL 0x0030 179b829f12aSBin Meng #define DQTRAINSTS 0x0034 180b829f12aSBin Meng #define B1DLLPICODER0 0x0038 181312cc39eSBin Meng #define B0DLLPICODER0 0x003c 182b829f12aSBin Meng #define B1DLLPICODER1 0x0040 183b829f12aSBin Meng #define B0DLLPICODER1 0x0044 184b829f12aSBin Meng #define B1DLLPICODER2 0x0048 185312cc39eSBin Meng #define B0DLLPICODER2 0x004c 186b829f12aSBin Meng #define B1DLLPICODER3 0x0050 187b829f12aSBin Meng #define B0DLLPICODER3 0x0054 188b829f12aSBin Meng #define B1RXDQSPICODE 0x0058 189312cc39eSBin Meng #define B0RXDQSPICODE 0x005c 190b829f12aSBin Meng #define B1RXDQPICODER32 0x0060 191b829f12aSBin Meng #define B1RXDQPICODER10 0x0064 192b829f12aSBin Meng #define B0RXDQPICODER32 0x0068 193312cc39eSBin Meng #define B0RXDQPICODER10 0x006c 194b829f12aSBin Meng #define B01PTRCTL0 0x0070 195b829f12aSBin Meng #define B01PTRCTL1 0x0074 196b829f12aSBin Meng #define B01DBCTL0 0x0078 197312cc39eSBin Meng #define B01DBCTL1 0x007c 198b829f12aSBin Meng #define B0LATCTL0 0x0080 199b829f12aSBin Meng #define B1LATCTL0 0x0084 200b829f12aSBin Meng #define B01LATCTL1 0x0088 201312cc39eSBin Meng #define B0ONDURCTL 0x008c 202b829f12aSBin Meng #define B1ONDURCTL 0x0090 203b829f12aSBin Meng #define B0OVRCTL 0x0094 204b829f12aSBin Meng #define B1OVRCTL 0x0098 205312cc39eSBin Meng #define DQCTL 0x009c 206312cc39eSBin Meng #define B0RK2RKCHGPTRCTRL 0x00a0 207312cc39eSBin Meng #define B1RK2RKCHGPTRCTRL 0x00a4 208312cc39eSBin Meng #define DQRK2RKCTL 0x00a8 209312cc39eSBin Meng #define DQRK2RKPTRCTL 0x00ac 210312cc39eSBin Meng #define B0RK2RKLAT 0x00b0 211312cc39eSBin Meng #define B1RK2RKLAT 0x00b4 212312cc39eSBin Meng #define DQCLKALIGNREG0 0x00b8 213312cc39eSBin Meng #define DQCLKALIGNREG1 0x00bc 214312cc39eSBin Meng #define DQCLKALIGNREG2 0x00c0 215312cc39eSBin Meng #define DQCLKALIGNSTS0 0x00c4 216312cc39eSBin Meng #define DQCLKALIGNSTS1 0x00c8 217312cc39eSBin Meng #define DQCLKGATE 0x00cc 218312cc39eSBin Meng #define B0COMPSLV1 0x00d0 219312cc39eSBin Meng #define B1COMPSLV1 0x00d4 220312cc39eSBin Meng #define B0COMPSLV2 0x00d8 221312cc39eSBin Meng #define B1COMPSLV2 0x00dc 222312cc39eSBin Meng #define B0COMPSLV3 0x00e0 223312cc39eSBin Meng #define B1COMPSLV3 0x00e4 224312cc39eSBin Meng #define DQVISALANECR0TOP 0x00e8 225312cc39eSBin Meng #define DQVISALANECR1TOP 0x00ec 226312cc39eSBin Meng #define DQVISACONTROLCRTOP 0x00f0 227312cc39eSBin Meng #define DQVISALANECR0BL 0x00f4 228312cc39eSBin Meng #define DQVISALANECR1BL 0x00f8 229312cc39eSBin Meng #define DQVISACONTROLCRBL 0x00fc 230312cc39eSBin Meng #define DQTIMINGCTRL 0x010c 231b829f12aSBin Meng 232b829f12aSBin Meng /* CH0-ECC */ 233b829f12aSBin Meng #define ECCDLLTXCTL 0x2004 234b829f12aSBin Meng #define ECCDLLRXCTL 0x2008 235312cc39eSBin Meng #define ECCMDLLCTL 0x200c 236b829f12aSBin Meng #define ECCB1DLLPICODER0 0x2038 237b829f12aSBin Meng #define ECCB1DLLPICODER1 0x2040 238b829f12aSBin Meng #define ECCB1DLLPICODER2 0x2048 239b829f12aSBin Meng #define ECCB1DLLPICODER3 0x2050 240b829f12aSBin Meng #define ECCB01DBCTL0 0x2078 241312cc39eSBin Meng #define ECCB01DBCTL1 0x207c 242312cc39eSBin Meng #define ECCCLKALIGNREG0 0x20b8 243312cc39eSBin Meng #define ECCCLKALIGNREG1 0x20bc 244312cc39eSBin Meng #define ECCCLKALIGNREG2 0x20c0 245b829f12aSBin Meng 246b829f12aSBin Meng /* CH0-CMD */ 247b829f12aSBin Meng #define CMDOBSCKEBBCTL 0x4800 248b829f12aSBin Meng #define CMDDLLTXCTL 0x4808 249312cc39eSBin Meng #define CMDDLLRXCTL 0x480c 250b829f12aSBin Meng #define CMDMDLLCTL 0x4810 251b829f12aSBin Meng #define CMDRCOMPODT 0x4814 252b829f12aSBin Meng #define CMDDLLPICODER0 0x4820 253b829f12aSBin Meng #define CMDDLLPICODER1 0x4824 254b829f12aSBin Meng #define CMDCFGREG0 0x4840 255b829f12aSBin Meng #define CMDPTRREG 0x4844 256b829f12aSBin Meng #define CMDCLKALIGNREG0 0x4850 257b829f12aSBin Meng #define CMDCLKALIGNREG1 0x4854 258b829f12aSBin Meng #define CMDCLKALIGNREG2 0x4858 259312cc39eSBin Meng #define CMDPMCONFIG0 0x485c 260b829f12aSBin Meng #define CMDPMDLYREG0 0x4860 261b829f12aSBin Meng #define CMDPMDLYREG1 0x4864 262b829f12aSBin Meng #define CMDPMDLYREG2 0x4868 263312cc39eSBin Meng #define CMDPMDLYREG3 0x486c 264b829f12aSBin Meng #define CMDPMDLYREG4 0x4870 265b829f12aSBin Meng #define CMDCLKALIGNSTS0 0x4874 266b829f12aSBin Meng #define CMDCLKALIGNSTS1 0x4878 267312cc39eSBin Meng #define CMDPMSTS0 0x487c 268b829f12aSBin Meng #define CMDPMSTS1 0x4880 269b829f12aSBin Meng #define CMDCOMPSLV 0x4884 270312cc39eSBin Meng #define CMDBONUS0 0x488c 271b829f12aSBin Meng #define CMDBONUS1 0x4890 272b829f12aSBin Meng #define CMDVISALANECR0 0x4894 273b829f12aSBin Meng #define CMDVISALANECR1 0x4898 274312cc39eSBin Meng #define CMDVISACONTROLCR 0x489c 275312cc39eSBin Meng #define CMDCLKGATE 0x48a0 276312cc39eSBin Meng #define CMDTIMINGCTRL 0x48a4 277b829f12aSBin Meng 278b829f12aSBin Meng /* CH0-CLK-CTL */ 279b829f12aSBin Meng #define CCOBSCKEBBCTL 0x5800 280b829f12aSBin Meng #define CCRCOMPIO 0x5804 281b829f12aSBin Meng #define CCDLLTXCTL 0x5808 282312cc39eSBin Meng #define CCDLLRXCTL 0x580c 283b829f12aSBin Meng #define CCMDLLCTL 0x5810 284b829f12aSBin Meng #define CCRCOMPODT 0x5814 285b829f12aSBin Meng #define CCDLLPICODER0 0x5820 286b829f12aSBin Meng #define CCDLLPICODER1 0x5824 287b829f12aSBin Meng #define CCDDR3RESETCTL 0x5830 288b829f12aSBin Meng #define CCCFGREG0 0x5838 289b829f12aSBin Meng #define CCCFGREG1 0x5840 290b829f12aSBin Meng #define CCPTRREG 0x5844 291b829f12aSBin Meng #define CCCLKALIGNREG0 0x5850 292b829f12aSBin Meng #define CCCLKALIGNREG1 0x5854 293b829f12aSBin Meng #define CCCLKALIGNREG2 0x5858 294312cc39eSBin Meng #define CCPMCONFIG0 0x585c 295b829f12aSBin Meng #define CCPMDLYREG0 0x5860 296b829f12aSBin Meng #define CCPMDLYREG1 0x5864 297b829f12aSBin Meng #define CCPMDLYREG2 0x5868 298312cc39eSBin Meng #define CCPMDLYREG3 0x586c 299b829f12aSBin Meng #define CCPMDLYREG4 0x5870 300b829f12aSBin Meng #define CCCLKALIGNSTS0 0x5874 301b829f12aSBin Meng #define CCCLKALIGNSTS1 0x5878 302312cc39eSBin Meng #define CCPMSTS0 0x587c 303b829f12aSBin Meng #define CCPMSTS1 0x5880 304b829f12aSBin Meng #define CCCOMPSLV1 0x5884 305b829f12aSBin Meng #define CCCOMPSLV2 0x5888 306312cc39eSBin Meng #define CCCOMPSLV3 0x588c 307b829f12aSBin Meng #define CCBONUS0 0x5894 308b829f12aSBin Meng #define CCBONUS1 0x5898 309312cc39eSBin Meng #define CCVISALANECR0 0x589c 310312cc39eSBin Meng #define CCVISALANECR1 0x58a0 311312cc39eSBin Meng #define CCVISACONTROLCR 0x58a4 312312cc39eSBin Meng #define CCCLKGATE 0x58a8 313312cc39eSBin Meng #define CCTIMINGCTL 0x58ac 314b829f12aSBin Meng 315b829f12aSBin Meng /* COMP */ 316b829f12aSBin Meng #define CMPCTRL 0x6800 317b829f12aSBin Meng #define SOFTRSTCNTL 0x6804 318b829f12aSBin Meng #define MSCNTR 0x6808 319312cc39eSBin Meng #define NMSCNTRL 0x680c 320b829f12aSBin Meng #define LATCH1CTL 0x6814 321312cc39eSBin Meng #define COMPVISALANECR0 0x681c 322b829f12aSBin Meng #define COMPVISALANECR1 0x6820 323b829f12aSBin Meng #define COMPVISACONTROLCR 0x6824 324b829f12aSBin Meng #define COMPBONUS0 0x6830 325312cc39eSBin Meng #define TCOCNTCTRL 0x683c 326b829f12aSBin Meng #define DQANAODTPUCTL 0x6840 327b829f12aSBin Meng #define DQANAODTPDCTL 0x6844 328b829f12aSBin Meng #define DQANADRVPUCTL 0x6848 329312cc39eSBin Meng #define DQANADRVPDCTL 0x684c 330b829f12aSBin Meng #define DQANADLYPUCTL 0x6850 331b829f12aSBin Meng #define DQANADLYPDCTL 0x6854 332b829f12aSBin Meng #define DQANATCOPUCTL 0x6858 333312cc39eSBin Meng #define DQANATCOPDCTL 0x685c 334b829f12aSBin Meng #define CMDANADRVPUCTL 0x6868 335312cc39eSBin Meng #define CMDANADRVPDCTL 0x686c 336b829f12aSBin Meng #define CMDANADLYPUCTL 0x6870 337b829f12aSBin Meng #define CMDANADLYPDCTL 0x6874 338b829f12aSBin Meng #define CLKANAODTPUCTL 0x6880 339b829f12aSBin Meng #define CLKANAODTPDCTL 0x6884 340b829f12aSBin Meng #define CLKANADRVPUCTL 0x6888 341312cc39eSBin Meng #define CLKANADRVPDCTL 0x688c 342b829f12aSBin Meng #define CLKANADLYPUCTL 0x6890 343b829f12aSBin Meng #define CLKANADLYPDCTL 0x6894 344b829f12aSBin Meng #define CLKANATCOPUCTL 0x6898 345312cc39eSBin Meng #define CLKANATCOPDCTL 0x689c 346312cc39eSBin Meng #define DQSANAODTPUCTL 0x68a0 347312cc39eSBin Meng #define DQSANAODTPDCTL 0x68a4 348312cc39eSBin Meng #define DQSANADRVPUCTL 0x68a8 349312cc39eSBin Meng #define DQSANADRVPDCTL 0x68ac 350312cc39eSBin Meng #define DQSANADLYPUCTL 0x68b0 351312cc39eSBin Meng #define DQSANADLYPDCTL 0x68b4 352312cc39eSBin Meng #define DQSANATCOPUCTL 0x68b8 353312cc39eSBin Meng #define DQSANATCOPDCTL 0x68bc 354312cc39eSBin Meng #define CTLANADRVPUCTL 0x68c8 355312cc39eSBin Meng #define CTLANADRVPDCTL 0x68cc 356312cc39eSBin Meng #define CTLANADLYPUCTL 0x68d0 357312cc39eSBin Meng #define CTLANADLYPDCTL 0x68d4 358312cc39eSBin Meng #define CHNLBUFSTATIC 0x68f0 359312cc39eSBin Meng #define COMPOBSCNTRL 0x68f4 360312cc39eSBin Meng #define COMPBUFFDBG0 0x68f8 361312cc39eSBin Meng #define COMPBUFFDBG1 0x68fc 362b829f12aSBin Meng #define CFGMISCCH0 0x6900 363b829f12aSBin Meng #define COMPEN0CH0 0x6904 364b829f12aSBin Meng #define COMPEN1CH0 0x6908 365312cc39eSBin Meng #define COMPEN2CH0 0x690c 366b829f12aSBin Meng #define STATLEGEN0CH0 0x6910 367b829f12aSBin Meng #define STATLEGEN1CH0 0x6914 368b829f12aSBin Meng #define DQVREFCH0 0x6918 369312cc39eSBin Meng #define CMDVREFCH0 0x691c 370b829f12aSBin Meng #define CLKVREFCH0 0x6920 371b829f12aSBin Meng #define DQSVREFCH0 0x6924 372b829f12aSBin Meng #define CTLVREFCH0 0x6928 373312cc39eSBin Meng #define TCOVREFCH0 0x692c 374b829f12aSBin Meng #define DLYSELCH0 0x6930 375b829f12aSBin Meng #define TCODRAMBUFODTCH0 0x6934 376b829f12aSBin Meng #define CCBUFODTCH0 0x6938 377312cc39eSBin Meng #define RXOFFSETCH0 0x693c 378b829f12aSBin Meng #define DQODTPUCTLCH0 0x6940 379b829f12aSBin Meng #define DQODTPDCTLCH0 0x6944 380b829f12aSBin Meng #define DQDRVPUCTLCH0 0x6948 381312cc39eSBin Meng #define DQDRVPDCTLCH0 0x694c 382b829f12aSBin Meng #define DQDLYPUCTLCH0 0x6950 383b829f12aSBin Meng #define DQDLYPDCTLCH0 0x6954 384b829f12aSBin Meng #define DQTCOPUCTLCH0 0x6958 385312cc39eSBin Meng #define DQTCOPDCTLCH0 0x695c 386b829f12aSBin Meng #define CMDDRVPUCTLCH0 0x6968 387312cc39eSBin Meng #define CMDDRVPDCTLCH0 0x696c 388b829f12aSBin Meng #define CMDDLYPUCTLCH0 0x6970 389b829f12aSBin Meng #define CMDDLYPDCTLCH0 0x6974 390b829f12aSBin Meng #define CLKODTPUCTLCH0 0x6980 391b829f12aSBin Meng #define CLKODTPDCTLCH0 0x6984 392b829f12aSBin Meng #define CLKDRVPUCTLCH0 0x6988 393312cc39eSBin Meng #define CLKDRVPDCTLCH0 0x698c 394b829f12aSBin Meng #define CLKDLYPUCTLCH0 0x6990 395b829f12aSBin Meng #define CLKDLYPDCTLCH0 0x6994 396b829f12aSBin Meng #define CLKTCOPUCTLCH0 0x6998 397312cc39eSBin Meng #define CLKTCOPDCTLCH0 0x699c 398312cc39eSBin Meng #define DQSODTPUCTLCH0 0x69a0 399312cc39eSBin Meng #define DQSODTPDCTLCH0 0x69a4 400312cc39eSBin Meng #define DQSDRVPUCTLCH0 0x69a8 401312cc39eSBin Meng #define DQSDRVPDCTLCH0 0x69ac 402312cc39eSBin Meng #define DQSDLYPUCTLCH0 0x69b0 403312cc39eSBin Meng #define DQSDLYPDCTLCH0 0x69b4 404312cc39eSBin Meng #define DQSTCOPUCTLCH0 0x69b8 405312cc39eSBin Meng #define DQSTCOPDCTLCH0 0x69bc 406312cc39eSBin Meng #define CTLDRVPUCTLCH0 0x69c8 407312cc39eSBin Meng #define CTLDRVPDCTLCH0 0x69cc 408312cc39eSBin Meng #define CTLDLYPUCTLCH0 0x69d0 409312cc39eSBin Meng #define CTLDLYPDCTLCH0 0x69d4 410312cc39eSBin Meng #define FNLUPDTCTLCH0 0x69f0 411b829f12aSBin Meng 412b829f12aSBin Meng /* PLL */ 413b829f12aSBin Meng #define MPLLCTRL0 0x7800 414b829f12aSBin Meng #define MPLLCTRL1 0x7808 415b829f12aSBin Meng #define MPLLCSR0 0x7810 416b829f12aSBin Meng #define MPLLCSR1 0x7814 417b829f12aSBin Meng #define MPLLCSR2 0x7820 418b829f12aSBin Meng #define MPLLDFT 0x7828 419b829f12aSBin Meng #define MPLLMON0CTL 0x7830 420b829f12aSBin Meng #define MPLLMON1CTL 0x7838 421312cc39eSBin Meng #define MPLLMON2CTL 0x783c 422b829f12aSBin Meng #define SFRTRIM 0x7850 423b829f12aSBin Meng #define MPLLDFTOUT0 0x7858 424312cc39eSBin Meng #define MPLLDFTOUT1 0x785c 425b829f12aSBin Meng #define MASTERRSTN 0x7880 426b829f12aSBin Meng #define PLLLOCKDEL 0x7884 427b829f12aSBin Meng #define SFRDEL 0x7888 428312cc39eSBin Meng #define CRUVISALANECR0 0x78f0 429312cc39eSBin Meng #define CRUVISALANECR1 0x78f4 430312cc39eSBin Meng #define CRUVISACONTROLCR 0x78f8 431312cc39eSBin Meng #define IOSFVISALANECR0 0x78fc 432b829f12aSBin Meng #define IOSFVISALANECR1 0x7900 433b829f12aSBin Meng #define IOSFVISACONTROLCR 0x7904 434b829f12aSBin Meng 435b829f12aSBin Meng /* END DDRIO Registers */ 436b829f12aSBin Meng 437b829f12aSBin Meng /* DRAM Specific Message Bus OpCodes */ 438b829f12aSBin Meng #define MSG_OP_DRAM_INIT 0x68 439312cc39eSBin Meng #define MSG_OP_DRAM_WAKE 0xca 440b829f12aSBin Meng 441b829f12aSBin Meng #define SAMPLE_SIZE 6 442b829f12aSBin Meng 443b829f12aSBin Meng /* must be less than this number to enable early deadband */ 444b829f12aSBin Meng #define EARLY_DB 0x12 445b829f12aSBin Meng /* must be greater than this number to enable late deadband */ 446b829f12aSBin Meng #define LATE_DB 0x34 447b829f12aSBin Meng 448b829f12aSBin Meng #define CHX_REGS (11 * 4) 449b829f12aSBin Meng #define FULL_CLK 128 450b829f12aSBin Meng #define HALF_CLK 64 451b829f12aSBin Meng #define QRTR_CLK 32 452b829f12aSBin Meng 453b829f12aSBin Meng #define MCEIL(num, den) ((uint8_t)((num + den - 1) / den)) 454b829f12aSBin Meng #define MMAX(a, b) ((a) > (b) ? (a) : (b)) 455b829f12aSBin Meng #define DEAD_LOOP() for (;;); 456b829f12aSBin Meng 457b829f12aSBin Meng #define MIN_RDQS_EYE 10 /* in PI Codes */ 458b829f12aSBin Meng #define MIN_VREF_EYE 10 /* in VREF Codes */ 459b829f12aSBin Meng /* how many RDQS codes to jump while margining */ 460b829f12aSBin Meng #define RDQS_STEP 1 461b829f12aSBin Meng /* how many VREF codes to jump while margining */ 462b829f12aSBin Meng #define VREF_STEP 1 463b829f12aSBin Meng /* offset into "vref_codes[]" for minimum allowed VREF setting */ 464b829f12aSBin Meng #define VREF_MIN 0x00 465b829f12aSBin Meng /* offset into "vref_codes[]" for maximum allowed VREF setting */ 466312cc39eSBin Meng #define VREF_MAX 0x3f 467b829f12aSBin Meng #define RDQS_MIN 0x00 /* minimum RDQS delay value */ 468312cc39eSBin Meng #define RDQS_MAX 0x3f /* maximum RDQS delay value */ 469b829f12aSBin Meng 470b829f12aSBin Meng /* how many WDQ codes to jump while margining */ 471b829f12aSBin Meng #define WDQ_STEP 1 472b829f12aSBin Meng 473b829f12aSBin Meng enum { 474b829f12aSBin Meng B, /* BOTTOM VREF */ 475b829f12aSBin Meng T /* TOP VREF */ 476b829f12aSBin Meng }; 477b829f12aSBin Meng 478b829f12aSBin Meng enum { 479b829f12aSBin Meng L, /* LEFT RDQS */ 480b829f12aSBin Meng R /* RIGHT RDQS */ 481b829f12aSBin Meng }; 482b829f12aSBin Meng 483b829f12aSBin Meng /* Memory Options */ 484b829f12aSBin Meng 485b829f12aSBin Meng /* enable STATIC timing settings for RCVN (BACKUP_MODE) */ 486b829f12aSBin Meng #undef BACKUP_RCVN 487b829f12aSBin Meng /* enable STATIC timing settings for WDQS (BACKUP_MODE) */ 488b829f12aSBin Meng #undef BACKUP_WDQS 489b829f12aSBin Meng /* enable STATIC timing settings for RDQS (BACKUP_MODE) */ 490b829f12aSBin Meng #undef BACKUP_RDQS 491b829f12aSBin Meng /* enable STATIC timing settings for WDQ (BACKUP_MODE) */ 492b829f12aSBin Meng #undef BACKUP_WDQ 493b829f12aSBin Meng /* enable *COMP overrides (BACKUP_MODE) */ 494b829f12aSBin Meng #undef BACKUP_COMPS 495b829f12aSBin Meng /* enable the RD_TRAIN eye check */ 496b829f12aSBin Meng #undef RX_EYE_CHECK 497b829f12aSBin Meng 498b829f12aSBin Meng /* enable Host to Memory Clock Alignment */ 499b829f12aSBin Meng #define HMC_TEST 500b829f12aSBin Meng /* enable multi-rank support via rank2rank sharing */ 501b829f12aSBin Meng #define R2R_SHARING 502b829f12aSBin Meng /* disable signals not used in 16bit mode of DDRIO */ 503b829f12aSBin Meng #define FORCE_16BIT_DDRIO 504b829f12aSBin Meng 505b829f12aSBin Meng #define PLATFORM_ID 1 506b829f12aSBin Meng 507b829f12aSBin Meng void clear_self_refresh(struct mrc_params *mrc_params); 508b829f12aSBin Meng void prog_ddr_timing_control(struct mrc_params *mrc_params); 509b829f12aSBin Meng void prog_decode_before_jedec(struct mrc_params *mrc_params); 510b829f12aSBin Meng void perform_ddr_reset(struct mrc_params *mrc_params); 511b829f12aSBin Meng void ddrphy_init(struct mrc_params *mrc_params); 512b829f12aSBin Meng void perform_jedec_init(struct mrc_params *mrc_params); 513b829f12aSBin Meng void set_ddr_init_complete(struct mrc_params *mrc_params); 514b829f12aSBin Meng void restore_timings(struct mrc_params *mrc_params); 515b829f12aSBin Meng void default_timings(struct mrc_params *mrc_params); 516b829f12aSBin Meng void rcvn_cal(struct mrc_params *mrc_params); 517b829f12aSBin Meng void wr_level(struct mrc_params *mrc_params); 518b829f12aSBin Meng void prog_page_ctrl(struct mrc_params *mrc_params); 519b829f12aSBin Meng void rd_train(struct mrc_params *mrc_params); 520b829f12aSBin Meng void wr_train(struct mrc_params *mrc_params); 521b829f12aSBin Meng void store_timings(struct mrc_params *mrc_params); 522b829f12aSBin Meng void enable_scrambling(struct mrc_params *mrc_params); 523b829f12aSBin Meng void prog_ddr_control(struct mrc_params *mrc_params); 524b829f12aSBin Meng void prog_dra_drb(struct mrc_params *mrc_params); 525b829f12aSBin Meng void perform_wake(struct mrc_params *mrc_params); 526b829f12aSBin Meng void change_refresh_period(struct mrc_params *mrc_params); 527b829f12aSBin Meng void set_auto_refresh(struct mrc_params *mrc_params); 528b829f12aSBin Meng void ecc_enable(struct mrc_params *mrc_params); 529b829f12aSBin Meng void memory_test(struct mrc_params *mrc_params); 530b829f12aSBin Meng void lock_registers(struct mrc_params *mrc_params); 531b829f12aSBin Meng 532b829f12aSBin Meng #endif /* _SMC_H_ */ 533