summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/imx-bbu-internal.c10
-rw-r--r--arch/arm/mach-imx/imx.c2
-rw-r--r--arch/arm/mach-imx/include/mach/generic.h9
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)