From 9f17a00ee56dc5cfb1d9b51e6639d67b64cb3309 Mon Sep 17 00:00:00 2001
From: Stefano Babic <sbabic@denx.de>
Date: Thu, 15 Jun 2023 16:54:46 +0200
Subject: [PATCH] Revert "fw_setenv: fix bug when SPI flash write size !=
 sector size"

This reverts commit 44ecc1c216007272a6f99a104a71c9d410969d9e.

mtd writesize was errouneously interpreted as maximum allowed size, but
it is the minimum size. The patch raises performance issues because on
NOR flashes single bytes are written.

Signed-off-by: Stefano Babic <sbabic@denx.de>
---
 src/uboot_env.c | 29 +++++++++--------------------
 1 file changed, 9 insertions(+), 20 deletions(-)

diff --git a/src/uboot_env.c b/src/uboot_env.c
index 3320753..d0c7173 100644
--- a/src/uboot_env.c
+++ b/src/uboot_env.c
@@ -759,8 +759,6 @@ static int mtdwrite(struct uboot_flash_env *dev, void *data)
 		sectors = dev->envsectors ? dev->envsectors : 1;
 		buf = data;
 		while (count > 0) {
-			int blockcount;
-
 			erase.start = start;
 
 			skip = is_nand_badblock(dev, start);
@@ -791,26 +789,17 @@ static int mtdwrite(struct uboot_flash_env *dev, void *data)
 				ret =-EIO;
 				goto devwrite_out;
 			}
-
-			blockcount = blocksize;
-
-			/* writesize can be different than the sector size. */
-
-			while (blockcount > 0) {
-				if (lseek(dev->fd, start, SEEK_SET) < 0) {
-					ret =-EIO;
-					goto devwrite_out;
-				}
-				if (write(dev->fd, buf, dev->mtdinfo.writesize) != dev->mtdinfo.writesize) {
-					ret =-EIO;
-					goto devwrite_out;
-				}
-
-				blockcount -= dev->mtdinfo.writesize;
-				start += dev->mtdinfo.writesize;
-				buf += dev->mtdinfo.writesize;
+			if (lseek(dev->fd, start, SEEK_SET) < 0) {
+				ret =-EIO;
+				goto devwrite_out;
+			}
+			if (write(dev->fd, buf, blocksize) != blocksize) {
+				ret =-EIO;
+				goto devwrite_out;
 			}
 			MTDLOCK(dev, &erase);
+			start += dev->sectorsize;
+			buf += blocksize;
 			count -= blocksize;
 			ret += blocksize;
 		}
