1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 20176399bSKever Yang /* 30176399bSKever Yang * (C) Copyright 2017 Rockchip Electronics Co., Ltd 40176399bSKever Yang */ 50176399bSKever Yang #ifndef _ASM_ARCH_SDRAM_RK322X_H 60176399bSKever Yang #define _ASM_ARCH_SDRAM_RK322X_H 70176399bSKever Yang 80176399bSKever Yang #include <common.h> 90176399bSKever Yang 100176399bSKever Yang enum { 110176399bSKever Yang DDR3 = 3, 120176399bSKever Yang LPDDR2 = 5, 130176399bSKever Yang LPDDR3 = 6, 140176399bSKever Yang UNUSED = 0xFF, 150176399bSKever Yang }; 160176399bSKever Yang 170176399bSKever Yang struct rk322x_sdram_channel { 180176399bSKever Yang /* 190176399bSKever Yang * bit width in address, eg: 200176399bSKever Yang * 8 banks using 3 bit to address, 210176399bSKever Yang * 2 cs using 1 bit to address. 220176399bSKever Yang */ 230176399bSKever Yang u8 rank; 240176399bSKever Yang u8 col; 250176399bSKever Yang u8 bk; 260176399bSKever Yang u8 bw; 270176399bSKever Yang u8 dbw; 280176399bSKever Yang u8 row_3_4; 290176399bSKever Yang u8 cs0_row; 300176399bSKever Yang u8 cs1_row; 310176399bSKever Yang #if CONFIG_IS_ENABLED(OF_PLATDATA) 320176399bSKever Yang /* 330176399bSKever Yang * For of-platdata, which would otherwise convert this into two 340176399bSKever Yang * byte-swapped integers. With a size of 9 bytes, this struct will 350176399bSKever Yang * appear in of-platdata as a byte array. 360176399bSKever Yang * 370176399bSKever Yang * If OF_PLATDATA enabled, need to add a dummy byte in dts.(i.e 0xff) 380176399bSKever Yang */ 390176399bSKever Yang u8 dummy; 400176399bSKever Yang #endif 410176399bSKever Yang }; 420176399bSKever Yang 430176399bSKever Yang struct rk322x_ddr_pctl { 440176399bSKever Yang u32 scfg; 450176399bSKever Yang u32 sctl; 460176399bSKever Yang u32 stat; 470176399bSKever Yang u32 intrstat; 480176399bSKever Yang u32 reserved0[(0x40 - 0x10) / 4]; 490176399bSKever Yang u32 mcmd; 500176399bSKever Yang u32 powctl; 510176399bSKever Yang u32 powstat; 520176399bSKever Yang u32 cmdtstat; 530176399bSKever Yang u32 cmdtstaten; 540176399bSKever Yang u32 reserved1[(0x60 - 0x54) / 4]; 550176399bSKever Yang u32 mrrcfg0; 560176399bSKever Yang u32 mrrstat0; 570176399bSKever Yang u32 mrrstat1; 580176399bSKever Yang u32 reserved2[(0x7c - 0x6c) / 4]; 590176399bSKever Yang 600176399bSKever Yang u32 mcfg1; 610176399bSKever Yang u32 mcfg; 620176399bSKever Yang u32 ppcfg; 630176399bSKever Yang u32 mstat; 640176399bSKever Yang u32 lpddr2zqcfg; 650176399bSKever Yang u32 reserved3; 660176399bSKever Yang 670176399bSKever Yang u32 dtupdes; 680176399bSKever Yang u32 dtuna; 690176399bSKever Yang u32 dtune; 700176399bSKever Yang u32 dtuprd0; 710176399bSKever Yang u32 dtuprd1; 720176399bSKever Yang u32 dtuprd2; 730176399bSKever Yang u32 dtuprd3; 740176399bSKever Yang u32 dtuawdt; 750176399bSKever Yang u32 reserved4[(0xc0 - 0xb4) / 4]; 760176399bSKever Yang 770176399bSKever Yang u32 togcnt1u; 780176399bSKever Yang u32 tinit; 790176399bSKever Yang u32 trsth; 800176399bSKever Yang u32 togcnt100n; 810176399bSKever Yang u32 trefi; 820176399bSKever Yang u32 tmrd; 830176399bSKever Yang u32 trfc; 840176399bSKever Yang u32 trp; 850176399bSKever Yang u32 trtw; 860176399bSKever Yang u32 tal; 870176399bSKever Yang u32 tcl; 880176399bSKever Yang u32 tcwl; 890176399bSKever Yang u32 tras; 900176399bSKever Yang u32 trc; 910176399bSKever Yang u32 trcd; 920176399bSKever Yang u32 trrd; 930176399bSKever Yang u32 trtp; 940176399bSKever Yang u32 twr; 950176399bSKever Yang u32 twtr; 960176399bSKever Yang u32 texsr; 970176399bSKever Yang u32 txp; 980176399bSKever Yang u32 txpdll; 990176399bSKever Yang u32 tzqcs; 1000176399bSKever Yang u32 tzqcsi; 1010176399bSKever Yang u32 tdqs; 1020176399bSKever Yang u32 tcksre; 1030176399bSKever Yang u32 tcksrx; 1040176399bSKever Yang u32 tcke; 1050176399bSKever Yang u32 tmod; 1060176399bSKever Yang u32 trstl; 1070176399bSKever Yang u32 tzqcl; 1080176399bSKever Yang u32 tmrr; 1090176399bSKever Yang u32 tckesr; 1100176399bSKever Yang u32 tdpd; 1110176399bSKever Yang u32 tref_mem_ddr3; 1120176399bSKever Yang u32 reserved5[(0x180 - 0x14c) / 4]; 1130176399bSKever Yang u32 ecccfg; 1140176399bSKever Yang u32 ecctst; 1150176399bSKever Yang u32 eccclr; 1160176399bSKever Yang u32 ecclog; 1170176399bSKever Yang u32 reserved6[(0x200 - 0x190) / 4]; 1180176399bSKever Yang u32 dtuwactl; 1190176399bSKever Yang u32 dturactl; 1200176399bSKever Yang u32 dtucfg; 1210176399bSKever Yang u32 dtuectl; 1220176399bSKever Yang u32 dtuwd0; 1230176399bSKever Yang u32 dtuwd1; 1240176399bSKever Yang u32 dtuwd2; 1250176399bSKever Yang u32 dtuwd3; 1260176399bSKever Yang u32 dtuwdm; 1270176399bSKever Yang u32 dturd0; 1280176399bSKever Yang u32 dturd1; 1290176399bSKever Yang u32 dturd2; 1300176399bSKever Yang u32 dturd3; 1310176399bSKever Yang u32 dtulfsrwd; 1320176399bSKever Yang u32 dtulfsrrd; 1330176399bSKever Yang u32 dtueaf; 1340176399bSKever Yang /* dfi control registers */ 1350176399bSKever Yang u32 dfitctrldelay; 1360176399bSKever Yang u32 dfiodtcfg; 1370176399bSKever Yang u32 dfiodtcfg1; 1380176399bSKever Yang u32 dfiodtrankmap; 1390176399bSKever Yang /* dfi write data registers */ 1400176399bSKever Yang u32 dfitphywrdata; 1410176399bSKever Yang u32 dfitphywrlat; 1420176399bSKever Yang u32 reserved7[(0x260 - 0x258) / 4]; 1430176399bSKever Yang u32 dfitrddataen; 1440176399bSKever Yang u32 dfitphyrdlat; 1450176399bSKever Yang u32 reserved8[(0x270 - 0x268) / 4]; 1460176399bSKever Yang u32 dfitphyupdtype0; 1470176399bSKever Yang u32 dfitphyupdtype1; 1480176399bSKever Yang u32 dfitphyupdtype2; 1490176399bSKever Yang u32 dfitphyupdtype3; 1500176399bSKever Yang u32 dfitctrlupdmin; 1510176399bSKever Yang u32 dfitctrlupdmax; 1520176399bSKever Yang u32 dfitctrlupddly; 1530176399bSKever Yang u32 reserved9; 1540176399bSKever Yang u32 dfiupdcfg; 1550176399bSKever Yang u32 dfitrefmski; 1560176399bSKever Yang u32 dfitctrlupdi; 1570176399bSKever Yang u32 reserved10[(0x2ac - 0x29c) / 4]; 1580176399bSKever Yang u32 dfitrcfg0; 1590176399bSKever Yang u32 dfitrstat0; 1600176399bSKever Yang u32 dfitrwrlvlen; 1610176399bSKever Yang u32 dfitrrdlvlen; 1620176399bSKever Yang u32 dfitrrdlvlgateen; 1630176399bSKever Yang u32 dfiststat0; 1640176399bSKever Yang u32 dfistcfg0; 1650176399bSKever Yang u32 dfistcfg1; 1660176399bSKever Yang u32 reserved11; 1670176399bSKever Yang u32 dfitdramclken; 1680176399bSKever Yang u32 dfitdramclkdis; 1690176399bSKever Yang u32 dfistcfg2; 1700176399bSKever Yang u32 dfistparclr; 1710176399bSKever Yang u32 dfistparlog; 1720176399bSKever Yang u32 reserved12[(0x2f0 - 0x2e4) / 4]; 1730176399bSKever Yang 1740176399bSKever Yang u32 dfilpcfg0; 1750176399bSKever Yang u32 reserved13[(0x300 - 0x2f4) / 4]; 1760176399bSKever Yang u32 dfitrwrlvlresp0; 1770176399bSKever Yang u32 dfitrwrlvlresp1; 1780176399bSKever Yang u32 dfitrwrlvlresp2; 1790176399bSKever Yang u32 dfitrrdlvlresp0; 1800176399bSKever Yang u32 dfitrrdlvlresp1; 1810176399bSKever Yang u32 dfitrrdlvlresp2; 1820176399bSKever Yang u32 dfitrwrlvldelay0; 1830176399bSKever Yang u32 dfitrwrlvldelay1; 1840176399bSKever Yang u32 dfitrwrlvldelay2; 1850176399bSKever Yang u32 dfitrrdlvldelay0; 1860176399bSKever Yang u32 dfitrrdlvldelay1; 1870176399bSKever Yang u32 dfitrrdlvldelay2; 1880176399bSKever Yang u32 dfitrrdlvlgatedelay0; 1890176399bSKever Yang u32 dfitrrdlvlgatedelay1; 1900176399bSKever Yang u32 dfitrrdlvlgatedelay2; 1910176399bSKever Yang u32 dfitrcmd; 1920176399bSKever Yang u32 reserved14[(0x3f8 - 0x340) / 4]; 1930176399bSKever Yang u32 ipvr; 1940176399bSKever Yang u32 iptr; 1950176399bSKever Yang }; 1960176399bSKever Yang check_member(rk322x_ddr_pctl, iptr, 0x03fc); 1970176399bSKever Yang 1980176399bSKever Yang struct rk322x_ddr_phy { 1990176399bSKever Yang u32 ddrphy_reg[0x100]; 2000176399bSKever Yang }; 2010176399bSKever Yang 2020176399bSKever Yang struct rk322x_pctl_timing { 2030176399bSKever Yang u32 togcnt1u; 2040176399bSKever Yang u32 tinit; 2050176399bSKever Yang u32 trsth; 2060176399bSKever Yang u32 togcnt100n; 2070176399bSKever Yang u32 trefi; 2080176399bSKever Yang u32 tmrd; 2090176399bSKever Yang u32 trfc; 2100176399bSKever Yang u32 trp; 2110176399bSKever Yang u32 trtw; 2120176399bSKever Yang u32 tal; 2130176399bSKever Yang u32 tcl; 2140176399bSKever Yang u32 tcwl; 2150176399bSKever Yang u32 tras; 2160176399bSKever Yang u32 trc; 2170176399bSKever Yang u32 trcd; 2180176399bSKever Yang u32 trrd; 2190176399bSKever Yang u32 trtp; 2200176399bSKever Yang u32 twr; 2210176399bSKever Yang u32 twtr; 2220176399bSKever Yang u32 texsr; 2230176399bSKever Yang u32 txp; 2240176399bSKever Yang u32 txpdll; 2250176399bSKever Yang u32 tzqcs; 2260176399bSKever Yang u32 tzqcsi; 2270176399bSKever Yang u32 tdqs; 2280176399bSKever Yang u32 tcksre; 2290176399bSKever Yang u32 tcksrx; 2300176399bSKever Yang u32 tcke; 2310176399bSKever Yang u32 tmod; 2320176399bSKever Yang u32 trstl; 2330176399bSKever Yang u32 tzqcl; 2340176399bSKever Yang u32 tmrr; 2350176399bSKever Yang u32 tckesr; 2360176399bSKever Yang u32 tdpd; 2370176399bSKever Yang u32 trefi_mem_ddr3; 2380176399bSKever Yang }; 2390176399bSKever Yang 2400176399bSKever Yang struct rk322x_phy_timing { 2410176399bSKever Yang u32 mr[4]; 2420176399bSKever Yang u32 mr11; 2430176399bSKever Yang u32 bl; 2440176399bSKever Yang u32 cl_al; 2450176399bSKever Yang }; 2460176399bSKever Yang 2470176399bSKever Yang struct rk322x_msch_timings { 2480176399bSKever Yang u32 ddrtiming; 2490176399bSKever Yang u32 ddrmode; 2500176399bSKever Yang u32 readlatency; 2510176399bSKever Yang u32 activate; 2520176399bSKever Yang u32 devtodev; 2530176399bSKever Yang }; 2540176399bSKever Yang 2550176399bSKever Yang struct rk322x_service_sys { 2560176399bSKever Yang u32 id_coreid; 2570176399bSKever Yang u32 id_revisionid; 2580176399bSKever Yang u32 ddrconf; 2590176399bSKever Yang u32 ddrtiming; 2600176399bSKever Yang u32 ddrmode; 2610176399bSKever Yang u32 readlatency; 2620176399bSKever Yang u32 activate; 2630176399bSKever Yang u32 devtodev; 2640176399bSKever Yang }; 2650176399bSKever Yang 2660176399bSKever Yang struct rk322x_base_params { 2670176399bSKever Yang struct rk322x_msch_timings noc_timing; 2680176399bSKever Yang u32 ddrconfig; 2690176399bSKever Yang u32 ddr_freq; 2700176399bSKever Yang u32 dramtype; 2710176399bSKever Yang /* 2720176399bSKever Yang * unused for rk322x 2730176399bSKever Yang */ 2740176399bSKever Yang u32 stride; 2750176399bSKever Yang u32 odt; 2760176399bSKever Yang }; 2770176399bSKever Yang 2780176399bSKever Yang /* PCT_DFISTCFG0 */ 2790176399bSKever Yang #define DFI_INIT_START BIT(0) 2800176399bSKever Yang #define DFI_DATA_BYTE_DISABLE_EN BIT(2) 2810176399bSKever Yang 2820176399bSKever Yang /* PCT_DFISTCFG1 */ 2830176399bSKever Yang #define DFI_DRAM_CLK_SR_EN BIT(0) 2840176399bSKever Yang #define DFI_DRAM_CLK_DPD_EN BIT(1) 2850176399bSKever Yang 2860176399bSKever Yang /* PCT_DFISTCFG2 */ 2870176399bSKever Yang #define DFI_PARITY_INTR_EN BIT(0) 2880176399bSKever Yang #define DFI_PARITY_EN BIT(1) 2890176399bSKever Yang 2900176399bSKever Yang /* PCT_DFILPCFG0 */ 2910176399bSKever Yang #define TLP_RESP_TIME_SHIFT 16 2920176399bSKever Yang #define LP_SR_EN BIT(8) 2930176399bSKever Yang #define LP_PD_EN BIT(0) 2940176399bSKever Yang 2950176399bSKever Yang /* PCT_DFITCTRLDELAY */ 2960176399bSKever Yang #define TCTRL_DELAY_TIME_SHIFT 0 2970176399bSKever Yang 2980176399bSKever Yang /* PCT_DFITPHYWRDATA */ 2990176399bSKever Yang #define TPHY_WRDATA_TIME_SHIFT 0 3000176399bSKever Yang 3010176399bSKever Yang /* PCT_DFITPHYRDLAT */ 3020176399bSKever Yang #define TPHY_RDLAT_TIME_SHIFT 0 3030176399bSKever Yang 3040176399bSKever Yang /* PCT_DFITDRAMCLKDIS */ 3050176399bSKever Yang #define TDRAM_CLK_DIS_TIME_SHIFT 0 3060176399bSKever Yang 3070176399bSKever Yang /* PCT_DFITDRAMCLKEN */ 3080176399bSKever Yang #define TDRAM_CLK_EN_TIME_SHIFT 0 3090176399bSKever Yang 3100176399bSKever Yang /* PCTL_DFIODTCFG */ 3110176399bSKever Yang #define RANK0_ODT_WRITE_SEL BIT(3) 3120176399bSKever Yang #define RANK1_ODT_WRITE_SEL BIT(11) 3130176399bSKever Yang 3140176399bSKever Yang /* PCTL_DFIODTCFG1 */ 3150176399bSKever Yang #define ODT_LEN_BL8_W_SHIFT 16 3160176399bSKever Yang 3170176399bSKever Yang /* PUBL_ACDLLCR */ 3180176399bSKever Yang #define ACDLLCR_DLLDIS BIT(31) 3190176399bSKever Yang #define ACDLLCR_DLLSRST BIT(30) 3200176399bSKever Yang 3210176399bSKever Yang /* PUBL_DXDLLCR */ 3220176399bSKever Yang #define DXDLLCR_DLLDIS BIT(31) 3230176399bSKever Yang #define DXDLLCR_DLLSRST BIT(30) 3240176399bSKever Yang 3250176399bSKever Yang /* PUBL_DLLGCR */ 3260176399bSKever Yang #define DLLGCR_SBIAS BIT(30) 3270176399bSKever Yang 3280176399bSKever Yang /* PUBL_DXGCR */ 3290176399bSKever Yang #define DQSRTT BIT(9) 3300176399bSKever Yang #define DQRTT BIT(10) 3310176399bSKever Yang 3320176399bSKever Yang /* PIR */ 3330176399bSKever Yang #define PIR_INIT BIT(0) 3340176399bSKever Yang #define PIR_DLLSRST BIT(1) 3350176399bSKever Yang #define PIR_DLLLOCK BIT(2) 3360176399bSKever Yang #define PIR_ZCAL BIT(3) 3370176399bSKever Yang #define PIR_ITMSRST BIT(4) 3380176399bSKever Yang #define PIR_DRAMRST BIT(5) 3390176399bSKever Yang #define PIR_DRAMINIT BIT(6) 3400176399bSKever Yang #define PIR_QSTRN BIT(7) 3410176399bSKever Yang #define PIR_RVTRN BIT(8) 3420176399bSKever Yang #define PIR_ICPC BIT(16) 3430176399bSKever Yang #define PIR_DLLBYP BIT(17) 3440176399bSKever Yang #define PIR_CTLDINIT BIT(18) 3450176399bSKever Yang #define PIR_CLRSR BIT(28) 3460176399bSKever Yang #define PIR_LOCKBYP BIT(29) 3470176399bSKever Yang #define PIR_ZCALBYP BIT(30) 3480176399bSKever Yang #define PIR_INITBYP BIT(31) 3490176399bSKever Yang 3500176399bSKever Yang /* PGCR */ 3510176399bSKever Yang #define PGCR_DFTLMT_SHIFT 3 3520176399bSKever Yang #define PGCR_DFTCMP_SHIFT 2 3530176399bSKever Yang #define PGCR_DQSCFG_SHIFT 1 3540176399bSKever Yang #define PGCR_ITMDMD_SHIFT 0 3550176399bSKever Yang 3560176399bSKever Yang /* PGSR */ 3570176399bSKever Yang #define PGSR_IDONE BIT(0) 3580176399bSKever Yang #define PGSR_DLDONE BIT(1) 3590176399bSKever Yang #define PGSR_ZCDONE BIT(2) 3600176399bSKever Yang #define PGSR_DIDONE BIT(3) 3610176399bSKever Yang #define PGSR_DTDONE BIT(4) 3620176399bSKever Yang #define PGSR_DTERR BIT(5) 3630176399bSKever Yang #define PGSR_DTIERR BIT(6) 3640176399bSKever Yang #define PGSR_DFTERR BIT(7) 3650176399bSKever Yang #define PGSR_RVERR BIT(8) 3660176399bSKever Yang #define PGSR_RVEIRR BIT(9) 3670176399bSKever Yang 3680176399bSKever Yang /* PTR0 */ 3690176399bSKever Yang #define PRT_ITMSRST_SHIFT 18 3700176399bSKever Yang #define PRT_DLLLOCK_SHIFT 6 3710176399bSKever Yang #define PRT_DLLSRST_SHIFT 0 3720176399bSKever Yang 3730176399bSKever Yang /* PTR1 */ 3740176399bSKever Yang #define PRT_DINIT0_SHIFT 0 3750176399bSKever Yang #define PRT_DINIT1_SHIFT 19 3760176399bSKever Yang 3770176399bSKever Yang /* PTR2 */ 3780176399bSKever Yang #define PRT_DINIT2_SHIFT 0 3790176399bSKever Yang #define PRT_DINIT3_SHIFT 17 3800176399bSKever Yang 3810176399bSKever Yang /* DCR */ 3820176399bSKever Yang #define DDRMD_LPDDR 0 3830176399bSKever Yang #define DDRMD_DDR 1 3840176399bSKever Yang #define DDRMD_DDR2 2 3850176399bSKever Yang #define DDRMD_DDR3 3 3860176399bSKever Yang #define DDRMD_LPDDR2_LPDDR3 4 3870176399bSKever Yang #define DDRMD_MASK 7 3880176399bSKever Yang #define DDRMD_SHIFT 0 3890176399bSKever Yang #define PDQ_MASK 7 3900176399bSKever Yang #define PDQ_SHIFT 4 3910176399bSKever Yang 3920176399bSKever Yang /* DXCCR */ 3930176399bSKever Yang #define DQSNRES_MASK 0xf 3940176399bSKever Yang #define DQSNRES_SHIFT 8 3950176399bSKever Yang #define DQSRES_MASK 0xf 3960176399bSKever Yang #define DQSRES_SHIFT 4 3970176399bSKever Yang 3980176399bSKever Yang /* DTPR */ 3990176399bSKever Yang #define TDQSCKMAX_SHIFT 27 4000176399bSKever Yang #define TDQSCKMAX_MASK 7 4010176399bSKever Yang #define TDQSCK_SHIFT 24 4020176399bSKever Yang #define TDQSCK_MASK 7 4030176399bSKever Yang 4040176399bSKever Yang /* DSGCR */ 4050176399bSKever Yang #define DQSGX_SHIFT 5 4060176399bSKever Yang #define DQSGX_MASK 7 4070176399bSKever Yang #define DQSGE_SHIFT 8 4080176399bSKever Yang #define DQSGE_MASK 7 4090176399bSKever Yang 4100176399bSKever Yang /* SCTL */ 4110176399bSKever Yang #define INIT_STATE 0 4120176399bSKever Yang #define CFG_STATE 1 4130176399bSKever Yang #define GO_STATE 2 4140176399bSKever Yang #define SLEEP_STATE 3 4150176399bSKever Yang #define WAKEUP_STATE 4 4160176399bSKever Yang 4170176399bSKever Yang /* STAT */ 4180176399bSKever Yang #define LP_TRIG_SHIFT 4 4190176399bSKever Yang #define LP_TRIG_MASK 7 4200176399bSKever Yang #define PCTL_STAT_MASK 7 4210176399bSKever Yang #define INIT_MEM 0 4220176399bSKever Yang #define CONFIG 1 4230176399bSKever Yang #define CONFIG_REQ 2 4240176399bSKever Yang #define ACCESS 3 4250176399bSKever Yang #define ACCESS_REQ 4 4260176399bSKever Yang #define LOW_POWER 5 4270176399bSKever Yang #define LOW_POWER_ENTRY_REQ 6 4280176399bSKever Yang #define LOW_POWER_EXIT_REQ 7 4290176399bSKever Yang 4300176399bSKever Yang /* ZQCR*/ 4310176399bSKever Yang #define PD_OUTPUT_SHIFT 0 4320176399bSKever Yang #define PU_OUTPUT_SHIFT 5 4330176399bSKever Yang #define PD_ONDIE_SHIFT 10 4340176399bSKever Yang #define PU_ONDIE_SHIFT 15 4350176399bSKever Yang #define ZDEN_SHIFT 28 4360176399bSKever Yang 4370176399bSKever Yang /* DDLGCR */ 4380176399bSKever Yang #define SBIAS_BYPASS BIT(23) 4390176399bSKever Yang 4400176399bSKever Yang /* MCFG */ 4410176399bSKever Yang #define MDDR_LPDDR2_CLK_STOP_IDLE_SHIFT 24 4420176399bSKever Yang #define PD_IDLE_SHIFT 8 4430176399bSKever Yang #define MDDR_EN (2 << 22) 4440176399bSKever Yang #define LPDDR2_EN (3 << 22) 4450176399bSKever Yang #define LPDDR3_EN (1 << 22) 4460176399bSKever Yang #define DDR2_EN (0 << 5) 4470176399bSKever Yang #define DDR3_EN (1 << 5) 4480176399bSKever Yang #define LPDDR2_S2 (0 << 6) 4490176399bSKever Yang #define LPDDR2_S4 (1 << 6) 4500176399bSKever Yang #define MDDR_LPDDR2_BL_2 (0 << 20) 4510176399bSKever Yang #define MDDR_LPDDR2_BL_4 (1 << 20) 4520176399bSKever Yang #define MDDR_LPDDR2_BL_8 (2 << 20) 4530176399bSKever Yang #define MDDR_LPDDR2_BL_16 (3 << 20) 4540176399bSKever Yang #define DDR2_DDR3_BL_4 0 4550176399bSKever Yang #define DDR2_DDR3_BL_8 1 4560176399bSKever Yang #define TFAW_SHIFT 18 4570176399bSKever Yang #define PD_EXIT_SLOW (0 << 17) 4580176399bSKever Yang #define PD_EXIT_FAST (1 << 17) 4590176399bSKever Yang #define PD_TYPE_SHIFT 16 4600176399bSKever Yang #define BURSTLENGTH_SHIFT 20 4610176399bSKever Yang 4620176399bSKever Yang /* POWCTL */ 4630176399bSKever Yang #define POWER_UP_START BIT(0) 4640176399bSKever Yang 4650176399bSKever Yang /* POWSTAT */ 4660176399bSKever Yang #define POWER_UP_DONE BIT(0) 4670176399bSKever Yang 4680176399bSKever Yang /* MCMD */ 4690176399bSKever Yang enum { 4700176399bSKever Yang DESELECT_CMD = 0, 4710176399bSKever Yang PREA_CMD, 4720176399bSKever Yang REF_CMD, 4730176399bSKever Yang MRS_CMD, 4740176399bSKever Yang ZQCS_CMD, 4750176399bSKever Yang ZQCL_CMD, 4760176399bSKever Yang RSTL_CMD, 4770176399bSKever Yang MRR_CMD = 8, 4780176399bSKever Yang DPDE_CMD, 4790176399bSKever Yang }; 4800176399bSKever Yang 4810176399bSKever Yang #define BANK_ADDR_MASK 7 4820176399bSKever Yang #define BANK_ADDR_SHIFT 17 4830176399bSKever Yang #define CMD_ADDR_MASK 0x1fff 4840176399bSKever Yang #define CMD_ADDR_SHIFT 4 4850176399bSKever Yang 4860176399bSKever Yang #define LPDDR23_MA_SHIFT 4 4870176399bSKever Yang #define LPDDR23_MA_MASK 0xff 4880176399bSKever Yang #define LPDDR23_OP_SHIFT 12 4890176399bSKever Yang #define LPDDR23_OP_MASK 0xff 4900176399bSKever Yang 4910176399bSKever Yang #define START_CMD (1u << 31) 4920176399bSKever Yang 4930176399bSKever Yang /* DDRPHY REG */ 4940176399bSKever Yang enum { 4950176399bSKever Yang /* DDRPHY_REG0 */ 4960176399bSKever Yang SOFT_RESET_MASK = 3, 4970176399bSKever Yang SOFT_DERESET_ANALOG = 1 << 2, 4980176399bSKever Yang SOFT_DERESET_DIGITAL = 1 << 3, 4990176399bSKever Yang SOFT_RESET_SHIFT = 2, 5000176399bSKever Yang 5010176399bSKever Yang /* DDRPHY REG1 */ 5020176399bSKever Yang PHY_DDR3 = 0, 5030176399bSKever Yang PHY_DDR2 = 1, 5040176399bSKever Yang PHY_LPDDR3 = 2, 5050176399bSKever Yang PHY_LPDDR2 = 3, 5060176399bSKever Yang 5070176399bSKever Yang PHT_BL_8 = 1 << 2, 5080176399bSKever Yang PHY_BL_4 = 0 << 2, 5090176399bSKever Yang 5100176399bSKever Yang /* DDRPHY_REG2 */ 5110176399bSKever Yang MEMORY_SELECT_DDR3 = 0 << 0, 5120176399bSKever Yang MEMORY_SELECT_LPDDR3 = 2 << 0, 5130176399bSKever Yang MEMORY_SELECT_LPDDR2 = 3 << 0, 5140176399bSKever Yang DQS_SQU_CAL_SEL_CS0_CS1 = 0 << 4, 5150176399bSKever Yang DQS_SQU_CAL_SEL_CS1 = 1 << 4, 5160176399bSKever Yang DQS_SQU_CAL_SEL_CS0 = 2 << 4, 5170176399bSKever Yang DQS_SQU_CAL_NORMAL_MODE = 0 << 1, 5180176399bSKever Yang DQS_SQU_CAL_BYPASS_MODE = 1 << 1, 5190176399bSKever Yang DQS_SQU_CAL_START = 1 << 0, 5200176399bSKever Yang DQS_SQU_NO_CAL = 0 << 0, 5210176399bSKever Yang }; 5220176399bSKever Yang 5230176399bSKever Yang /* CK pull up/down driver strength control */ 5240176399bSKever Yang enum { 5250176399bSKever Yang PHY_RON_RTT_DISABLE = 0, 5260176399bSKever Yang PHY_RON_RTT_451OHM = 1, 5270176399bSKever Yang PHY_RON_RTT_225OHM, 5280176399bSKever Yang PHY_RON_RTT_150OHM, 5290176399bSKever Yang PHY_RON_RTT_112OHM, 5300176399bSKever Yang PHY_RON_RTT_90OHM, 5310176399bSKever Yang PHY_RON_RTT_75OHM, 5320176399bSKever Yang PHY_RON_RTT_64OHM = 7, 5330176399bSKever Yang 5340176399bSKever Yang PHY_RON_RTT_56OHM = 16, 5350176399bSKever Yang PHY_RON_RTT_50OHM, 5360176399bSKever Yang PHY_RON_RTT_45OHM, 5370176399bSKever Yang PHY_RON_RTT_41OHM, 5380176399bSKever Yang PHY_RON_RTT_37OHM, 5390176399bSKever Yang PHY_RON_RTT_34OHM, 5400176399bSKever Yang PHY_RON_RTT_33OHM, 5410176399bSKever Yang PHY_RON_RTT_30OHM = 23, 5420176399bSKever Yang 5430176399bSKever Yang PHY_RON_RTT_28OHM = 24, 5440176399bSKever Yang PHY_RON_RTT_26OHM, 5450176399bSKever Yang PHY_RON_RTT_25OHM, 5460176399bSKever Yang PHY_RON_RTT_23OHM, 5470176399bSKever Yang PHY_RON_RTT_22OHM, 5480176399bSKever Yang PHY_RON_RTT_21OHM, 5490176399bSKever Yang PHY_RON_RTT_20OHM, 5500176399bSKever Yang PHY_RON_RTT_19OHM = 31, 5510176399bSKever Yang }; 5520176399bSKever Yang 5530176399bSKever Yang /* DQS squelch DLL delay */ 5540176399bSKever Yang enum { 5550176399bSKever Yang DQS_DLL_NO_DELAY = 0, 5560176399bSKever Yang DQS_DLL_22P5_DELAY, 5570176399bSKever Yang DQS_DLL_45_DELAY, 5580176399bSKever Yang DQS_DLL_67P5_DELAY, 5590176399bSKever Yang DQS_DLL_90_DELAY, 5600176399bSKever Yang DQS_DLL_112P5_DELAY, 5610176399bSKever Yang DQS_DLL_135_DELAY, 5620176399bSKever Yang DQS_DLL_157P5_DELAY, 5630176399bSKever Yang }; 5640176399bSKever Yang 5650176399bSKever Yang /* GRF_SOC_CON0 */ 5660176399bSKever Yang #define GRF_DDR_16BIT_EN (((0x1 << 0) << 16) | (0x1 << 0)) 5670176399bSKever Yang #define GRF_DDR_32BIT_EN (((0x1 << 0) << 16) | (0x0 << 0)) 5680176399bSKever Yang #define GRF_MSCH_NOC_16BIT_EN (((0x1 << 7) << 16) | (0x1 << 7)) 5690176399bSKever Yang #define GRF_MSCH_NOC_32BIT_EN (((0x1 << 7) << 16) | (0x0 << 7)) 5700176399bSKever Yang 5710176399bSKever Yang #define GRF_DDRPHY_BUFFEREN_CORE_EN (((0x1 << 8) << 16) | (0x0 << 8)) 5720176399bSKever Yang #define GRF_DDRPHY_BUFFEREN_CORE_DIS (((0x1 << 8) << 16) | (0x1 << 8)) 5730176399bSKever Yang 5740176399bSKever Yang #define GRF_DDR3_EN (((0x1 << 6) << 16) | (0x1 << 6)) 5750176399bSKever Yang #define GRF_LPDDR2_3_EN (((0x1 << 6) << 16) | (0x0 << 6)) 5760176399bSKever Yang 5770176399bSKever Yang #define PHY_DRV_ODT_SET(n) (((n) << 4) | (n)) 5780176399bSKever Yang #define DDR3_DLL_RESET (1 << 8) 5790176399bSKever Yang 5800176399bSKever Yang #endif /* _ASM_ARCH_SDRAM_RK322X_H */ 581