[PATCH v3 3/3] rockchip: otp: fix misc_read() return values
Kever Yang
kever.yang at rock-chips.com
Fri Apr 14 10:51:12 CEST 2023
On 2023/3/27 19:01, John Keeping wrote:
> The documentation for misc_read() says:
>
> Return: number of bytes read if OK (may be 0 if EOF), -ve on error
>
> The Rockchip efuse driver implements this so it should return the number
> of bytes read rather than zero on success. Fix this so that the driver
> follows the usual contract for read operations.
>
> Reviewed-by: Simon Glass <sjg at chromium.org>
> Reviewed-by: Jonas Karlman <jonas at kwiboo.se>
> Signed-off-by: John Keeping <john at metanate.com>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
> ---
> v3: unchanged
> v2: new patch
>
> drivers/misc/rockchip-otp.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/misc/rockchip-otp.c b/drivers/misc/rockchip-otp.c
> index c19cd5ce62..4814e0e501 100644
> --- a/drivers/misc/rockchip-otp.c
> +++ b/drivers/misc/rockchip-otp.c
> @@ -89,7 +89,7 @@ static int dump_otp(struct cmd_tbl *cmdtp, int flag,
>
> for (i = 0; true; i += sizeof(data)) {
> ret = misc_read(dev, i, &data, sizeof(data));
> - if (ret < 0)
> + if (ret <= 0)
> return 0;
>
> print_buffer(i, data, 1, sizeof(data), sizeof(data));
> @@ -249,8 +249,10 @@ static int rockchip_otp_read(struct udevice *dev, int offset,
>
> offset += data->offset;
>
> - if (data->block_size <= 1)
> - return data->read(dev, offset, buf, size);
> + if (data->block_size <= 1) {
> + ret = data->read(dev, offset, buf, size);
> + goto done;
> + }
>
> block_start = offset / data->block_size;
> block_offset = offset % data->block_size;
> @@ -266,7 +268,9 @@ static int rockchip_otp_read(struct udevice *dev, int offset,
> memcpy(buf, buffer + block_offset, size);
>
> free(buffer);
> - return ret;
> +
> +done:
> + return ret < 0 ? ret : size;
> }
>
> static const struct misc_ops rockchip_otp_ops = {
More information about the U-Boot
mailing list