1*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 2*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * (C) Copyright 2007 3*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * Eran Liberty, Extricom , eran.liberty@gmail.com 4*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * 5*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * See file CREDITS for list of people who contributed to this 6*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * project. 7*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * 8*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * This program is free software; you can redistribute it and/or 9*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * modify it under the terms of the GNU General Public License as 10*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * published by the Free Software Foundation; either version 2 of 11*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * the License, or (at your option) any later version. 12*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * 13*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * This program is distributed in the hope that it will be useful, 14*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * GNU General Public License for more details. 17*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * 18*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * You should have received a copy of the GNU General Public License 19*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * along with this program; if not, write to the Free Software 20*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * MA 02111-1307 USA 22*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD * 23*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD */ 24*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 25*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD #include <common.h> /* core U-Boot definitions */ 26*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD #include <altera.h> 27*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 28*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, 29*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int isSerial, int isSecure); 30*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_ps_fpp_dump (Altera_desc * desc, void *buf, size_t bsize); 31*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 32*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /****************************************************************/ 33*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* Stratix II Generic Implementation */ 34*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_load (Altera_desc * desc, void *buf, size_t bsize) 35*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD { 36*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int ret_val = FPGA_FAIL; 37*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 38*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD switch (desc->iface) { 39*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD case passive_serial: 40*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ret_val = StratixII_ps_fpp_load (desc, buf, bsize, 1, 0); 41*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD break; 42*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD case fast_passive_parallel: 43*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ret_val = StratixII_ps_fpp_load (desc, buf, bsize, 0, 0); 44*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD break; 45*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD case fast_passive_parallel_security: 46*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ret_val = StratixII_ps_fpp_load (desc, buf, bsize, 0, 1); 47*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD break; 48*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 49*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* Add new interface types here */ 50*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD default: 51*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("%s: Unsupported interface type, %d\n", __FUNCTION__, 52*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD desc->iface); 53*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 54*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return ret_val; 55*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 56*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 57*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_dump (Altera_desc * desc, void *buf, size_t bsize) 58*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD { 59*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int ret_val = FPGA_FAIL; 60*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 61*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD switch (desc->iface) { 62*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD case passive_serial: 63*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD case fast_passive_parallel: 64*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD case fast_passive_parallel_security: 65*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ret_val = StratixII_ps_fpp_dump (desc, buf, bsize); 66*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD break; 67*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* Add new interface types here */ 68*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD default: 69*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("%s: Unsupported interface type, %d\n", __FUNCTION__, 70*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD desc->iface); 71*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 72*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return ret_val; 73*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 74*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 75*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_info (Altera_desc * desc) 76*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD { 77*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_SUCCESS; 78*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 79*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 80*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_reloc (Altera_desc * desc, ulong reloc_offset) 81*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD { 82*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int i; 83*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD uint32_t dest = (uint32_t) desc & 0xff000000; 84*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 85*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* we assume a relocated code and non relocated code has different upper 8 bits */ 86*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (dest != ((uint32_t) desc->iface_fns & 0xff000000)) { 87*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD desc->iface_fns = 88*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD (void *)((uint32_t) (desc->iface_fns) + reloc_offset); 89*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 90*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD for (i = 0; i < sizeof (altera_board_specific_func) / sizeof (void *); 91*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD i++) { 92*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (dest != 93*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ((uint32_t) (((void **)(desc->iface_fns))[i]) & 0xff000000)) 94*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD { 95*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ((void **)(desc->iface_fns))[i] = 96*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD (void 97*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD *)(((uint32_t) (((void **)(desc->iface_fns))[i])) + 98*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD reloc_offset); 99*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 100*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 101*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_SUCCESS; 102*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 103*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 104*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_ps_fpp_dump (Altera_desc * desc, void *buf, size_t bsize) 105*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD { 106*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("Stratix II Fast Passive Parallel dump is not implemented\n"); 107*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 108*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 109*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 110*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, 111*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int isSerial, int isSecure) 112*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD { 113*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD altera_board_specific_func *fns; 114*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int cookie; 115*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int ret_val = FPGA_FAIL; 116*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int bytecount; 117*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD char *buff = buf; 118*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int i; 119*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 120*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (!desc) { 121*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("%s(%d) Altera_desc missing\n", __FUNCTION__, __LINE__); 122*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 123*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 124*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (!buff) { 125*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("%s(%d) buffer is missing\n", __FUNCTION__, __LINE__); 126*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 127*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 128*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (!bsize) { 129*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("%s(%d) size is zero\n", __FUNCTION__, __LINE__); 130*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 131*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 132*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (!desc->iface_fns) { 133*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf 134*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ("%s(%d) Altera_desc function interface table is missing\n", 135*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD __FUNCTION__, __LINE__); 136*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 137*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 138*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns = (altera_board_specific_func *) (desc->iface_fns); 139*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD cookie = desc->cookie; 140*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 141*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (! 142*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD (fns->config && fns->status && fns->done && fns->data 143*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD && fns->abort)) { 144*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf 145*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ("%s(%d) Missing some function in the function interface table\n", 146*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD __FUNCTION__, __LINE__); 147*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 148*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 149*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 150*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 1. give board specific a chance to do anything before we start */ 151*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (fns->pre) { 152*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if ((ret_val = fns->pre (cookie)) < 0) { 153*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return ret_val; 154*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 155*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 156*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 157*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* from this point on we must fail gracfully by calling lower layer abort */ 158*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 159*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 2. Strat burn cycle by deasserting config for t_CFG and waiting t_CF2CK after reaserted */ 160*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->config (0, 1, cookie); 161*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD udelay (5); /* nCONFIG low pulse width 2usec */ 162*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->config (1, 1, cookie); 163*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD udelay (100); /* nCONFIG high to first rising edge on DCLK */ 164*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 165*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3. Start the Data cycle with clk deasserted */ 166*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD bytecount = 0; 167*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (0, 1, cookie); 168*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 169*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("loading to fpga "); 170*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD while (bytecount < bsize) { 171*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3.1 check stratix has not signaled us an error */ 172*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (fns->status (cookie) != 1) { 173*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf 174*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD ("\n%s(%d) Stratix failed (byte transfered till failure 0x%x)\n", 175*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD __FUNCTION__, __LINE__, bytecount); 176*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->abort (cookie); 177*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 178*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 179*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (isSerial) { 180*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD int i; 181*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD uint8_t data = buff[bytecount++]; 182*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD for (i = 0; i < 8; i++) { 183*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3.2(ps) put data on the bus */ 184*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->data ((data >> i) & 1, 1, cookie); 185*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 186*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3.3(ps) clock once */ 187*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (1, 1, cookie); 188*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (0, 1, cookie); 189*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 190*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } else { 191*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3.2(fpp) put data on the bus */ 192*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->data (buff[bytecount++], 1, cookie); 193*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 194*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3.3(fpp) clock once */ 195*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (1, 1, cookie); 196*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (0, 1, cookie); 197*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 198*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3.4(fpp) for secure cycle push 3 more clocks */ 199*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD for (i = 0; isSecure && i < 3; i++) { 200*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (1, 1, cookie); 201*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (0, 1, cookie); 202*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 203*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 204*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 205*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 3.5 while clk is deasserted it is safe to print some progress indication */ 206*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if ((bytecount % (bsize / 100)) == 0) { 207*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("\b\b\b%02d\%", bytecount * 100 / bsize); 208*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 209*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 210*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 211*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 4. Set one last clock and check conf done signal */ 212*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->clk (1, 1, cookie); 213*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD udelay (100); 214*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (!fns->done (cookie)) { 215*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf (" error!.\n"); 216*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->abort (cookie); 217*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_FAIL; 218*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } else { 219*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD printf ("\b\b\b done.\n"); 220*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 221*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 222*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD /* 5. call lower layer post configuration */ 223*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if (fns->post) { 224*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD if ((ret_val = fns->post (cookie)) < 0) { 225*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD fns->abort (cookie); 226*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return ret_val; 227*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 228*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 229*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD 230*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD return FPGA_SUCCESS; 231*c8aa7dfcSJean-Christophe PLAGNIOL-VILLARD } 232