[U-Boot] [PATCH 20/20] arm/km: remove calls to kw_gpio_* in board_early_init_f
Holger Brunck
holger.brunck at keymile.com
Tue Jun 12 10:43:37 CEST 2012
On 06/12/2012 09:58 AM, Prafulla Wadaskar wrote:
>
>
>> -----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
>
Ok I'll fix this in v2.
Regards
Holger
More information about the U-Boot
mailing list