lpc: More verbosity and more definitions

This commit is contained in:
Uwe Bonnes 2021-05-20 12:32:59 +02:00 committed by UweBonnes
parent 6454d0bc96
commit 21a702dc1e
2 changed files with 64 additions and 3 deletions

View File

@ -33,6 +33,42 @@ struct flash_param {
uint32_t result[4];
} __attribute__((aligned(4)));
char *iap_error[] = {
"CMD_SUCCESS",
"Invalid command",
"Unaligned src address",
"Dst address not on boundary",
"Src not mapped",
"Dst not mapped",
"Invalid byte count",
"Invalid sector",
"Sector not blank",
"Sector not prepared",
"Compare error",
"Flash interface busy",
"Invalid or missing parameter",
"Address not on boundary",
"Address not mapped",
"Checksum error",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"FRO not powered",
"Flash not powered",
"25",
"26",
"Flash clock disabled",
"Reinvoke error",
"Invalid image",
"30",
"31",
"Flash erase failed",
"Page is invalid",
};
struct lpc_flash *lpc_add_flash(target *t, target_addr addr, size_t length)
{
@ -109,11 +145,17 @@ enum iap_status lpc_iap_call(struct lpc_flash *f, void *result, enum iap_cmd cmd
if (result != NULL)
memcpy(result, param.result, sizeof(param.result));
#if defined(ENABLE_DEBUG)
if (param.status != IAP_STATUS_CMD_SUCCESS) {
DEBUG_WARN("IAP failure code %d for cmd %d\n",
(enum iap_status)param.status, cmd);
if (param.status > (sizeof(iap_error) / sizeof(char*)))
DEBUG_WARN("IAP cmd %d : %d\n", cmd, param.status);
else
DEBUG_WARN("IAP cmd %d : %s\n", cmd, iap_error[param.status]);
DEBUG_WARN("return parameters: %08" PRIx32 " %08" PRIx32 " %08" PRIx32
" %08" PRIx32 "\n", param.result[0],
param.result[1], param.result[2], param.result[3]);
}
#endif
return param.status;
}

View File

@ -21,14 +21,23 @@
#define __LPC_COMMON_H
enum iap_cmd {
IAP_CMD_READ_FACTORY_SETTINGS = 40,
IAP_CMD_INIT = 49,
IAP_CMD_PREPARE = 50,
IAP_CMD_PROGRAM = 51,
IAP_CMD_ERASE = 52,
IAP_CMD_BLANKCHECK = 53,
IAP_CMD_PARTID = 54,
IAP_CMD_READ_BOOTROM_VERSION = 55,
IAP_CMD_COMPARE = 56,
IAP_CMD_REINVOKE_ISP = 57,
IAP_CMD_READUID = 58,
IAP_CMD_ERASE_PAGE = 59,
IAP_CMD_SET_ACTIVE_BANK = 60,
IAP_CMD_READ_SIGNATURE = 70,
IAP_CMD_EXTENDED_READ_SIGNATURE = 73,
IAP_CMD_READ_EEPROM_PAGE = 80,
IAP_CMD_WRITE_EEPROM_PAGE = 81,
};
enum iap_status {
@ -44,6 +53,16 @@ enum iap_status {
IAP_STATUS_SECTOR_NOT_PREPARED = 9,
IAP_STATUS_COMPARE_ERROR = 10,
IAP_STATUS_BUSY = 11,
IAP_STATUS_MISSING_PARAMETERS = 12,
IAP_STATUS_UNALIGNED_ADDRESS = 13,
IAP_STATUS_ADDRESS_NOT_MAPPED = 14,
IAP_STATUS_FRO_NO_POWER = 23,
IAP_STATUS_FLASH_NO_POWER = 24,
IAP_STATUS_NO_CLOCK = 27,
IAP_STATUS_REINVOKE_CFG_ERR = 28,
IAP_STATUS_NO_VALID_IMAGE = 29,
IAP_STATUS_FLASH_ERASE = 32,
IAP_STATUS_INVALID_PAGE = 33,
};
/* CPU Frequency */