Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'mtd/core-fixes-before-nvmem-layouts-for-6.4' into mtd/next

Core MTD changes:
* Prepare mtd_otp_nvmem_add() to handle -EPROBE_DEFER
* Fix error path for nvmem provider
* Fix nvmem error reporting
* Provide unique name for nvmem device

These changes are expected to be pulled before applying nvmem layouts
support in order to get a fully working support in all situations.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>

+16 -10
+16 -10
drivers/mtd/mtdcore.c
··· 888 888 889 889 /* OTP nvmem will be registered on the physical device */ 890 890 config.dev = mtd->dev.parent; 891 - config.name = kasprintf(GFP_KERNEL, "%s-%s", dev_name(&mtd->dev), compatible); 892 - config.id = NVMEM_DEVID_NONE; 891 + config.name = compatible; 892 + config.id = NVMEM_DEVID_AUTO; 893 893 config.owner = THIS_MODULE; 894 894 config.type = NVMEM_TYPE_OTP; 895 895 config.root_only = true; ··· 905 905 nvmem = NULL; 906 906 907 907 of_node_put(np); 908 - kfree(config.name); 909 908 910 909 return nvmem; 911 910 } ··· 939 940 940 941 static int mtd_otp_nvmem_add(struct mtd_info *mtd) 941 942 { 943 + struct device *dev = mtd->dev.parent; 942 944 struct nvmem_device *nvmem; 943 945 ssize_t size; 944 946 int err; ··· 953 953 nvmem = mtd_otp_nvmem_register(mtd, "user-otp", size, 954 954 mtd_nvmem_user_otp_reg_read); 955 955 if (IS_ERR(nvmem)) { 956 - dev_err(&mtd->dev, "Failed to register OTP NVMEM device\n"); 957 - return PTR_ERR(nvmem); 956 + err = PTR_ERR(nvmem); 957 + goto err; 958 958 } 959 959 mtd->otp_user_nvmem = nvmem; 960 960 } ··· 971 971 nvmem = mtd_otp_nvmem_register(mtd, "factory-otp", size, 972 972 mtd_nvmem_fact_otp_reg_read); 973 973 if (IS_ERR(nvmem)) { 974 - dev_err(&mtd->dev, "Failed to register OTP NVMEM device\n"); 975 974 err = PTR_ERR(nvmem); 976 975 goto err; 977 976 } ··· 982 983 983 984 err: 984 985 nvmem_unregister(mtd->otp_user_nvmem); 985 - return err; 986 + return dev_err_probe(dev, err, "Failed to register OTP NVMEM device\n"); 986 987 } 987 988 988 989 /** ··· 1022 1023 1023 1024 mtd_set_dev_defaults(mtd); 1024 1025 1026 + ret = mtd_otp_nvmem_add(mtd); 1027 + if (ret) 1028 + goto out; 1029 + 1025 1030 if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) { 1026 1031 ret = add_mtd_device(mtd); 1027 1032 if (ret) 1028 - return ret; 1033 + goto out; 1029 1034 } 1030 1035 1031 1036 /* Prefer parsed partitions over driver-provided fallback */ ··· 1064 1061 register_reboot_notifier(&mtd->reboot_notifier); 1065 1062 } 1066 1063 1067 - ret = mtd_otp_nvmem_add(mtd); 1068 - 1069 1064 out: 1065 + if (ret) { 1066 + nvmem_unregister(mtd->otp_user_nvmem); 1067 + nvmem_unregister(mtd->otp_factory_nvmem); 1068 + } 1069 + 1070 1070 if (ret && device_is_registered(&mtd->dev)) 1071 1071 del_mtd_device(mtd); 1072 1072