Blame view

include/gdsys_fpga.h 7.18 KB
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
1
2
  /*
   * (C) Copyright 2010
d38826a3d   Mario Six   treewide: Fix gds...
3
   * Dirk Eibach,  Guntermann & Drunck GmbH, dirk.eibach@gdsys.cc
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
4
   *
3765b3e7b   Wolfgang Denk   Coding Style clea...
5
   * SPDX-License-Identifier:	GPL-2.0+
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
6
7
8
9
   */
  
  #ifndef __GDSYS_FPGA_H
  #define __GDSYS_FPGA_H
255ef4d90   Dirk Eibach   ppc4xx: Add Io64 ...
10
  int init_func_fpga(void);
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
11
12
13
  enum {
  	FPGA_STATE_DONE_FAILED = 1 << 0,
  	FPGA_STATE_REFLECTION_FAILED = 1 << 1,
255ef4d90   Dirk Eibach   ppc4xx: Add Io64 ...
14
  	FPGA_STATE_PLATFORM = 1 << 2,
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
15
16
17
  };
  
  int get_fpga_state(unsigned dev);
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
18

aba27acf6   Dirk Eibach   powerpc/ppc4xx: U...
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  int fpga_set_reg(u32 fpga, u16 *reg, off_t regoff, u16 data);
  int fpga_get_reg(u32 fpga, u16 *reg, off_t regoff, u16 *data);
  
  extern struct ihs_fpga *fpga_ptr[];
  
  #define FPGA_SET_REG(ix, fld, val) \
  	fpga_set_reg((ix), \
  		     &fpga_ptr[ix]->fld, \
  		     offsetof(struct ihs_fpga, fld), \
  		     val)
  
  #define FPGA_GET_REG(ix, fld, val) \
  	fpga_get_reg((ix), \
  		     &fpga_ptr[ix]->fld, \
  		     offsetof(struct ihs_fpga, fld), \
  		     val)
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
35
  struct ihs_gpio {
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
36
37
38
  	u16 read;
  	u16 clear;
  	u16 set;
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
39
  };
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
40

0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
41
  struct ihs_i2c {
b46226bdb   Dirk Eibach   i2c: IHS I2C mast...
42
43
  	u16 interrupt_status;
  	u16 interrupt_enable;
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
44
  	u16 write_mailbox_ext;
b46226bdb   Dirk Eibach   i2c: IHS I2C mast...
45
  	u16 write_mailbox;
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
46
  	u16 read_mailbox_ext;
b46226bdb   Dirk Eibach   i2c: IHS I2C mast...
47
  	u16 read_mailbox;
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
48
  };
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
49

0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
50
  struct ihs_osd {
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
51
52
53
54
  	u16 version;
  	u16 features;
  	u16 control;
  	u16 xy_size;
52158e361   Dirk Eibach   ppc4xx: Set DLVis...
55
56
57
  	u16 xy_scale;
  	u16 x_pos;
  	u16 y_pos;
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
58
  };
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
59

50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  struct ihs_mdio {
  	u16 control;
  	u16 address_data;
  	u16 rx_data;
  };
  
  struct ihs_io_ep {
  	u16 transmit_data;
  	u16 rx_tx_control;
  	u16 receive_data;
  	u16 rx_tx_status;
  	u16 reserved;
  	u16 device_address;
  	u16 target_address;
  };
6e9e6c36a   Dirk Eibach   powerpc/ppc4xx: M...
75
  #ifdef CONFIG_NEO
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
76
  struct ihs_fpga {
6e9e6c36a   Dirk Eibach   powerpc/ppc4xx: M...
77
78
79
80
81
82
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_features;	/* 0x0004 */
  	u16 fpga_version;	/* 0x0006 */
  	u16 reserved_0[8187];	/* 0x0008 */
  	u16 reflection_high;	/* 0x3ffe */
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
83
  };
