@ -297,10 +297,86 @@ void fdt_fixup_crypto_node(void *blob, int sec_rev)
fdt_strerror ( err ) ) ;
}
# elif CONFIG_SYS_FSL_SEC_COMPAT >= 4 /* SEC4 */
static u8 caam_get_era ( void )
{
static const struct {
u16 ip_id ;
u8 maj_rev ;
u8 era ;
} caam_eras [ ] = {
{ 0x0A10 , 1 , 1 } ,
{ 0x0A10 , 2 , 2 } ,
{ 0x0A12 , 1 , 3 } ,
{ 0x0A14 , 1 , 3 } ,
{ 0x0A14 , 2 , 4 } ,
{ 0x0A16 , 1 , 4 } ,
{ 0x0A10 , 3 , 4 } ,
{ 0x0A11 , 1 , 4 } ,
{ 0x0A18 , 1 , 4 } ,
{ 0x0A11 , 2 , 5 } ,
{ 0x0A12 , 2 , 5 } ,
{ 0x0A13 , 1 , 5 } ,
{ 0x0A1C , 1 , 5 }
} ;
ccsr_sec_t __iomem * sec = ( void __iomem * ) CONFIG_SYS_FSL_SEC_ADDR ;
u32 secvid_ms = in_be32 ( & sec - > secvid_ms ) ;
u32 ccbvid = in_be32 ( & sec - > ccbvid ) ;
u16 ip_id = ( secvid_ms & SEC_SECVID_MS_IPID_MASK ) > >
SEC_SECVID_MS_IPID_SHIFT ;
u8 maj_rev = ( secvid_ms & SEC_SECVID_MS_MAJ_REV_MASK ) > >
SEC_SECVID_MS_MAJ_REV_SHIFT ;
u8 era = ( ccbvid & SEC_CCBVID_ERA_MASK ) > > SEC_CCBVID_ERA_SHIFT ;
int i ;
if ( era ) /* This is '0' prior to CAAM ERA-6 */
return era ;
for ( i = 0 ; i < ARRAY_SIZE ( caam_eras ) ; i + + )
if ( caam_eras [ i ] . ip_id = = ip_id & &
caam_eras [ i ] . maj_rev = = maj_rev )
return caam_eras [ i ] . era ;
return 0 ;
}
static void fdt_fixup_crypto_era ( void * blob , u32 era )
{
int err ;
int crypto_node ;
crypto_node = fdt_path_offset ( blob , " crypto " ) ;
if ( crypto_node < 0 ) {
printf ( " WARNING: Missing crypto node \n " ) ;
return ;
}
err = fdt_setprop ( blob , crypto_node , " fsl,sec-era " , & era ,
sizeof ( era ) ) ;
if ( err < 0 ) {
printf ( " ERROR: could not set fsl,sec-era property: %s \n " ,
fdt_strerror ( err ) ) ;
}
}
void fdt_fixup_crypto_node ( void * blob , int sec_rev )
{
if ( ! sec_rev )
u8 era ;
if ( ! sec_rev ) {
fdt_del_node_and_alias ( blob , " crypto " ) ;
return ;
}
/* Add SEC ERA information in compatible */
era = caam_get_era ( ) ;
if ( era ) {
fdt_fixup_crypto_era ( blob , era ) ;
} else {
printf ( " WARNING: Unable to get ERA for CAAM rev: %d \n " ,
sec_rev ) ;
}
}
# endif