diff options
author | Jon Medhurst <tixy@linaro.org> | 2015-01-05 16:01:05 +0000 |
---|---|---|
committer | Andrey Konovalov <andrey.konovalov@linaro.org> | 2015-01-06 16:42:39 +0300 |
commit | 0230b1cf0465816febf30f076e2b4043c98df2db (patch) | |
tree | 765c040c66886d7eb5f6207bf6d8c7866c8cafef | |
parent | b369a449748294f0fdaa31cc2f6bd9d5a1e202c6 (diff) |
HACK: of: Limit FDT size for CRC check on arm64tracking-llct-misc-fixes-llct-20150310.0tracking-llct-misc-fixes-llct-20150304.0tracking-llct-misc-fixes-llct-20150212.0tracking-llct-misc-fixes-llct-20150209.0tracking-llct-misc-fixes-llct-20150202.0tracking-llct-misc-fixes-llct-20150120.0tracking-llct-misc-fixes-llct-20150112.0tracking-llct-misc-fixes-llct-20150106.0
There is a bug in the UEFI implementation used on Juno and 64-bit
FVPs which corrupts the reported size of the FDT. Work around this
by limiting the size for CRC checks to 2MB.
See http://lists.infradead.org/pipermail/linux-arm-kernel/2014-December/310106.html
Signed-off-by: Jon Medhurst <tixy@linaro.org>
-rw-r--r-- | drivers/of/fdt.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 510074226d57..15cccddede04 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -28,6 +28,12 @@ #include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #include <asm/page.h> +#ifdef CONFIG_ARM64 +#define fdt_crc_size_hack(_s) min(fdt_totalsize(_s),(unsigned)0x200000) +#else +#define fdt_crc_size_hack(_s) fdt_totalsize(_s) +#endif + /* * of_fdt_limit_memory - limit the number of regions in the /memory node * @limit: maximum entries @@ -1018,7 +1024,7 @@ bool __init early_init_dt_verify(void *params) /* Setup flat device-tree pointer */ initial_boot_params = params; of_fdt_crc32 = crc32_be(~0, initial_boot_params, - fdt_totalsize(initial_boot_params)); + fdt_crc_size_hack(initial_boot_params)); return true; } @@ -1114,7 +1120,7 @@ static int __init of_fdt_raw_init(void) return 0; if (of_fdt_crc32 != crc32_be(~0, initial_boot_params, - fdt_totalsize(initial_boot_params))) { + fdt_crc_size_hack(initial_boot_params))) { pr_warn("fdt: not creating '/sys/firmware/fdt': CRC check failed\n"); return 0; } |