From 95099d4622f8cb224d94e314c7a8e0df60b13f87 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Sat, 09 Dec 2023 08:38:01 +0000
Subject: [PATCH] enable docker ppp

---
 kernel/drivers/soc/rockchip/mtd_vendor_storage.c |   43 +++++++++++++++++++++----------------------
 1 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/kernel/drivers/soc/rockchip/mtd_vendor_storage.c b/kernel/drivers/soc/rockchip/mtd_vendor_storage.c
index 970db37..2f4e4f8 100644
--- a/kernel/drivers/soc/rockchip/mtd_vendor_storage.c
+++ b/kernel/drivers/soc/rockchip/mtd_vendor_storage.c
@@ -20,7 +20,6 @@
 
 #define MTD_VENDOR_PART_START		0
 #define MTD_VENDOR_PART_SIZE		FLASH_VENDOR_PART_SIZE
-#define MTD_VENDOR_NOR_BLOCK_SIZE	128
 #define MTD_VENDOR_PART_NUM		1
 #define MTD_VENDOR_TAG			VENDOR_HEAD_TAG
 
@@ -44,9 +43,9 @@
 static struct flash_vendor_info *g_vendor;
 static DEFINE_MUTEX(vendor_ops_mutex);
 static struct mtd_info *mtd;
-static u32 mtd_erase_size;
 static const char *vendor_mtd_name = "vnvm";
 static struct mtd_nand_info nand_info;
+static struct platform_device *g_pdev;
 
 static int mtd_vendor_nand_write(void)
 {
@@ -55,8 +54,8 @@
 	struct erase_info ei;
 
 re_write:
-	if (nand_info.page_offset >= mtd_erase_size) {
-		nand_info.blk_offset += mtd_erase_size;
+	if (nand_info.page_offset >= mtd->erasesize) {
+		nand_info.blk_offset += mtd->erasesize;
 		if (nand_info.blk_offset >= mtd->size)
 			nand_info.blk_offset = 0;
 		if (mtd_block_isbad(mtd, nand_info.blk_offset))
@@ -64,7 +63,7 @@
 
 		memset(&ei, 0, sizeof(struct erase_info));
 		ei.addr = nand_info.blk_offset;
-		ei.len	= mtd_erase_size;
+		ei.len	= mtd->erasesize;
 		if (mtd_erase(mtd, &ei))
 			goto re_write;
 
@@ -101,15 +100,7 @@
 	nand_info.ops_size = (sizeof(*g_vendor) + mtd->writesize - 1) / mtd->writesize;
 	nand_info.ops_size *= mtd->writesize;
 
-	/*
-	 * The NOR FLASH erase size maybe config as 4KB, need to re-define
-	 * and maintain consistency with uboot.
-	 */
-	mtd_erase_size = mtd->erasesize;
-	if (mtd_erase_size <= MTD_VENDOR_NOR_BLOCK_SIZE * 512)
-		mtd_erase_size = MTD_VENDOR_NOR_BLOCK_SIZE * 512;
-
-	for (offset = 0; offset < mtd->size; offset += mtd_erase_size) {
+	for (offset = 0; offset < mtd->size; offset += mtd->erasesize) {
 		if (!mtd_block_isbad(mtd, offset)) {
 			err = mtd_read(mtd, offset, sizeof(*g_vendor),
 				       &bytes_read, (u8 *)g_vendor);
@@ -124,11 +115,11 @@
 				}
 			}
 		} else if (nand_info.blk_offset == offset)
-			nand_info.blk_offset += mtd_erase_size;
+			nand_info.blk_offset += mtd->erasesize;
 	}
 
 	if (nand_info.version) {
-		for (offset = mtd_erase_size - nand_info.ops_size;
+		for (offset = mtd->erasesize - nand_info.ops_size;
 		     offset >= 0;
 		     offset -= nand_info.ops_size) {
 			err = mtd_read(mtd, nand_info.blk_offset + offset,
@@ -154,10 +145,7 @@
 			if (bytes_read == sizeof(*g_vendor) &&
 			    g_vendor->tag == MTD_VENDOR_TAG &&
 			    g_vendor->version == g_vendor->version2) {
-				if (nand_info.version > g_vendor->version)
-					g_vendor->version = nand_info.version;
-				else
-					nand_info.version = g_vendor->version;
+				nand_info.version = g_vendor->version;
 				break;
 			}
 		}
@@ -167,11 +155,11 @@
 		g_vendor->tag = MTD_VENDOR_TAG;
 		g_vendor->free_size = sizeof(g_vendor->data);
 		g_vendor->version2 = g_vendor->version;
-		for (offset = 0; offset < mtd->size; offset += mtd_erase_size) {
+		for (offset = 0; offset < mtd->size; offset += mtd->erasesize) {
 			if (!mtd_block_isbad(mtd, offset)) {
 				memset(&ei, 0, sizeof(struct erase_info));
 				ei.addr = nand_info.blk_offset + offset;
-				ei.len  = mtd_erase_size;
+				ei.len  = mtd->erasesize;
 				mtd_erase(mtd, &ei);
 			}
 		}
@@ -419,6 +407,8 @@
 
 	g_idb_buffer = NULL;
 	ret = platform_driver_register(&vendor_storage_driver);
+	if (ret)
+		return ret;
 
 	pdev = platform_device_register_simple("mtd_vendor_storage",
 					       -1, NULL, 0);
@@ -426,8 +416,17 @@
 		platform_driver_unregister(&vendor_storage_driver);
 		return PTR_ERR(pdev);
 	}
+	g_pdev = pdev;
 
 	return ret;
 }
 
+static __exit void vendor_storage_deinit(void)
+{
+	platform_device_unregister(g_pdev);
+	platform_driver_unregister(&vendor_storage_driver);
+}
+
 device_initcall_sync(vendor_storage_init);
+module_exit(vendor_storage_deinit);
+MODULE_LICENSE("GPL");

--
Gitblit v1.6.2