aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bmips/patches-5.15/210-macronix_nand_block_protection_support.patch
blob: 25a16084efe36f14c407ac011793f1f3790afcc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
From 5a37811de679bff03e9c5a746f75574910ede964 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com>
Date: Wed, 22 Mar 2023 20:52:13 +0100
Subject: [PATCH] Revert "mtd: rawnand: Macronix: Add support for block
 protection"
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This reverts commit 03a539c7a118427a6609a26461358c56ac8f3a06.

Macronix block protection doesn't seem to be supported on Sercomm H-500s
devices since it hangs the device.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 drivers/mtd/nand/raw/nand_macronix.c | 72 ----------------------------
 1 file changed, 72 deletions(-)

--- a/drivers/mtd/nand/raw/nand_macronix.c
+++ b/drivers/mtd/nand/raw/nand_macronix.c
@@ -12,10 +12,6 @@
 #define MACRONIX_READ_RETRY_BIT BIT(0)
 #define MACRONIX_NUM_READ_RETRY_MODES 6
 
-#define ONFI_FEATURE_ADDR_MXIC_PROTECTION 0xA0
-#define MXIC_BLOCK_PROTECTION_ALL_LOCK 0x38
-#define MXIC_BLOCK_PROTECTION_ALL_UNLOCK 0x0
-
 #define ONFI_FEATURE_ADDR_MXIC_RANDOMIZER 0xB0
 #define MACRONIX_RANDOMIZER_BIT BIT(1)
 #define MACRONIX_RANDOMIZER_ENPGM BIT(0)
@@ -179,73 +175,6 @@ static void macronix_nand_fix_broken_get
 		     ONFI_FEATURE_ADDR_TIMING_MODE, 1);
 }
 
-/*
- * Macronix NAND supports Block Protection by Protectoin(PT) pin;
- * active high at power-on which protects the entire chip even the #WP is
- * disabled. Lock/unlock protection area can be partition according to
- * protection bits, i.e. upper 1/2 locked, upper 1/4 locked and so on.
- */
-static int mxic_nand_lock(struct nand_chip *chip, loff_t ofs, uint64_t len)
-{
-	u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
-	int ret;
-
-	feature[0] = MXIC_BLOCK_PROTECTION_ALL_LOCK;
-	nand_select_target(chip, 0);
-	ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
-				feature);
-	nand_deselect_target(chip);
-	if (ret)
-		pr_err("%s all blocks failed\n", __func__);
-
-	return ret;
-}
-
-static int mxic_nand_unlock(struct nand_chip *chip, loff_t ofs, uint64_t len)
-{
-	u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
-	int ret;
-
-	feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
-	nand_select_target(chip, 0);
-	ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
-				feature);
-	nand_deselect_target(chip);
-	if (ret)
-		pr_err("%s all blocks failed\n", __func__);
-
-	return ret;
-}
-
-static void macronix_nand_block_protection_support(struct nand_chip *chip)
-{
-	u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
-	int ret;
-
-	bitmap_set(chip->parameters.get_feature_list,
-		   ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
-
-	feature[0] = MXIC_BLOCK_PROTECTION_ALL_UNLOCK;
-	nand_select_target(chip, 0);
-	ret = nand_get_features(chip, ONFI_FEATURE_ADDR_MXIC_PROTECTION,
-				feature);
-	nand_deselect_target(chip);
-	if (ret || feature[0] != MXIC_BLOCK_PROTECTION_ALL_LOCK) {
-		if (ret)
-			pr_err("Block protection check failed\n");
-
-		bitmap_clear(chip->parameters.get_feature_list,
-			     ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
-		return;
-	}
-
-	bitmap_set(chip->parameters.set_feature_list,
-		   ONFI_FEATURE_ADDR_MXIC_PROTECTION, 1);
-
-	chip->ops.lock_area = mxic_nand_lock;
-	chip->ops.unlock_area = mxic_nand_unlock;
-}
-
 static int nand_power_down_op(struct nand_chip *chip)
 {
 	int ret;
@@ -323,7 +252,6 @@ static int macronix_nand_init(struct nan
 
 	macronix_nand_fix_broken_get_timings(chip);
 	macronix_nand_onfi_init(chip);
-	macronix_nand_block_protection_support(chip);
 	macronix_nand_deep_power_down_support(chip);
 
 	return 0;