diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
index 9a0eadb93d291e5ae33b5061c47dcbfba236a854..94dedd8e44997a1a8c6bb7252f970befc984d07f 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
@@ -110,8 +110,7 @@ static void rb750_nand_write(const u8 *buf, unsigned len)
 	__raw_readl(base + AR71XX_GPIO_REG_OE);
 }
 
-static int rb750_nand_read_verify(u8 *read_buf, unsigned len,
-				  const u8 *verify_buf)
+static void rb750_nand_read(u8 *read_buf, unsigned len)
 {
 	void __iomem *base = ath79_gpio_base;
 	unsigned i;
@@ -131,13 +130,8 @@ static int rb750_nand_read_verify(u8 *read_buf, unsigned len,
 		/* deactivate RE line */
 		__raw_writel(RB750_NAND_NRE, base + AR71XX_GPIO_REG_SET);
 
-		if (read_buf)
-			read_buf[i] = data;
-		else if (verify_buf && verify_buf[i] != data)
-			return -EFAULT;
+		read_buf[i] = data;
 	}
-
-	return 0;
 }
 
 static void rb750_nand_select_chip(struct mtd_info *mtd, int chip)
@@ -212,13 +206,13 @@ static void rb750_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
 static u8 rb750_nand_read_byte(struct mtd_info *mtd)
 {
 	u8 data = 0;
-	rb750_nand_read_verify(&data, 1, NULL);
+	rb750_nand_read(&data, 1);
 	return data;
 }
 
 static void rb750_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
 {
-	rb750_nand_read_verify(buf, len, NULL);
+	rb750_nand_read(buf, len);
 }
 
 static void rb750_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
@@ -226,11 +220,6 @@ static void rb750_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
 	rb750_nand_write(buf, len);
 }
 
