Skip to content

Commit

Permalink
rockchip: don't crash if we get an FDT we can't parse
Browse files Browse the repository at this point in the history
When we parse the param from BL2, we try to parse it as a FDT and then,
if that fails, as aux params. However, we don't sufficiently distinguish
between failure modes in the first step: specifically, if we are given
an FDT with good magic that we can't parse for some other reason (e.g.
not enough space in our buffer), we still attempt to parse it as aux
params even though that's guaranteed to fatal. Instead, we should either
fail with a more descriptive message or continue to boot without parsing
the FDT.

This patch takes the latter approach, since all we currently get from
the FDT is non-critical UART params.

Signed-off-by: Thomas Hebb <tommyhebb@gmail.com>
Change-Id: I1e98f1fcda4f78e6b45e86956288bafe58b113e4
  • Loading branch information
tchebb committed Jul 4, 2020
1 parent 568a881 commit e7b5869
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion plat/rockchip/common/params_setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,27 @@ static bool rk_aux_param_handler(struct bl_aux_param_header *param)

void params_early_setup(u_register_t plat_param_from_bl2)
{
int ret;

/*
* Test if this is a FDT passed as a platform-specific parameter
* block.
*/
if (!dt_process_fdt(plat_param_from_bl2))
ret = dt_process_fdt(plat_param_from_bl2);
if (!ret) {
return;
} else if (ret != -FDT_ERR_BADMAGIC) {
/*
* If we found an FDT but couldn't parse it (e.g. corrupt, not
* enough space), return and don't attempt to parse the param
* as something else, since we know that will also fail. All
* we're doing is setting up UART, this doesn't need to be
* fatal.
*/
WARN("%s: found FDT but could not parse: error %d\n",
__func__, ret);
return;
}

bl_aux_params_parse(plat_param_from_bl2, rk_aux_param_handler);
}

0 comments on commit e7b5869

Please sign in to comment.