]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: ipa: remove a remoteproc dependency
authorAlex Elder <elder@linaro.org>
Wed, 20 Jan 2021 21:26:03 +0000 (15:26 -0600)
committerJakub Kicinski <kuba@kernel.org>
Fri, 22 Jan 2021 04:42:46 +0000 (20:42 -0800)
The IPA driver currently requires a DT property to be defined whose
value is the phandle for the modem subsystem.  This was needed to
look up a remoteproc structure pointer used when registering for
notifications in the original IPA notification mechanism.

Remoteproc provides a more generic SSR notifier system, and the IPA
driver switched over to it last summer, but this remoteproc phandle
dependency was not removed at that time.

Get rid of the IPA remoteproc pointer and stop requiring the phandle
be specified.

This avoids a link error (rproc_put() not defined) for certain
configurations.

Reported-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ipa/ipa.h
drivers/net/ipa/ipa_main.c

index 6c2371084c55aa7ff55291d16b95a178daead494..c6c6a7f6909c184744b332d9699aa280fd150015 100644 (file)
@@ -43,7 +43,6 @@ enum ipa_flag {
  * @flags:             Boolean state flags
  * @version:           IPA hardware version
  * @pdev:              Platform device
- * @modem_rproc:       Remoteproc handle for modem subsystem
  * @smp2p:             SMP2P information
  * @clock:             IPA clocking information
  * @table_addr:                DMA address of filter/route table content
@@ -83,7 +82,6 @@ struct ipa {
        DECLARE_BITMAP(flags, IPA_FLAG_COUNT);
        enum ipa_version version;
        struct platform_device *pdev;
-       struct rproc *modem_rproc;
        struct notifier_block nb;
        void *notifier;
        struct ipa_smp2p *smp2p;
index 84bb8ae9272522f5611b0d7e4c1217197051bdc2..ab0fd5cb49277d724b58f92f853d193100a905a1 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/of.h>
 #include <linux/of_device.h>
 #include <linux/of_address.h>
-#include <linux/remoteproc.h>
 #include <linux/qcom_scm.h>
 #include <linux/soc/qcom/mdt_loader.h>
 
@@ -729,19 +728,6 @@ static const struct of_device_id ipa_match[] = {
 };
 MODULE_DEVICE_TABLE(of, ipa_match);
 
-static phandle of_property_read_phandle(const struct device_node *np,
-                                       const char *name)
-{
-        struct property *prop;
-        int len = 0;
-
-        prop = of_find_property(np, name, &len);
-        if (!prop || len != sizeof(__be32))
-                return 0;
-
-        return be32_to_cpup(prop->value);
-}
-
 /* Check things that can be validated at build time.  This just
  * groups these things BUILD_BUG_ON() calls don't clutter the rest
  * of the code.
@@ -807,10 +793,8 @@ static int ipa_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        const struct ipa_data *data;
        struct ipa_clock *clock;
-       struct rproc *rproc;
        bool modem_init;
        struct ipa *ipa;
-       phandle ph;
        int ret;
 
        ipa_validate_build();
@@ -829,25 +813,12 @@ static int ipa_probe(struct platform_device *pdev)
                if (!qcom_scm_is_available())
                        return -EPROBE_DEFER;
 
-       /* We rely on remoteproc to tell us about modem state changes */
-       ph = of_property_read_phandle(dev->of_node, "modem-remoteproc");
-       if (!ph) {
-               dev_err(dev, "DT missing \"modem-remoteproc\" property\n");
-               return -EINVAL;
-       }
-
-       rproc = rproc_get_by_phandle(ph);
-       if (!rproc)
-               return -EPROBE_DEFER;
-
        /* The clock and interconnects might not be ready when we're
         * probed, so might return -EPROBE_DEFER.
         */
        clock = ipa_clock_init(dev, data->clock_data);
-       if (IS_ERR(clock)) {
-               ret = PTR_ERR(clock);
-               goto err_rproc_put;
-       }
+       if (IS_ERR(clock))
+               return PTR_ERR(clock);
 
        /* No more EPROBE_DEFER.  Allocate and initialize the IPA structure */
        ipa = kzalloc(sizeof(*ipa), GFP_KERNEL);
@@ -858,7 +829,6 @@ static int ipa_probe(struct platform_device *pdev)
 
        ipa->pdev = pdev;
        dev_set_drvdata(dev, ipa);
-       ipa->modem_rproc = rproc;
        ipa->clock = clock;
        ipa->version = data->version;
 
@@ -935,8 +905,6 @@ err_kfree_ipa:
        kfree(ipa);
 err_clock_exit:
        ipa_clock_exit(clock);
-err_rproc_put:
-       rproc_put(rproc);
 
        return ret;
 }
@@ -944,7 +912,6 @@ err_rproc_put:
 static int ipa_remove(struct platform_device *pdev)
 {
        struct ipa *ipa = dev_get_drvdata(&pdev->dev);
-       struct rproc *rproc = ipa->modem_rproc;
        struct ipa_clock *clock = ipa->clock;
        int ret;
 
@@ -970,7 +937,6 @@ static int ipa_remove(struct platform_device *pdev)
        ipa_reg_exit(ipa);
        kfree(ipa);
        ipa_clock_exit(clock);
-       rproc_put(rproc);
 
        return 0;
 }