OPP: Drop redundant code in _link_required_opps()
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 2 Oct 2024 12:22:28 +0000 (14:22 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 10 Oct 2024 12:15:54 +0000 (14:15 +0200)
Due to that the required-devs for the required OPPs are now always being
assigned, we no longer need the special treatment in _link_required_opps()
for the single PM domain case. Let's therefore drop it.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20241002122232.194245-8-ulf.hansson@linaro.org
drivers/opp/of.c

index 55c8cfe..fd5ed28 100644 (file)
@@ -295,7 +295,7 @@ void _of_clear_opp(struct opp_table *opp_table, struct dev_pm_opp *opp)
        of_node_put(opp->np);
 }
 
-static int _link_required_opps(struct dev_pm_opp *opp, struct opp_table *opp_table,
+static int _link_required_opps(struct dev_pm_opp *opp,
                               struct opp_table *required_table, int index)
 {
        struct device_node *np;
@@ -313,39 +313,6 @@ static int _link_required_opps(struct dev_pm_opp *opp, struct opp_table *opp_tab
                return -ENODEV;
        }
 
-       /*
-        * There are two genpd (as required-opp) cases that we need to handle,
-        * devices with a single genpd and ones with multiple genpds.
-        *
-        * The single genpd case requires special handling as we need to use the
-        * same `dev` structure (instead of a virtual one provided by genpd
-        * core) for setting the performance state.
-        *
-        * It doesn't make sense for a device's DT entry to have both
-        * "opp-level" and single "required-opps" entry pointing to a genpd's
-        * OPP, as that would make the OPP core call
-        * dev_pm_domain_set_performance_state() for two different values for
-        * the same device structure. Lets treat single genpd configuration as a
-        * case where the OPP's level is directly available without required-opp
-        * link in the DT.
-        *
-        * Just update the `level` with the right value, which
-        * dev_pm_opp_set_opp() will take care of in the normal path itself.
-        *
-        * There is another case though, where a genpd's OPP table has
-        * required-opps set to a parent genpd. The OPP core expects the user to
-        * set the respective required `struct device` pointer via
-        * dev_pm_opp_set_config().
-        */
-       if (required_table->is_genpd && opp_table->required_opp_count == 1 &&
-           !opp_table->required_devs[0]) {
-               /* Genpd core takes care of propagation to parent genpd */
-               if (!opp_table->is_genpd) {
-                       if (!WARN_ON(opp->level != OPP_LEVEL_UNSET))
-                               opp->level = opp->required_opps[0]->level;
-               }
-       }
-
        return 0;
 }
 
@@ -370,7 +337,7 @@ static int _of_opp_alloc_required_opps(struct opp_table *opp_table,
                if (IS_ERR_OR_NULL(required_table))
                        continue;
 
-               ret = _link_required_opps(opp, opp_table, required_table, i);
+               ret = _link_required_opps(opp, required_table, i);
                if (ret)
                        goto free_required_opps;
        }
@@ -391,7 +358,7 @@ static int lazy_link_required_opps(struct opp_table *opp_table,
        int ret;
 
        list_for_each_entry(opp, &opp_table->opp_list, node) {
-               ret = _link_required_opps(opp, opp_table, new_table, index);
+               ret = _link_required_opps(opp, new_table, index);
                if (ret)
                        return ret;
        }