From 5a37811de679bff03e9c5a746f75574910ede964 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= 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 --- 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;