Merge git://git.denx.de/u-boot-imx
[oweals/u-boot.git] / board / gdsys / common / ioep-fpga.c
1 /*
2  * (C) Copyright 2014
3  * Dirk Eibach,  Guntermann & Drunck GmbH, dirk.eibach@gdsys.cc
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #include <common.h>
9
10 #include <gdsys_fpga.h>
11
12 enum {
13         UNITTYPE_MAIN_SERVER = 0,
14         UNITTYPE_MAIN_USER = 1,
15         UNITTYPE_VIDEO_SERVER = 2,
16         UNITTYPE_VIDEO_USER = 3,
17 };
18
19 enum {
20         UNITTYPEPCB_DVI = 0,
21         UNITTYPEPCB_DP_165 = 1,
22         UNITTYPEPCB_DP_300 = 2,
23         UNITTYPEPCB_HDMI = 3,
24 };
25
26 enum {
27         COMPRESSION_NONE = 0,
28         COMPRESSION_TYPE_1 = 1,
29         COMPRESSION_TYPE_1_2 = 3,
30         COMPRESSION_TYPE_1_2_3 = 7,
31 };
32
33 enum {
34         AUDIO_NONE = 0,
35         AUDIO_TX = 1,
36         AUDIO_RX = 2,
37         AUDIO_RXTX = 3,
38 };
39
40 enum {
41         SYSCLK_147456 = 0,
42 };
43
44 enum {
45         RAM_DDR2_32 = 0,
46         RAM_DDR3_32 = 1,
47         RAM_DDR3_48 = 2,
48 };
49
50 enum {
51         CARRIER_SPEED_1G = 0,
52         CARRIER_SPEED_2_5G = 1,
53 };
54
55 bool ioep_fpga_has_osd(unsigned int fpga)
56 {
57         u16 fpga_features;
58         unsigned feature_osd;
59
60         FPGA_GET_REG(0, fpga_features, &fpga_features);
61         feature_osd = fpga_features & (1<<11);
62
63         return feature_osd;
64 }
65
66 void ioep_fpga_print_info(unsigned int fpga)
67 {
68         u16 versions;
69         u16 fpga_version;
70         u16 fpga_features;
71         unsigned unit_type;
72         unsigned unit_type_pcb_video;
73         unsigned feature_compression;
74         unsigned feature_osd;
75         unsigned feature_audio;
76         unsigned feature_sysclock;
77         unsigned feature_ramconfig;
78         unsigned feature_carrier_speed;
79         unsigned feature_carriers;
80         unsigned feature_video_channels;
81
82         FPGA_GET_REG(fpga, versions, &versions);
83         FPGA_GET_REG(fpga, fpga_version, &fpga_version);
84         FPGA_GET_REG(fpga, fpga_features, &fpga_features);
85
86         unit_type = (versions & 0xf000) >> 12;
87         unit_type_pcb_video = (versions & 0x01c0) >> 6;
88         feature_compression = (fpga_features & 0xe000) >> 13;
89         feature_osd = fpga_features & (1<<11);
90         feature_audio = (fpga_features & 0x0600) >> 9;
91         feature_sysclock = (fpga_features & 0x0180) >> 7;
92         feature_ramconfig = (fpga_features & 0x0060) >> 5;
93         feature_carrier_speed = fpga_features & (1<<4);
94         feature_carriers = (fpga_features & 0x000c) >> 2;
95         feature_video_channels = fpga_features & 0x0003;
96
97         switch (unit_type) {
98         case UNITTYPE_MAIN_SERVER:
99         case UNITTYPE_MAIN_USER:
100                 printf("Mainchannel");
101                 break;
102
103         case UNITTYPE_VIDEO_SERVER:
104         case UNITTYPE_VIDEO_USER:
105                 printf("Videochannel");
106                 break;
107
108         default:
109                 printf("UnitType %d(not supported)", unit_type);
110                 break;
111         }
112
113         switch (unit_type) {
114         case UNITTYPE_MAIN_SERVER:
115         case UNITTYPE_VIDEO_SERVER:
116                 printf(" Server");
117                 if (versions & (1<<4))
118                         printf(" UC");
119                 break;
120
121         case UNITTYPE_MAIN_USER:
122         case UNITTYPE_VIDEO_USER:
123                 printf(" User");
124                 break;
125
126         default:
127                 break;
128         }
129
130         if (versions & (1<<5))
131                 printf(" Fiber");
132         else
133                 printf(" CAT");
134
135         switch (unit_type_pcb_video) {
136         case UNITTYPEPCB_DVI:
137                 printf(" DVI,");
138                 break;
139
140         case UNITTYPEPCB_DP_165:
141                 printf(" DP 165MPix/s,");
142                 break;
143
144         case UNITTYPEPCB_DP_300:
145                 printf(" DP 300MPix/s,");
146                 break;
147
148         case UNITTYPEPCB_HDMI:
149                 printf(" HDMI,");
150                 break;
151         }
152
153         printf(" FPGA V %d.%02d\n       features:",
154                fpga_version / 100, fpga_version % 100);
155
156
157         switch (feature_compression) {
158         case COMPRESSION_NONE:
159                 printf(" no compression");
160                 break;
161
162         case COMPRESSION_TYPE_1:
163                 printf(" compression type1(delta)");
164                 break;
165
166         case COMPRESSION_TYPE_1_2:
167                 printf(" compression type1(delta), type2(inline)");
168                 break;
169
170         case COMPRESSION_TYPE_1_2_3:
171                 printf(" compression type1(delta), type2(inline), type3(intempo)");
172                 break;
173
174         default:
175                 printf(" compression %d(not supported)", feature_compression);
176                 break;
177         }
178
179         printf(", %sosd", feature_osd ? "" : "no ");
180
181         switch (feature_audio) {
182         case AUDIO_NONE:
183                 printf(", no audio");
184                 break;
185
186         case AUDIO_TX:
187                 printf(", audio tx");
188                 break;
189
190         case AUDIO_RX:
191                 printf(", audio rx");
192                 break;
193
194         case AUDIO_RXTX:
195                 printf(", audio rx+tx");
196                 break;
197
198         default:
199                 printf(", audio %d(not supported)", feature_audio);
200                 break;
201         }
202
203         puts(",\n       ");
204
205         switch (feature_sysclock) {
206         case SYSCLK_147456:
207                 printf("clock 147.456 MHz");
208                 break;
209
210         default:
211                 printf("clock %d(not supported)", feature_sysclock);
212                 break;
213         }
214
215         switch (feature_ramconfig) {
216         case RAM_DDR2_32:
217                 printf(", RAM 32 bit DDR2");
218                 break;
219
220         case RAM_DDR3_32:
221                 printf(", RAM 32 bit DDR3");
222                 break;
223
224         case RAM_DDR3_48:
225                 printf(", RAM 48 bit DDR3");
226                 break;
227
228         default:
229                 printf(", RAM %d(not supported)", feature_ramconfig);
230                 break;
231         }
232
233         printf(", %d carrier(s) %s", feature_carriers,
234                feature_carrier_speed ? "2.5Gbit/s" : "1Gbit/s");
235
236         printf(", %d video channel(s)\n", feature_video_channels);
237 }