Hi Miquel, > > +static int macronix_nand_randomizer_check_enable(struct nand_chip *chip) > > +{ > > + u8 feature[ONFI_SUBFEATURE_PARAM_LEN]; > > + int ret; > > + > > + ret = nand_get_features(chip, ONFI_FEATURE_ADDR_MXIC_RANDOMIZER, > > + feature); > > + if (ret < 0) > > + return ret; > > + > > + if (feature[0]) > > + return feature[0]; > > + > > + feature[0] = MACRONIX_RANDOMIZER_MODE_ENTER; > > + ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_RANDOMIZER, > > + feature); > > + if (ret < 0) > > + return ret; > > + > > + /* RANDEN and RANDOPT OTP bits are programmed */ > > + feature[0] = 0x0; > > + ret = nand_prog_page_op(chip, 0, 0, feature, 1); > > + if (ret < 0) > > + return ret; > > + > > + ret = nand_get_features(chip, ONFI_FEATURE_ADDR_MXIC_RANDOMIZER, > > + feature); > > + if (ret < 0) > > + return ret; > > + > > + feature[0] &= MACRONIX_RANDOMIZER_MODE_EXIT; > > + ret = nand_set_features(chip, ONFI_FEATURE_ADDR_MXIC_RANDOMIZER, > > + feature); > > + if (ret < 0) > > + return ret; > > + > > + return feature[0]; > > Can feature[0] be != 0 ? I don't think so, in this case I prefer a: > return 0; > okay, will fix it. > > +} > > + > > static void macronix_nand_onfi_init(struct nand_chip *chip) > > { > > struct nand_parameters *p = &chip->parameters; > > struct nand_onfi_vendor_macronix *mxic; > > + struct device_node *dn = nand_get_flash_node(chip); > > + int rand_otp = 0; > > + int ret; > > > > if (!p->onfi) > > return; > > > > + if (of_find_property(dn, "mxic,enable-randomizer-otp", NULL)) > > + rand_otp = 1; > > + > > mxic = (struct nand_onfi_vendor_macronix *)p->onfi->vendor; > > + /* Subpage write is prohibited in randomizer operatoin */ > > with operation > > > + if (rand_otp && chip->options & NAND_NO_SUBPAGE_WRITE && > > + mxic->reliability_func & MACRONIX_RANDOMIZER_BIT) { > > + if (p->supports_set_get_features) { > > + bitmap_set(p->set_feature_list, > > + ONFI_FEATURE_ADDR_MXIC_RANDOMIZER, 1); > > + bitmap_set(p->get_feature_list, > > + ONFI_FEATURE_ADDR_MXIC_RANDOMIZER, 1); > > + ret = macronix_nand_randomizer_check_enable(chip); > > + if (ret < 0) > > + pr_info("Macronix NAND randomizer failed\n"); > > + else > > + pr_info("Macronix NAND randomizer enabled\n"); > > Maybe we should update the bitmaps only if it succeeds? okay, will drop pr_info(); > > > + } > > + } > > + > > if ((mxic->reliability_func & MACRONIX_READ_RETRY_BIT) == 0) > > return; > > > > With the above fixed, > Reviewed-by: Miquel Raynal <miquel.raynal@xxxxxxxxxxx> > > Thanks, > Miquèl thanks for your time & comments. Mason CONFIDENTIALITY NOTE: This e-mail and any attachments may contain confidential information and/or personal data, which is protected by applicable laws. Please be reminded that duplication, disclosure, distribution, or use of this e-mail (and/or its attachments) or any part thereof is prohibited. If you receive this e-mail in error, please notify us immediately and delete this mail as well as its attachment(s) from your system. In addition, please be informed that collection, processing, and/or use of personal data is prohibited unless expressly permitted by personal data protection laws. Thank you for your attention and cooperation. Macronix International Co., Ltd. ===================================================================== ============================================================================ CONFIDENTIALITY NOTE: This e-mail and any attachments may contain confidential information and/or personal data, which is protected by applicable laws. Please be reminded that duplication, disclosure, distribution, or use of this e-mail (and/or its attachments) or any part thereof is prohibited. If you receive this e-mail in error, please notify us immediately and delete this mail as well as its attachment(s) from your system. In addition, please be informed that collection, processing, and/or use of personal data is prohibited unless expressly permitted by personal data protection laws. Thank you for your attention and cooperation. Macronix International Co., Ltd. ===================================================================== ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/