* [PATCH v7 0/3] PM / Domains: Add support for 'required-opps' to set default perf state @ 2021-08-12 11:27 Rajendra Nayak 2021-08-12 11:27 ` [PATCH v7 1/3] opp: Don't print an error if required-opps is missing Rajendra Nayak ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Rajendra Nayak @ 2021-08-12 11:27 UTC (permalink / raw) To: ulf.hansson, bjorn.andersson, viresh.kumar Cc: linux-pm, devicetree, linux-kernel, linux-arm-msm, swboyd, rojay, stephan, digetx, Rajendra Nayak v7: Added a patch to remove error print in case required-opps is missing of_get_required_opp_performance_state() called without parsing for required-opps Check and handle error from dev_pm_genpd_set_performance_state() genpd_remove_device() on error v6: Fixed up some more error handling in __genpd_dev_pm_attach() v5: Dropped all default_pstate handling in runtime suspend/resume v4: Fixed error handling in __genpd_dev_pm_attach() This is a re-spin of the series [1] which was adding support for a new DT binding (assigned-performance-state) and based on the discussions on that thread [2] it was concluded that we could achieve the same with the existing 'required-opps' binding instead. So this series, just drops the new binding and uses required-opps to achieve the default perf state setting thats needed by some devices. --- Some devics within power-domains with performance states do not support DVFS, but still need to vote on a default/static state while they are active. Add support for this using the 'required-opps' property in device tree. [1] https://lore.kernel.org/patchwork/project/lkml/list/?series=501336&state=%2A&archive=both [2] https://lore.kernel.org/patchwork/patch/1436886/ Rajendra Nayak (3): opp: Don't print an error if required-opps is missing PM / Domains: Add support for 'required-opps' to set default perf state arm64: dts: sc7180: Add required-opps for i2c arch/arm64/boot/dts/qcom/sc7180.dtsi | 24 ++++++++++++++++++++++++ drivers/base/power/domain.c | 29 +++++++++++++++++++++++++++-- drivers/opp/of.c | 12 ++---------- include/linux/pm_domain.h | 1 + 4 files changed, 54 insertions(+), 12 deletions(-) -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 1/3] opp: Don't print an error if required-opps is missing 2021-08-12 11:27 [PATCH v7 0/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak @ 2021-08-12 11:27 ` Rajendra Nayak 2021-08-12 11:45 ` Ulf Hansson 2021-08-13 3:57 ` Viresh Kumar 2021-08-12 11:27 ` [PATCH v7 2/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak 2021-08-12 11:27 ` [PATCH v7 3/3] arm64: dts: sc7180: Add required-opps for i2c Rajendra Nayak 2 siblings, 2 replies; 9+ messages in thread From: Rajendra Nayak @ 2021-08-12 11:27 UTC (permalink / raw) To: ulf.hansson, bjorn.andersson, viresh.kumar Cc: linux-pm, devicetree, linux-kernel, linux-arm-msm, swboyd, rojay, stephan, digetx, Rajendra Nayak The 'required-opps' property is considered optional, hence remove the pr_err() in of_parse_required_opp() when we find the property is missing. While at it, also fix the return value of of_get_required_opp_performance_state() when of_parse_required_opp() fails, return a -ENODEV instead of the -EINVAL. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> --- drivers/opp/of.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/opp/of.c b/drivers/opp/of.c index d298e38..9bdabad 100644 --- a/drivers/opp/of.c +++ b/drivers/opp/of.c @@ -95,15 +95,7 @@ static struct dev_pm_opp *_find_opp_of_np(struct opp_table *opp_table, static struct device_node *of_parse_required_opp(struct device_node *np, int index) { - struct device_node *required_np; - - required_np = of_parse_phandle(np, "required-opps", index); - if (unlikely(!required_np)) { - pr_err("%s: Unable to parse required-opps: %pOF, index: %d\n", - __func__, np, index); - } - - return required_np; + return of_parse_phandle(np, "required-opps", index); } /* The caller must call dev_pm_opp_put_opp_table() after the table is used */ @@ -1327,7 +1319,7 @@ int of_get_required_opp_performance_state(struct device_node *np, int index) required_np = of_parse_required_opp(np, index); if (!required_np) - return -EINVAL; + return -ENODEV; opp_table = _find_table_of_opp_np(required_np); if (IS_ERR(opp_table)) { -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v7 1/3] opp: Don't print an error if required-opps is missing 2021-08-12 11:27 ` [PATCH v7 1/3] opp: Don't print an error if required-opps is missing Rajendra Nayak @ 2021-08-12 11:45 ` Ulf Hansson 2021-08-13 3:57 ` Viresh Kumar 1 sibling, 0 replies; 9+ messages in thread From: Ulf Hansson @ 2021-08-12 11:45 UTC (permalink / raw) To: Rajendra Nayak Cc: Bjorn Andersson, Viresh Kumar, Linux PM, DTML, Linux Kernel Mailing List, linux-arm-msm, Stephen Boyd, Roja Rani Yarubandi, Stephan Gerhold, Dmitry Osipenko On Thu, 12 Aug 2021 at 13:27, Rajendra Nayak <rnayak@codeaurora.org> wrote: > > The 'required-opps' property is considered optional, hence remove > the pr_err() in of_parse_required_opp() when we find the property is > missing. > While at it, also fix the return value of > of_get_required_opp_performance_state() when of_parse_required_opp() > fails, return a -ENODEV instead of the -EINVAL. > > Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Kind regards Uffe > --- > drivers/opp/of.c | 12 ++---------- > 1 file changed, 2 insertions(+), 10 deletions(-) > > diff --git a/drivers/opp/of.c b/drivers/opp/of.c > index d298e38..9bdabad 100644 > --- a/drivers/opp/of.c > +++ b/drivers/opp/of.c > @@ -95,15 +95,7 @@ static struct dev_pm_opp *_find_opp_of_np(struct opp_table *opp_table, > static struct device_node *of_parse_required_opp(struct device_node *np, > int index) > { > - struct device_node *required_np; > - > - required_np = of_parse_phandle(np, "required-opps", index); > - if (unlikely(!required_np)) { > - pr_err("%s: Unable to parse required-opps: %pOF, index: %d\n", > - __func__, np, index); > - } > - > - return required_np; > + return of_parse_phandle(np, "required-opps", index); > } > > /* The caller must call dev_pm_opp_put_opp_table() after the table is used */ > @@ -1327,7 +1319,7 @@ int of_get_required_opp_performance_state(struct device_node *np, int index) > > required_np = of_parse_required_opp(np, index); > if (!required_np) > - return -EINVAL; > + return -ENODEV; > > opp_table = _find_table_of_opp_np(required_np); > if (IS_ERR(opp_table)) { > -- > QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member > of Code Aurora Forum, hosted by The Linux Foundation > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v7 1/3] opp: Don't print an error if required-opps is missing 2021-08-12 11:27 ` [PATCH v7 1/3] opp: Don't print an error if required-opps is missing Rajendra Nayak 2021-08-12 11:45 ` Ulf Hansson @ 2021-08-13 3:57 ` Viresh Kumar 1 sibling, 0 replies; 9+ messages in thread From: Viresh Kumar @ 2021-08-13 3:57 UTC (permalink / raw) To: Rajendra Nayak Cc: ulf.hansson, bjorn.andersson, linux-pm, devicetree, linux-kernel, linux-arm-msm, swboyd, rojay, stephan, digetx On 12-08-21, 16:57, Rajendra Nayak wrote: > The 'required-opps' property is considered optional, hence remove > the pr_err() in of_parse_required_opp() when we find the property is > missing. > While at it, also fix the return value of > of_get_required_opp_performance_state() when of_parse_required_opp() > fails, return a -ENODEV instead of the -EINVAL. > > Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> > --- > drivers/opp/of.c | 12 ++---------- > 1 file changed, 2 insertions(+), 10 deletions(-) Acked-by: Viresh Kumar <viresh.kumar@linaro.org> -- viresh ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 2/3] PM / Domains: Add support for 'required-opps' to set default perf state 2021-08-12 11:27 [PATCH v7 0/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak 2021-08-12 11:27 ` [PATCH v7 1/3] opp: Don't print an error if required-opps is missing Rajendra Nayak @ 2021-08-12 11:27 ` Rajendra Nayak 2021-08-12 11:45 ` Ulf Hansson 2021-08-12 11:27 ` [PATCH v7 3/3] arm64: dts: sc7180: Add required-opps for i2c Rajendra Nayak 2 siblings, 1 reply; 9+ messages in thread From: Rajendra Nayak @ 2021-08-12 11:27 UTC (permalink / raw) To: ulf.hansson, bjorn.andersson, viresh.kumar Cc: linux-pm, devicetree, linux-kernel, linux-arm-msm, swboyd, rojay, stephan, digetx, Rajendra Nayak Some devices within power domains with performance states do not support DVFS, but still need to vote on a default/static state while they are active. They can express this using the 'required-opps' property in device tree, which points to the phandle of the OPP supported by the corresponding power-domains. Add support to parse this information from DT and then set the specified performance state during attach and drop it on detach. runtime suspend/resume callbacks already have logic to drop/set the vote as needed and should take care of dropping the default perf state vote on runtime suspend and restore it back on runtime resume. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> --- drivers/base/power/domain.c | 30 ++++++++++++++++++++++++++++-- include/linux/pm_domain.h | 1 + 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index a934c67..e1c8994 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -2598,6 +2598,12 @@ static void genpd_dev_pm_detach(struct device *dev, bool power_off) dev_dbg(dev, "removing from PM domain %s\n", pd->name); + /* Drop the default performance state */ + if (dev_gpd_data(dev)->default_pstate) { + dev_pm_genpd_set_performance_state(dev, 0); + dev_gpd_data(dev)->default_pstate = 0; + } + for (i = 1; i < GENPD_RETRY_MAX_MS; i <<= 1) { ret = genpd_remove_device(pd, dev); if (ret != -EAGAIN) @@ -2637,6 +2643,7 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev, { struct of_phandle_args pd_args; struct generic_pm_domain *pd; + int pstate; int ret; ret = of_parse_phandle_with_args(dev->of_node, "power-domains", @@ -2675,10 +2682,29 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev, genpd_unlock(pd); } - if (ret) + if (ret) { genpd_remove_device(pd, dev); + return -EPROBE_DEFER; + } - return ret ? -EPROBE_DEFER : 1; + /* Set the default performance state */ + pstate = of_get_required_opp_performance_state(dev->of_node, index); + if (pstate < 0 && pstate != -ENODEV) { + ret = pstate; + goto err; + } else if (pstate > 0) { + ret = dev_pm_genpd_set_performance_state(dev, pstate); + if (ret) + goto err; + dev_gpd_data(dev)->default_pstate = pstate; + } + return 1; + +err: + dev_err(dev, "failed to set required performance state for power-domain %s: %d\n", + pd->name, ret); + genpd_remove_device(pd, dev); + return ret; } /** diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 21a0577..67017c9 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -198,6 +198,7 @@ struct generic_pm_domain_data { struct notifier_block *power_nb; int cpu; unsigned int performance_state; + unsigned int default_pstate; unsigned int rpm_pstate; ktime_t next_wakeup; void *data; -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v7 2/3] PM / Domains: Add support for 'required-opps' to set default perf state 2021-08-12 11:27 ` [PATCH v7 2/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak @ 2021-08-12 11:45 ` Ulf Hansson 2021-08-16 16:47 ` Rafael J. Wysocki 0 siblings, 1 reply; 9+ messages in thread From: Ulf Hansson @ 2021-08-12 11:45 UTC (permalink / raw) To: Rajendra Nayak Cc: Bjorn Andersson, Viresh Kumar, Linux PM, DTML, Linux Kernel Mailing List, linux-arm-msm, Stephen Boyd, Roja Rani Yarubandi, Stephan Gerhold, Dmitry Osipenko On Thu, 12 Aug 2021 at 13:28, Rajendra Nayak <rnayak@codeaurora.org> wrote: > > Some devices within power domains with performance states do not > support DVFS, but still need to vote on a default/static state > while they are active. They can express this using the 'required-opps' > property in device tree, which points to the phandle of the OPP > supported by the corresponding power-domains. > > Add support to parse this information from DT and then set the > specified performance state during attach and drop it on detach. > runtime suspend/resume callbacks already have logic to drop/set > the vote as needed and should take care of dropping the default > perf state vote on runtime suspend and restore it back on runtime > resume. > > Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Kind regards Uffe > --- > drivers/base/power/domain.c | 30 ++++++++++++++++++++++++++++-- > include/linux/pm_domain.h | 1 + > 2 files changed, 29 insertions(+), 2 deletions(-) > > diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c > index a934c67..e1c8994 100644 > --- a/drivers/base/power/domain.c > +++ b/drivers/base/power/domain.c > @@ -2598,6 +2598,12 @@ static void genpd_dev_pm_detach(struct device *dev, bool power_off) > > dev_dbg(dev, "removing from PM domain %s\n", pd->name); > > + /* Drop the default performance state */ > + if (dev_gpd_data(dev)->default_pstate) { > + dev_pm_genpd_set_performance_state(dev, 0); > + dev_gpd_data(dev)->default_pstate = 0; > + } > + > for (i = 1; i < GENPD_RETRY_MAX_MS; i <<= 1) { > ret = genpd_remove_device(pd, dev); > if (ret != -EAGAIN) > @@ -2637,6 +2643,7 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev, > { > struct of_phandle_args pd_args; > struct generic_pm_domain *pd; > + int pstate; > int ret; > > ret = of_parse_phandle_with_args(dev->of_node, "power-domains", > @@ -2675,10 +2682,29 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev, > genpd_unlock(pd); > } > > - if (ret) > + if (ret) { > genpd_remove_device(pd, dev); > + return -EPROBE_DEFER; > + } > > - return ret ? -EPROBE_DEFER : 1; > + /* Set the default performance state */ > + pstate = of_get_required_opp_performance_state(dev->of_node, index); > + if (pstate < 0 && pstate != -ENODEV) { > + ret = pstate; > + goto err; > + } else if (pstate > 0) { > + ret = dev_pm_genpd_set_performance_state(dev, pstate); > + if (ret) > + goto err; > + dev_gpd_data(dev)->default_pstate = pstate; > + } > + return 1; > + > +err: > + dev_err(dev, "failed to set required performance state for power-domain %s: %d\n", > + pd->name, ret); > + genpd_remove_device(pd, dev); > + return ret; > } > > /** > diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h > index 21a0577..67017c9 100644 > --- a/include/linux/pm_domain.h > +++ b/include/linux/pm_domain.h > @@ -198,6 +198,7 @@ struct generic_pm_domain_data { > struct notifier_block *power_nb; > int cpu; > unsigned int performance_state; > + unsigned int default_pstate; > unsigned int rpm_pstate; > ktime_t next_wakeup; > void *data; > -- > QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member > of Code Aurora Forum, hosted by The Linux Foundation > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v7 2/3] PM / Domains: Add support for 'required-opps' to set default perf state 2021-08-12 11:45 ` Ulf Hansson @ 2021-08-16 16:47 ` Rafael J. Wysocki 0 siblings, 0 replies; 9+ messages in thread From: Rafael J. Wysocki @ 2021-08-16 16:47 UTC (permalink / raw) To: Ulf Hansson, Rajendra Nayak Cc: Bjorn Andersson, Viresh Kumar, Linux PM, DTML, Linux Kernel Mailing List, linux-arm-msm, Stephen Boyd, Roja Rani Yarubandi, Stephan Gerhold, Dmitry Osipenko On Thu, Aug 12, 2021 at 1:46 PM Ulf Hansson <ulf.hansson@linaro.org> wrote: > > On Thu, 12 Aug 2021 at 13:28, Rajendra Nayak <rnayak@codeaurora.org> wrote: > > > > Some devices within power domains with performance states do not > > support DVFS, but still need to vote on a default/static state > > while they are active. They can express this using the 'required-opps' > > property in device tree, which points to the phandle of the OPP > > supported by the corresponding power-domains. > > > > Add support to parse this information from DT and then set the > > specified performance state during attach and drop it on detach. > > runtime suspend/resume callbacks already have logic to drop/set > > the vote as needed and should take care of dropping the default > > perf state vote on runtime suspend and restore it back on runtime > > resume. > > > > Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> > > Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> All three patches applied as 5.15 material, thanks! ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v7 3/3] arm64: dts: sc7180: Add required-opps for i2c 2021-08-12 11:27 [PATCH v7 0/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak 2021-08-12 11:27 ` [PATCH v7 1/3] opp: Don't print an error if required-opps is missing Rajendra Nayak 2021-08-12 11:27 ` [PATCH v7 2/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak @ 2021-08-12 11:27 ` Rajendra Nayak 2021-08-12 11:45 ` Ulf Hansson 2 siblings, 1 reply; 9+ messages in thread From: Rajendra Nayak @ 2021-08-12 11:27 UTC (permalink / raw) To: ulf.hansson, bjorn.andersson, viresh.kumar Cc: linux-pm, devicetree, linux-kernel, linux-arm-msm, swboyd, rojay, stephan, digetx, Rajendra Nayak qup-i2c devices on sc7180 are clocked with a fixed clock (19.2 MHz) Though qup-i2c does not support DVFS, it still needs to vote for a performance state on 'CX' to satisfy the 19.2 Mhz clock frequency requirement. Use 'required-opps' to pass this information from device tree, and also add the power-domains property to specify the CX power-domain. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> Reviewed-by: Stephen Boyd <swboyd@chromium.org> --- arch/arm64/boot/dts/qcom/sc7180.dtsi | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi index 4721c15..c8921e2 100644 --- a/arch/arm64/boot/dts/qcom/sc7180.dtsi +++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi @@ -790,8 +790,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi0: spi@880000 { @@ -842,8 +844,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi1: spi@884000 { @@ -894,8 +898,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; uart2: serial@888000 { @@ -928,8 +934,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi3: spi@88c000 { @@ -980,8 +988,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; uart4: serial@890000 { @@ -1014,8 +1024,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi5: spi@894000 { @@ -1079,8 +1091,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi6: spi@a80000 { @@ -1131,8 +1145,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; uart7: serial@a84000 { @@ -1165,8 +1181,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi8: spi@a88000 { @@ -1217,8 +1235,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; uart9: serial@a8c000 { @@ -1251,8 +1271,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi10: spi@a90000 { @@ -1303,8 +1325,10 @@ <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; interconnect-names = "qup-core", "qup-config", "qup-memory"; + power-domains = <&rpmhpd SC7180_CX>; + required-opps = <&rpmhpd_opp_low_svs>; status = "disabled"; }; spi11: spi@a94000 { -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v7 3/3] arm64: dts: sc7180: Add required-opps for i2c 2021-08-12 11:27 ` [PATCH v7 3/3] arm64: dts: sc7180: Add required-opps for i2c Rajendra Nayak @ 2021-08-12 11:45 ` Ulf Hansson 0 siblings, 0 replies; 9+ messages in thread From: Ulf Hansson @ 2021-08-12 11:45 UTC (permalink / raw) To: Rajendra Nayak Cc: Bjorn Andersson, Viresh Kumar, Linux PM, DTML, Linux Kernel Mailing List, linux-arm-msm, Stephen Boyd, Roja Rani Yarubandi, Stephan Gerhold, Dmitry Osipenko On Thu, 12 Aug 2021 at 13:27, Rajendra Nayak <rnayak@codeaurora.org> wrote: > > qup-i2c devices on sc7180 are clocked with a fixed clock (19.2 MHz) > Though qup-i2c does not support DVFS, it still needs to vote for a > performance state on 'CX' to satisfy the 19.2 Mhz clock frequency > requirement. > > Use 'required-opps' to pass this information from > device tree, and also add the power-domains property to specify > the CX power-domain. > > Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org> > Reviewed-by: Stephen Boyd <swboyd@chromium.org> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Kind regards Uffe > --- > arch/arm64/boot/dts/qcom/sc7180.dtsi | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi b/arch/arm64/boot/dts/qcom/sc7180.dtsi > index 4721c15..c8921e2 100644 > --- a/arch/arm64/boot/dts/qcom/sc7180.dtsi > +++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi > @@ -790,8 +790,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, > <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi0: spi@880000 { > @@ -842,8 +844,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, > <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi1: spi@884000 { > @@ -894,8 +898,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, > <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > uart2: serial@888000 { > @@ -928,8 +934,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, > <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi3: spi@88c000 { > @@ -980,8 +988,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, > <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > uart4: serial@890000 { > @@ -1014,8 +1024,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_0 0>, > <&aggre1_noc MASTER_QUP_0 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi5: spi@894000 { > @@ -1079,8 +1091,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, > <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi6: spi@a80000 { > @@ -1131,8 +1145,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, > <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > uart7: serial@a84000 { > @@ -1165,8 +1181,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, > <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi8: spi@a88000 { > @@ -1217,8 +1235,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, > <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > uart9: serial@a8c000 { > @@ -1251,8 +1271,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, > <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi10: spi@a90000 { > @@ -1303,8 +1325,10 @@ > <&gem_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_QUP_1 0>, > <&aggre2_noc MASTER_QUP_1 0 &mc_virt SLAVE_EBI1 0>; > interconnect-names = "qup-core", "qup-config", > "qup-memory"; > + power-domains = <&rpmhpd SC7180_CX>; > + required-opps = <&rpmhpd_opp_low_svs>; > status = "disabled"; > }; > > spi11: spi@a94000 { > -- > QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member > of Code Aurora Forum, hosted by The Linux Foundation > ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-08-16 16:47 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-08-12 11:27 [PATCH v7 0/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak 2021-08-12 11:27 ` [PATCH v7 1/3] opp: Don't print an error if required-opps is missing Rajendra Nayak 2021-08-12 11:45 ` Ulf Hansson 2021-08-13 3:57 ` Viresh Kumar 2021-08-12 11:27 ` [PATCH v7 2/3] PM / Domains: Add support for 'required-opps' to set default perf state Rajendra Nayak 2021-08-12 11:45 ` Ulf Hansson 2021-08-16 16:47 ` Rafael J. Wysocki 2021-08-12 11:27 ` [PATCH v7 3/3] arm64: dts: sc7180: Add required-opps for i2c Rajendra Nayak 2021-08-12 11:45 ` Ulf Hansson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).