--- a/fw_env.c
+++ b/fw_env.c
@@ -790,7 +790,10 @@ static int flash_write_buf (int dev, int
 	erase_offset = (offset / blocklen) * blocklen;
 
 	/* Maximum area we may use */
-	erase_len = top_of_range - erase_offset;
+	if (mtd_type == MTD_NANDFLASH)
+		erase_len = top_of_range - erase_offset;
+	else
+		erase_len = blocklen;
 
 	blockstart = erase_offset;
 	/* Offset inside a block */
