@ -30,6 +30,7 @@
*/
# include <common.h>
# include <fpga.h>
# include <virtex2.h>
# include <spartan2.h>
# include <spartan3.h>
@ -58,8 +59,14 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size)
char buffer [ 80 ] ;
unsigned char * dataptr ;
unsigned int i ;
const fpga_desc * desc ;
Xilinx_desc * xdesc ;
dataptr = ( unsigned char * ) fpgadata ;
/* Find out fpga_description */
desc = fpga_validate ( devnum , dataptr , 0 , ( char * ) __func__ ) ;
/* Assign xilinx device description */
xdesc = desc - > devdesc ;
/* skip the first bytes of the bitsteam, their meaning is unknown */
length = ( * dataptr < < 8 ) + * ( dataptr + 1 ) ;
@ -93,6 +100,20 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size)
dataptr + = 2 ;
for ( i = 0 ; i < length ; i + + )
buffer [ i ] = * dataptr + + ;
if ( xdesc - > name ) {
i = strncmp ( buffer , xdesc - > name , strlen ( xdesc - > name ) ) ;
if ( i ) {
printf ( " %s: Wrong bitstream ID for this device \n " ,
__func__ ) ;
printf ( " %s: Bitstream ID %s, current device ID %d/%s \n " ,
__func__ , buffer , devnum , xdesc - > name ) ;
return FPGA_FAIL ;
}
} else {
printf ( " %s: Please fill correct device ID to Xilinx_desc \n " ,
__func__ ) ;
}
printf ( " part number = \" %s \" \n " , buffer ) ;
/* get date (identifier, length, string) */
@ -306,6 +327,8 @@ int xilinx_info (Xilinx_desc * desc)
printf ( " Device Size: \t %d bytes \n "
" Cookie: \t 0x%x (%d) \n " ,
desc - > size , desc - > cookie , desc - > cookie ) ;
if ( desc - > name )
printf ( " Device name: \t %s \n " , desc - > name ) ;
if ( desc - > iface_fns ) {
printf ( " Device Function Table @ 0x%p \n " , desc - > iface_fns ) ;