Commit 1a7537a3 authored by Miquel Raynal's avatar Miquel Raynal
Browse files

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: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
parents 3e79e1b4 281f7a6c
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -888,8 +888,8 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,

	/* OTP nvmem will be registered on the physical device */
	config.dev = mtd->dev.parent;
	config.name = kasprintf(GFP_KERNEL, "%s-%s", dev_name(&mtd->dev), compatible);
	config.id = NVMEM_DEVID_NONE;
	config.name = compatible;
	config.id = NVMEM_DEVID_AUTO;
	config.owner = THIS_MODULE;
	config.type = NVMEM_TYPE_OTP;
	config.root_only = true;
@@ -905,7 +905,6 @@ static struct nvmem_device *mtd_otp_nvmem_register(struct mtd_info *mtd,
		nvmem = NULL;

	of_node_put(np);
	kfree(config.name);

	return nvmem;
}
@@ -940,6 +939,7 @@ static int mtd_nvmem_fact_otp_reg_read(void *priv, unsigned int offset,

static int mtd_otp_nvmem_add(struct mtd_info *mtd)
{
	struct device *dev = mtd->dev.parent;
	struct nvmem_device *nvmem;
	ssize_t size;
	int err;
@@ -953,8 +953,8 @@ static int mtd_otp_nvmem_add(struct mtd_info *mtd)
			nvmem = mtd_otp_nvmem_register(mtd, "user-otp", size,
						       mtd_nvmem_user_otp_reg_read);
			if (IS_ERR(nvmem)) {
				dev_err(&mtd->dev, "Failed to register OTP NVMEM device\n");
				return PTR_ERR(nvmem);
				err = PTR_ERR(nvmem);
				goto err;
			}
			mtd->otp_user_nvmem = nvmem;
		}
@@ -971,7 +971,6 @@ static int mtd_otp_nvmem_add(struct mtd_info *mtd)
			nvmem = mtd_otp_nvmem_register(mtd, "factory-otp", size,
						       mtd_nvmem_fact_otp_reg_read);
			if (IS_ERR(nvmem)) {
				dev_err(&mtd->dev, "Failed to register OTP NVMEM device\n");
				err = PTR_ERR(nvmem);
				goto err;
			}
@@ -983,7 +982,7 @@ static int mtd_otp_nvmem_add(struct mtd_info *mtd)

err:
	nvmem_unregister(mtd->otp_user_nvmem);
	return err;
	return dev_err_probe(dev, err, "Failed to register OTP NVMEM device\n");
}

/**
@@ -1023,10 +1022,14 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,

	mtd_set_dev_defaults(mtd);

	ret = mtd_otp_nvmem_add(mtd);
	if (ret)
		goto out;

	if (IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER)) {
		ret = add_mtd_device(mtd);
		if (ret)
			return ret;
			goto out;
	}

	/* Prefer parsed partitions over driver-provided fallback */
@@ -1061,9 +1064,12 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types,
		register_reboot_notifier(&mtd->reboot_notifier);
	}

	ret = mtd_otp_nvmem_add(mtd);

out:
	if (ret) {
		nvmem_unregister(mtd->otp_user_nvmem);
		nvmem_unregister(mtd->otp_factory_nvmem);
	}

	if (ret && device_is_registered(&mtd->dev))
		del_mtd_device(mtd);