coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
sdram.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef __SOC_ROCKCHIP_RK3399_SDRAM_H__
4 #define __SOC_ROCKCHIP_RK3399_SDRAM_H__
5 
6 #include <types.h>
7 
8 enum {
9  DDR3 = 3,
10  LPDDR2 = 5,
11  LPDDR3 = 6,
12  LPDDR4 = 7,
13  UNUSED = 0xFF
14 };
15 
18 };
19 
22 };
23 
25  u32 denali_pi[200];
26 };
29  struct {
30  unsigned int acttoact : 6;
31  unsigned int reserved0 : 2;
32  unsigned int rdtomiss : 6;
33  unsigned int reserved1 : 2;
34  unsigned int wrtomiss : 6;
35  unsigned int reserved2 : 2;
36  unsigned int readlatency : 8;
37  } b;
38 };
39 
42  struct {
43  unsigned int rdtowr : 5;
44  unsigned int reserved0 : 3;
45  unsigned int wrtord : 5;
46  unsigned int reserved1 : 3;
47  unsigned int rrd : 4;
48  unsigned int reserved2 : 4;
49  unsigned int faw : 6;
50  unsigned int reserved3 : 2;
51  } b;
52 };
53 
56  struct {
57  unsigned int burstpenalty : 4;
58  unsigned int reserved0 : 4;
59  unsigned int wrtomwr : 6;
60  unsigned int reserved1 : 18;
61  } b;
62 };
63 
66  struct {
67  unsigned int busrdtord : 3;
68  unsigned int reserved0 : 1;
69  unsigned int busrdtowr : 3;
70  unsigned int reserved1 : 1;
71  unsigned int buswrtord : 3;
72  unsigned int reserved2 : 1;
73  unsigned int buswrtowr : 3;
74  unsigned int reserved3 : 17;
75  } b;
76 };
77 
78 union noc_ddrmode {
80  struct {
81  unsigned int autoprecharge : 1;
82  unsigned int bypassfiltering : 1;
83  unsigned int fawbank : 1;
84  unsigned int burstsize : 2;
85  unsigned int mwrsize : 2;
86  unsigned int reserved2 : 1;
87  unsigned int forceorder : 8;
88  unsigned int forceorderstate : 8;
89  unsigned int reserved3 : 8;
90  } b;
91 };
92 
101  union noc_devtodev0 devtodev0;
102  u32 reserved0[(0x110-0x20)/4];
103  union noc_ddrmode ddrmode;
104  u32 reserved1[(0x1000-0x114)/4];
106 };
107 
112  union noc_devtodev0 devtodev0;
113  union noc_ddrmode ddrmode;
115 };
116 
127 };
128 
129 /* DENALI_CTL_00 */
130 #define START (1)
131 
132 /* DENALI_CTL_68 */
133 #define PWRUP_SREFRESH_EXIT (1 << 16)
134 
135 /* DENALI_CTL_274 */
136 #define MEM_RST_VALID (1)
137 
139  unsigned char rank;
140  /* col = 0, means this channel is invalid */
141  unsigned char col;
142  /* 3:8bank, 2:4bank */
143  unsigned char bk;
144  /* channel buswidth, 2:32bit, 1:16bit, 0:8bit */
145  unsigned char bw;
146  /* die buswidth, 2:32bit, 1:16bit, 0:8bit */
147  unsigned char dbw;
148  /* row_3_4 = 1: 6Gb or 12Gb die
149  * row_3_4 = 0: normal die, power of 2
150  */
151  unsigned char row_3_4;
152  unsigned char cs0_row;
153  unsigned char cs1_row;
154  unsigned int ddrconfig;
156 };
157 
159  struct rk3399_sdram_channel ch[2];
160  unsigned int ddr_freq;
161  unsigned char dramtype;
162  unsigned char num_channels;
163  unsigned char stride;
164  unsigned char odt;
165  /* align 8 byte */
167  /* align 8 byte */
169  /* align 8 byte */
171  /* used for align 8byte for next struct */
172  unsigned int align_8;
173 };
174 
175 #define PI_CA_TRAINING (1 << 0)
176 #define PI_WRITE_LEVELING (1 << 1)
177 #define PI_READ_GATE_TRAINING (1 << 2)
178 #define PI_READ_LEVELING (1 << 3)
179 #define PI_WDQ_LEVELING (1 << 4)
180 #define PI_FULL_TRAINING (0xff)
181 
182 void sdram_init(const struct rk3399_sdram_params *sdram_params);
183 u32 sdram_get_ram_code(void);
184 const struct rk3399_sdram_params *get_sdram_config(void);
185 size_t sdram_size_mb(void);
186 
187 #endif
void sdram_init(void)
Definition: sdram.c:16
size_t sdram_size_mb(void)
Definition: sdram.c:24
uint32_t sdram_get_ram_code(void)
Definition: sdram.c:601
const struct rk3288_sdram_params * get_sdram_config(void)
Definition: sdram_configs.c:85
@ DDR3
Definition: sdram.h:9
@ UNUSED
Definition: sdram.h:11
@ LPDDR3
Definition: sdram.h:10
@ LPDDR4
Definition: sdram.h:12
@ LPDDR2
Definition: sdram.h:10
uint32_t u32
Definition: stdint.h:51
u32 denali_ctl[332]
Definition: sdram.h:17
u32 denali_pi[200]
Definition: sdram.h:25
u32 denali_phy[959]
Definition: sdram.h:21
union noc_ddrmode ddrmode
Definition: sdram.h:103
union noc_devtodev0 devtodev0
Definition: sdram.h:101
union noc_ddrtimingc0 ddrtimingc0
Definition: sdram.h:100
u32 revisionid
Definition: sdram.h:95
u32 reserved1[(0x1000-0x114)/4]
Definition: sdram.h:104
union noc_ddrtimingb0 ddrtimingb0
Definition: sdram.h:99
union noc_ddrtiminga0 ddrtiminga0
Definition: sdram.h:98
u32 reserved0[(0x110-0x20)/4]
Definition: sdram.h:102
union noc_ddrtimingc0 ddrtimingc0
Definition: sdram.h:111
union noc_ddrtiminga0 ddrtiminga0
Definition: sdram.h:109
union noc_ddrmode ddrmode
Definition: sdram.h:113
union noc_ddrtimingb0 ddrtimingb0
Definition: sdram.h:110
union noc_devtodev0 devtodev0
Definition: sdram.h:112
unsigned char bw
Definition: sdram.h:145
unsigned int ddrconfig
Definition: sdram.h:154
unsigned char cs0_row
Definition: sdram.h:152
unsigned char bk
Definition: sdram.h:143
unsigned char cs1_row
Definition: sdram.h:153
unsigned char rank
Definition: sdram.h:139
unsigned char col
Definition: sdram.h:141
struct rk3399_msch_timings noc_timings
Definition: sdram.h:155
unsigned char row_3_4
Definition: sdram.h:151
unsigned char dbw
Definition: sdram.h:147
struct rk3399_sdram_channel ch[2]
Definition: sdram.h:159
unsigned char odt
Definition: sdram.h:164
unsigned char dramtype
Definition: sdram.h:161
struct rk3399_ddr_publ_regs phy_regs
Definition: sdram.h:170
unsigned char num_channels
Definition: sdram.h:162
struct rk3399_ddr_pctl_regs pctl_regs
Definition: sdram.h:166
unsigned int align_8
Definition: sdram.h:172
struct rk3399_ddr_pi_regs pi_regs
Definition: sdram.h:168
unsigned char stride
Definition: sdram.h:163
unsigned int ddr_freq
Definition: sdram.h:160
Defines the SDRAM parameter structure.
Definition: emi.h:15
unsigned int autoprecharge
Definition: sdram.h:81
struct noc_ddrmode::@1522 b
unsigned int reserved3
Definition: sdram.h:89
unsigned int forceorder
Definition: sdram.h:87
unsigned int reserved2
Definition: sdram.h:86
unsigned int bypassfiltering
Definition: sdram.h:82
unsigned int forceorderstate
Definition: sdram.h:88
unsigned int burstsize
Definition: sdram.h:84
u32 d32
Definition: sdram.h:79
unsigned int mwrsize
Definition: sdram.h:85
unsigned int fawbank
Definition: sdram.h:83
unsigned int rdtomiss
Definition: sdram.h:32
unsigned int reserved2
Definition: sdram.h:35
unsigned int wrtomiss
Definition: sdram.h:34
unsigned int reserved1
Definition: sdram.h:33
unsigned int acttoact
Definition: sdram.h:30
struct noc_ddrtiminga0::@1518 b
unsigned int reserved0
Definition: sdram.h:31
unsigned int readlatency
Definition: sdram.h:36
unsigned int reserved3
Definition: sdram.h:50
unsigned int reserved2
Definition: sdram.h:48
unsigned int reserved0
Definition: sdram.h:44
unsigned int wrtord
Definition: sdram.h:45
unsigned int faw
Definition: sdram.h:49
unsigned int rdtowr
Definition: sdram.h:43
unsigned int rrd
Definition: sdram.h:47
struct noc_ddrtimingb0::@1519 b
unsigned int reserved1
Definition: sdram.h:46
struct noc_ddrtimingc0::@1520 b
unsigned int reserved1
Definition: sdram.h:60
unsigned int reserved0
Definition: sdram.h:58
unsigned int burstpenalty
Definition: sdram.h:57
unsigned int wrtomwr
Definition: sdram.h:59
unsigned int buswrtord
Definition: sdram.h:71
unsigned int reserved2
Definition: sdram.h:72
unsigned int reserved1
Definition: sdram.h:70
unsigned int reserved0
Definition: sdram.h:68
struct noc_devtodev0::@1521 b
unsigned int busrdtowr
Definition: sdram.h:69
unsigned int reserved3
Definition: sdram.h:74
u32 d32
Definition: sdram.h:65
unsigned int busrdtord
Definition: sdram.h:67
unsigned int buswrtowr
Definition: sdram.h:73