blob: c9b4ee4bf9ade34bd5c3ae9f36a4502de67994e4 [file] [log] [blame]
Googler695f9d92023-09-11 15:38:29 +08001/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
2/*
3 * arch/arm/include/asm/arch-txlx/ddr_define.h
4 *
5 * Copyright (C) 2020 Amlogic, Inc. All rights reserved.
6 *
7 */
8
9#define CONFIG_DDR_TYPE_DDR3 0
10#define CONFIG_DDR_TYPE_DDR4 1
11#define CONFIG_DDR_TYPE_LPDDR3 2
12#define CONFIG_DDR_TYPE_LPDDR2 3
13#define CONFIG_DDR_TYPE_AUTO 0xf /* support ddr3/ddr4 */
14
15/* ddr channel defines */
16#define CONFIG_DDR0_16BIT 1
17#define CONFIG_DDR0_RANK0 2
18#define CONFIG_DDR0_RANK01 3
19#define CONFIG_DDR0_16BIT_2 4
20/* CONFIG_DDR_CHL_AUTO mode support RANK0 and RANK0+1 mode auto detect */
21#define CONFIG_DDR_CHL_AUTO 0xF
22
23#define CFG_DDR_BASE_ADDR 0X0
24#define CFG_DDR_START_OFFSET 0X00000000 //TXLX SKIP 0MB
25
26/* ddr type identifier */
27#define CONFIG_DDR_TIMMING_LPDDR2 0x02
28#define CONFIG_DDR_TIMMING_LPDDR3 0x03
29#define CONFIG_DDR_TIMMING_DDR3_7 0x07
30#define CONFIG_DDR_TIMMING_DDR3_9 0x09
31#define CONFIG_DDR_TIMMING_DDR3_11 0x0B
32#define CONFIG_DDR_TIMMING_DDR3_12 0x0C
33#define CONFIG_DDR_TIMMING_DDR3_13 0x0D
34#define CONFIG_DDR_TIMMING_DDR3_14 0x0E
35
36#define CONFIG_DDR_TIMMING_DDR4_1600 0x0F
37#define CONFIG_DDR_TIMMING_DDR4_1866 0x10
38#define CONFIG_DDR_TIMMING_DDR4_2133 0x11
39#define CONFIG_DDR_TIMMING_DDR4_2400 0x12
40#define CONFIG_DDR_TIMMING_DDR4_2666 0x13
41#define CONFIG_DDR_TIMMING_DDR4_3200 0x14
42
43#define LPDDR_DIE_ROW_COL_R13_C9 0
44#define LPDDR_DIE_ROW_COL_R14_C9 1
45#define LPDDR_DIE_ROW_COL_R14_C10 2
46#define LPDDR_DIE_ROW_COL_R13_C10 3
47#define LPDDR_DIE_ROW_COL_R14_C11 4
48
49#define CONFIG_LPDDR3_CA_TRAINING_USE_LANE0 0
50#define CONFIG_LPDDR3_CA_TRAINING_USE_LANE1 1
51#define CONFIG_LPDDR3_CA_TRAINING_USE_LANE2 2
52#define CONFIG_LPDDR3_CA_TRAINING_USE_LANE3 3
53
54#define CONFIG_DDR_FUNC_TEST (1<<0)
55
56#define CONFIG_DDR_INIT_RETRY_TOTAL (10)
57#define CONFIG_DDR_PCTL_RETRY_TOTAL (100)
58
59#define DDR_USE_1_RANK(chl_set) ((chl_set == CONFIG_DDR0_RANK0) || \
60 (chl_set == CONFIG_DDR0_16BIT))
61#define DDR_USE_2_RANK(chl_set) ((chl_set == CONFIG_DDR0_RANK01))
62
63/* DMC_DDR_CTRL defines */
64#define DDR_DDR4_ENABLE (1<<22)
65#define DDR_RANK1_ENABLE (1<<21)
66#define DDR_DDR4_BG_ENABLE (1<<20)
67#define DDR_16BIT_ENABLE (1<<16)
68
69#define DDR_RANK1_SIZE_CTRL (3)
70#define DDR_RANK0_SIZE_CTRL (0)
71
72/* lpddr3 defines */
73#ifndef CONFIG_LPDDR_REMAP_SET
74#define CONFIG_LPDDR_REMAP_SET LPDDR_DIE_ROW_COL_R14_C9
75#endif
76
77/* how to add a new ddr function?
78 1. add CONFIG_DDR_FUNC_XXX in (config).h file
79 2. add define in this file.
80 2.1 add
81 #ifndef CONFIG_DDR_FUNC_XXX
82 #define CONFIG_DDR_FUNC_XXX 0
83 #endif
84 2.2 add
85 #define DDR_FUNC_XXX (CONFIG_FUNC_XXX<<X)
86 2.3 add DDR_FUNC_XXX |\ in DDR_FUNC
87 3. add same define and parser in bl2 code
88 */
89/* 2.1, 2,2, 2,3 example */
90/*
91#ifndef CONFIG_CMD_DDR_D2PLL
92#define CONFIG_CMD_DDR_D2PLL 0
93#endif
94#define DDR_FUNC_D2PLL (CONFIG_CMD_DDR_D2PLL<<0)
95#define DDR_FUNC (EXISTING_FUNCTIONS) |\
96 (DDR_FUNC_D2PLL)
97*/
98
99/* d2pll support */
100#ifndef CONFIG_CMD_DDR_D2PLL
101#define CONFIG_CMD_DDR_D2PLL 0
102#endif
103#define DDR_FUNC_D2PLL (CONFIG_CMD_DDR_D2PLL<<0)
104
105/* ddr low power function support */
106#ifndef CONFIG_DDR_LOW_POWER
107#define CONFIG_DDR_LOW_POWER 0
108#endif
109#define DDR_FUNC_LP (CONFIG_DDR_LOW_POWER<<1)
110
111/* ddr zq power down support */
112#ifndef CONFIG_DDR_ZQ_PD
113#define CONFIG_DDR_ZQ_PD 0
114#endif
115#define DDR_FUNC_ZQ_PD (CONFIG_DDR_ZQ_PD<<2)
116
117/* ddr vref function */
118#ifndef CONFIG_DDR_USE_EXT_VREF
119#define CONFIG_DDR_USE_EXT_VREF 0
120#endif
121#define DDR_FUNC_EXT_VREF (CONFIG_DDR_USE_EXT_VREF<<3)
122
123/* ddr4 timing test function */
124#ifndef CONFIG_DDR4_TIMING_TEST
125#define CONFIG_DDR4_TIMING_TEST 0
126#endif
127#define DDR_FUNC_DDR4_TIMING_TEST (CONFIG_DDR4_TIMING_TEST<<4)
128
129/* ddr pll bypass */
130#ifndef CONFIG_DDR_PLL_BYPASS
131#define CONFIG_DDR_PLL_BYPASS 0
132#endif
133#define DDR_FUNC_DDR_PLL_BYPASS (CONFIG_DDR_PLL_BYPASS<<5)
134
135/* ddr rdbi function */
136#ifndef CONFIG_DDR_FUNC_RDBI
137#define CONFIG_DDR_FUNC_RDBI 0
138#endif
139#define DDR_FUNC_RDBI (CONFIG_DDR_FUNC_RDBI<<6)
140
141/* lpddr3 ca trainingi function */
142#ifndef CONFIG_DDR_FUNC_LPDDR3_CA
143#define CONFIG_DDR_FUNC_LPDDR3_CA 0
144#endif
145#define DDR_FUNC_LPDDR3_CA (CONFIG_DDR_FUNC_LPDDR3_CA<<7)
146
147/* print ddr training window */
148#ifndef CONFIG_DDR_FUNC_PRINT_WINDOW
149#define CONFIG_DDR_FUNC_PRINT_WINDOW 0
150#endif
151#define DDR_FUNC_PRINT_WINDOW (CONFIG_DDR_FUNC_PRINT_WINDOW<<8)
152
153#if(CONFIG_DDR_FUNC_LPDDR3_CA==1)
154#if (CONFIG_LPDDR3_CA_TRAINING_CA0==CONFIG_LPDDR3_CA_TRAINING_USE_LANE0)
155#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT0 (0<<20)
156#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT1 (0<<21)
157#elif (CONFIG_LPDDR3_CA_TRAINING_CA0==CONFIG_LPDDR3_CA_TRAINING_USE_LANE1)
158#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT0 (1<<20)
159#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT1 (0<<21)
160#elif (CONFIG_LPDDR3_CA_TRAINING_CA0==CONFIG_LPDDR3_CA_TRAINING_USE_LANE2)
161#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT0 (0<<20)
162#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT1 (1<<21)
163#elif (CONFIG_LPDDR3_CA_TRAINING_CA0==CONFIG_LPDDR3_CA_TRAINING_USE_LANE3)
164#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT0 (1<<20)
165#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT1 (1<<21)
166#endif
167#if (CONFIG_LPDDR3_CA_TRAINING_CA1==CONFIG_LPDDR3_CA_TRAINING_USE_LANE0)
168#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT0 (0<<22)
169#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT1 (0<<23)
170#elif (CONFIG_LPDDR3_CA_TRAINING_CA1==CONFIG_LPDDR3_CA_TRAINING_USE_LANE1)
171#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT0 (1<<22)
172#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT1 (0<<23)
173#elif (CONFIG_LPDDR3_CA_TRAINING_CA1==CONFIG_LPDDR3_CA_TRAINING_USE_LANE2)
174#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT0 (0<<22)
175#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT1 (1<<23)
176#elif (CONFIG_LPDDR3_CA_TRAINING_CA1==CONFIG_LPDDR3_CA_TRAINING_USE_LANE3)
177#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT0 (1<<22)
178#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT1 (1<<23)
179#endif
180#else /* CONFIG_DDR_FUNC_LPDDR3_CA != 1 */
181#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT0 (0<<20)
182#define DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT1 (0<<21)
183#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT0 (0<<22)
184#define DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT1 (0<<23)
185#endif /* CONFIG_DDR_FUNC_LPDDR3_CA */
186
187#if(CONFIG_DDR_FUNC_LPDDR3_SOC_ODT_ONLY_UP==1)
188#define DDR_FUNC_LPDDR3_SOC_ODT_ONLY_UP (1<<25)
189#else
190#define DDR_FUNC_LPDDR3_SOC_ODT_ONLY_UP (0<<25)
191#endif
192
193#define DDR_FUNC (DDR_FUNC_D2PLL | \
194 DDR_FUNC_LP | \
195 DDR_FUNC_ZQ_PD | \
196 DDR_FUNC_EXT_VREF | \
197 DDR_FUNC_DDR4_TIMING_TEST | \
198 DDR_FUNC_DDR_PLL_BYPASS | \
199 DDR_FUNC_RDBI | \
200 DDR_FUNC_LPDDR3_CA | \
201 DDR_FUNC_PRINT_WINDOW | \
202 DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT0| \
203 DDR_FUNC_LPDDR3_CA_TRAINING_CA0_BIT1| \
204 DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT0| \
205 DDR_FUNC_LPDDR3_CA_TRAINING_CA1_BIT1| \
206 DDR_FUNC_LPDDR3_SOC_ODT_ONLY_UP | \
207 (1 << 31) \
208 )