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; };