[PATCH v3 3/3] rockchip: otp: fix misc_read() return values
John Keeping
john at metanate.com
Mon Mar 27 13:01:10 CEST 2023
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>
---
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 = {
--
2.40.0
More information about the U-Boot
mailing list