mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-22 06:32:23 +00:00
drivers/fsl-mc: Make MC boot error messages more readable
Make it easier for the user to notice when the MC firmware had problems booting. Signed-off-by: J. German Rivera <German.Rivera@freescale.com> Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com> Reviewed-by: York Sun <yorksun@freescale.com>
This commit is contained in:
parent
b0ba9d48a4
commit
cc088c3ac6
1 changed files with 13 additions and 18 deletions
|
@ -224,13 +224,13 @@ static int load_mc_dpc(u64 mc_ram_addr, size_t mc_ram_size)
|
||||||
* Don't return with error here, since the MC firmware can
|
* Don't return with error here, since the MC firmware can
|
||||||
* still boot without a DPC
|
* still boot without a DPC
|
||||||
*/
|
*/
|
||||||
printf("fsl-mc: WARNING: No DPC image found\n");
|
printf("\nfsl-mc: WARNING: No DPC image found");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dpc_size = fdt_totalsize(dpc_fdt_hdr);
|
dpc_size = fdt_totalsize(dpc_fdt_hdr);
|
||||||
if (dpc_size > CONFIG_SYS_LS_MC_DPC_MAX_LENGTH) {
|
if (dpc_size > CONFIG_SYS_LS_MC_DPC_MAX_LENGTH) {
|
||||||
printf("fsl-mc: ERROR: Bad DPC image (too large: %d)\n",
|
printf("\nfsl-mc: ERROR: Bad DPC image (too large: %d)\n",
|
||||||
dpc_size);
|
dpc_size);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -278,13 +278,13 @@ static int load_mc_dpl(u64 mc_ram_addr, size_t mc_ram_size)
|
||||||
|
|
||||||
error = fdt_check_header(dpl_fdt_hdr);
|
error = fdt_check_header(dpl_fdt_hdr);
|
||||||
if (error != 0) {
|
if (error != 0) {
|
||||||
printf("fsl-mc: ERROR: Bad DPL image (bad header)\n");
|
printf("\nfsl-mc: ERROR: Bad DPL image (bad header)\n");
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
dpl_size = fdt_totalsize(dpl_fdt_hdr);
|
dpl_size = fdt_totalsize(dpl_fdt_hdr);
|
||||||
if (dpl_size > CONFIG_SYS_LS_MC_DPL_MAX_LENGTH) {
|
if (dpl_size > CONFIG_SYS_LS_MC_DPL_MAX_LENGTH) {
|
||||||
printf("fsl-mc: ERROR: Bad DPL image (too large: %d)\n",
|
printf("\nfsl-mc: ERROR: Bad DPL image (too large: %d)\n",
|
||||||
dpl_size);
|
dpl_size);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
@ -329,7 +329,6 @@ static int wait_for_mc(bool booting_mc, u32 *final_reg_gsr)
|
||||||
struct mc_ccsr_registers __iomem *mc_ccsr_regs = MC_CCSR_BASE_ADDR;
|
struct mc_ccsr_registers __iomem *mc_ccsr_regs = MC_CCSR_BASE_ADDR;
|
||||||
|
|
||||||
dmb();
|
dmb();
|
||||||
debug("Polling mc_ccsr_regs->reg_gsr ...\n");
|
|
||||||
assert(timeout_ms > 0);
|
assert(timeout_ms > 0);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
udelay(1000); /* throttle polling */
|
udelay(1000); /* throttle polling */
|
||||||
|
@ -344,10 +343,7 @@ static int wait_for_mc(bool booting_mc, u32 *final_reg_gsr)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timeout_ms == 0) {
|
if (timeout_ms == 0) {
|
||||||
if (booting_mc)
|
printf("ERROR: timeout\n");
|
||||||
printf("fsl-mc: timeout booting management complex firmware\n");
|
|
||||||
else
|
|
||||||
printf("fsl-mc: timeout deploying data path layout\n");
|
|
||||||
|
|
||||||
/* TODO: Get an error status from an MC CCSR register */
|
/* TODO: Get an error status from an MC CCSR register */
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
|
@ -360,15 +356,13 @@ static int wait_for_mc(bool booting_mc, u32 *final_reg_gsr)
|
||||||
* appropriate errno, so that the status property is set to
|
* appropriate errno, so that the status property is set to
|
||||||
* failure in the fsl,dprc device tree node.
|
* failure in the fsl,dprc device tree node.
|
||||||
*/
|
*/
|
||||||
if (booting_mc) {
|
printf("WARNING: Firmware returned an error (GSR: %#x)\n",
|
||||||
printf("fsl-mc: WARNING: Firmware booted with error (GSR: %#x)\n",
|
|
||||||
reg_gsr);
|
reg_gsr);
|
||||||
} else {
|
} else {
|
||||||
printf("fsl-mc: WARNING: Data path layout deployed with error (GSR: %#x)\n",
|
printf("SUCCESS\n");
|
||||||
reg_gsr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
*final_reg_gsr = reg_gsr;
|
*final_reg_gsr = reg_gsr;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -464,7 +458,7 @@ int mc_init(void)
|
||||||
*/
|
*/
|
||||||
out_le32(&mc_ccsr_regs->reg_gsr, 0xDD00);
|
out_le32(&mc_ccsr_regs->reg_gsr, 0xDD00);
|
||||||
|
|
||||||
printf("\nfsl-mc: Booting Management Complex ...\n");
|
printf("\nfsl-mc: Booting Management Complex ... ");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Deassert reset and release MC core 0 to run
|
* Deassert reset and release MC core 0 to run
|
||||||
|
@ -517,10 +511,11 @@ int mc_init(void)
|
||||||
* Tell the MC to deploy the DPL:
|
* Tell the MC to deploy the DPL:
|
||||||
*/
|
*/
|
||||||
out_le32(&mc_ccsr_regs->reg_gsr, 0x0);
|
out_le32(&mc_ccsr_regs->reg_gsr, 0x0);
|
||||||
printf("\nfsl-mc: Deploying data path layout ...\n");
|
printf("fsl-mc: Deploying data path layout ... ");
|
||||||
error = wait_for_mc(false, ®_gsr);
|
error = wait_for_mc(false, ®_gsr);
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
mc_boot_status = -error;
|
mc_boot_status = -error;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue