#include #include #include #include static FL_ERR_CODE_E flashloader_convert_return_value(FUSE_ERR_CODE_E ret) { FL_ERR_CODE_E err = ERR_NONE; switch (ret) { case ERR_NONE: err = ERR_NONE; break; case ERR_UNKNOWN: err = ERR_UNKNOWN; break; case ERR_FUSE_BIN_SIZE_CHECK_FAIL: err = ERR_FL_FUSE_SIZE_CHECK_FAIL; break; case ERR_FUSE_BIN_LENGTH_CHECK_FAIL: err = ERR_FL_FUSE_LENGTH_CHECK_FAIL; break; case ERR_FUSE_BIN_ACTION_TYPE_NOT_FIND: err = ERR_FL_FUSE_ACTION_TYPE_NOT_FIND; break; case ERR_FUSE_BIN_CRC_CHECK_FAIL: err = ERR_FL_FUSE_CRC_CHECK_FAIL; break; case ERR_FUSE_BIN_ENC_INIT_FAIL: err = ERR_FL_FUSE_ENC_INIT_FAIL; break; case ERR_FUSE_BIN_ENC_FAIL: err = ERR_FL_FUSE_ENC_FAIL; break; case ERR_FUSE_BIN_MALLOC_FAIL: err = ERR_FL_FUSE_MALLOC_FAIL; break; case ERR_FUSE_BIN_GEN_DATA_FAIL: err = ERR_FL_FUSE_GEN_DATA_FAIL; break; case ERR_FUSE_BIN_READ_FAIL: err = ERR_FUSE_READ_FAIL; break; case ERR_FUSE_BIN_WRITE_FAIL: err = ERR_FUSE_WRITE_FAIL; break; case ERR_FUSE_BIN_READBACK_VERIFY_FAIL: err = ERR_FUSE_READBACK_VERIFY_FAIL; break; default: break; } return err; } void tcm_enable_axi_slave_port(void) { uint32_t val; __ASM volatile("mov %0, #0\n" "mcr p15, 0, %0, c11, c0, 0\n" : "+r"(val) : :); } __USED int32_t jflash_program_fuse_bin(uint32_t nNumBytes, const uint8_t *pSrcBuff) { jflash_board_init_once(); tcm_enable_axi_slave_port(); FUSE_ERR_CODE_E ret; FL_ERR_CODE_E err; ret = fuse_bin((void *)pSrcBuff, nNumBytes); err = flashloader_convert_return_value(ret); if (err) { ssdk_printf(SSDK_NOTICE, "fuse bin error\r\n"); report_error(err); } else { ssdk_printf(SSDK_NOTICE, "fuse bin success\r\n"); } return err; }