diff --git a/src/soc/mediatek/common/dramc_param.c b/src/soc/mediatek/common/dramc_param.c index c596adb208..4e05bc2e73 100644 --- a/src/soc/mediatek/common/dramc_param.c +++ b/src/soc/mediatek/common/dramc_param.c @@ -11,6 +11,27 @@ struct dramc_param *get_dramc_param_from_blob(void *blob) return (struct dramc_param *)blob; } +static const char *const status_strings[] = { + [DRAMC_SUCCESS] = "success", + [DRAMC_ERR_INVALID_VERSION] = "invalid version", + [DRAMC_ERR_INVALID_SIZE] = "invalid size", + [DRAMC_ERR_INVALID_FLAGS] = "invalid flags", + [DRAMC_ERR_RECALIBRATE] = "full calibration needed", + [DRAMC_ERR_INIT_DRAM] = "calibration error", + [DRAMC_ERR_COMPLEX_RW_MEM_TEST] = "mem test failure", + [DRAMC_ERR_1ST_COMPLEX_RW_MEM_TEST] = "1st mem test failure", + [DRAMC_ERR_2ND_COMPLEX_RW_MEM_TEST] = "2nd mem test failure", + [DRAMC_ERR_FAST_CALIBRATION] = "fast calibration error", +}; + +const char *get_status_string(u16 status) +{ + const char *s = NULL; + if (status < ARRAY_SIZE(status_strings)) + s = status_strings[status]; + return s ? s : "UNKNOWN STATUS"; +} + void dump_param_header(const void *blob) { const struct dramc_param *dparam = blob; diff --git a/src/soc/mediatek/common/include/soc/dramc_param_common.h b/src/soc/mediatek/common/include/soc/dramc_param_common.h index 3c72cb55d3..57ee16d7e5 100644 --- a/src/soc/mediatek/common/include/soc/dramc_param_common.h +++ b/src/soc/mediatek/common/include/soc/dramc_param_common.h @@ -105,6 +105,7 @@ struct ddr_base_info { const struct sdram_info *get_sdram_config(void); struct dramc_param *get_dramc_param_from_blob(void *blob); +const char *get_status_string(u16 status); void dump_param_header(const void *blob); int validate_dramc_param(const void *blob); int is_valid_dramc_param(const void *blob); diff --git a/src/soc/mediatek/common/memory.c b/src/soc/mediatek/common/memory.c index f08b1d55cf..6408ac03e8 100644 --- a/src/soc/mediatek/common/memory.c +++ b/src/soc/mediatek/common/memory.c @@ -172,9 +172,11 @@ static int run_dram_blob(struct dramc_param *dparam) prog_set_entry(&dram, prog_entry(&dram), dparam); prog_run(&dram); - if (dparam->header.status != DRAMC_SUCCESS) { - printk(BIOS_ERR, "DRAM-K: calibration failed: status = %d\n", - dparam->header.status); + + u16 status = dparam->header.status; + if (status != DRAMC_SUCCESS) { + printk(BIOS_ERR, "DRAM-K: calibration failed: status = %d (%s)\n", + status, get_status_string(status)); return -3; }