-static int rb750_nand_verify_buf(struct mtd_info *mtd, const u8 *buf, int len)
-{
-	return rb750_nand_read_verify(NULL, len, buf);
-}
-
 static void __init rb750_nand_gpio_init(struct rb750_nand_info *info)
 {
 	void __iomem *base = ath79_gpio_base;
@@ -285,7 +274,6 @@ static int __devinit rb750_nand_probe(struct platform_device *pdev)
 	info->chip.read_byte	= rb750_nand_read_byte;
 	info->chip.write_buf	= rb750_nand_write_buf;
 	info->chip.read_buf	= rb750_nand_read_buf;
-	info->chip.verify_buf	= rb750_nand_verify_buf;
 
 	info->chip.chip_delay	= 25;
 	info->chip.ecc.mode	= NAND_ECC_SOFT;
diff --git a/target/linux/ar71xx/patches-3.3/a04-rb750_nand-add-NO_AUTOINCR-flag.patch b/target/linux/ar71xx/patches-3.3/a04-rb750_nand-add-NO_AUTOINCR-flag.patch
index 0b0dfe6c89275d33c5d2673b91ee40ff32233f78..4082df2ead15498c753bbf391c27a2c2a44058f0 100644
--- a/target/linux/ar71xx/patches-3.3/a04-rb750_nand-add-NO_AUTOINCR-flag.patch
+++ b/target/linux/ar71xx/patches-3.3/a04-rb750_nand-add-NO_AUTOINCR-flag.patch
@@ -1,7 +1,7 @@
 reverted:
 --- a/drivers/mtd/nand/rb750_nand.c
 +++ b/drivers/mtd/nand/rb750_nand.c
-@@ -289,6 +289,7 @@ static int __devinit rb750_nand_probe(st
+@@ -277,6 +277,7 @@ static int __devinit rb750_nand_probe(st
  
  	info->chip.chip_delay	= 25;
  	info->chip.ecc.mode	= NAND_ECC_SOFT;
diff --git a/target/linux/ar71xx/patches-3.3/a06-rb750_nand-add-buffer-verification.patch b/target/linux/ar71xx/patches-3.3/a06-rb750_nand-add-buffer-verification.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fb27194d86620359f886d284c10f06d50c2d7d94
--- /dev/null
+++ b/target/linux/ar71xx/patches-3.3/a06-rb750_nand-add-buffer-verification.patch
@@ -0,0 +1,63 @@
+--- a/drivers/mtd/nand/rb750_nand.c
++++ b/drivers/mtd/nand/rb750_nand.c
+@@ -110,7 +110,8 @@ static void rb750_nand_write(const u8 *b
+ 	__raw_readl(base + AR71XX_GPIO_REG_OE);
+ }
+ 
+-static void rb750_nand_read(u8 *read_buf, unsigned len)
++static int rb750_nand_read_verify(u8 *read_buf, unsigned len,
++				  const u8 *verify_buf)
+ {
+ 	void __iomem *base = ath79_gpio_base;
+ 	unsigned i;
+@@ -130,8 +131,13 @@ static void rb750_nand_read(u8 *read_buf
+ 		/* deactivate RE line */
+ 		__raw_writel(RB750_NAND_NRE, base + AR71XX_GPIO_REG_SET);
+ 
+-		read_buf[i] = data;
++		if (read_buf)
++			read_buf[i] = data;
++		else if (verify_buf && verify_buf[i] != data)
++			return -EFAULT;
+ 	}
++
++	return 0;
+ }
+ 
+ static void rb750_nand_select_chip(struct mtd_info *mtd, int chip)
+@@ -206,13 +212,13 @@ static void rb750_nand_cmd_ctrl(struct m
+ static u8 rb750_nand_read_byte(struct mtd_info *mtd)
+ {
+ 	u8 data = 0;
+-	rb750_nand_read(&data, 1);
++	rb750_nand_read_verify(&data, 1, NULL);
+ 	return data;
+ }
+ 
+ static void rb750_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
+ {
+-	rb750_nand_read(buf, len);
++	rb750_nand_read_verify(buf, len, NULL);
+ }
+ 
+ static void rb750_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
+@@ -220,6 +226,11 @@ static void rb750_nand_write_buf(struct
+ 	rb750_nand_write(buf, len);
+ }
+ 
++static int rb750_nand_verify_buf(struct mtd_info *mtd, const u8 *buf, int len)
++{
++	return rb750_nand_read_verify(NULL, len, buf);
++}
++
+ static void __init rb750_nand_gpio_init(struct rb750_nand_info *info)
+ {
+ 	void __iomem *base = ath79_gpio_base;
+@@ -274,6 +285,7 @@ static int __devinit rb750_nand_probe(st
+ 	info->chip.read_byte	= rb750_nand_read_byte;
+ 	info->chip.write_buf	= rb750_nand_write_buf;
+ 	info->chip.read_buf	= rb750_nand_read_buf;
++	info->chip.verify_buf	= rb750_nand_verify_buf;
+ 
+ 	info->chip.chip_delay	= 25;
+ 	info->chip.ecc.mode	= NAND_ECC_SOFT;
diff --git a/target/linux/ar71xx/patches-3.6/a06-rb750_nand-add-buffer-verification.patch b/target/linux/ar71xx/patches-3.6/a06-rb750_nand-add-buffer-verification.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fb27194d86620359f886d284c10f06d50c2d7d94
--- /dev/null
+++ b/target/linux/ar71xx/patches-3.6/a06-rb750_nand-add-buffer-verification.patch
@@ -0,0 +1,63 @@
+--- a/drivers/mtd/nand/rb750_nand.c
++++ b/drivers/mtd/nand/rb750_nand.c
+@@ -110,7 +110,8 @@ static void rb750_nand_write(const u8 *b
+ 	__raw_readl(base + AR71XX_GPIO_REG_OE);
+ }
+ 
+-static void rb750_nand_read(u8 *read_buf, unsigned len)
++static int rb750_nand_read_verify(u8 *read_buf, unsigned len,
++				  const u8 *verify_buf)
+ {
+ 	void __iomem *base = ath79_gpio_base;
+ 	unsigned i;
+@@ -130,8 +131,13 @@ static void rb750_nand_read(u8 *read_buf
+ 		/* deactivate RE line */
+ 		__raw_writel(RB750_NAND_NRE, base + AR71XX_GPIO_REG_SET);
+ 
+-		read_buf[i] = data;
++		if (read_buf)
++			read_buf[i] = data;
++		else if (verify_buf && verify_buf[i] != data)
++			return -EFAULT;
+ 	}
++
++	return 0;
+ }
+ 
+ static void rb750_nand_select_chip(struct mtd_info *mtd, int chip)
+@@ -206,13 +212,13 @@ static void rb750_nand_cmd_ctrl(struct m
+ static u8 rb750_nand_read_byte(struct mtd_info *mtd)
+ {
+ 	u8 data = 0;
+-	rb750_nand_read(&data, 1);
++	rb750_nand_read_verify(&data, 1, NULL);
+ 	return data;
+ }
+ 
+ static void rb750_nand_read_buf(struct mtd_info *mtd, u8 *buf, int len)
+ {
+-	rb750_nand_read(buf, len);
++	rb750_nand_read_verify(buf, len, NULL);
+ }
+ 
+ static void rb750_nand_write_buf(struct mtd_info *mtd, const u8 *buf, int len)
+@@ -220,6 +226,11 @@ static void rb750_nand_write_buf(struct
+ 	rb750_nand_write(buf, len);
+ }
+ 
++static int rb750_nand_verify_buf(struct mtd_info *mtd, const u8 *buf, int len)
++{
++	return rb750_nand_read_verify(NULL, len, buf);
++}
++
+ static void __init rb750_nand_gpio_init(struct rb750_nand_info *info)
+ {
+ 	void __iomem *base = ath79_gpio_base;
+@@ -274,6 +285,7 @@ static int __devinit rb750_nand_probe(st
+ 	info->chip.read_byte	= rb750_nand_read_byte;
+ 	info->chip.write_buf	= rb750_nand_write_buf;
+ 	info->chip.read_buf	= rb750_nand_read_buf;
++	info->chip.verify_buf	= rb750_nand_verify_buf;
+ 
+ 	info->chip.chip_delay	= 25;
+ 	info->chip.ecc.mode	= NAND_ECC_SOFT;