[U-Boot] [PATCH 20/20] arm/km: remove calls to kw_gpio_* in board_early_init_f

Prafulla Wadaskar prafulla at marvell.com
Tue Jun 12 09:58:30 CEST 2012



> -----Original Message-----
> From: Valentin Longchamp [mailto:valentin.longchamp at keymile.com]
> Sent: 07 June 2012 15:37
> To: prafulla at mavell.com
> Cc: Valentin Longchamp; holger.brunck at keymile.com; u-
> boot at lists.denx.de; Prafulla Wadaskar
> Subject: [PATCH 20/20] arm/km: remove calls to kw_gpio_* in
> board_early_init_f
> 
> These functions tried to access two static tables before relocation
> (board_early_init_f is executed before relocation). But these static
> tables lie in the bss section which is not valid before relocation.
> These accesses then overwrote some parts of u-boot binary before it
> was
> relocated. For the kmnusa build, this results in a corrupted important
> env variable (bootcmd) but it may be that some other parts of the u-
> boot
> binary are corrupted.
> 
> This patch solves this problem by moving all the kw_gpio_* calls to
> board_init, which should be early enough in the boot sequence. The
> only
> calls that could not be moved is the one for the SOFT (bitbang) I2C,
> and
> they have been replaced by a direct access to the GPIO dataout Control
> register to set the two GPIOs as output.
> 
> Signed-off-by: Valentin Longchamp <valentin.longchamp at keymile.com>
> cc: Holger Brunck <holger.brunck at keymile.com>
> cc: Prafulla Wadaskar <prafulla at marvell.com>
> ---
>  board/keymile/km_arm/km_arm.c |   34 ++++++++++++++++++++++++--------
> --
>  include/configs/km/km_arm.h   |    1 +
>  2 files changed, 25 insertions(+), 10 deletions(-)
> 
> diff --git a/board/keymile/km_arm/km_arm.c
> b/board/keymile/km_arm/km_arm.c
> index 2581d61..c13be71 100644
> --- a/board/keymile/km_arm/km_arm.c
> +++ b/board/keymile/km_arm/km_arm.c
> @@ -248,9 +248,27 @@ int misc_init_r(void)
> 
>  int board_early_init_f(void)
>  {
> +#if defined(CONFIG_SOFT_I2C)
>  	u32 tmp;
> 
> +	/* set the 2 bitbang i2c pins as output gpios */
> +	tmp = readl(KW_GPIO0_BASE + 4);
> +	writel(tmp & (~KM_KIRKWOOD_SOFT_I2C_GPIOS) , KW_GPIO0_BASE + 4);
> +#endif
> +
>  	kirkwood_mpp_conf(kwmpp_config, NULL);
> +	return 0;
> +}
> +
> +int board_init(void)
> +{
> +	/*
> +	 * arch number of board
> +	 */
> +	gd->bd->bi_arch_number = MACH_TYPE_KM_KIRKWOOD;
> +
> +	/* address of boot parameters */
> +	gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
> 
>  	/*
>  	 * The KM_FLASH_GPIO_PIN switches between using a
> @@ -259,24 +277,20 @@ int board_early_init_f(void)
>  	 */
>  	kw_gpio_set_valid(KM_FLASH_GPIO_PIN, 1);
>  	kw_gpio_direction_output(KM_FLASH_GPIO_PIN, 1);
> +
>  #if defined(CONFIG_SOFT_I2C)
> -	/* init the GPIO for I2C Bitbang driver */
> +	/* reinit the GPIO for I2C Bitbang driver so that the now
> +	 * available gpio framework is consistent. The calls to
> +	 * direction output in are not necessary, they are already done in
> +	 * board_early_init_f */

Comments are not as per coding standard

Regards..
Prafulla . . .


More information about the U-Boot mailing list