6e9e6c36a   Dirk Eibach   powerpc/ppc4xx: M...
84
  #endif
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
85
  #ifdef CONFIG_IO
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
86
  struct ihs_fpga {
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
87
88
89
90
91
92
93
94
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_features;	/* 0x0004 */
  	u16 fpga_version;	/* 0x0006 */
  	u16 reserved_0[5];	/* 0x0008 */
  	u16 quad_serdes_reset;	/* 0x0012 */
  	u16 reserved_1[8181];	/* 0x0014 */
  	u16 reflection_high;	/* 0x3ffe */
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
95
  };
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
96
  #endif
255ef4d90   Dirk Eibach   ppc4xx: Add Io64 ...
97
  #ifdef CONFIG_IO64
aba27acf6   Dirk Eibach   powerpc/ppc4xx: U...
98
99
100
101
102
103
104
105
106
107
108
  struct ihs_fpga_channel {
  	u16 status_int;
  	u16 config_int;
  	u16 switch_connect_config;
  	u16 tx_destination;
  };
  
  struct ihs_fpga_hicb {
  	u16 status_int;
  	u16 config_int;
  };
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
109
  struct ihs_fpga {
255ef4d90   Dirk Eibach   ppc4xx: Add Io64 ...
110
111
112
113
114
115
116
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_features;	/* 0x0004 */
  	u16 fpga_version;	/* 0x0006 */
  	u16 reserved_0[5];	/* 0x0008 */
  	u16 quad_serdes_reset;	/* 0x0012 */
  	u16 reserved_1[502];	/* 0x0014 */
aba27acf6   Dirk Eibach   powerpc/ppc4xx: U...
117
118
119
  	struct ihs_fpga_channel ch[32];		/* 0x0400 */
  	struct ihs_fpga_channel hicb_ch[32];	/* 0x0500 */
  	u16 reserved_2[7487];	/* 0x0580 */
255ef4d90   Dirk Eibach   ppc4xx: Add Io64 ...
120
  	u16 reflection_high;	/* 0x3ffe */
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
121
  };
255ef4d90   Dirk Eibach   ppc4xx: Add Io64 ...
122
  #endif
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
123
  #ifdef CONFIG_IOCON
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
124
  struct ihs_fpga {
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
125
126
127
128
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_version;	/* 0x0004 */
  	u16 fpga_features;	/* 0x0006 */
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
129
130
131
132
133
134
135
136
  	u16 reserved_0[1];	/* 0x0008 */
  	u16 top_interrupt;	/* 0x000a */
  	u16 reserved_1[4];	/* 0x000c */
  	struct ihs_gpio gpio;	/* 0x0014 */
  	u16 mpc3w_control;	/* 0x001a */
  	u16 reserved_2[2];	/* 0x001c */
  	struct ihs_io_ep ep;	/* 0x0020 */
  	u16 reserved_3[9];	/* 0x002e */
071be8969   Dirk Eibach   i2c: ihs_i2c: Dua...
137
  	struct ihs_i2c i2c0;	/* 0x0040 */
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
138
139
140
141
142
143
144
145
146
147
148
149
150
  	u16 reserved_4[10];	/* 0x004c */
  	u16 mc_int;		/* 0x0060 */
  	u16 mc_int_en;		/* 0x0062 */
  	u16 mc_status;		/* 0x0064 */
  	u16 mc_control;		/* 0x0066 */
  	u16 mc_tx_data;		/* 0x0068 */
  	u16 mc_tx_address;	/* 0x006a */
  	u16 mc_tx_cmd;		/* 0x006c */
  	u16 mc_res;		/* 0x006e */
  	u16 mc_rx_cmd_status;	/* 0x0070 */
  	u16 mc_rx_data;		/* 0x0072 */
  	u16 reserved_5[69];	/* 0x0074 */
  	u16 reflection_high;	/* 0x00fe */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
151
  	struct ihs_osd osd0;	/* 0x0100 */
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
152
  	u16 reserved_6[889];	/* 0x010e */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
153
  	u16 videomem0[2048];	/* 0x0800 */
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
154
155
  };
  #endif
