@ -31,6 +31,7 @@ static const struct {
u32 id ;
u32 ver ;
char * name ;
bool evexists ;
} zynqmp_devices [ ] = {
{
. id = 0x10 ,
@ -53,11 +54,13 @@ static const struct {
{
. id = 0x20 ,
. name = " 5ev " ,
. evexists = 1 ,
} ,
{
. id = 0x20 ,
. ver = 0x100 ,
. name = " 5eg " ,
. evexists = 1 ,
} ,
{
. id = 0x20 ,
@ -67,11 +70,13 @@ static const struct {
{
. id = 0x21 ,
. name = " 4ev " ,
. evexists = 1 ,
} ,
{
. id = 0x21 ,
. ver = 0x100 ,
. name = " 4eg " ,
. evexists = 1 ,
} ,
{
. id = 0x21 ,
@ -81,11 +86,13 @@ static const struct {
{
. id = 0x30 ,
. name = " 7ev " ,
. evexists = 1 ,
} ,
{
. id = 0x30 ,
. ver = 0x100 ,
. name = " 7eg " ,
. evexists = 1 ,
} ,
{
. id = 0x30 ,
@ -219,20 +226,48 @@ int chip_id(unsigned char id)
return val ;
}
# define ZYNQMP_VERSION_SIZE 9
# define ZYNQMP_PL_STATUS_BIT 9
# define ZYNQMP_PL_STATUS_MASK BIT(ZYNQMP_PL_STATUS_BIT)
# define ZYNQMP_CSU_VERSION_MASK ~(ZYNQMP_PL_STATUS_MASK)
# if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \
! defined ( CONFIG_SPL_BUILD )
static char * zynqmp_get_silicon_idcode_name ( void )
{
u32 i , id , ver ;
char * buf ;
static char name [ ZYNQMP_VERSION_SIZE ] ;
id = chip_id ( IDCODE ) ;
ver = chip_id ( IDCODE2 ) ;
for ( i = 0 ; i < ARRAY_SIZE ( zynqmp_devices ) ; i + + ) {
if ( zynqmp_devices [ i ] . id = = id & & zynqmp_devices [ i ] . ver = = ver )
return zynqmp_devices [ i ] . name ;
if ( ( zynqmp_devices [ i ] . id = = id ) & &
( zynqmp_devices [ i ] . ver = = ( ver &
ZYNQMP_CSU_VERSION_MASK ) ) ) {
strncat ( name , " zu " , 2 ) ;
strncat ( name , zynqmp_devices [ i ] . name ,
ZYNQMP_VERSION_SIZE - 3 ) ;
break ;
}
}
return " unknown " ;
if ( i > = ARRAY_SIZE ( zynqmp_devices ) )
return " unknown " ;
if ( ! zynqmp_devices [ i ] . evexists )
return name ;
if ( ver & ZYNQMP_PL_STATUS_MASK )
return name ;
if ( strstr ( name , " eg " ) | | strstr ( name , " ev " ) ) {
buf = strstr ( name , " e " ) ;
* buf = ' \0 ' ;
}
return name ;
}
# endif
@ -250,8 +285,6 @@ int board_early_init_f(void)
return ret ;
}
# define ZYNQMP_VERSION_SIZE 9
int board_init ( void )
{
printf ( " EL Level: \t EL%d \n " , current_el ( ) ) ;
@ -260,12 +293,7 @@ int board_init(void)
! defined ( CONFIG_SPL_BUILD ) | | ( defined ( CONFIG_SPL_FPGA_SUPPORT ) & & \
defined ( CONFIG_SPL_BUILD ) )
if ( current_el ( ) ! = 3 ) {
static char version [ ZYNQMP_VERSION_SIZE ] ;
strncat ( version , " zu " , 2 ) ;
zynqmppl . name = strncat ( version ,
zynqmp_get_silicon_idcode_name ( ) ,
ZYNQMP_VERSION_SIZE - 3 ) ;
zynqmppl . name = zynqmp_get_silicon_idcode_name ( ) ;
printf ( " Chip ID: \t %s \n " , zynqmppl . name ) ;
fpga_init ( ) ;
fpga_add ( fpga_xilinx , & zynqmppl ) ;