
From: Simon Glass <sjg@chromium.org> The current logic is fairly confusing. We always add to_read to start and we always subtract it from blks. Even the place where blks is set to 0 is really just subtracting to_read. So move these additions and subtractions out of the if() logic and to the end of the loop. This is much easier to follow. Signed-off-by: Simon Glass <sjg@chromium.org> --- drivers/scsi/scsi.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index e12d52299b4..1f726f79e5d 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -167,21 +167,15 @@ static ulong scsi_read(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt, to_read = min_t(lbaint_t, to_read, max_blks); pccb->datalen = desc->blksz * to_read; scsi_setup_read16(desc, pccb, start, to_read); - start += to_read; - blks -= to_read; } else if (to_read > max_blks) { to_read = max_blks; pccb->datalen = desc->blksz * to_read; smallblks = to_read; scsi_setup_read_ext(desc, pccb, start, smallblks); - start += to_read; - blks -= to_read; } else { pccb->datalen = desc->blksz * to_read; smallblks = (unsigned short)to_read; scsi_setup_read_ext(desc, pccb, start, smallblks); - start += to_read; - blks = 0; } debug("scsi_read_ext: startblk " LBAF ", blccnt %x buffer %lX\n", @@ -190,6 +184,10 @@ static ulong scsi_read(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt, scsi_print_error(pccb); break; } + + /* update ready for the next read */ + start += to_read; + blks -= to_read; buf_addr += pccb->datalen; } while (blks); debug("scsi_read_ext: end startblk " LBAF @@ -241,14 +239,10 @@ static ulong scsi_write(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt, pccb->datalen = desc->blksz * to_write; smallblks = to_write; scsi_setup_write_ext(desc, pccb, start, to_write); - start += to_write; - blks -= to_write; } else { pccb->datalen = desc->blksz * to_write; smallblks = (unsigned short)to_write; scsi_setup_write_ext(desc, pccb, start, smallblks); - start += to_write; - blks = 0; } debug("%s: startblk " LBAF ", blccnt %x buffer %lx\n", __func__, start, smallblks, buf_addr); @@ -256,7 +250,11 @@ static ulong scsi_write(struct udevice *dev, lbaint_t blknr, lbaint_t blkcnt, scsi_print_error(pccb); break; } + + /* update ready for the next write */ buf_addr += pccb->datalen; + start += to_write; + blks -= to_write; } while (blks); debug("%s: end startblk " LBAF ", blccnt %x buffer %lX\n", __func__, start, smallblks, buf_addr); -- 2.43.0