xref: /OK3568_Linux_fs/u-boot/include/gdsys_fpga.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * (C) Copyright 2010
3*4882a593Smuzhiyun  * Dirk Eibach,  Guntermann & Drunck GmbH, eibach@gdsys.de
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef __GDSYS_FPGA_H
9*4882a593Smuzhiyun #define __GDSYS_FPGA_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun int init_func_fpga(void);
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun enum {
14*4882a593Smuzhiyun 	FPGA_STATE_DONE_FAILED = 1 << 0,
15*4882a593Smuzhiyun 	FPGA_STATE_REFLECTION_FAILED = 1 << 1,
16*4882a593Smuzhiyun 	FPGA_STATE_PLATFORM = 1 << 2,
17*4882a593Smuzhiyun };
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun int get_fpga_state(unsigned dev);
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data);
22*4882a593Smuzhiyun int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data);
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun extern struct ihs_fpga *fpga_ptr[];
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #define FPGA_SET_REG(ix, fld, val) \
27*4882a593Smuzhiyun 	fpga_set_reg((ix), \
28*4882a593Smuzhiyun 		     &fpga_ptr[ix]->fld, \
29*4882a593Smuzhiyun 		     offsetof(struct ihs_fpga, fld), \
30*4882a593Smuzhiyun 		     val)
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #define FPGA_GET_REG(ix, fld, val) \
33*4882a593Smuzhiyun 	fpga_get_reg((ix), \
34*4882a593Smuzhiyun 		     &fpga_ptr[ix]->fld, \
35*4882a593Smuzhiyun 		     offsetof(struct ihs_fpga, fld), \
36*4882a593Smuzhiyun 		     val)
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun struct ihs_gpio {
39*4882a593Smuzhiyun 	u16 read;
40*4882a593Smuzhiyun 	u16 clear;
41*4882a593Smuzhiyun 	u16 set;
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun struct ihs_i2c {
45*4882a593Smuzhiyun 	u16 interrupt_status;
46*4882a593Smuzhiyun 	u16 interrupt_enable;
47*4882a593Smuzhiyun 	u16 write_mailbox_ext;
48*4882a593Smuzhiyun 	u16 write_mailbox;
49*4882a593Smuzhiyun 	u16 read_mailbox_ext;
50*4882a593Smuzhiyun 	u16 read_mailbox;
51*4882a593Smuzhiyun };
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun struct ihs_osd {
54*4882a593Smuzhiyun 	u16 version;
55*4882a593Smuzhiyun 	u16 features;
56*4882a593Smuzhiyun 	u16 control;
57*4882a593Smuzhiyun 	u16 xy_size;
58*4882a593Smuzhiyun 	u16 xy_scale;
59*4882a593Smuzhiyun 	u16 x_pos;
60*4882a593Smuzhiyun 	u16 y_pos;
61*4882a593Smuzhiyun };
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun struct ihs_mdio {
64*4882a593Smuzhiyun 	u16 control;
65*4882a593Smuzhiyun 	u16 address_data;
66*4882a593Smuzhiyun 	u16 rx_data;
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun struct ihs_io_ep {
70*4882a593Smuzhiyun 	u16 transmit_data;
71*4882a593Smuzhiyun 	u16 rx_tx_control;
72*4882a593Smuzhiyun 	u16 receive_data;
73*4882a593Smuzhiyun 	u16 rx_tx_status;
74*4882a593Smuzhiyun 	u16 reserved;
75*4882a593Smuzhiyun 	u16 device_address;
76*4882a593Smuzhiyun 	u16 target_address;
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun #ifdef CONFIG_NEO
80*4882a593Smuzhiyun struct ihs_fpga {
81*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
82*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
83*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0004 */
84*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0006 */
85*4882a593Smuzhiyun 	u16 reserved_0[8187];	/* 0x0008 */
86*4882a593Smuzhiyun 	u16 reflection_high;	/* 0x3ffe */
87*4882a593Smuzhiyun };
88*4882a593Smuzhiyun #endif
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #ifdef CONFIG_IO
91*4882a593Smuzhiyun struct ihs_fpga {
92*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
93*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
94*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0004 */
95*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0006 */
96*4882a593Smuzhiyun 	u16 reserved_0[5];	/* 0x0008 */
97*4882a593Smuzhiyun 	u16 quad_serdes_reset;	/* 0x0012 */
98*4882a593Smuzhiyun 	u16 reserved_1[8181];	/* 0x0014 */
99*4882a593Smuzhiyun 	u16 reflection_high;	/* 0x3ffe */
100*4882a593Smuzhiyun };
101*4882a593Smuzhiyun #endif
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun #ifdef CONFIG_IO64
104*4882a593Smuzhiyun struct ihs_fpga_channel {
105*4882a593Smuzhiyun 	u16 status_int;
106*4882a593Smuzhiyun 	u16 config_int;
107*4882a593Smuzhiyun 	u16 switch_connect_config;
108*4882a593Smuzhiyun 	u16 tx_destination;
109*4882a593Smuzhiyun };
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun struct ihs_fpga_hicb {
112*4882a593Smuzhiyun 	u16 status_int;
113*4882a593Smuzhiyun 	u16 config_int;
114*4882a593Smuzhiyun };
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun struct ihs_fpga {
117*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
118*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
119*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0004 */
120*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0006 */
121*4882a593Smuzhiyun 	u16 reserved_0[5];	/* 0x0008 */
122*4882a593Smuzhiyun 	u16 quad_serdes_reset;	/* 0x0012 */
123*4882a593Smuzhiyun 	u16 reserved_1[502];	/* 0x0014 */
124*4882a593Smuzhiyun 	struct ihs_fpga_channel ch[32];		/* 0x0400 */
125*4882a593Smuzhiyun 	struct ihs_fpga_channel hicb_ch[32];	/* 0x0500 */
126*4882a593Smuzhiyun 	u16 reserved_2[7487];	/* 0x0580 */
127*4882a593Smuzhiyun 	u16 reflection_high;	/* 0x3ffe */
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun #endif
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #ifdef CONFIG_IOCON
132*4882a593Smuzhiyun struct ihs_fpga {
133*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
134*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
135*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0004 */
136*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0006 */
137*4882a593Smuzhiyun 	u16 reserved_0[1];	/* 0x0008 */
138*4882a593Smuzhiyun 	u16 top_interrupt;	/* 0x000a */
139*4882a593Smuzhiyun 	u16 reserved_1[4];	/* 0x000c */
140*4882a593Smuzhiyun 	struct ihs_gpio gpio;	/* 0x0014 */
141*4882a593Smuzhiyun 	u16 mpc3w_control;	/* 0x001a */
142*4882a593Smuzhiyun 	u16 reserved_2[2];	/* 0x001c */
143*4882a593Smuzhiyun 	struct ihs_io_ep ep;	/* 0x0020 */
144*4882a593Smuzhiyun 	u16 reserved_3[9];	/* 0x002e */
145*4882a593Smuzhiyun 	struct ihs_i2c i2c0;	/* 0x0040 */
146*4882a593Smuzhiyun 	u16 reserved_4[10];	/* 0x004c */
147*4882a593Smuzhiyun 	u16 mc_int;		/* 0x0060 */
148*4882a593Smuzhiyun 	u16 mc_int_en;		/* 0x0062 */
149*4882a593Smuzhiyun 	u16 mc_status;		/* 0x0064 */
150*4882a593Smuzhiyun 	u16 mc_control;		/* 0x0066 */
151*4882a593Smuzhiyun 	u16 mc_tx_data;		/* 0x0068 */
152*4882a593Smuzhiyun 	u16 mc_tx_address;	/* 0x006a */
153*4882a593Smuzhiyun 	u16 mc_tx_cmd;		/* 0x006c */
154*4882a593Smuzhiyun 	u16 mc_res;		/* 0x006e */
155*4882a593Smuzhiyun 	u16 mc_rx_cmd_status;	/* 0x0070 */
156*4882a593Smuzhiyun 	u16 mc_rx_data;		/* 0x0072 */
157*4882a593Smuzhiyun 	u16 reserved_5[69];	/* 0x0074 */
158*4882a593Smuzhiyun 	u16 reflection_high;	/* 0x00fe */
159*4882a593Smuzhiyun 	struct ihs_osd osd0;	/* 0x0100 */
160*4882a593Smuzhiyun 	u16 reserved_6[889];	/* 0x010e */
161*4882a593Smuzhiyun 	u16 videomem0[2048];	/* 0x0800 */
162*4882a593Smuzhiyun };
163*4882a593Smuzhiyun #endif
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun #if defined(CONFIG_HRCON) || defined(CONFIG_STRIDER_CON_DP)
166*4882a593Smuzhiyun struct ihs_fpga {
167*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
168*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
169*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0004 */
170*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0006 */
171*4882a593Smuzhiyun 	u16 reserved_0[1];	/* 0x0008 */
172*4882a593Smuzhiyun 	u16 top_interrupt;	/* 0x000a */
173*4882a593Smuzhiyun 	u16 reserved_1[2];	/* 0x000c */
174*4882a593Smuzhiyun 	u16 control;		/* 0x0010 */
175*4882a593Smuzhiyun 	u16 extended_control;	/* 0x0012 */
176*4882a593Smuzhiyun 	struct ihs_gpio gpio;	/* 0x0014 */
177*4882a593Smuzhiyun 	u16 mpc3w_control;	/* 0x001a */
178*4882a593Smuzhiyun 	u16 reserved_2[2];	/* 0x001c */
179*4882a593Smuzhiyun 	struct ihs_io_ep ep;	/* 0x0020 */
180*4882a593Smuzhiyun 	u16 reserved_3[9];	/* 0x002e */
181*4882a593Smuzhiyun 	struct ihs_i2c i2c0;	/* 0x0040 */
182*4882a593Smuzhiyun 	u16 reserved_4[10];	/* 0x004c */
183*4882a593Smuzhiyun 	u16 mc_int;		/* 0x0060 */
184*4882a593Smuzhiyun 	u16 mc_int_en;		/* 0x0062 */
185*4882a593Smuzhiyun 	u16 mc_status;		/* 0x0064 */
186*4882a593Smuzhiyun 	u16 mc_control;		/* 0x0066 */
187*4882a593Smuzhiyun 	u16 mc_tx_data;		/* 0x0068 */
188*4882a593Smuzhiyun 	u16 mc_tx_address;	/* 0x006a */
189*4882a593Smuzhiyun 	u16 mc_tx_cmd;		/* 0x006c */
190*4882a593Smuzhiyun 	u16 mc_res;		/* 0x006e */
191*4882a593Smuzhiyun 	u16 mc_rx_cmd_status;	/* 0x0070 */
192*4882a593Smuzhiyun 	u16 mc_rx_data;		/* 0x0072 */
193*4882a593Smuzhiyun 	u16 reserved_5[69];	/* 0x0074 */
194*4882a593Smuzhiyun 	u16 reflection_high;	/* 0x00fe */
195*4882a593Smuzhiyun 	struct ihs_osd osd0;	/* 0x0100 */
196*4882a593Smuzhiyun #ifdef CONFIG_SYS_OSD_DH
197*4882a593Smuzhiyun 	u16 reserved_6[57];	/* 0x010e */
198*4882a593Smuzhiyun 	struct ihs_osd osd1;	/* 0x0180 */
199*4882a593Smuzhiyun 	u16 reserved_7[9];	/* 0x018e */
200*4882a593Smuzhiyun 	struct ihs_i2c i2c1;	/* 0x01a0 */
201*4882a593Smuzhiyun 	u16 reserved_8[1834];	/* 0x01ac */
202*4882a593Smuzhiyun 	u16 videomem0[2048];	/* 0x1000 */
203*4882a593Smuzhiyun 	u16 videomem1[2048];	/* 0x2000 */
204*4882a593Smuzhiyun #else
205*4882a593Smuzhiyun 	u16 reserved_6[889];	/* 0x010e */
206*4882a593Smuzhiyun 	u16 videomem0[2048];	/* 0x0800 */
207*4882a593Smuzhiyun #endif
208*4882a593Smuzhiyun };
209*4882a593Smuzhiyun #endif
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun #ifdef CONFIG_STRIDER_CPU
212*4882a593Smuzhiyun struct ihs_fpga {
213*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
214*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
215*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0004 */
216*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0006 */
217*4882a593Smuzhiyun 	u16 reserved_0[1];	/* 0x0008 */
218*4882a593Smuzhiyun 	u16 top_interrupt;	/* 0x000a */
219*4882a593Smuzhiyun 	u16 reserved_1[3];	/* 0x000c */
220*4882a593Smuzhiyun 	u16 extended_control;	/* 0x0012 */
221*4882a593Smuzhiyun 	struct ihs_gpio gpio;	/* 0x0014 */
222*4882a593Smuzhiyun 	u16 mpc3w_control;	/* 0x001a */
223*4882a593Smuzhiyun 	u16 reserved_2[2];	/* 0x001c */
224*4882a593Smuzhiyun 	struct ihs_io_ep ep;	/* 0x0020 */
225*4882a593Smuzhiyun 	u16 reserved_3[9];	/* 0x002e */
226*4882a593Smuzhiyun 	u16 mc_int;		/* 0x0040 */
227*4882a593Smuzhiyun 	u16 mc_int_en;		/* 0x0042 */
228*4882a593Smuzhiyun 	u16 mc_status;		/* 0x0044 */
229*4882a593Smuzhiyun 	u16 mc_control;		/* 0x0046 */
230*4882a593Smuzhiyun 	u16 mc_tx_data;		/* 0x0048 */
231*4882a593Smuzhiyun 	u16 mc_tx_address;	/* 0x004a */
232*4882a593Smuzhiyun 	u16 mc_tx_cmd;		/* 0x004c */
233*4882a593Smuzhiyun 	u16 mc_res;		/* 0x004e */
234*4882a593Smuzhiyun 	u16 mc_rx_cmd_status;	/* 0x0050 */
235*4882a593Smuzhiyun 	u16 mc_rx_data;		/* 0x0052 */
236*4882a593Smuzhiyun 	u16 reserved_4[62];	/* 0x0054 */
237*4882a593Smuzhiyun 	struct ihs_i2c i2c0;	/* 0x00d0 */
238*4882a593Smuzhiyun };
239*4882a593Smuzhiyun #endif
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun #ifdef CONFIG_STRIDER_CON
242*4882a593Smuzhiyun struct ihs_fpga {
243*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
244*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
245*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0004 */
246*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0006 */
247*4882a593Smuzhiyun 	u16 reserved_0[1];	/* 0x0008 */
248*4882a593Smuzhiyun 	u16 top_interrupt;	/* 0x000a */
249*4882a593Smuzhiyun 	u16 reserved_1[4];	/* 0x000c */
250*4882a593Smuzhiyun 	struct ihs_gpio gpio;	/* 0x0014 */
251*4882a593Smuzhiyun 	u16 mpc3w_control;	/* 0x001a */
252*4882a593Smuzhiyun 	u16 reserved_2[2];	/* 0x001c */
253*4882a593Smuzhiyun 	struct ihs_io_ep ep;	/* 0x0020 */
254*4882a593Smuzhiyun 	u16 reserved_3[9];	/* 0x002e */
255*4882a593Smuzhiyun 	struct ihs_i2c i2c0;	/* 0x0040 */
256*4882a593Smuzhiyun 	u16 reserved_4[10];	/* 0x004c */
257*4882a593Smuzhiyun 	u16 mc_int;		/* 0x0060 */
258*4882a593Smuzhiyun 	u16 mc_int_en;		/* 0x0062 */
259*4882a593Smuzhiyun 	u16 mc_status;		/* 0x0064 */
260*4882a593Smuzhiyun 	u16 mc_control;		/* 0x0066 */
261*4882a593Smuzhiyun 	u16 mc_tx_data;		/* 0x0068 */
262*4882a593Smuzhiyun 	u16 mc_tx_address;	/* 0x006a */
263*4882a593Smuzhiyun 	u16 mc_tx_cmd;		/* 0x006c */
264*4882a593Smuzhiyun 	u16 mc_res;		/* 0x006e */
265*4882a593Smuzhiyun 	u16 mc_rx_cmd_status;	/* 0x0070 */
266*4882a593Smuzhiyun 	u16 mc_rx_data;		/* 0x0072 */
267*4882a593Smuzhiyun 	u16 reserved_5[70];	/* 0x0074 */
268*4882a593Smuzhiyun 	struct ihs_osd osd0;	/* 0x0100 */
269*4882a593Smuzhiyun 	u16 reserved_6[889];	/* 0x010e */
270*4882a593Smuzhiyun 	u16 videomem0[2048];	/* 0x0800 */
271*4882a593Smuzhiyun };
272*4882a593Smuzhiyun #endif
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun #ifdef CONFIG_DLVISION_10G
275*4882a593Smuzhiyun struct ihs_fpga {
276*4882a593Smuzhiyun 	u16 reflection_low;	/* 0x0000 */
277*4882a593Smuzhiyun 	u16 versions;		/* 0x0002 */
278*4882a593Smuzhiyun 	u16 fpga_version;	/* 0x0004 */
279*4882a593Smuzhiyun 	u16 fpga_features;	/* 0x0006 */
280*4882a593Smuzhiyun 	u16 reserved_0[10];	/* 0x0008 */
281*4882a593Smuzhiyun 	u16 extended_interrupt; /* 0x001c */
282*4882a593Smuzhiyun 	u16 reserved_1[29];	/* 0x001e */
283*4882a593Smuzhiyun 	u16 mpc3w_control;	/* 0x0058 */
284*4882a593Smuzhiyun 	u16 reserved_2[3];	/* 0x005a */
285*4882a593Smuzhiyun 	struct ihs_i2c i2c0;	/* 0x0060 */
286*4882a593Smuzhiyun 	u16 reserved_3[2];	/* 0x006c */
287*4882a593Smuzhiyun 	struct ihs_i2c i2c1;	/* 0x0070 */
288*4882a593Smuzhiyun 	u16 reserved_4[194];	/* 0x007c */
289*4882a593Smuzhiyun 	struct ihs_osd osd0;	/* 0x0200 */
290*4882a593Smuzhiyun 	u16 reserved_5[761];	/* 0x020e */
291*4882a593Smuzhiyun 	u16 videomem0[2048];	/* 0x0800 */
292*4882a593Smuzhiyun };
293*4882a593Smuzhiyun #endif
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun #endif
296