PM / Domains: Add support for 'required-opps' to set default perf state
Subsystems (10)
v7 cover PM / Domains: Add support for 'required-opps' to set default perf state
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(-)
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
PATCH v7 1/3 opp: Don't print an error if required-opps is missing
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.
--- drivers/opp/of.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)
drivers/opp/of.c +2 -10
@@ -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)) {
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Re: [PATCH v7 1/3] opp: Don't print an error if required-opps is missing
Quoted 9 lines · Rajendra Nayak
The 'required-opps' property is considered optional, hence remove the
pr_err()inof_parse_required_opp()when we find the property is missing.
While at it, also fix the return value ofof_get_required_opp_performance_state()whenof_parse_required_opp()fails, return a-ENODEVinstead of the-EINVAL.Signed-off-by Rajendra Nayak <[email protected]>
Kind regards
Uffe
Quoted 38 lines
--- drivers/opp/of.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)drivers/opp/of.c +2
-11@@ -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
Re: [PATCH v7 1/3] opp: Don't print an error if required-opps is missing
In reply to Rajendra NayakQuoted 11 lines · Rajendra Nayak
The 'required-opps' property is considered optional, hence remove the
pr_err()inof_parse_required_opp()when we find the property is missing.
While at it, also fix the return value ofof_get_required_opp_performance_state()whenof_parse_required_opp()fails, return a-ENODEVinstead of the-EINVAL.Signed-off-by Rajendra Nayak <[email protected]>--- drivers/opp/of.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-)
Signature · 1 line
viresh
PATCH v7 2/3 PM / Domains: Add support for 'required-opps' to set default perf state
In reply to Rajendra NayakSome 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.
--- drivers/base/power/domain.c | 30 ++++++++++++++++++++++++++++-- include/linux/pm_domain.h | 1 + 2 files changed, 29 insertions(+), 2 deletions(-)
drivers/base/power/domain.c +28 -2
@@ -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; }/**
include/linux/pm_domain.h +1 -0
@@ -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;
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Quoted 7 lines · 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.
Quoted 8 lines
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 <[email protected]>
Kind regards
Uffe
Quoted 78 lines
--- drivers/base/power/domain.c | 30 ++++++++++++++++++++++++++++-- include/linux/pm_domain.h | 1 + 2 files changed, 29 insertions(+), 2 deletions(-)drivers/base/power/domain.c +28
-2@@ -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; }/** include/linux/pm_domain.h +1
-1@@ -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
Rafael J. Wysocki
maintainerQuoted 16 lines · Ulf Hansson
Quoted 14 lines · 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.
Quoted 3 lines
Quoted 1 line
Signed-off-by Rajendra Nayak <[email protected]>Reviewed-by Ulf Hansson <[email protected]>
All three patches applied as 5.15 material, thanks!
PATCH v7 3/3 arm64: dts: sc7180: Add required-opps for i2c
In reply to Rajendra Nayakqup-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.
--- arch/arm64/boot/dts/qcom/sc7180.dtsi | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
arch/arm64/boot/dts/qcom/sc7180.dtsi +24 -0
@@ -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 {
Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
Re: [PATCH v7 3/3] arm64: dts: sc7180: Add required-opps for i2c
Quoted 6 lines · 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.
Quoted 6 lines
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 <[email protected]>Reviewed-by Stephen Boyd <[email protected]>
Kind regards
Uffe
Quoted 144 lines
--- arch/arm64/boot/dts/qcom/sc7180.dtsi | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)arch/arm64/boot/dts/qcom/sc7180.dtsi +24
-1@@ -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