hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/soc/rockchip/mtd_vendor_storage.c
....@@ -20,7 +20,6 @@
2020
2121 #define MTD_VENDOR_PART_START 0
2222 #define MTD_VENDOR_PART_SIZE FLASH_VENDOR_PART_SIZE
23
-#define MTD_VENDOR_NOR_BLOCK_SIZE 128
2423 #define MTD_VENDOR_PART_NUM 1
2524 #define MTD_VENDOR_TAG VENDOR_HEAD_TAG
2625
....@@ -44,9 +43,9 @@
4443 static struct flash_vendor_info *g_vendor;
4544 static DEFINE_MUTEX(vendor_ops_mutex);
4645 static struct mtd_info *mtd;
47
-static u32 mtd_erase_size;
4846 static const char *vendor_mtd_name = "vnvm";
4947 static struct mtd_nand_info nand_info;
48
+static struct platform_device *g_pdev;
5049
5150 static int mtd_vendor_nand_write(void)
5251 {
....@@ -55,8 +54,8 @@
5554 struct erase_info ei;
5655
5756 re_write:
58
- if (nand_info.page_offset >= mtd_erase_size) {
59
- nand_info.blk_offset += mtd_erase_size;
57
+ if (nand_info.page_offset >= mtd->erasesize) {
58
+ nand_info.blk_offset += mtd->erasesize;
6059 if (nand_info.blk_offset >= mtd->size)
6160 nand_info.blk_offset = 0;
6261 if (mtd_block_isbad(mtd, nand_info.blk_offset))
....@@ -64,7 +63,7 @@
6463
6564 memset(&ei, 0, sizeof(struct erase_info));
6665 ei.addr = nand_info.blk_offset;
67
- ei.len = mtd_erase_size;
66
+ ei.len = mtd->erasesize;
6867 if (mtd_erase(mtd, &ei))
6968 goto re_write;
7069
....@@ -101,15 +100,7 @@
101100 nand_info.ops_size = (sizeof(*g_vendor) + mtd->writesize - 1) / mtd->writesize;
102101 nand_info.ops_size *= mtd->writesize;
103102
104
- /*
105
- * The NOR FLASH erase size maybe config as 4KB, need to re-define
106
- * and maintain consistency with uboot.
107
- */
108
- mtd_erase_size = mtd->erasesize;
109
- if (mtd_erase_size <= MTD_VENDOR_NOR_BLOCK_SIZE * 512)
110
- mtd_erase_size = MTD_VENDOR_NOR_BLOCK_SIZE * 512;
111
-
112
- for (offset = 0; offset < mtd->size; offset += mtd_erase_size) {
103
+ for (offset = 0; offset < mtd->size; offset += mtd->erasesize) {
113104 if (!mtd_block_isbad(mtd, offset)) {
114105 err = mtd_read(mtd, offset, sizeof(*g_vendor),
115106 &bytes_read, (u8 *)g_vendor);
....@@ -124,11 +115,11 @@
124115 }
125116 }
126117 } else if (nand_info.blk_offset == offset)
127
- nand_info.blk_offset += mtd_erase_size;
118
+ nand_info.blk_offset += mtd->erasesize;
128119 }
129120
130121 if (nand_info.version) {
131
- for (offset = mtd_erase_size - nand_info.ops_size;
122
+ for (offset = mtd->erasesize - nand_info.ops_size;
132123 offset >= 0;
133124 offset -= nand_info.ops_size) {
134125 err = mtd_read(mtd, nand_info.blk_offset + offset,
....@@ -154,10 +145,7 @@
154145 if (bytes_read == sizeof(*g_vendor) &&
155146 g_vendor->tag == MTD_VENDOR_TAG &&
156147 g_vendor->version == g_vendor->version2) {
157
- if (nand_info.version > g_vendor->version)
158
- g_vendor->version = nand_info.version;
159
- else
160
- nand_info.version = g_vendor->version;
148
+ nand_info.version = g_vendor->version;
161149 break;
162150 }
163151 }
....@@ -167,11 +155,11 @@
167155 g_vendor->tag = MTD_VENDOR_TAG;
168156 g_vendor->free_size = sizeof(g_vendor->data);
169157 g_vendor->version2 = g_vendor->version;
170
- for (offset = 0; offset < mtd->size; offset += mtd_erase_size) {
158
+ for (offset = 0; offset < mtd->size; offset += mtd->erasesize) {
171159 if (!mtd_block_isbad(mtd, offset)) {
172160 memset(&ei, 0, sizeof(struct erase_info));
173161 ei.addr = nand_info.blk_offset + offset;
174
- ei.len = mtd_erase_size;
162
+ ei.len = mtd->erasesize;
175163 mtd_erase(mtd, &ei);
176164 }
177165 }
....@@ -419,6 +407,8 @@
419407
420408 g_idb_buffer = NULL;
421409 ret = platform_driver_register(&vendor_storage_driver);
410
+ if (ret)
411
+ return ret;
422412
423413 pdev = platform_device_register_simple("mtd_vendor_storage",
424414 -1, NULL, 0);
....@@ -426,8 +416,17 @@
426416 platform_driver_unregister(&vendor_storage_driver);
427417 return PTR_ERR(pdev);
428418 }
419
+ g_pdev = pdev;
429420
430421 return ret;
431422 }
432423
424
+static __exit void vendor_storage_deinit(void)
425
+{
426
+ platform_device_unregister(g_pdev);
427
+ platform_driver_unregister(&vendor_storage_driver);
428
+}
429
+
433430 device_initcall_sync(vendor_storage_init);
431
+module_exit(vendor_storage_deinit);
432
+MODULE_LICENSE("GPL");