diff options
| author | Peng Fan <peng.fan@nxp.com> | 2025-12-17 15:42:07 +0300 |
|---|---|---|
| committer | Shawn Guo <shawnguo@kernel.org> | 2026-01-17 08:38:21 +0300 |
| commit | ab382a6ee25f0b571cffad66b2e6aaf0d2d245ec (patch) | |
| tree | 72b8f4a896a38cea3ee887558f4868a12480e759 | |
| parent | 80a4062e8821861c3ce7407ea5b23afa959917e2 (diff) | |
| download | linux-ab382a6ee25f0b571cffad66b2e6aaf0d2d245ec.tar.xz | |
soc: imx: Use device-managed APIs for i.MX9
Use device-managed APi to simplify code.
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
| -rw-r--r-- | drivers/soc/imx/soc-imx9.c | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/drivers/soc/imx/soc-imx9.c b/drivers/soc/imx/soc-imx9.c index b46d22cf0212..0b1c59c7ddb2 100644 --- a/drivers/soc/imx/soc-imx9.c +++ b/drivers/soc/imx/soc-imx9.c @@ -18,6 +18,7 @@ static int imx9_soc_probe(struct platform_device *pdev) { + struct device *dev = &pdev->dev; struct soc_device_attribute *attr; struct arm_smccc_res res; struct soc_device *sdev; @@ -25,17 +26,17 @@ static int imx9_soc_probe(struct platform_device *pdev) u64 uid127_64, uid63_0; int err; - attr = kzalloc(sizeof(*attr), GFP_KERNEL); + attr = devm_kzalloc(dev, sizeof(*attr), GFP_KERNEL); if (!attr) return -ENOMEM; err = of_property_read_string(of_root, "model", &attr->machine); if (err) { pr_err("%s: missing model property: %d\n", __func__, err); - goto attr; + return err; } - attr->family = kasprintf(GFP_KERNEL, "Freescale i.MX"); + attr->family = devm_kasprintf(dev, GFP_KERNEL, "Freescale i.MX"); /* * Retrieve the soc id, rev & uid info: @@ -47,39 +48,28 @@ static int imx9_soc_probe(struct platform_device *pdev) arm_smccc_smc(IMX_SIP_GET_SOC_INFO, 0, 0, 0, 0, 0, 0, 0, &res); if (res.a0 != SMCCC_RET_SUCCESS) { pr_err("%s: SMC failed: 0x%lx\n", __func__, res.a0); - err = -EINVAL; - goto family; + return -EINVAL; } soc_id = SOC_ID(res.a1); rev_major = SOC_REV_MAJOR(res.a1); rev_minor = SOC_REV_MINOR(res.a1); - attr->soc_id = kasprintf(GFP_KERNEL, "i.MX%2x", soc_id); - attr->revision = kasprintf(GFP_KERNEL, "%d.%d", rev_major, rev_minor); + attr->soc_id = devm_kasprintf(dev, GFP_KERNEL, "i.MX%2x", soc_id); + attr->revision = devm_kasprintf(dev, GFP_KERNEL, "%d.%d", rev_major, rev_minor); uid127_64 = res.a2; uid63_0 = res.a3; - attr->serial_number = kasprintf(GFP_KERNEL, "%016llx%016llx", uid127_64, uid63_0); + attr->serial_number = devm_kasprintf(dev, GFP_KERNEL, "%016llx%016llx", uid127_64, uid63_0); sdev = soc_device_register(attr); if (IS_ERR(sdev)) { err = PTR_ERR(sdev); pr_err("%s failed to register SoC as a device: %d\n", __func__, err); - goto serial_number; + return err; } return 0; - -serial_number: - kfree(attr->serial_number); - kfree(attr->revision); - kfree(attr->soc_id); -family: - kfree(attr->family); -attr: - kfree(attr); - return err; } static __maybe_unused const struct of_device_id imx9_soc_match[] = { |
