On 12/14/2015 06:23 PM, Gong Qianyu wrote:
> The bus_i2c_init() is called before relocation and will assgin
> value to a static variable. If U-Boot is then still running in a
> flash device, it's theoretically not allowed to write data to flash
> without an erasing operation. For i.MX platforms, the U-Boot is
> always running in DDR.
> 
> Actually it causes asynchronous error when the ARM64 system error report
> is enabled and the flash write protect is set.
> 
> Signed-off-by: Gong Qianyu <qianyu.g...@freescale.com>
> ---
>  drivers/i2c/mxc_i2c.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/i2c/mxc_i2c.c b/drivers/i2c/mxc_i2c.c
> index fa4c82f..4dddb83 100644
> --- a/drivers/i2c/mxc_i2c.c
> +++ b/drivers/i2c/mxc_i2c.c
> @@ -581,8 +581,11 @@ void bus_i2c_init(int index, int speed, int unused,
>               return;
>       }
>  
> +#if defined(CONFIG_MX51) || defined(CONFIG_MX53) || \
> +     defined(CONFIG_MX6) || defined(CONFIG_MX7)
>       mxc_i2c_buses[index].idle_bus_fn = idle_bus_fn;
>       mxc_i2c_buses[index].idle_bus_data = idle_bus_data;
> +#endif
>  

I also think using variable mxc_i2c_buses is problematic. But using ifdef
doesn't look like a solution. I think this variable should be put into stack, or
use malloc. It works with execution-in-place in read-only space.

York

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to