> -----Original Message----- > From: Valentin Longchamp [mailto:valentin.longch...@keymile.com] > Sent: 07 June 2012 15:37 > To: prafu...@mavell.com > Cc: Valentin Longchamp; holger.bru...@keymile.com; u- > b...@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.longch...@keymile.com> > cc: Holger Brunck <holger.bru...@keymile.com> > cc: Prafulla Wadaskar <prafu...@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 . . . _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot