]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
rockchip: efuse: fix misc_read() return values
authorJohn Keeping <john@metanate.com>
Mon, 27 Mar 2023 11:01:09 +0000 (12:01 +0100)
committerKever Yang <kever.yang@rock-chips.com>
Fri, 21 Apr 2023 07:16:01 +0000 (15:16 +0800)
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@chromium.org>
Reviewed-by: Jonas Karlman <jonas@kwiboo.se>
Signed-off-by: John Keeping <john@metanate.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
drivers/misc/rockchip-efuse.c

index 60931a513121b5646e7b162b3373de65d1846c38..2f96b79ea407dd56ba1bc2ddcd4857f9168273ab 100644 (file)
@@ -73,7 +73,7 @@ static int dump_efuse(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));
@@ -238,8 +238,10 @@ static int rockchip_efuse_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;
@@ -255,7 +257,9 @@ static int rockchip_efuse_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_efuse_ops = {