uboot/arch/arm/include/asm/arch-imx8m/ddr.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * Copyright 2017 NXP
   4 */
   5
   6#ifndef __ASM_ARCH_IMX8M_DDR_H
   7#define __ASM_ARCH_IMX8M_DDR_H
   8
   9#include <asm/io.h>
  10#include <asm/types.h>
  11#include <asm/arch/ddr.h>
  12
  13#define DDRC_DDR_SS_GPR0                0x3d000000
  14#define DDRC_IPS_BASE_ADDR_0            0x3f400000
  15#define IP2APB_DDRPHY_IPS_BASE_ADDR(X)  (0x3c000000 + (X * 0x2000000))
  16#define DDRPHY_MEM(X)                   (0x3c000000 + (X * 0x2000000) + 0x50000)
  17
  18struct ddrc_freq {
  19        u32 res0[8];
  20        u32 derateen;
  21        u32 derateint;
  22        u32 res1[10];
  23        u32 rfshctl0;
  24        u32 res2[4];
  25        u32 rfshtmg;
  26        u32 rfshtmg1;
  27        u32 res3[28];
  28        u32 init3;
  29        u32 init4;
  30        u32 res;
  31        u32 init6;
  32        u32 init7;
  33        u32 res4[4];
  34        u32 dramtmg0;
  35        u32 dramtmg1;
  36        u32 dramtmg2;
  37        u32 dramtmg3;
  38        u32 dramtmg4;
  39        u32 dramtmg5;
  40        u32 dramtmg6;
  41        u32 dramtmg7;
  42        u32 dramtmg8;
  43        u32 dramtmg9;
  44        u32 dramtmg10;
  45        u32 dramtmg11;
  46        u32 dramtmg12;
  47        u32 dramtmg13;
  48        u32 dramtmg14;
  49        u32 dramtmg15;
  50        u32 dramtmg16;
  51        u32 dramtmg17;
  52        u32 res5[10];
  53        u32 mramtmg0;
  54        u32 mramtmg1;
  55        u32 mramtmg4;
  56        u32 mramtmg9;
  57        u32 zqctl0;
  58        u32 res6[3];
  59        u32 dfitmg0;
  60        u32 dfitmg1;
  61        u32 res7[7];
  62        u32 dfitmg2;
  63        u32 dfitmg3;
  64        u32 res8[33];
  65        u32 odtcfg;
  66};
  67
  68struct imx8m_ddrc_regs {
  69        u32 mstr;
  70        u32 stat;
  71        u32 mstr1;
  72        u32 res1;
  73        u32 mrctrl0;
  74        u32 mrctrl1;
  75        u32 mrstat;
  76        u32 mrctrl2;
  77        u32 derateen;
  78        u32 derateint;
  79        u32 mstr2;
  80        u32 res2;
  81        u32 pwrctl;
  82        u32 pwrtmg;
  83        u32 hwlpctl;
  84        u32 hwffcctl;
  85        u32 hwffcstat;
  86        u32 res3[3];
  87        u32 rfshctl0;
  88        u32 rfshctl1;
  89        u32 rfshctl2;
  90        u32 rfshctl4;
  91        u32 rfshctl3;
  92        u32 rfshtmg;
  93        u32 rfshtmg1;
  94        u32 res4;
  95        u32 ecccfg0;
  96        u32 ecccfg1;
  97        u32 eccstat;
  98        u32 eccclr;
  99        u32 eccerrcnt;
 100        u32 ecccaddr0;
 101        u32 ecccaddr1;
 102        u32 ecccsyn0;
 103        u32 ecccsyn1;
 104        u32 ecccsyn2;
 105        u32 eccbitmask0;
 106        u32 eccbitmask1;
 107        u32 eccbitmask2;
 108        u32 eccuaddr0;
 109        u32 eccuaddr1;
 110        u32 eccusyn0;
 111        u32 eccusyn1;
 112        u32 eccusyn2;
 113        u32 eccpoisonaddr0;
 114        u32 eccpoisonaddr1;
 115        u32 crcparctl0;
 116        u32 crcparctl1;
 117        u32 crcparctl2;
 118        u32 crcparstat;
 119        u32 init0;
 120        u32 init1;
 121        u32 init2;
 122        u32 init3;
 123        u32 init4;
 124        u32 init5;
 125        u32 init6;
 126        u32 init7;
 127        u32 dimmctl;
 128        u32 rankctl;
 129        u32 res5;
 130        u32 chctl;
 131        u32 dramtmg0;
 132        u32 dramtmg1;
 133        u32 dramtmg2;
 134        u32 dramtmg3;
 135        u32 dramtmg4;
 136        u32 dramtmg5;
 137        u32 dramtmg6;
 138        u32 dramtmg7;
 139        u32 dramtmg8;
 140        u32 dramtmg9;
 141        u32 dramtmg10;
 142        u32 dramtmg11;
 143        u32 dramtmg12;
 144        u32 dramtmg13;
 145        u32 dramtmg14;
 146        u32 dramtmg15;
 147        u32 dramtmg16;
 148        u32 dramtmg17;
 149        u32 res6[10];
 150        u32 mramtmg0;
 151        u32 mramtmg1;
 152        u32 mramtmg4;
 153        u32 mramtmg9;
 154        u32 zqctl0;
 155        u32 zqctl1;
 156        u32 zqctl2;
 157        u32 zqstat;
 158        u32 dfitmg0;
 159        u32 dfitmg1;
 160        u32 dfilpcfg0;
 161        u32 dfilpcfg1;
 162        u32 dfiupd0;
 163        u32 dfiupd1;
 164        u32 dfiupd2;
 165        u32 res7;
 166        u32 dfimisc;
 167        u32 dfitmg2;
 168        u32 dfitmg3;
 169        u32 dfistat;
 170        u32 dbictl;
 171        u32 dfiphymstr;
 172        u32 res8[14];
 173        u32 addrmap0;
 174        u32 addrmap1;
 175        u32 addrmap2;
 176        u32 addrmap3;
 177        u32 addrmap4;
 178        u32 addrmap5;
 179        u32 addrmap6;
 180        u32 addrmap7;
 181        u32 addrmap8;
 182        u32 addrmap9;
 183        u32 addrmap10;
 184        u32 addrmap11;
 185        u32 res9[4];
 186        u32 odtcfg;
 187        u32 odtmap;
 188        u32 res10[2];
 189        u32 sched;
 190        u32 sched1;
 191        u32 sched2;
 192        u32 perfhpr1;
 193        u32 res11;
 194        u32 perflpr1;
 195        u32 res12;
 196        u32 perfwr1;
 197        u32 res13[4];
 198        u32 dqmap0;
 199        u32 dqmap1;
 200        u32 dqmap2;
 201        u32 dqmap3;
 202        u32 dqmap4;
 203        u32 dqmap5;
 204        u32 res14[26];
 205        u32 dbg0;
 206        u32 dbg1;
 207        u32 dbgcam;
 208        u32 dbgcmd;
 209        u32 dbgstat;
 210        u32 res15[3];
 211        u32 swctl;
 212        u32 swstat;
 213        u32 res16[2];
 214        u32 ocparcfg0;
 215        u32 ocparcfg1;
 216        u32 ocparcfg2;
 217        u32 ocparcfg3;
 218        u32 ocparstat0;
 219        u32 ocparstat1;
 220        u32 ocparwlog0;
 221        u32 ocparwlog1;
 222        u32 ocparwlog2;
 223        u32 ocparawlog0;
 224        u32 ocparawlog1;
 225        u32 ocparrlog0;
 226        u32 ocparrlog1;
 227        u32 ocpararlog0;
 228        u32 ocpararlog1;
 229        u32 poisoncfg;
 230        u32 poisonstat;
 231        u32 adveccindex;
 232        union  {
 233                u32 adveccstat;
 234                u32 eccapstat;
 235        };
 236        u32 eccpoisonpat0;
 237        u32 eccpoisonpat1;
 238        u32 eccpoisonpat2;
 239        u32 res17[6];
 240        u32 caparpoisonctl;
 241        u32 caparpoisonstat;
 242        u32 res18[2];
 243        u32 dynbsmstat;
 244        u32 res19[18];
 245        u32 pstat;
 246        u32 pccfg;
 247        struct {
 248                u32 pcfgr;
 249                u32 pcfgw;
 250                u32 pcfgc;
 251                struct {
 252                        u32 pcfgidmaskch0;
 253                        u32 pcfidvaluech0;
 254                } pcfgid[16];
 255                u32 pctrl;
 256                u32 pcfgqos0;
 257                u32 pcfgqos1;
 258                u32 pcfgwqos0;
 259                u32 pcfgwqos1;
 260                u32 res[4];
 261        } pcfg[16];
 262        struct {
 263                u32 sarbase;
 264                u32 sarsize;
 265        } sar[4];
 266        u32 sbrctl;
 267        u32 sbrstat;
 268        u32 sbrwdata0;
 269        u32 sbrwdata1;
 270        u32 pdch;
 271        u32 res20[755];
 272        /* umctl2_regs_dch1 */
 273        u32 ch1_stat;
 274        u32 res21[2];
 275        u32 ch1_mrctrl0;
 276        u32 ch1_mrctrl1;
 277        u32 ch1_mrstat;
 278        u32 ch1_mrctrl2;
 279        u32 res22[4];
 280        u32 ch1_pwrctl;
 281        u32 ch1_pwrtmg;
 282        u32 ch1_hwlpctl;
 283        u32 res23[15];
 284        u32 ch1_eccstat;
 285        u32 ch1_eccclr;
 286        u32 ch1_eccerrcnt;
 287        u32 ch1_ecccaddr0;
 288        u32 ch1_ecccaddr1;
 289        u32 ch1_ecccsyn0;
 290        u32 ch1_ecccsyn1;
 291        u32 ch1_ecccsyn2;
 292        u32 ch1_eccbitmask0;
 293        u32 ch1_eccbitmask1;
 294        u32 ch1_eccbitmask2;
 295        u32 ch1_eccuaddr0;
 296        u32 ch1_eccuaddr1;
 297        u32 ch1_eccusyn0;
 298        u32 ch1_eccusyn1;
 299        u32 ch1_eccusyn2;
 300        u32 res24[2];
 301        u32 ch1_crcparctl0;
 302        u32 res25[2];
 303        u32 ch1_crcparstat;
 304        u32 res26[46];
 305        u32 ch1_zqctl2;
 306        u32 ch1_zqstat;
 307        u32 res27[11];
 308        u32 ch1_dfistat;
 309        u32 res28[33];
 310        u32 ch1_odtmap;
 311        u32 res29[47];
 312        u32 ch1_dbg1;
 313        u32 ch1_dbgcam;
 314        u32 ch1_dbgcmd;
 315        u32 ch1_dbgstat;
 316        u32 res30[123];
 317        /* umctl2_regs_freq1 */
 318        struct ddrc_freq freq1;
 319        u32 res31[109];
 320        /* umctl2_regs_addrmap_alt */
 321        u32 addrmap0_alt;
 322        u32 addrmap1_alt;
 323        u32 addrmap2_alt;
 324        u32 addrmap3_alt;
 325        u32 addrmap4_alt;
 326        u32 addrmap5_alt;
 327        u32 addrmap6_alt;
 328        u32 addrmap7_alt;
 329        u32 addrmap8_alt;
 330        u32 addrmap9_alt;
 331        u32 addrmap10_alt;
 332        u32 addrmap11_alt;
 333        u32 res32[758];
 334        /* umctl2_regs_freq2 */
 335        struct ddrc_freq freq2;
 336        u32 res33[879];
 337        /* umctl2_regs_freq3 */
 338        struct ddrc_freq freq3;
 339};
 340
 341struct imx8m_ddrphy_regs {
 342        u32 reg[0xf0000];
 343};
 344
 345/* PHY State */
 346enum pstate {
 347        PS0,
 348        PS1,
 349        PS2,
 350        PS3,
 351};
 352
 353enum msg_response {
 354        TRAIN_SUCCESS = 0x7,
 355        TRAIN_STREAM_START = 0x8,
 356        TRAIN_FAIL = 0xff,
 357};
 358
 359#define DDRC_MSTR(X)             (DDRC_IPS_BASE_ADDR(X) + 0x00)
 360#define DDRC_STAT(X)             (DDRC_IPS_BASE_ADDR(X) + 0x04)
 361#define DDRC_MSTR1(X)            (DDRC_IPS_BASE_ADDR(X) + 0x08)
 362#define DDRC_MRCTRL0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x10)
 363#define DDRC_MRCTRL1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x14)
 364#define DDRC_MRSTAT(X)           (DDRC_IPS_BASE_ADDR(X) + 0x18)
 365#define DDRC_MRCTRL2(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1c)
 366#define DDRC_DERATEEN(X)         (DDRC_IPS_BASE_ADDR(X) + 0x20)
 367#define DDRC_DERATEINT(X)        (DDRC_IPS_BASE_ADDR(X) + 0x24)
 368#define DDRC_MSTR2(X)            (DDRC_IPS_BASE_ADDR(X) + 0x28)
 369#define DDRC_PWRCTL(X)           (DDRC_IPS_BASE_ADDR(X) + 0x30)
 370#define DDRC_PWRTMG(X)           (DDRC_IPS_BASE_ADDR(X) + 0x34)
 371#define DDRC_HWLPCTL(X)          (DDRC_IPS_BASE_ADDR(X) + 0x38)
 372#define DDRC_HWFFCCTL(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3c)
 373#define DDRC_HWFFCSTAT(X)        (DDRC_IPS_BASE_ADDR(X) + 0x40)
 374#define DDRC_RFSHCTL0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x50)
 375#define DDRC_RFSHCTL1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x54)
 376#define DDRC_RFSHCTL2(X)         (DDRC_IPS_BASE_ADDR(X) + 0x58)
 377#define DDRC_RFSHCTL3(X)         (DDRC_IPS_BASE_ADDR(X) + 0x60)
 378#define DDRC_RFSHTMG(X)          (DDRC_IPS_BASE_ADDR(X) + 0x64)
 379#define DDRC_ECCCFG0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x70)
 380#define DDRC_ECCCFG1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x74)
 381#define DDRC_ECCSTAT(X)          (DDRC_IPS_BASE_ADDR(X) + 0x78)
 382#define DDRC_ECCCLR(X)           (DDRC_IPS_BASE_ADDR(X) + 0x7c)
 383#define DDRC_ECCERRCNT(X)        (DDRC_IPS_BASE_ADDR(X) + 0x80)
 384#define DDRC_ECCCADDR0(X)        (DDRC_IPS_BASE_ADDR(X) + 0x84)
 385#define DDRC_ECCCADDR1(X)        (DDRC_IPS_BASE_ADDR(X) + 0x88)
 386#define DDRC_ECCCSYN0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x8c)
 387#define DDRC_ECCCSYN1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x90)
 388#define DDRC_ECCCSYN2(X)         (DDRC_IPS_BASE_ADDR(X) + 0x94)
 389#define DDRC_ECCBITMASK0(X)      (DDRC_IPS_BASE_ADDR(X) + 0x98)
 390#define DDRC_ECCBITMASK1(X)      (DDRC_IPS_BASE_ADDR(X) + 0x9c)
 391#define DDRC_ECCBITMASK2(X)      (DDRC_IPS_BASE_ADDR(X) + 0xa0)
 392#define DDRC_ECCUADDR0(X)        (DDRC_IPS_BASE_ADDR(X) + 0xa4)
 393#define DDRC_ECCUADDR1(X)        (DDRC_IPS_BASE_ADDR(X) + 0xa8)
 394#define DDRC_ECCUSYN0(X)         (DDRC_IPS_BASE_ADDR(X) + 0xac)
 395#define DDRC_ECCUSYN1(X)         (DDRC_IPS_BASE_ADDR(X) + 0xb0)
 396#define DDRC_ECCUSYN2(X)         (DDRC_IPS_BASE_ADDR(X) + 0xb4)
 397#define DDRC_ECCPOISONADDR0(X)   (DDRC_IPS_BASE_ADDR(X) + 0xb8)
 398#define DDRC_ECCPOISONADDR1(X)   (DDRC_IPS_BASE_ADDR(X) + 0xbc)
 399#define DDRC_CRCPARCTL0(X)       (DDRC_IPS_BASE_ADDR(X) + 0xc0)
 400#define DDRC_CRCPARCTL1(X)       (DDRC_IPS_BASE_ADDR(X) + 0xc4)
 401#define DDRC_CRCPARCTL2(X)       (DDRC_IPS_BASE_ADDR(X) + 0xc8)
 402#define DDRC_CRCPARSTAT(X)       (DDRC_IPS_BASE_ADDR(X) + 0xcc)
 403#define DDRC_INIT0(X)            (DDRC_IPS_BASE_ADDR(X) + 0xd0)
 404#define DDRC_INIT1(X)            (DDRC_IPS_BASE_ADDR(X) + 0xd4)
 405#define DDRC_INIT2(X)            (DDRC_IPS_BASE_ADDR(X) + 0xd8)
 406#define DDRC_INIT3(X)            (DDRC_IPS_BASE_ADDR(X) + 0xdc)
 407#define DDRC_INIT4(X)            (DDRC_IPS_BASE_ADDR(X) + 0xe0)
 408#define DDRC_INIT5(X)            (DDRC_IPS_BASE_ADDR(X) + 0xe4)
 409#define DDRC_INIT6(X)            (DDRC_IPS_BASE_ADDR(X) + 0xe8)
 410#define DDRC_INIT7(X)            (DDRC_IPS_BASE_ADDR(X) + 0xec)
 411#define DDRC_DIMMCTL(X)          (DDRC_IPS_BASE_ADDR(X) + 0xf0)
 412#define DDRC_RANKCTL(X)          (DDRC_IPS_BASE_ADDR(X) + 0xf4)
 413#define DDRC_DRAMTMG0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x100)
 414#define DDRC_DRAMTMG1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x104)
 415#define DDRC_DRAMTMG2(X)         (DDRC_IPS_BASE_ADDR(X) + 0x108)
 416#define DDRC_DRAMTMG3(X)         (DDRC_IPS_BASE_ADDR(X) + 0x10c)
 417#define DDRC_DRAMTMG4(X)         (DDRC_IPS_BASE_ADDR(X) + 0x110)
 418#define DDRC_DRAMTMG5(X)         (DDRC_IPS_BASE_ADDR(X) + 0x114)
 419#define DDRC_DRAMTMG6(X)         (DDRC_IPS_BASE_ADDR(X) + 0x118)
 420#define DDRC_DRAMTMG7(X)         (DDRC_IPS_BASE_ADDR(X) + 0x11c)
 421#define DDRC_DRAMTMG8(X)         (DDRC_IPS_BASE_ADDR(X) + 0x120)
 422#define DDRC_DRAMTMG9(X)         (DDRC_IPS_BASE_ADDR(X) + 0x124)
 423#define DDRC_DRAMTMG10(X)        (DDRC_IPS_BASE_ADDR(X) + 0x128)
 424#define DDRC_DRAMTMG11(X)        (DDRC_IPS_BASE_ADDR(X) + 0x12c)
 425#define DDRC_DRAMTMG12(X)        (DDRC_IPS_BASE_ADDR(X) + 0x130)
 426#define DDRC_DRAMTMG13(X)        (DDRC_IPS_BASE_ADDR(X) + 0x134)
 427#define DDRC_DRAMTMG14(X)        (DDRC_IPS_BASE_ADDR(X) + 0x138)
 428#define DDRC_DRAMTMG15(X)        (DDRC_IPS_BASE_ADDR(X) + 0x13C)
 429#define DDRC_DRAMTMG16(X)        (DDRC_IPS_BASE_ADDR(X) + 0x140)
 430#define DDRC_DRAMTMG17(X)        (DDRC_IPS_BASE_ADDR(X) + 0x144)
 431#define DDRC_ZQCTL0(X)           (DDRC_IPS_BASE_ADDR(X) + 0x180)
 432#define DDRC_ZQCTL1(X)           (DDRC_IPS_BASE_ADDR(X) + 0x184)
 433#define DDRC_ZQCTL2(X)           (DDRC_IPS_BASE_ADDR(X) + 0x188)
 434#define DDRC_ZQSTAT(X)           (DDRC_IPS_BASE_ADDR(X) + 0x18c)
 435#define DDRC_DFITMG0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x190)
 436#define DDRC_DFITMG1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x194)
 437#define DDRC_DFILPCFG0(X)        (DDRC_IPS_BASE_ADDR(X) + 0x198)
 438#define DDRC_DFILPCFG1(X)        (DDRC_IPS_BASE_ADDR(X) + 0x19c)
 439#define DDRC_DFIUPD0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1a0)
 440#define DDRC_DFIUPD1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1a4)
 441#define DDRC_DFIUPD2(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1a8)
 442#define DDRC_DFIMISC(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1b0)
 443#define DDRC_DFITMG2(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1b4)
 444#define DDRC_DFITMG3(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1b8)
 445#define DDRC_DFISTAT(X)          (DDRC_IPS_BASE_ADDR(X) + 0x1bc)
 446#define DDRC_DBICTL(X)           (DDRC_IPS_BASE_ADDR(X) + 0x1c0)
 447#define DDRC_DFIPHYMSTR(X)       (DDRC_IPS_BASE_ADDR(X) + 0x1c4)
 448#define DDRC_TRAINCTL0(X)        (DDRC_IPS_BASE_ADDR(X) + 0x1d0)
 449#define DDRC_TRAINCTL1(X)        (DDRC_IPS_BASE_ADDR(X) + 0x1d4)
 450#define DDRC_TRAINCTL2(X)        (DDRC_IPS_BASE_ADDR(X) + 0x1d8)
 451#define DDRC_TRAINSTAT(X)        (DDRC_IPS_BASE_ADDR(X) + 0x1dc)
 452#define DDRC_ADDRMAP0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x200)
 453#define DDRC_ADDRMAP1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x204)
 454#define DDRC_ADDRMAP2(X)         (DDRC_IPS_BASE_ADDR(X) + 0x208)
 455#define DDRC_ADDRMAP3(X)         (DDRC_IPS_BASE_ADDR(X) + 0x20c)
 456#define DDRC_ADDRMAP4(X)         (DDRC_IPS_BASE_ADDR(X) + 0x210)
 457#define DDRC_ADDRMAP5(X)         (DDRC_IPS_BASE_ADDR(X) + 0x214)
 458#define DDRC_ADDRMAP6(X)         (DDRC_IPS_BASE_ADDR(X) + 0x218)
 459#define DDRC_ADDRMAP7(X)         (DDRC_IPS_BASE_ADDR(X) + 0x21c)
 460#define DDRC_ADDRMAP8(X)         (DDRC_IPS_BASE_ADDR(X) + 0x220)
 461#define DDRC_ADDRMAP9(X)         (DDRC_IPS_BASE_ADDR(X) + 0x224)
 462#define DDRC_ADDRMAP10(X)        (DDRC_IPS_BASE_ADDR(X) + 0x228)
 463#define DDRC_ADDRMAP11(X)        (DDRC_IPS_BASE_ADDR(X) + 0x22c)
 464#define DDRC_ODTCFG(X)           (DDRC_IPS_BASE_ADDR(X) + 0x240)
 465#define DDRC_ODTMAP(X)           (DDRC_IPS_BASE_ADDR(X) + 0x244)
 466#define DDRC_SCHED(X)            (DDRC_IPS_BASE_ADDR(X) + 0x250)
 467#define DDRC_SCHED1(X)           (DDRC_IPS_BASE_ADDR(X) + 0x254)
 468#define DDRC_PERFHPR1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x25c)
 469#define DDRC_PERFLPR1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x264)
 470#define DDRC_PERFWR1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x26c)
 471#define DDRC_PERFVPR1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x274)
 472#define DDRC_PERFVPW1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x278)
 473#define DDRC_DQMAP0(X)           (DDRC_IPS_BASE_ADDR(X) + 0x280)
 474#define DDRC_DQMAP1(X)           (DDRC_IPS_BASE_ADDR(X) + 0x284)
 475#define DDRC_DQMAP2(X)           (DDRC_IPS_BASE_ADDR(X) + 0x288)
 476#define DDRC_DQMAP3(X)           (DDRC_IPS_BASE_ADDR(X) + 0x28c)
 477#define DDRC_DQMAP4(X)           (DDRC_IPS_BASE_ADDR(X) + 0x290)
 478#define DDRC_DQMAP5(X)           (DDRC_IPS_BASE_ADDR(X) + 0x294)
 479#define DDRC_DBG0(X)             (DDRC_IPS_BASE_ADDR(X) + 0x300)
 480#define DDRC_DBG1(X)             (DDRC_IPS_BASE_ADDR(X) + 0x304)
 481#define DDRC_DBGCAM(X)           (DDRC_IPS_BASE_ADDR(X) + 0x308)
 482#define DDRC_DBGCMD(X)           (DDRC_IPS_BASE_ADDR(X) + 0x30c)
 483#define DDRC_DBGSTAT(X)          (DDRC_IPS_BASE_ADDR(X) + 0x310)
 484#define DDRC_SWCTL(X)            (DDRC_IPS_BASE_ADDR(X) + 0x320)
 485#define DDRC_SWSTAT(X)           (DDRC_IPS_BASE_ADDR(X) + 0x324)
 486#define DDRC_OCPARCFG0(X)        (DDRC_IPS_BASE_ADDR(X) + 0x330)
 487#define DDRC_OCPARCFG1(X)        (DDRC_IPS_BASE_ADDR(X) + 0x334)
 488#define DDRC_OCPARCFG2(X)        (DDRC_IPS_BASE_ADDR(X) + 0x338)
 489#define DDRC_OCPARCFG3(X)        (DDRC_IPS_BASE_ADDR(X) + 0x33c)
 490#define DDRC_OCPARSTAT0(X)       (DDRC_IPS_BASE_ADDR(X) + 0x340)
 491#define DDRC_OCPARSTAT1(X)       (DDRC_IPS_BASE_ADDR(X) + 0x344)
 492#define DDRC_OCPARWLOG0(X)       (DDRC_IPS_BASE_ADDR(X) + 0x348)
 493#define DDRC_OCPARWLOG1(X)       (DDRC_IPS_BASE_ADDR(X) + 0x34c)
 494#define DDRC_OCPARWLOG2(X)       (DDRC_IPS_BASE_ADDR(X) + 0x350)
 495#define DDRC_OCPARAWLOG0(X)      (DDRC_IPS_BASE_ADDR(X) + 0x354)
 496#define DDRC_OCPARAWLOG1(X)      (DDRC_IPS_BASE_ADDR(X) + 0x358)
 497#define DDRC_OCPARRLOG0(X)       (DDRC_IPS_BASE_ADDR(X) + 0x35c)
 498#define DDRC_OCPARRLOG1(X)       (DDRC_IPS_BASE_ADDR(X) + 0x360)
 499#define DDRC_OCPARARLOG0(X)      (DDRC_IPS_BASE_ADDR(X) + 0x364)
 500#define DDRC_OCPARARLOG1(X)      (DDRC_IPS_BASE_ADDR(X) + 0x368)
 501#define DDRC_POISONCFG(X)        (DDRC_IPS_BASE_ADDR(X) + 0x36C)
 502#define DDRC_POISONSTAT(X)       (DDRC_IPS_BASE_ADDR(X) + 0x370)
 503
 504#define DDRC_PSTAT(X)            (DDRC_IPS_BASE_ADDR(X) + 0x3fc)
 505#define DDRC_PCCFG(X)            (DDRC_IPS_BASE_ADDR(X) + 0x400)
 506#define DDRC_PCFGR_0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x404)
 507#define DDRC_PCFGR_1(X)          (DDRC_IPS_BASE_ADDR(X) + 1 * 0xb0 + 0x404)
 508#define DDRC_PCFGR_2(X)          (DDRC_IPS_BASE_ADDR(X) + 2 * 0xb0 + 0x404)
 509#define DDRC_PCFGR_3(X)          (DDRC_IPS_BASE_ADDR(X) + 3 * 0xb0 + 0x404)
 510#define DDRC_PCFGW_0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x408)
 511#define DDRC_PCFGW_1(X)          (DDRC_IPS_BASE_ADDR(X) + 1 * 0xb0 + 0x408)
 512#define DDRC_PCFGW_2(X)          (DDRC_IPS_BASE_ADDR(X) + 2 * 0xb0 + 0x408)
 513#define DDRC_PCFGW_3(X)          (DDRC_IPS_BASE_ADDR(X) + 3 * 0xb0 + 0x408)
 514#define DDRC_PCFGC_0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x40c)
 515#define DDRC_PCFGIDMASKCH(X)     (DDRC_IPS_BASE_ADDR(X) + 0x410)
 516#define DDRC_PCFGIDVALUECH(X)    (DDRC_IPS_BASE_ADDR(X) + 0x414)
 517#define DDRC_PCTRL_0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x490)
 518#define DDRC_PCTRL_1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x490 + 1 * 0xb0)
 519#define DDRC_PCTRL_2(X)          (DDRC_IPS_BASE_ADDR(X) + 0x490 + 2 * 0xb0)
 520#define DDRC_PCTRL_3(X)          (DDRC_IPS_BASE_ADDR(X) + 0x490 + 3 * 0xb0)
 521#define DDRC_PCFGQOS0_0(X)       (DDRC_IPS_BASE_ADDR(X) + 0x494)
 522#define DDRC_PCFGQOS1_0(X)       (DDRC_IPS_BASE_ADDR(X) + 0x498)
 523#define DDRC_PCFGWQOS0_0(X)      (DDRC_IPS_BASE_ADDR(X) + 0x49c)
 524#define DDRC_PCFGWQOS1_0(X)      (DDRC_IPS_BASE_ADDR(X) + 0x4a0)
 525#define DDRC_SARBASE0(X)         (DDRC_IPS_BASE_ADDR(X) + 0xf04)
 526#define DDRC_SARSIZE0(X)         (DDRC_IPS_BASE_ADDR(X) + 0xf08)
 527#define DDRC_SBRCTL(X)           (DDRC_IPS_BASE_ADDR(X) + 0xf24)
 528#define DDRC_SBRSTAT(X)          (DDRC_IPS_BASE_ADDR(X) + 0xf28)
 529#define DDRC_SBRWDATA0(X)        (DDRC_IPS_BASE_ADDR(X) + 0xf2c)
 530#define DDRC_SBRWDATA1(X)        (DDRC_IPS_BASE_ADDR(X) + 0xf30)
 531#define DDRC_PDCH(X)             (DDRC_IPS_BASE_ADDR(X) + 0xf34)
 532
 533#define DDRC_FREQ1_DERATEEN(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2020)
 534#define DDRC_FREQ1_DERATEINT(X)        (DDRC_IPS_BASE_ADDR(X) + 0x2024)
 535#define DDRC_FREQ1_RFSHCTL0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2050)
 536#define DDRC_FREQ1_RFSHTMG(X)          (DDRC_IPS_BASE_ADDR(X) + 0x2064)
 537#define DDRC_FREQ1_INIT3(X)            (DDRC_IPS_BASE_ADDR(X) + 0x20dc)
 538#define DDRC_FREQ1_INIT4(X)            (DDRC_IPS_BASE_ADDR(X) + 0x20e0)
 539#define DDRC_FREQ1_INIT6(X)            (DDRC_IPS_BASE_ADDR(X) + 0x20e8)
 540#define DDRC_FREQ1_INIT7(X)            (DDRC_IPS_BASE_ADDR(X) + 0x20ec)
 541#define DDRC_FREQ1_DRAMTMG0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2100)
 542#define DDRC_FREQ1_DRAMTMG1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2104)
 543#define DDRC_FREQ1_DRAMTMG2(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2108)
 544#define DDRC_FREQ1_DRAMTMG3(X)         (DDRC_IPS_BASE_ADDR(X) + 0x210c)
 545#define DDRC_FREQ1_DRAMTMG4(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2110)
 546#define DDRC_FREQ1_DRAMTMG5(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2114)
 547#define DDRC_FREQ1_DRAMTMG6(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2118)
 548#define DDRC_FREQ1_DRAMTMG7(X)         (DDRC_IPS_BASE_ADDR(X) + 0x211c)
 549#define DDRC_FREQ1_DRAMTMG8(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2120)
 550#define DDRC_FREQ1_DRAMTMG9(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2124)
 551#define DDRC_FREQ1_DRAMTMG10(X)        (DDRC_IPS_BASE_ADDR(X) + 0x2128)
 552#define DDRC_FREQ1_DRAMTMG11(X)        (DDRC_IPS_BASE_ADDR(X) + 0x212c)
 553#define DDRC_FREQ1_DRAMTMG12(X)        (DDRC_IPS_BASE_ADDR(X) + 0x2130)
 554#define DDRC_FREQ1_DRAMTMG13(X)        (DDRC_IPS_BASE_ADDR(X) + 0x2134)
 555#define DDRC_FREQ1_DRAMTMG14(X)        (DDRC_IPS_BASE_ADDR(X) + 0x2138)
 556#define DDRC_FREQ1_DRAMTMG15(X)        (DDRC_IPS_BASE_ADDR(X) + 0x213C)
 557#define DDRC_FREQ1_DRAMTMG16(X)        (DDRC_IPS_BASE_ADDR(X) + 0x2140)
 558#define DDRC_FREQ1_DRAMTMG17(X)        (DDRC_IPS_BASE_ADDR(X) + 0x2144)
 559#define DDRC_FREQ1_ZQCTL0(X)           (DDRC_IPS_BASE_ADDR(X) + 0x2180)
 560#define DDRC_FREQ1_DFITMG0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x2190)
 561#define DDRC_FREQ1_DFITMG1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x2194)
 562#define DDRC_FREQ1_DFITMG2(X)          (DDRC_IPS_BASE_ADDR(X) + 0x21b4)
 563#define DDRC_FREQ1_DFITMG3(X)          (DDRC_IPS_BASE_ADDR(X) + 0x21b8)
 564#define DDRC_FREQ1_ODTCFG(X)           (DDRC_IPS_BASE_ADDR(X) + 0x2240)
 565
 566#define DDRC_FREQ2_DERATEEN(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3020)
 567#define DDRC_FREQ2_DERATEINT(X)        (DDRC_IPS_BASE_ADDR(X) + 0x3024)
 568#define DDRC_FREQ2_RFSHCTL0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3050)
 569#define DDRC_FREQ2_RFSHTMG(X)          (DDRC_IPS_BASE_ADDR(X) + 0x3064)
 570#define DDRC_FREQ2_INIT3(X)            (DDRC_IPS_BASE_ADDR(X) + 0x30dc)
 571#define DDRC_FREQ2_INIT4(X)            (DDRC_IPS_BASE_ADDR(X) + 0x30e0)
 572#define DDRC_FREQ2_INIT6(X)            (DDRC_IPS_BASE_ADDR(X) + 0x30e8)
 573#define DDRC_FREQ2_INIT7(X)            (DDRC_IPS_BASE_ADDR(X) + 0x30ec)
 574#define DDRC_FREQ2_DRAMTMG0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3100)
 575#define DDRC_FREQ2_DRAMTMG1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3104)
 576#define DDRC_FREQ2_DRAMTMG2(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3108)
 577#define DDRC_FREQ2_DRAMTMG3(X)         (DDRC_IPS_BASE_ADDR(X) + 0x310c)
 578#define DDRC_FREQ2_DRAMTMG4(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3110)
 579#define DDRC_FREQ2_DRAMTMG5(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3114)
 580#define DDRC_FREQ2_DRAMTMG6(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3118)
 581#define DDRC_FREQ2_DRAMTMG7(X)         (DDRC_IPS_BASE_ADDR(X) + 0x311c)
 582#define DDRC_FREQ2_DRAMTMG8(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3120)
 583#define DDRC_FREQ2_DRAMTMG9(X)         (DDRC_IPS_BASE_ADDR(X) + 0x3124)
 584#define DDRC_FREQ2_DRAMTMG10(X)        (DDRC_IPS_BASE_ADDR(X) + 0x3128)
 585#define DDRC_FREQ2_DRAMTMG11(X)        (DDRC_IPS_BASE_ADDR(X) + 0x312c)
 586#define DDRC_FREQ2_DRAMTMG12(X)        (DDRC_IPS_BASE_ADDR(X) + 0x3130)
 587#define DDRC_FREQ2_DRAMTMG13(X)        (DDRC_IPS_BASE_ADDR(X) + 0x3134)
 588#define DDRC_FREQ2_DRAMTMG14(X)        (DDRC_IPS_BASE_ADDR(X) + 0x3138)
 589#define DDRC_FREQ2_DRAMTMG15(X)        (DDRC_IPS_BASE_ADDR(X) + 0x313C)
 590#define DDRC_FREQ2_DRAMTMG16(X)        (DDRC_IPS_BASE_ADDR(X) + 0x3140)
 591#define DDRC_FREQ2_DRAMTMG17(X)        (DDRC_IPS_BASE_ADDR(X) + 0x3144)
 592#define DDRC_FREQ2_ZQCTL0(X)           (DDRC_IPS_BASE_ADDR(X) + 0x3180)
 593#define DDRC_FREQ2_DFITMG0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x3190)
 594#define DDRC_FREQ2_DFITMG1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x3194)
 595#define DDRC_FREQ2_DFITMG2(X)          (DDRC_IPS_BASE_ADDR(X) + 0x31b4)
 596#define DDRC_FREQ2_DFITMG3(X)          (DDRC_IPS_BASE_ADDR(X) + 0x31b8)
 597#define DDRC_FREQ2_ODTCFG(X)           (DDRC_IPS_BASE_ADDR(X) + 0x3240)
 598
 599#define DDRC_FREQ3_DERATEEN(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4020)
 600#define DDRC_FREQ3_DERATEINT(X)        (DDRC_IPS_BASE_ADDR(X) + 0x4024)
 601#define DDRC_FREQ3_RFSHCTL0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4050)
 602#define DDRC_FREQ3_RFSHTMG(X)          (DDRC_IPS_BASE_ADDR(X) + 0x4064)
 603#define DDRC_FREQ3_INIT3(X)            (DDRC_IPS_BASE_ADDR(X) + 0x40dc)
 604#define DDRC_FREQ3_INIT4(X)            (DDRC_IPS_BASE_ADDR(X) + 0x40e0)
 605#define DDRC_FREQ3_INIT6(X)            (DDRC_IPS_BASE_ADDR(X) + 0x40e8)
 606#define DDRC_FREQ3_INIT7(X)            (DDRC_IPS_BASE_ADDR(X) + 0x40ec)
 607#define DDRC_FREQ3_DRAMTMG0(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4100)
 608#define DDRC_FREQ3_DRAMTMG1(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4104)
 609#define DDRC_FREQ3_DRAMTMG2(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4108)
 610#define DDRC_FREQ3_DRAMTMG3(X)         (DDRC_IPS_BASE_ADDR(X) + 0x410c)
 611#define DDRC_FREQ3_DRAMTMG4(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4110)
 612#define DDRC_FREQ3_DRAMTMG5(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4114)
 613#define DDRC_FREQ3_DRAMTMG6(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4118)
 614#define DDRC_FREQ3_DRAMTMG7(X)         (DDRC_IPS_BASE_ADDR(X) + 0x411c)
 615#define DDRC_FREQ3_DRAMTMG8(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4120)
 616#define DDRC_FREQ3_DRAMTMG9(X)         (DDRC_IPS_BASE_ADDR(X) + 0x4124)
 617#define DDRC_FREQ3_DRAMTMG10(X)        (DDRC_IPS_BASE_ADDR(X) + 0x4128)
 618#define DDRC_FREQ3_DRAMTMG11(X)        (DDRC_IPS_BASE_ADDR(X) + 0x412c)
 619#define DDRC_FREQ3_DRAMTMG12(X)        (DDRC_IPS_BASE_ADDR(X) + 0x4130)
 620#define DDRC_FREQ3_DRAMTMG13(X)        (DDRC_IPS_BASE_ADDR(X) + 0x4134)
 621#define DDRC_FREQ3_DRAMTMG14(X)        (DDRC_IPS_BASE_ADDR(X) + 0x4138)
 622#define DDRC_FREQ3_DRAMTMG15(X)        (DDRC_IPS_BASE_ADDR(X) + 0x413C)
 623#define DDRC_FREQ3_DRAMTMG16(X)        (DDRC_IPS_BASE_ADDR(X) + 0x4140)
 624
 625#define DDRC_FREQ3_ZQCTL0(X)           (DDRC_IPS_BASE_ADDR(X) + 0x4180)
 626#define DDRC_FREQ3_DFITMG0(X)          (DDRC_IPS_BASE_ADDR(X) + 0x4190)
 627#define DDRC_FREQ3_DFITMG1(X)          (DDRC_IPS_BASE_ADDR(X) + 0x4194)
 628#define DDRC_FREQ3_DFITMG2(X)          (DDRC_IPS_BASE_ADDR(X) + 0x41b4)
 629#define DDRC_FREQ3_DFITMG3(X)          (DDRC_IPS_BASE_ADDR(X) + 0x41b8)
 630#define DDRC_FREQ3_ODTCFG(X)           (DDRC_IPS_BASE_ADDR(X) + 0x4240)
 631#define DDRC_DFITMG0_SHADOW(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2190)
 632#define DDRC_DFITMG1_SHADOW(X)         (DDRC_IPS_BASE_ADDR(X) + 0x2194)
 633#define DDRC_DFITMG2_SHADOW(X)         (DDRC_IPS_BASE_ADDR(X) + 0x21b4)
 634#define DDRC_DFITMG3_SHADOW(X)         (DDRC_IPS_BASE_ADDR(X) + 0x21b8)
 635#define DDRC_ODTCFG_SHADOW(X)          (DDRC_IPS_BASE_ADDR(X) + 0x2240)
 636
 637#define DDRPHY_CalBusy(X) (IP2APB_DDRPHY_IPS_BASE_ADDR(X) + 4 * 0x020097)
 638
 639#define DRC_PERF_MON_BASE_ADDR(X)            (0x3d800000 + ((X) * 0x2000000))
 640#define DRC_PERF_MON_CNT0_CTL(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x0)
 641#define DRC_PERF_MON_CNT1_CTL(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x4)
 642#define DRC_PERF_MON_CNT2_CTL(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x8)
 643#define DRC_PERF_MON_CNT3_CTL(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0xC)
 644#define DRC_PERF_MON_CNT0_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x20)
 645#define DRC_PERF_MON_CNT1_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x24)
 646#define DRC_PERF_MON_CNT2_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x28)
 647#define DRC_PERF_MON_CNT3_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x2C)
 648#define DRC_PERF_MON_MRR0_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x40)
 649#define DRC_PERF_MON_MRR1_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x44)
 650#define DRC_PERF_MON_MRR2_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x48)
 651#define DRC_PERF_MON_MRR3_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x4C)
 652#define DRC_PERF_MON_MRR4_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x50)
 653#define DRC_PERF_MON_MRR5_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x54)
 654#define DRC_PERF_MON_MRR6_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x58)
 655#define DRC_PERF_MON_MRR7_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x5C)
 656#define DRC_PERF_MON_MRR8_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x60)
 657#define DRC_PERF_MON_MRR9_DAT(X)             (DRC_PERF_MON_BASE_ADDR(X) + 0x64)
 658#define DRC_PERF_MON_MRR10_DAT(X)            (DRC_PERF_MON_BASE_ADDR(X) + 0x68)
 659#define DRC_PERF_MON_MRR11_DAT(X)            (DRC_PERF_MON_BASE_ADDR(X) + 0x6C)
 660#define DRC_PERF_MON_MRR12_DAT(X)            (DRC_PERF_MON_BASE_ADDR(X) + 0x70)
 661#define DRC_PERF_MON_MRR13_DAT(X)            (DRC_PERF_MON_BASE_ADDR(X) + 0x74)
 662#define DRC_PERF_MON_MRR14_DAT(X)            (DRC_PERF_MON_BASE_ADDR(X) + 0x78)
 663#define DRC_PERF_MON_MRR15_DAT(X)            (DRC_PERF_MON_BASE_ADDR(X) + 0x7C)
 664
 665/* user data type */
 666enum fw_type {
 667        FW_1D_IMAGE,
 668        FW_2D_IMAGE,
 669};
 670
 671struct dram_cfg_param {
 672        unsigned int reg;
 673        unsigned int val;
 674};
 675
 676struct dram_fsp_msg {
 677        unsigned int drate;
 678        enum fw_type fw_type;
 679        struct dram_cfg_param *fsp_cfg;
 680        unsigned int fsp_cfg_num;
 681};
 682
 683struct dram_timing_info {
 684        /* umctl2 config */
 685        struct dram_cfg_param *ddrc_cfg;
 686        unsigned int ddrc_cfg_num;
 687        /* ddrphy config */
 688        struct dram_cfg_param *ddrphy_cfg;
 689        unsigned int ddrphy_cfg_num;
 690        /* ddr fsp train info */
 691        struct dram_fsp_msg *fsp_msg;
 692        unsigned int fsp_msg_num;
 693        /* ddr phy trained CSR */
 694        struct dram_cfg_param *ddrphy_trained_csr;
 695        unsigned int ddrphy_trained_csr_num;
 696        /* ddr phy PIE */
 697        struct dram_cfg_param *ddrphy_pie;
 698        unsigned int ddrphy_pie_num;
 699        /* initialized drate table */
 700        unsigned int fsp_table[4];
 701};
 702
 703extern struct dram_timing_info dram_timing;
 704
 705void ddr_load_train_firmware(enum fw_type type);
 706int ddr_init(struct dram_timing_info *timing_info);
 707int ddr_cfg_phy(struct dram_timing_info *timing_info);
 708void load_lpddr4_phy_pie(void);
 709void ddrphy_trained_csr_save(struct dram_cfg_param *param, unsigned int num);
 710void dram_config_save(struct dram_timing_info *info, unsigned long base);
 711
 712/* utils function for ddr phy training */
 713int wait_ddrphy_training_complete(void);
 714void ddrphy_init_set_dfi_clk(unsigned int drate);
 715void ddrphy_init_read_msg_block(enum fw_type type);
 716
 717static inline void reg32_write(unsigned long addr, u32 val)
 718{
 719        writel(val, addr);
 720}
 721
 722static inline u32 reg32_read(unsigned long addr)
 723{
 724        return readl(addr);
 725}
 726
 727static inline void reg32setbit(unsigned long addr, u32 bit)
 728{
 729        setbits_le32(addr, (1 << bit));
 730}
 731
 732#define dwc_ddrphy_apb_wr(addr, data) \
 733        reg32_write(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr), data)
 734#define dwc_ddrphy_apb_rd(addr) \
 735        reg32_read(IP2APB_DDRPHY_IPS_BASE_ADDR(0) + 4 * (addr))
 736
 737extern struct dram_cfg_param ddrphy_trained_csr[];
 738extern uint32_t ddrphy_trained_csr_num;
 739
 740#endif
 741