soc: imx8m: Remove global soc_uid
authorMarek Vasut <marex@denx.de>
Sun, 29 Sep 2024 18:49:17 +0000 (20:49 +0200)
committerShawn Guo <shawnguo@kernel.org>
Fri, 18 Oct 2024 03:13:53 +0000 (11:13 +0800)
The static global soc_uid is only ever used as kasprintf() parameter in
imx8m_soc_probe(). Pass pointer to local u64 variable to .soc_revision()
callback instead and let the .soc_revision() callback fill in the content.
Remove the unnecessary static global variable.

Signed-off-by: Marek Vasut <marex@denx.de>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
drivers/soc/imx/soc-imx8m.c

index 5ea8887..9665933 100644 (file)
 
 struct imx8_soc_data {
        char *name;
-       int (*soc_revision)(u32 *socrev);
+       int (*soc_revision)(u32 *socrev, u64 *socuid);
 };
 
-static u64 soc_uid;
-
 #ifdef CONFIG_HAVE_ARM_SMCCC
 static u32 imx8mq_soc_revision_from_atf(void)
 {
@@ -51,7 +49,7 @@ static u32 imx8mq_soc_revision_from_atf(void)
 static inline u32 imx8mq_soc_revision_from_atf(void) { return 0; };
 #endif
 
-static int imx8mq_soc_revision(u32 *socrev)
+static int imx8mq_soc_revision(u32 *socrev, u64 *socuid)
 {
        struct device_node *np;
        void __iomem *ocotp_base;
@@ -89,9 +87,9 @@ static int imx8mq_soc_revision(u32 *socrev)
                        rev = REV_B1;
        }
 
-       soc_uid = readl_relaxed(ocotp_base + OCOTP_UID_HIGH);
-       soc_uid <<= 32;
-       soc_uid |= readl_relaxed(ocotp_base + OCOTP_UID_LOW);
+       *socuid = readl_relaxed(ocotp_base + OCOTP_UID_HIGH);
+       *socuid <<= 32;
+       *socuid |= readl_relaxed(ocotp_base + OCOTP_UID_LOW);
 
        *socrev = rev;
 
@@ -109,7 +107,7 @@ err_iomap:
        return ret;
 }
 
-static int imx8mm_soc_uid(void)
+static int imx8mm_soc_uid(u64 *socuid)
 {
        void __iomem *ocotp_base;
        struct device_node *np;
@@ -136,9 +134,9 @@ static int imx8mm_soc_uid(void)
 
        clk_prepare_enable(clk);
 
-       soc_uid = readl_relaxed(ocotp_base + OCOTP_UID_HIGH + offset);
-       soc_uid <<= 32;
-       soc_uid |= readl_relaxed(ocotp_base + OCOTP_UID_LOW + offset);
+       *socuid = readl_relaxed(ocotp_base + OCOTP_UID_HIGH + offset);
+       *socuid <<= 32;
+       *socuid |= readl_relaxed(ocotp_base + OCOTP_UID_LOW + offset);
 
        clk_disable_unprepare(clk);
        clk_put(clk);
@@ -151,7 +149,7 @@ err_iomap:
        return ret;
 }
 
-static int imx8mm_soc_revision(u32 *socrev)
+static int imx8mm_soc_revision(u32 *socrev, u64 *socuid)
 {
        struct device_node *np;
        void __iomem *anatop_base;
@@ -172,7 +170,7 @@ static int imx8mm_soc_revision(u32 *socrev)
        iounmap(anatop_base);
        of_node_put(np);
 
-       return imx8mm_soc_uid();
+       return imx8mm_soc_uid(socuid);
 
 err_iomap:
        of_node_put(np);
@@ -215,10 +213,11 @@ static __maybe_unused const struct of_device_id imx8_soc_match[] = {
 static int imx8m_soc_probe(struct platform_device *pdev)
 {
        struct soc_device_attribute *soc_dev_attr;
-       struct soc_device *soc_dev;
+       const struct imx8_soc_data *data;
        const struct of_device_id *id;
+       struct soc_device *soc_dev;
        u32 soc_rev = 0;
-       const struct imx8_soc_data *data;
+       u64 soc_uid = 0;
        int ret;
 
        soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
@@ -241,7 +240,7 @@ static int imx8m_soc_probe(struct platform_device *pdev)
        if (data) {
                soc_dev_attr->soc_id = data->name;
                if (data->soc_revision) {
-                       ret = data->soc_revision(&soc_rev);
+                       ret = data->soc_revision(&soc_rev, &soc_uid);
                        if (ret)
                                goto free_soc;
                }