1d2541ba3   Dirk Eibach   strider: Support ...
156
  #if defined(CONFIG_HRCON) || defined(CONFIG_STRIDER_CON_DP)
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
157
158
159
160
161
162
163
  struct ihs_fpga {
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_version;	/* 0x0004 */
  	u16 fpga_features;	/* 0x0006 */
  	u16 reserved_0[1];	/* 0x0008 */
  	u16 top_interrupt;	/* 0x000a */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
164
165
166
  	u16 reserved_1[2];	/* 0x000c */
  	u16 control;		/* 0x0010 */
  	u16 extended_control;	/* 0x0012 */
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
167
  	struct ihs_gpio gpio;	/* 0x0014 */
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
168
  	u16 mpc3w_control;	/* 0x001a */
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
169
170
171
  	u16 reserved_2[2];	/* 0x001c */
  	struct ihs_io_ep ep;	/* 0x0020 */
  	u16 reserved_3[9];	/* 0x002e */
071be8969   Dirk Eibach   i2c: ihs_i2c: Dua...
172
  	struct ihs_i2c i2c0;	/* 0x0040 */
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
173
  	u16 reserved_4[10];	/* 0x004c */
e50e8968d   Dirk Eibach   powerpc/ppc4xx: S...
174
175
176
177
178
179
180
181
182
183
  	u16 mc_int;		/* 0x0060 */
  	u16 mc_int_en;		/* 0x0062 */
  	u16 mc_status;		/* 0x0064 */
  	u16 mc_control;		/* 0x0066 */
  	u16 mc_tx_data;		/* 0x0068 */
  	u16 mc_tx_address;	/* 0x006a */
  	u16 mc_tx_cmd;		/* 0x006c */
  	u16 mc_res;		/* 0x006e */
  	u16 mc_rx_cmd_status;	/* 0x0070 */
  	u16 mc_rx_data;		/* 0x0072 */
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
184
  	u16 reserved_5[69];	/* 0x0074 */
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
185
  	u16 reflection_high;	/* 0x00fe */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
186
187
188
189
190
191
192
193
194
195
  	struct ihs_osd osd0;	/* 0x0100 */
  #ifdef CONFIG_SYS_OSD_DH
  	u16 reserved_6[57];	/* 0x010e */
  	struct ihs_osd osd1;	/* 0x0180 */
  	u16 reserved_7[9];	/* 0x018e */
  	struct ihs_i2c i2c1;	/* 0x01a0 */
  	u16 reserved_8[1834];	/* 0x01ac */
  	u16 videomem0[2048];	/* 0x1000 */
  	u16 videomem1[2048];	/* 0x2000 */
  #else
50dcf89d9   Dirk Eibach   mpc83xx: Add gdsy...
196
  	u16 reserved_6[889];	/* 0x010e */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
197
198
  	u16 videomem0[2048];	/* 0x0800 */
  #endif
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
199
  };
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
200
  #endif
