diff options
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r-- | arch/arm/mach-imx/imx-bbu-internal.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/generic.h | 9 |
3 files changed, 20 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/imx-bbu-internal.c b/arch/arm/mach-imx/imx-bbu-internal.c index a563b3bc29..946a3e9a77 100644 --- a/arch/arm/mach-imx/imx-bbu-internal.c +++ b/arch/arm/mach-imx/imx-bbu-internal.c @@ -87,6 +87,7 @@ static int imx_bbu_write_device(struct imx_internal_bbu_handler *imx_handler, const void *buf, int image_len) { int fd, ret, offset = 0; + struct stat st; fd = open(devicefile, O_RDWR | O_CREAT); if (fd < 0) @@ -101,6 +102,15 @@ static int imx_bbu_write_device(struct imx_internal_bbu_handler *imx_handler, if (imx_handler->handler.flags & IMX_BBU_FLAG_KEEP_HEAD) offset += imx_handler->flash_header_offset; + ret = fstat(fd, &st); + if (ret) + goto err_close; + + if (image_len > st.st_size) { + ret = -ENOSPC; + goto err_close; + } + ret = imx_bbu_protect(fd, imx_handler, devicefile, offset, image_len, 0); if (ret) diff --git a/arch/arm/mach-imx/imx.c b/arch/arm/mach-imx/imx.c index 43b540b397..0942d50695 100644 --- a/arch/arm/mach-imx/imx.c +++ b/arch/arm/mach-imx/imx.c @@ -95,7 +95,7 @@ static int imx_init(void) if (root) { __imx_cpu_type = imx_soc_from_dt(); if (!__imx_cpu_type) - hang(); + return 0; } if (cpu_is_mx1()) diff --git a/arch/arm/mach-imx/include/mach/generic.h b/arch/arm/mach-imx/include/mach/generic.h index ac066e3f17..5102c34e4c 100644 --- a/arch/arm/mach-imx/include/mach/generic.h +++ b/arch/arm/mach-imx/include/mach/generic.h @@ -223,6 +223,15 @@ extern unsigned int __imx_cpu_type; # define cpu_is_vf610() (0) #endif +#ifdef CONFIG_BOARD_ARM_GENERIC_DT +# ifdef imx_cpu_type +# undef imx_cpu_type +# define imx_cpu_type __imx_cpu_type +# else +# define imx_cpu_type 0 +# endif +#endif + #define cpu_is_mx23() (0) #define cpu_is_mx28() (0) |