From e1e885d3994947e75ba99272989e982044a01cf1 Mon Sep 17 00:00:00 2001 From: Joseph Chen Date: Wed, 12 Aug 2020 09:21:03 +0800 Subject: [PATCH] misc: decompress: correct size_src and size_dst usage We misunderstood the size_src as decompressed image size. Without this patch, the decompress can work normally, but it wastes the time to flush data cache. Let's correct it for thunder boot version to save boot time. Signed-off-by: Joseph Chen Change-Id: I93014ccec7814faec5abbe96b383bc1170cdb0e2 --- drivers/misc/misc_decompress.c | 6 ++++-- drivers/misc/rockchip_decompress.c | 4 ++-- include/misc.h | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/misc/misc_decompress.c b/drivers/misc/misc_decompress.c index 6188135846..4cce52b838 100644 --- a/drivers/misc/misc_decompress.c +++ b/drivers/misc/misc_decompress.c @@ -90,8 +90,10 @@ int misc_decompress_start(struct udevice *dev, unsigned long dst, return -EPERM; } - param.size_src = misc_get_data_size(src, src_len, param.mode); - if (!param.size_src) + param.size_src = src_len; + param.size_dst = misc_get_data_size(src, src_len, param.mode); + + if (!param.size_src || !param.size_dst) return -EINVAL; return misc_ioctl(dev, IOCTL_REQ_START, ¶m); diff --git a/drivers/misc/rockchip_decompress.c b/drivers/misc/rockchip_decompress.c index 6a15b2d0de..b9ad3c4a3e 100644 --- a/drivers/misc/rockchip_decompress.c +++ b/drivers/misc/rockchip_decompress.c @@ -92,8 +92,8 @@ static int rockchip_decom_start(struct udevice *dev, void *buf) { struct rockchip_decom_priv *priv = dev_get_priv(dev); struct decom_param *param = (struct decom_param *)buf; - unsigned int limit_lo = param->size_src & 0xffffffff; - unsigned int limit_hi = param->size_src >> 32; + unsigned int limit_lo = param->size_dst & 0xffffffff; + unsigned int limit_hi = param->size_dst >> 32; ulong align_input, align_len; #if CONFIG_IS_ENABLED(DM_RESET) diff --git a/include/misc.h b/include/misc.h index ac91fc09da..501148dc56 100644 --- a/include/misc.h +++ b/include/misc.h @@ -150,8 +150,8 @@ int misc_otp_write(struct udevice *dev, int offset, const void *buf, int size); struct decom_param { unsigned long addr_src; unsigned long addr_dst; - u64 size_src; - u64 size_dst; /* to be filled for output */ + u64 size_src; /* compressed */ + u64 size_dst; /* decompressed, to be filled for output */ enum misc_mode mode; };