a3f9d6c77   Dirk Eibach   mpc83xx: Add stri...
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
  #ifdef CONFIG_STRIDER_CPU
  struct ihs_fpga {
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_version;	/* 0x0004 */
  	u16 fpga_features;	/* 0x0006 */
  	u16 reserved_0[1];	/* 0x0008 */
  	u16 top_interrupt;	/* 0x000a */
  	u16 reserved_1[3];	/* 0x000c */
  	u16 extended_control;	/* 0x0012 */
  	struct ihs_gpio gpio;	/* 0x0014 */
  	u16 mpc3w_control;	/* 0x001a */
  	u16 reserved_2[2];	/* 0x001c */
  	struct ihs_io_ep ep;	/* 0x0020 */
  	u16 reserved_3[9];	/* 0x002e */
  	u16 mc_int;		/* 0x0040 */
  	u16 mc_int_en;		/* 0x0042 */
  	u16 mc_status;		/* 0x0044 */
  	u16 mc_control;		/* 0x0046 */
  	u16 mc_tx_data;		/* 0x0048 */
  	u16 mc_tx_address;	/* 0x004a */
  	u16 mc_tx_cmd;		/* 0x004c */
  	u16 mc_res;		/* 0x004e */
  	u16 mc_rx_cmd_status;	/* 0x0050 */
  	u16 mc_rx_data;		/* 0x0052 */
  	u16 reserved_4[62];	/* 0x0054 */
  	struct ihs_i2c i2c0;	/* 0x00d0 */
  };
  #endif
  
  #ifdef CONFIG_STRIDER_CON
  struct ihs_fpga {
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_version;	/* 0x0004 */
  	u16 fpga_features;	/* 0x0006 */
  	u16 reserved_0[1];	/* 0x0008 */
  	u16 top_interrupt;	/* 0x000a */
  	u16 reserved_1[4];	/* 0x000c */
  	struct ihs_gpio gpio;	/* 0x0014 */
  	u16 mpc3w_control;	/* 0x001a */
  	u16 reserved_2[2];	/* 0x001c */
  	struct ihs_io_ep ep;	/* 0x0020 */
  	u16 reserved_3[9];	/* 0x002e */
  	struct ihs_i2c i2c0;	/* 0x0040 */
  	u16 reserved_4[10];	/* 0x004c */
  	u16 mc_int;		/* 0x0060 */
  	u16 mc_int_en;		/* 0x0062 */
  	u16 mc_status;		/* 0x0064 */
  	u16 mc_control;		/* 0x0066 */
  	u16 mc_tx_data;		/* 0x0068 */
  	u16 mc_tx_address;	/* 0x006a */
  	u16 mc_tx_cmd;		/* 0x006c */
  	u16 mc_res;		/* 0x006e */
  	u16 mc_rx_cmd_status;	/* 0x0070 */
  	u16 mc_rx_data;		/* 0x0072 */
  	u16 reserved_5[70];	/* 0x0074 */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
258
  	struct ihs_osd osd0;	/* 0x0100 */
a3f9d6c77   Dirk Eibach   mpc83xx: Add stri...
259
  	u16 reserved_6[889];	/* 0x010e */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
260
  	u16 videomem0[2048];	/* 0x0800 */
a3f9d6c77   Dirk Eibach   mpc83xx: Add stri...
261
262
  };
  #endif
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
263
  #ifdef CONFIG_DLVISION_10G
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
264
  struct ihs_fpga {
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
265
266
267
268
269
270
  	u16 reflection_low;	/* 0x0000 */
  	u16 versions;		/* 0x0002 */
  	u16 fpga_version;	/* 0x0004 */
  	u16 fpga_features;	/* 0x0006 */
  	u16 reserved_0[10];	/* 0x0008 */
  	u16 extended_interrupt; /* 0x001c */
b46226bdb   Dirk Eibach   i2c: IHS I2C mast...
271
  	u16 reserved_1[29];	/* 0x001e */
7749c84e9   Dirk Eibach   ppc4xx: Enable MP...
272
  	u16 mpc3w_control;	/* 0x0058 */
b46226bdb   Dirk Eibach   i2c: IHS I2C mast...
273
  	u16 reserved_2[3];	/* 0x005a */
071be8969   Dirk Eibach   i2c: ihs_i2c: Dua...
274
275
276
277
  	struct ihs_i2c i2c0;	/* 0x0060 */
  	u16 reserved_3[2];	/* 0x006c */
  	struct ihs_i2c i2c1;	/* 0x0070 */
  	u16 reserved_4[194];	/* 0x007c */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
278
  	struct ihs_osd osd0;	/* 0x0200 */
071be8969   Dirk Eibach   i2c: ihs_i2c: Dua...
279
  	u16 reserved_5[761];	/* 0x020e */
7ed45d3d0   Dirk Eibach   hrcon: Add suppor...
280
  	u16 videomem0[2048];	/* 0x0800 */
0e60aa85c   Dirk Eibach   powerpc/ppc4xx: R...
281
  };
2da0fc0d0   Dirk Eibach   ppc4xx: Add DLVis...
282
283
284
  #endif
  
  #endif