source: SVN/rincon/u-boot/common/altera.c @ 55

Last change on this file since 55 was 55, checked in by Tim Harvey, 2 years ago

rincon: added latest u-boot source

restored form server backup

Signed-off-by: Tim Harvey <tharvey@…>

File size: 7.1 KB
Line 
1/*
2 * (C) Copyright 2003
3 * Steven Scholz, imc Measurement & Control, steven.scholz@imc-berlin.de
4 *
5 * (C) Copyright 2002
6 * Rich Ireland, Enterasys Networks, rireland@enterasys.com.
7 *
8 * See file CREDITS for list of people who contributed to this
9 * project.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation; either version 2 of
14 * the License, or (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
24 * MA 02111-1307 USA
25 *
26 */
27
28/*
29 *  Altera FPGA support
30 */
31#include <common.h>
32#include <ACEX1K.h>
33#include <stratixII.h>
34
35/* Define FPGA_DEBUG to get debug printf's */
36/* #define FPGA_DEBUG */
37
38#ifdef  FPGA_DEBUG
39#define PRINTF(fmt,args...)     printf (fmt ,##args)
40#else
41#define PRINTF(fmt,args...)
42#endif
43
44/* Local Static Functions */
45static int altera_validate (Altera_desc * desc, const char *fn);
46
47/* ------------------------------------------------------------------------- */
48int altera_load( Altera_desc *desc, void *buf, size_t bsize )
49{
50        int ret_val = FPGA_FAIL;        /* assume a failure */
51
52        if (!altera_validate (desc, (char *)__FUNCTION__)) {
53                printf ("%s: Invalid device descriptor\n", __FUNCTION__);
54        } else {
55                switch (desc->family) {
56                case Altera_ACEX1K:
57                case Altera_CYC2:
58#if defined(CONFIG_FPGA_ACEX1K)
59                        PRINTF ("%s: Launching the ACEX1K Loader...\n",
60                                        __FUNCTION__);
61                        ret_val = ACEX1K_load (desc, buf, bsize);
62#elif defined(CONFIG_FPGA_CYCLON2)
63                        PRINTF ("%s: Launching the CYCLON II Loader...\n",
64                                        __FUNCTION__);
65                        ret_val = CYC2_load (desc, buf, bsize);
66#else
67                        printf ("%s: No support for ACEX1K devices.\n",
68                                        __FUNCTION__);
69#endif
70                        break;
71
72#if defined(CONFIG_FPGA_STRATIX_II)
73                case Altera_StratixII:
74                        PRINTF ("%s: Launching the Stratix II Loader...\n",
75                                __FUNCTION__);
76                        ret_val = StratixII_load (desc, buf, bsize);
77                        break;
78#endif
79                default:
80                        printf ("%s: Unsupported family type, %d\n",
81                                        __FUNCTION__, desc->family);
82                }
83        }
84
85        return ret_val;
86}
87
88int altera_dump( Altera_desc *desc, void *buf, size_t bsize )
89{
90        int ret_val = FPGA_FAIL;        /* assume a failure */
91
92        if (!altera_validate (desc, (char *)__FUNCTION__)) {
93                printf ("%s: Invalid device descriptor\n", __FUNCTION__);
94        } else {
95                switch (desc->family) {
96                case Altera_ACEX1K:
97#if defined(CONFIG_FPGA_ACEX)
98                        PRINTF ("%s: Launching the ACEX1K Reader...\n",
99                                        __FUNCTION__);
100                        ret_val = ACEX1K_dump (desc, buf, bsize);
101#else
102                        printf ("%s: No support for ACEX1K devices.\n",
103                                        __FUNCTION__);
104#endif
105                        break;
106
107#if defined(CONFIG_FPGA_STRATIX_II)
108                case Altera_StratixII:
109                        PRINTF ("%s: Launching the Stratix II Reader...\n",
110                                __FUNCTION__);
111                        ret_val = StratixII_dump (desc, buf, bsize);
112                        break;
113#endif
114                default:
115                        printf ("%s: Unsupported family type, %d\n",
116                                        __FUNCTION__, desc->family);
117                }
118        }
119
120        return ret_val;
121}
122
123int altera_info( Altera_desc *desc )
124{
125        int ret_val = FPGA_FAIL;
126
127        if (altera_validate (desc, (char *)__FUNCTION__)) {
128                printf ("Family:        \t");
129                switch (desc->family) {
130                case Altera_ACEX1K:
131                        printf ("ACEX1K\n");
132                        break;
133                case Altera_CYC2:
134                        printf ("CYCLON II\n");
135                        break;
136                case Altera_StratixII:
137                        printf ("Stratix II\n");
138                        break;
139                        /* Add new family types here */
140                default:
141                        printf ("Unknown family type, %d\n", desc->family);
142                }
143
144                printf ("Interface type:\t");
145                switch (desc->iface) {
146                case passive_serial:
147                        printf ("Passive Serial (PS)\n");
148                        break;
149                case passive_parallel_synchronous:
150                        printf ("Passive Parallel Synchronous (PPS)\n");
151                        break;
152                case passive_parallel_asynchronous:
153                        printf ("Passive Parallel Asynchronous (PPA)\n");
154                        break;
155                case passive_serial_asynchronous:
156                        printf ("Passive Serial Asynchronous (PSA)\n");
157                        break;
158                case altera_jtag_mode:          /* Not used */
159                        printf ("JTAG Mode\n");
160                        break;
161                case fast_passive_parallel:
162                        printf ("Fast Passive Parallel (FPP)\n");
163                        break;
164                case fast_passive_parallel_security:
165                        printf
166                            ("Fast Passive Parallel with Security (FPPS) \n");
167                        break;
168                        /* Add new interface types here */
169                default:
170                        printf ("Unsupported interface type, %d\n", desc->iface);
171                }
172
173                printf ("Device Size:   \t%d bytes\n"
174                                "Cookie:        \t0x%x (%d)\n",
175                                desc->size, desc->cookie, desc->cookie);
176
177                if (desc->iface_fns) {
178                        printf ("Device Function Table @ 0x%p\n", desc->iface_fns);
179                        switch (desc->family) {
180                        case Altera_ACEX1K:
181                        case Altera_CYC2:
182#if defined(CONFIG_FPGA_ACEX1K)
183                                ACEX1K_info (desc);
184#elif defined(CONFIG_FPGA_CYCLON2)
185                                CYC2_info (desc);
186#else
187                                /* just in case */
188                                printf ("%s: No support for ACEX1K devices.\n",
189                                                __FUNCTION__);
190#endif
191                                break;
192#if defined(CONFIG_FPGA_STRATIX_II)
193                        case Altera_StratixII:
194                                StratixII_info (desc);
195                                break;
196#endif
197                                /* Add new family types here */
198                        default:
199                                /* we don't need a message here - we give one up above */
200                                break;
201                        }
202                } else {
203                        printf ("No Device Function Table.\n");
204                }
205
206                ret_val = FPGA_SUCCESS;
207        } else {
208                printf ("%s: Invalid device descriptor\n", __FUNCTION__);
209        }
210
211        return ret_val;
212}
213
214int altera_reloc( Altera_desc *desc, ulong reloc_offset)
215{
216        int ret_val = FPGA_FAIL;        /* assume a failure */
217
218        if (!altera_validate (desc, (char *)__FUNCTION__)) {
219                printf ("%s: Invalid device descriptor\n", __FUNCTION__);
220        } else {
221                switch (desc->family) {
222                case Altera_ACEX1K:
223#if defined(CONFIG_FPGA_ACEX1K)
224                        ret_val = ACEX1K_reloc (desc, reloc_offset);
225#else
226                        printf ("%s: No support for ACEX devices.\n",
227                                        __FUNCTION__);
228#endif
229                        break;
230#if defined(CONFIG_FPGA_STRATIX_II)
231                case Altera_StratixII:
232                        ret_val = StratixII_reloc (desc, reloc_offset);
233                        break;
234#endif
235                case Altera_CYC2:
236#if defined(CONFIG_FPGA_CYCLON2)
237                        ret_val = CYC2_reloc (desc, reloc_offset);
238#else
239                        printf ("%s: No support for CYCLON II devices.\n",
240                                        __FUNCTION__);
241#endif
242                        break;
243                        /* Add new family types here */
244                default:
245                        printf ("%s: Unsupported family type, %d\n",
246                                        __FUNCTION__, desc->family);
247                }
248        }
249
250        return ret_val;
251}
252
253/* ------------------------------------------------------------------------- */
254
255static int altera_validate (Altera_desc * desc, const char *fn)
256{
257        int ret_val = FALSE;
258
259        if (desc) {
260                if ((desc->family > min_altera_type) &&
261                        (desc->family < max_altera_type)) {
262                        if ((desc->iface > min_altera_iface_type) &&
263                                (desc->iface < max_altera_iface_type)) {
264                                if (desc->size) {
265                                        ret_val = TRUE;
266                                } else {
267                                        printf ("%s: NULL part size\n", fn);
268                                }
269                        } else {
270                                printf ("%s: Invalid Interface type, %d\n",
271                                        fn, desc->iface);
272                        }
273                } else {
274                        printf ("%s: Invalid family type, %d\n", fn, desc->family);
275                }
276        } else {
277                printf ("%s: NULL descriptor!\n", fn);
278        }
279
280        return ret_val;
281}
282
283/* ------------------------------------------------------------------------- */
Note: See TracBrowser for help on using the repository browser.