xref: /rk3399_rockchip-uboot/drivers/ddr/marvell/a38x/ddr3_training_ip_def.h (revision 3c9cc70d7153da442575112d9a2643eecd17d534)
1*f1df9364SStefan Roese /*
2*f1df9364SStefan Roese  * Copyright (C) Marvell International Ltd. and its affiliates
3*f1df9364SStefan Roese  *
4*f1df9364SStefan Roese  * SPDX-License-Identifier:	GPL-2.0
5*f1df9364SStefan Roese  */
6*f1df9364SStefan Roese 
7*f1df9364SStefan Roese #ifndef _DDR3_TRAINING_IP_DEF_H
8*f1df9364SStefan Roese #define _DDR3_TRAINING_IP_DEF_H
9*f1df9364SStefan Roese 
10*f1df9364SStefan Roese #include "silicon_if.h"
11*f1df9364SStefan Roese 
12*f1df9364SStefan Roese #define PATTERN_55			0x55555555
13*f1df9364SStefan Roese #define PATTERN_AA			0xaaaaaaaa
14*f1df9364SStefan Roese #define PATTERN_80			0x80808080
15*f1df9364SStefan Roese #define PATTERN_20			0x20202020
16*f1df9364SStefan Roese #define PATTERN_01			0x01010101
17*f1df9364SStefan Roese #define PATTERN_FF			0xffffffff
18*f1df9364SStefan Roese #define PATTERN_00			0x00000000
19*f1df9364SStefan Roese 
20*f1df9364SStefan Roese /* 16bit bus width patterns */
21*f1df9364SStefan Roese #define PATTERN_55AA			0x5555aaaa
22*f1df9364SStefan Roese #define PATTERN_00FF			0x0000ffff
23*f1df9364SStefan Roese #define PATTERN_0080			0x00008080
24*f1df9364SStefan Roese 
25*f1df9364SStefan Roese #define INVALID_VALUE			0xffffffff
26*f1df9364SStefan Roese #define MAX_NUM_OF_DUNITS		32
27*f1df9364SStefan Roese /*
28*f1df9364SStefan Roese  * length *2 = length in words of pattern, first low address,
29*f1df9364SStefan Roese  * second high address
30*f1df9364SStefan Roese  */
31*f1df9364SStefan Roese #define TEST_PATTERN_LENGTH		4
32*f1df9364SStefan Roese #define KILLER_PATTERN_DQ_NUMBER	8
33*f1df9364SStefan Roese #define SSO_DQ_NUMBER			4
34*f1df9364SStefan Roese #define PATTERN_MAXIMUM_LENGTH		64
35*f1df9364SStefan Roese #define ADLL_TX_LENGTH			64
36*f1df9364SStefan Roese #define ADLL_RX_LENGTH			32
37*f1df9364SStefan Roese 
38*f1df9364SStefan Roese #define PARAM_NOT_CARE			0
39*f1df9364SStefan Roese 
40*f1df9364SStefan Roese #define READ_LEVELING_PHY_OFFSET	2
41*f1df9364SStefan Roese #define WRITE_LEVELING_PHY_OFFSET	0
42*f1df9364SStefan Roese 
43*f1df9364SStefan Roese #define MASK_ALL_BITS			0xffffffff
44*f1df9364SStefan Roese 
45*f1df9364SStefan Roese #define CS_BIT_MASK			0xf
46*f1df9364SStefan Roese 
47*f1df9364SStefan Roese /* DFX access */
48*f1df9364SStefan Roese #define BROADCAST_ID			28
49*f1df9364SStefan Roese #define MULTICAST_ID			29
50*f1df9364SStefan Roese 
51*f1df9364SStefan Roese #define XSB_BASE_ADDR			0x00004000
52*f1df9364SStefan Roese #define XSB_CTRL_0_REG			0x00000000
53*f1df9364SStefan Roese #define XSB_CTRL_1_REG			0x00000004
54*f1df9364SStefan Roese #define XSB_CMD_REG			0x00000008
55*f1df9364SStefan Roese #define XSB_ADDRESS_REG			0x0000000c
56*f1df9364SStefan Roese #define XSB_DATA_REG			0x00000010
57*f1df9364SStefan Roese #define PIPE_ENABLE_ADDR		0x000f8000
58*f1df9364SStefan Roese #define ENABLE_DDR_TUNING_ADDR		0x000f829c
59*f1df9364SStefan Roese 
60*f1df9364SStefan Roese #define CLIENT_BASE_ADDR		0x00002000
61*f1df9364SStefan Roese #define CLIENT_CTRL_REG			0x00000000
62*f1df9364SStefan Roese 
63*f1df9364SStefan Roese #define TARGET_INT			0x1801
64*f1df9364SStefan Roese #define TARGET_EXT			0x180e
65*f1df9364SStefan Roese #define BYTE_EN				0
66*f1df9364SStefan Roese #define CMD_READ			0
67*f1df9364SStefan Roese #define CMD_WRITE			1
68*f1df9364SStefan Roese 
69*f1df9364SStefan Roese #define INTERNAL_ACCESS_PORT		1
70*f1df9364SStefan Roese #define EXECUTING			1
71*f1df9364SStefan Roese #define ACCESS_EXT			1
72*f1df9364SStefan Roese #define CS2_EXIST_BIT			2
73*f1df9364SStefan Roese #define TRAINING_ID			0xf
74*f1df9364SStefan Roese #define EXT_TRAINING_ID			1
75*f1df9364SStefan Roese #define EXT_MODE			0x4
76*f1df9364SStefan Roese 
77*f1df9364SStefan Roese #define GET_RESULT_STATE(res)		(res)
78*f1df9364SStefan Roese #define SET_RESULT_STATE(res, state)	(res = state)
79*f1df9364SStefan Roese 
80*f1df9364SStefan Roese #define _1K				0x00000400
81*f1df9364SStefan Roese #define _4K				0x00001000
82*f1df9364SStefan Roese #define _8K				0x00002000
83*f1df9364SStefan Roese #define _16K				0x00004000
84*f1df9364SStefan Roese #define _32K				0x00008000
85*f1df9364SStefan Roese #define _64K				0x00010000
86*f1df9364SStefan Roese #define _128K				0x00020000
87*f1df9364SStefan Roese #define _256K				0x00040000
88*f1df9364SStefan Roese #define _512K				0x00080000
89*f1df9364SStefan Roese 
90*f1df9364SStefan Roese #define _1M				0x00100000
91*f1df9364SStefan Roese #define _2M				0x00200000
92*f1df9364SStefan Roese #define _4M				0x00400000
93*f1df9364SStefan Roese #define _8M				0x00800000
94*f1df9364SStefan Roese #define _16M				0x01000000
95*f1df9364SStefan Roese #define _32M				0x02000000
96*f1df9364SStefan Roese #define _64M				0x04000000
97*f1df9364SStefan Roese #define _128M				0x08000000
98*f1df9364SStefan Roese #define _256M				0x10000000
99*f1df9364SStefan Roese #define _512M				0x20000000
100*f1df9364SStefan Roese 
101*f1df9364SStefan Roese #define _1G				0x40000000
102*f1df9364SStefan Roese #define _2G				0x80000000
103*f1df9364SStefan Roese 
104*f1df9364SStefan Roese #define ADDR_SIZE_512MB			0x04000000
105*f1df9364SStefan Roese #define ADDR_SIZE_1GB			0x08000000
106*f1df9364SStefan Roese #define ADDR_SIZE_2GB			0x10000000
107*f1df9364SStefan Roese #define ADDR_SIZE_4GB			0x20000000
108*f1df9364SStefan Roese #define ADDR_SIZE_8GB			0x40000000
109*f1df9364SStefan Roese 
110*f1df9364SStefan Roese enum hws_edge_compare {
111*f1df9364SStefan Roese 	EDGE_PF,
112*f1df9364SStefan Roese 	EDGE_FP,
113*f1df9364SStefan Roese 	EDGE_FPF,
114*f1df9364SStefan Roese 	EDGE_PFP
115*f1df9364SStefan Roese };
116*f1df9364SStefan Roese 
117*f1df9364SStefan Roese enum hws_control_element {
118*f1df9364SStefan Roese 	HWS_CONTROL_ELEMENT_ADLL,		/* per bit 1 edge */
119*f1df9364SStefan Roese 	HWS_CONTROL_ELEMENT_DQ_SKEW,
120*f1df9364SStefan Roese 	HWS_CONTROL_ELEMENT_DQS_SKEW
121*f1df9364SStefan Roese };
122*f1df9364SStefan Roese 
123*f1df9364SStefan Roese enum hws_search_dir {
124*f1df9364SStefan Roese 	HWS_LOW2HIGH,
125*f1df9364SStefan Roese 	HWS_HIGH2LOW,
126*f1df9364SStefan Roese 	HWS_SEARCH_DIR_LIMIT
127*f1df9364SStefan Roese };
128*f1df9364SStefan Roese 
129*f1df9364SStefan Roese enum hws_page_size {
130*f1df9364SStefan Roese 	PAGE_SIZE_1K,
131*f1df9364SStefan Roese 	PAGE_SIZE_2K
132*f1df9364SStefan Roese };
133*f1df9364SStefan Roese 
134*f1df9364SStefan Roese enum hws_operation {
135*f1df9364SStefan Roese 	OPERATION_READ = 0,
136*f1df9364SStefan Roese 	OPERATION_WRITE = 1
137*f1df9364SStefan Roese };
138*f1df9364SStefan Roese 
139*f1df9364SStefan Roese enum hws_training_ip_stat {
140*f1df9364SStefan Roese 	HWS_TRAINING_IP_STATUS_FAIL,
141*f1df9364SStefan Roese 	HWS_TRAINING_IP_STATUS_SUCCESS,
142*f1df9364SStefan Roese 	HWS_TRAINING_IP_STATUS_TIMEOUT
143*f1df9364SStefan Roese };
144*f1df9364SStefan Roese 
145*f1df9364SStefan Roese enum hws_ddr_cs {
146*f1df9364SStefan Roese 	CS_SINGLE,
147*f1df9364SStefan Roese 	CS_NON_SINGLE
148*f1df9364SStefan Roese };
149*f1df9364SStefan Roese 
150*f1df9364SStefan Roese enum hws_ddr_phy {
151*f1df9364SStefan Roese 	DDR_PHY_DATA = 0,
152*f1df9364SStefan Roese 	DDR_PHY_CONTROL = 1
153*f1df9364SStefan Roese };
154*f1df9364SStefan Roese 
155*f1df9364SStefan Roese enum hws_dir {
156*f1df9364SStefan Roese 	OPER_WRITE,
157*f1df9364SStefan Roese 	OPER_READ,
158*f1df9364SStefan Roese 	OPER_WRITE_AND_READ
159*f1df9364SStefan Roese };
160*f1df9364SStefan Roese 
161*f1df9364SStefan Roese enum hws_wl_supp {
162*f1df9364SStefan Roese 	PHASE_SHIFT,
163*f1df9364SStefan Roese 	CLOCK_SHIFT,
164*f1df9364SStefan Roese 	ALIGN_SHIFT
165*f1df9364SStefan Roese };
166*f1df9364SStefan Roese 
167*f1df9364SStefan Roese struct reg_data {
168*f1df9364SStefan Roese 	u32 reg_addr;
169*f1df9364SStefan Roese 	u32 reg_data;
170*f1df9364SStefan Roese 	u32 reg_mask;
171*f1df9364SStefan Roese };
172*f1df9364SStefan Roese 
173*f1df9364SStefan Roese #endif /* _DDR3_TRAINING_IP_DEF_H */
174