1fa437430SKever Yang /* 2fa437430SKever Yang * Copyright (C) 2016-2017 Rockchip Electronics Co., Ltd 3fa437430SKever Yang * 4fa437430SKever Yang * SPDX-License-Identifier: GPL-2.0+ 5fa437430SKever Yang */ 6fa437430SKever Yang 7fa437430SKever Yang #ifndef _ASM_ARCH_SDRAM_RK3399_H 8fa437430SKever Yang #define _ASM_ARCH_SDRAM_RK3399_H 95685f66aSYouMin Chen #include <asm/arch/sdram_common.h> 10*5e6e8f2dSYouMin Chen #include <asm/arch/sdram_msch.h> 11fa437430SKever Yang 12fa437430SKever Yang struct rk3399_ddr_pctl_regs { 13fa437430SKever Yang u32 denali_ctl[332]; 14fa437430SKever Yang }; 15fa437430SKever Yang 16fa437430SKever Yang struct rk3399_ddr_publ_regs { 17fa437430SKever Yang u32 denali_phy[959]; 18fa437430SKever Yang }; 19fa437430SKever Yang 20fa437430SKever Yang struct rk3399_ddr_pi_regs { 21fa437430SKever Yang u32 denali_pi[200]; 22fa437430SKever Yang }; 23fa437430SKever Yang 24fa437430SKever Yang struct rk3399_ddr_cic_regs { 25fa437430SKever Yang u32 cic_ctrl0; 26fa437430SKever Yang u32 cic_ctrl1; 27fa437430SKever Yang u32 cic_idle_th; 28fa437430SKever Yang u32 cic_cg_wait_th; 29fa437430SKever Yang u32 cic_status0; 30fa437430SKever Yang u32 cic_status1; 31fa437430SKever Yang u32 cic_ctrl2; 32fa437430SKever Yang u32 cic_ctrl3; 33fa437430SKever Yang u32 cic_ctrl4; 34fa437430SKever Yang }; 35fa437430SKever Yang 36fa437430SKever Yang /* DENALI_CTL_00 */ 37fa437430SKever Yang #define START 1 38fa437430SKever Yang 39fa437430SKever Yang /* DENALI_CTL_68 */ 40fa437430SKever Yang #define PWRUP_SREFRESH_EXIT (1 << 16) 41fa437430SKever Yang 42fa437430SKever Yang /* DENALI_CTL_274 */ 43fa437430SKever Yang #define MEM_RST_VALID 1 44fa437430SKever Yang 45*5e6e8f2dSYouMin Chen struct msch_regs { 46*5e6e8f2dSYouMin Chen u32 coreid; 47*5e6e8f2dSYouMin Chen u32 revisionid; 48*5e6e8f2dSYouMin Chen u32 ddrconf; 49*5e6e8f2dSYouMin Chen u32 ddrsize; 50*5e6e8f2dSYouMin Chen union noc_ddrtiminga0 ddrtiminga0; 51*5e6e8f2dSYouMin Chen union noc_ddrtimingb0 ddrtimingb0; 52*5e6e8f2dSYouMin Chen union noc_ddrtimingc0 ddrtimingc0; 53*5e6e8f2dSYouMin Chen union noc_devtodev0 devtodev0; 54*5e6e8f2dSYouMin Chen u32 reserved0[(0x110 - 0x20) / 4]; 55*5e6e8f2dSYouMin Chen union noc_ddrmode ddrmode; 56*5e6e8f2dSYouMin Chen u32 reserved1[(0x1000 - 0x114) / 4]; 57*5e6e8f2dSYouMin Chen u32 agingx0; 58*5e6e8f2dSYouMin Chen }; 59*5e6e8f2dSYouMin Chen 60*5e6e8f2dSYouMin Chen struct sdram_msch_timings { 61*5e6e8f2dSYouMin Chen union noc_ddrtiminga0 ddrtiminga0; 62*5e6e8f2dSYouMin Chen union noc_ddrtimingb0 ddrtimingb0; 63*5e6e8f2dSYouMin Chen union noc_ddrtimingc0 ddrtimingc0; 64*5e6e8f2dSYouMin Chen union noc_devtodev0 devtodev0; 65*5e6e8f2dSYouMin Chen union noc_ddrmode ddrmode; 66*5e6e8f2dSYouMin Chen u32 agingx0; 67*5e6e8f2dSYouMin Chen }; 68*5e6e8f2dSYouMin Chen 69fa437430SKever Yang struct rk3399_sdram_channel { 7031d8c61dSYouMin Chen struct sdram_cap_info cap_info; 7131d8c61dSYouMin Chen struct sdram_msch_timings noc_timings; 72fa437430SKever Yang }; 73fa437430SKever Yang 74fa437430SKever Yang struct rk3399_sdram_params { 75fa437430SKever Yang struct rk3399_sdram_channel ch[2]; 7631d8c61dSYouMin Chen struct sdram_base_params base; 77fa437430SKever Yang struct rk3399_ddr_pctl_regs pctl_regs; 78fa437430SKever Yang struct rk3399_ddr_pi_regs pi_regs; 79fa437430SKever Yang struct rk3399_ddr_publ_regs phy_regs; 80fa437430SKever Yang }; 81fa437430SKever Yang 82fa437430SKever Yang #define PI_CA_TRAINING (1 << 0) 83fa437430SKever Yang #define PI_WRITE_LEVELING (1 << 1) 84fa437430SKever Yang #define PI_READ_GATE_TRAINING (1 << 2) 85fa437430SKever Yang #define PI_READ_LEVELING (1 << 3) 86fa437430SKever Yang #define PI_WDQ_LEVELING (1 << 4) 87fa437430SKever Yang #define PI_FULL_TRAINING 0xff 88fa437430SKever Yang 8931d8c61dSYouMin Chen enum { 9031d8c61dSYouMin Chen STRIDE_128B = 0, 9131d8c61dSYouMin Chen STRIDE_256B = 1, 9231d8c61dSYouMin Chen STRIDE_512B = 2, 9331d8c61dSYouMin Chen STRIDE_4KB = 3, 9431d8c61dSYouMin Chen UN_STRIDE = 4, 9531d8c61dSYouMin Chen PART_STRIDE = 5 9631d8c61dSYouMin Chen }; 9731d8c61dSYouMin Chen 98fa437430SKever Yang #endif 99