blob: dc65ae792431c3ca0409740e176a919c9420e18a [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Kever Yang50fb9982017-02-22 16:56:35 +08002/*
3 * Copyright (C) 2016-2017 Rockchip Electronics Co., Ltd
Kever Yang50fb9982017-02-22 16:56:35 +08004 */
5
6#ifndef _ASM_ARCH_SDRAM_RK3399_H
7#define _ASM_ARCH_SDRAM_RK3399_H
8
Kever Yang50fb9982017-02-22 16:56:35 +08009struct rk3399_ddr_pctl_regs {
10 u32 denali_ctl[332];
11};
12
13struct rk3399_ddr_publ_regs {
14 u32 denali_phy[959];
15};
16
17struct rk3399_ddr_pi_regs {
18 u32 denali_pi[200];
19};
20
Jagan Teki5465f9b2019-07-16 17:27:05 +053021union noc_ddrtimingc0 {
22 u32 d32;
23 struct {
24 unsigned burstpenalty : 4;
25 unsigned reserved0 : 4;
26 unsigned wrtomwr : 6;
27 unsigned reserved1 : 18;
28 } b;
29};
30
Jagan Teki264a09f2019-07-16 17:27:06 +053031union noc_ddrmode {
32 u32 d32;
33 struct {
34 unsigned autoprecharge : 1;
35 unsigned bypassfiltering : 1;
36 unsigned fawbank : 1;
37 unsigned burstsize : 2;
38 unsigned mwrsize : 2;
39 unsigned reserved2 : 1;
40 unsigned forceorder : 8;
41 unsigned forceorderstate : 8;
42 unsigned reserved3 : 8;
43 } b;
44};
45
Kever Yang50fb9982017-02-22 16:56:35 +080046struct rk3399_msch_regs {
47 u32 coreid;
48 u32 revisionid;
49 u32 ddrconf;
50 u32 ddrsize;
51 u32 ddrtiminga0;
52 u32 ddrtimingb0;
53 u32 ddrtimingc0;
54 u32 devtodev0;
55 u32 reserved0[(0x110 - 0x20) / 4];
56 u32 ddrmode;
57 u32 reserved1[(0x1000 - 0x114) / 4];
58 u32 agingx0;
59};
60
61struct rk3399_msch_timings {
62 u32 ddrtiminga0;
63 u32 ddrtimingb0;
Jagan Teki5465f9b2019-07-16 17:27:05 +053064 union noc_ddrtimingc0 ddrtimingc0;
Kever Yang50fb9982017-02-22 16:56:35 +080065 u32 devtodev0;
Jagan Teki264a09f2019-07-16 17:27:06 +053066 union noc_ddrmode ddrmode;
Kever Yang50fb9982017-02-22 16:56:35 +080067 u32 agingx0;
68};
69
70struct rk3399_ddr_cic_regs {
71 u32 cic_ctrl0;
72 u32 cic_ctrl1;
73 u32 cic_idle_th;
74 u32 cic_cg_wait_th;
75 u32 cic_status0;
76 u32 cic_status1;
77 u32 cic_ctrl2;
78 u32 cic_ctrl3;
79 u32 cic_ctrl4;
80};
81
82/* DENALI_CTL_00 */
83#define START 1
84
85/* DENALI_CTL_68 */
86#define PWRUP_SREFRESH_EXIT (1 << 16)
87
88/* DENALI_CTL_274 */
89#define MEM_RST_VALID 1
90
Jagan Teki97867c82019-07-15 23:51:05 +053091struct rk3399_sdram_channel {
92 struct sdram_cap_info cap_info;
Kever Yang50fb9982017-02-22 16:56:35 +080093 struct rk3399_msch_timings noc_timings;
94};
95
Kever Yang50fb9982017-02-22 16:56:35 +080096struct rk3399_sdram_params {
97 struct rk3399_sdram_channel ch[2];
Jagan Tekid2f92d02019-07-15 23:51:06 +053098 struct sdram_base_params base;
Kever Yang50fb9982017-02-22 16:56:35 +080099 struct rk3399_ddr_pctl_regs pctl_regs;
100 struct rk3399_ddr_pi_regs pi_regs;
101 struct rk3399_ddr_publ_regs phy_regs;
102};
103
104#define PI_CA_TRAINING (1 << 0)
105#define PI_WRITE_LEVELING (1 << 1)
106#define PI_READ_GATE_TRAINING (1 << 2)
107#define PI_READ_LEVELING (1 << 3)
108#define PI_WDQ_LEVELING (1 << 4)
109#define PI_FULL_TRAINING 0xff
110
111#endif