示例#1
0
/* --------------------------------------------------------------------
 * USB Download for End User: get the secure RO
 * --------------------------------------------------------------------*/
kal_bool custom_get_secureRO(void)
{
#ifdef __SV5_ENABLED__

   if ( CUSTOM_SEC_RO.m_sec_ro_ver != 0 )
   {
      return KAL_TRUE;
   }

   if(bl_Get_Secure_RO((kal_uint32)g_custom_SEC_RO_buf, sizeof(g_custom_SEC_RO_buf), 0, 0) == KAL_TRUE)
   {
      kal_uint32 *pSecureRoAddr = (kal_uint32*) bl_Allocate_BL_DA_SharedData(BL_DA_SHARED_DATA_ID_SECURE_RO_ADDR, 8);

      *pSecureRoAddr = (kal_uint32)g_custom_SEC_RO_buf;
      pSecureRoAddr++;
      
      *pSecureRoAddr = sizeof(SEC_RO_ST);
      
      return KAL_TRUE;
   }

#else
   kal_int32 i;
   kal_uint32 secInfoSearchAddr[2];
      
   if ( CUSTOM_SEC_RO.m_sec_ro_ver != 0 )
   {
      return KAL_TRUE;
   }

   secInfoSearchAddr[0] = custom_ROM_baseaddr() & REMAPPING_MASK;     //SecInfo
   secInfoSearchAddr[1] = 0x100000;                                      //SecInfo Tail

   for ( i=0; i<sizeof(secInfoSearchAddr)/sizeof(*secInfoSearchAddr); i++ )
   {
      bl_Get_Secure_RO((kal_uint32)&g_custom_SEC_RO_buf, sizeof(g_custom_SEC_RO_buf), secInfoSearchAddr[i], custom_get_NORFLASH_Size());

      if (NVRAM_SECRET_KEY_SIZE == CUSTOM_SEC_RO.m_custom_secret_key_len )
      {
         if (memcmp(CUSTOM_SEC_RO.m_custom_magic_tail, SEC_RO_MAGIC_TAIL_VALUE, strlen(SEC_RO_MAGIC_TAIL_VALUE)) == 0)
         {
            return KAL_TRUE;
         }
      }
   }
#endif

   //Not found any SecInfo
   CUSTOM_SEC_RO.m_sec_ro_ver = 0;
   return KAL_FALSE;
}
kal_uint32 bl_Alg_Copy_Func_Tbl(kal_uint32 dest_addr)
{
#if defined(__SECURE_USB_DOWNLOAD__) || defined(__SECURE_UART_DOWNLOAD__)

#if defined(_NAND_FLASH_BOOTING_) || defined(__EMMC_BOOTING__)

   kal_uint32 i;
   kal_uint32 *pSrc = (kal_uint32*)(&g_BlFunc_Table);
   kal_uint32 *pDst = (kal_uint32*)dest_addr;
   for ( i=0; i<(sizeof(g_BlFunc_Table)+3)/4; i++ )
   {
      *pDst = *pSrc;
      pSrc++;
      pDst++;
   }

#else

   dest_addr = (kal_uint32)&g_BlFunc_Table;

#endif /* _NAND_FLASH_BOOTING_ || __EMMC_BOOTING__ */

#if defined(__SV5_ENABLED__)
   //Prepare data for DA usage
   {
      kal_uint32 *pFuncTblAddr = (kal_uint32*) bl_Allocate_BL_DA_SharedData(BL_DA_SHARED_DATA_ID_FUNC_TBL_ADDR, 4);

      //Pass the address of func tbl string to DA
      *pFuncTblAddr = dest_addr + sizeof(g_BlFunc_Table) - sizeof(g_BlFunc_Table.m_func_table_id);
   }
#endif

#endif /* __SECURE_USB_DOWNLOAD__ */

   return 0;
}