On 06/12/2012 09:58 AM, Prafulla Wadaskar wrote: > > >> -----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 >
Ok I'll fix this in v2. Regards Holger _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot