[U-Boot] [RFC 1/1] m68k: mfc5227x: do not rely on uninitialized stack values
Angelo Dureghello
angelo at sysam.it
Mon Jul 31 15:16:03 UTC 2017
Hi Heinrich,
thanks for the patch
On 30/07/2017 20:59, Heinrich Schuchardt wrote:
> The behavior get_clocks depends on the unitialized
> value of bootmode.
>
> By setting it to zero we get a defined behavior and
> can get rid of superfluos coding.
>
> The problem was indicated by cppcheck.
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> ---
> I have no hardware to test this.
> Please, check thorougly before merging.
> ---
> ---
> arch/m68k/cpu/mcf5227x/speed.c | 10 ++--------
> 1 file changed, 2 insertions(+), 8 deletions(-)
>
> diff --git a/arch/m68k/cpu/mcf5227x/speed.c b/arch/m68k/cpu/mcf5227x/speed.c
> index 44de4a6701..978cc7adc6 100644
> --- a/arch/m68k/cpu/mcf5227x/speed.c
> +++ b/arch/m68k/cpu/mcf5227x/speed.c
> @@ -73,14 +73,8 @@ int get_clocks(void)
>
> ccm_t *ccm = (ccm_t *)MMAP_CCM;
> pll_t *pll = (pll_t *)MMAP_PLL;
> - int vco, temp, pcrvalue, pfdr;
> - u8 bootmode;
> -
> - pcrvalue = in_be32(&pll->pcr) & 0xFF0F0FFF;
> - pfdr = pcrvalue >> 24;
> -
> - if (pfdr == 0x1E)
> - bootmode = 0; /* Normal Mode */
> + int vco, temp, pcrvalue;
> + u8 bootmode = 0; /* Normal Mode */;
>
> #ifdef CONFIG_CF_SBF
> bootmode = 3; /* Serial Mode */
>
sure uninitialized vars are an issue.This change works and make things simpler.
But looking the code i have a doubt now:
this code seems attempting to detect "runtime" the boot mode, getting clocks from
pll registers already set i.e. form SBF header.
So there can be a case where jumpers (or pull up/down resistors) are set to SBF (11)
and "bootmode" variable will be set to 3 only if CONFIG_CF_SBF is set, otherwise
it will be 0 and not 3.
Of course, if we try to boot by SBF and CONFIG_CF_SBF is not set, u-boot will not
boot in anyway, since spi init will be totally missing.
But in case a different "fully runtime" proposal could be:
diff --git a/arch/m68k/cpu/mcf5227x/speed.c b/arch/m68k/cpu/mcf5227x/speed.c
index 44de4a6701..e21c1d574b 100644
--- a/arch/m68k/cpu/mcf5227x/speed.c
+++ b/arch/m68k/cpu/mcf5227x/speed.c
@@ -74,7 +74,7 @@ int get_clocks(void)
ccm_t *ccm = (ccm_t *)MMAP_CCM;
pll_t *pll = (pll_t *)MMAP_PLL;
int vco, temp, pcrvalue, pfdr;
- u8 bootmode;
+ u8 bootmode = 3;
pcrvalue = in_be32(&pll->pcr) & 0xFF0F0FFF;
pfdr = pcrvalue >> 24;
@@ -82,10 +82,6 @@ int get_clocks(void)
if (pfdr == 0x1E)
bootmode = 0; /* Normal Mode */
-#ifdef CONFIG_CF_SBF
- bootmode = 3; /* Serial Mode */
-#endif
-
if (bootmode == 0) {
/* Normal mode */
vco = ((in_be32(&pll->pcr) & 0xFF000000) >> 24) * CONFIG_SYS_INPUT_CLKSRC;
What do you think ?
Regards,
Angelo Dureghello
More information about the U-Boot
mailing list