[U-Boot] [PATCH] i2c: mxc: allow executing the code that only applies to i.MX platforms
York Sun
yorksun at freescale.com
Mon Dec 14 11:37:23 CET 2015
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.Gong at 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
More information about the U-Boot
mailing list