v2:
* pm_runtime calls made unconditionally, should work even without the power-domains property in DT
* Added the missing pm_runtime_disable() handling
* DT patch rebased on msm/for-next
--
qfprom devices on sc7280 have an additional requirement to vote on a power-domain
performance state to reliably blow fuses. Add the binding updates and handle this in
the driver, also add the DT node for sc7280 platform.
Rajendra Nayak (3):
dt-bindings: nvmem: qfprom: Add optional power-domains property
nvmem: qfprom: sc7280: Handle the additional power-domains vote
arm64: dts: qcom: sc7280: Add qfprom node
.../devicetree/bindings/nvmem/qcom,qfprom.yaml | 3 +++
arch/arm64/boot/dts/qcom/sc7280.dtsi | 13 +++++++++++
drivers/nvmem/qfprom.c | 26 ++++++++++++++++++++++
3 files changed, 42 insertions(+)
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
qfprom devices on some SoCs need to vote on the performance state
of a power-domain, so add the power-domains optional property to the
bindings
Signed-off-by: Rajendra Nayak <redacted>
---
Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml | 3 +++
1 file changed, 3 insertions(+)
@@ -51,6 +51,9 @@ properties:vcc-supply:description:Our power supply.+power-domains:+description:A phandle to a power domain node.+# Needed if any child nodes are present."#address-cells":const:1
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
From: Doug Anderson <dianders@chromium.org> Date: 2021-07-29 16:19:37
Hi,
On Thu, Jul 29, 2021 at 5:01 AM Rajendra Nayak [off-list ref] wrote:
quoted hunk
qfprom devices on some SoCs need to vote on the performance state
of a power-domain, so add the power-domains optional property to the
bindings
Signed-off-by: Rajendra Nayak <redacted>
---
Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml | 3 +++
1 file changed, 3 insertions(+)
Hi,
On Thu, Jul 29, 2021 at 5:01 AM Rajendra Nayak [off-list ref] wrote:
quoted
qfprom devices on some SoCs need to vote on the performance state
of a power-domain, so add the power-domains optional property to the
bindings
Signed-off-by: Rajendra Nayak <redacted>
---
Documentation/devicetree/bindings/nvmem/qcom,qfprom.yaml | 3 +++
1 file changed, 3 insertions(+)
Add the qfprom node and its properties for the sc7280 SoC.
Signed-off-by: Rajendra Nayak <redacted>
---
arch/arm64/boot/dts/qcom/sc7280.dtsi | 13 +++++++++++++
1 file changed, 13 insertions(+)
From: Doug Anderson <dianders@chromium.org> Date: 2021-07-29 16:24:48
Hi,
On Thu, Jul 29, 2021 at 5:01 AM Rajendra Nayak [off-list ref] wrote:
Add the qfprom node and its properties for the sc7280 SoC.
Signed-off-by: Rajendra Nayak <redacted>
---
arch/arm64/boot/dts/qcom/sc7280.dtsi | 13 +++++++++++++
1 file changed, 13 insertions(+)
Peachy! I guess a future patch will add things like USB2 trim and GPU
speed bin definitions?
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Hi,
On Thu, Jul 29, 2021 at 5:01 AM Rajendra Nayak [off-list ref] wrote:
quoted
Add the qfprom node and its properties for the sc7280 SoC.
Signed-off-by: Rajendra Nayak <redacted>
---
arch/arm64/boot/dts/qcom/sc7280.dtsi | 13 +++++++++++++
1 file changed, 13 insertions(+)
Peachy! I guess a future patch will add things like USB2 trim and GPU
speed bin definitions?
Right, I left those out for a future patch.
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Thanks
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
On sc7280, to reliably blow fuses, we need an additional vote
on max performance state of 'MX' power-domain.
Add support for power-domain performance state voting in the
driver.
Signed-off-by: Rajendra Nayak <redacted>
---
drivers/nvmem/qfprom.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
From: Doug Anderson <dianders@chromium.org> Date: 2021-07-29 16:11:08
Hi,
On Thu, Jul 29, 2021 at 5:01 AM Rajendra Nayak [off-list ref] wrote:
quoted hunk
On sc7280, to reliably blow fuses, we need an additional vote
on max performance state of 'MX' power-domain.
Add support for power-domain performance state voting in the
driver.
Signed-off-by: Rajendra Nayak <redacted>
---
drivers/nvmem/qfprom.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
To me it feels as if this should be at the end of the function rather
than the beginning. I guess it doesn't matter (?), but it feels wrong
that we have writes to the register space after we're don't a
pm_runtime_put().
quoted hunk
@@ -420,6 +440,12 @@ static int qfprom_probe(struct platform_device *pdev) econfig.reg_write = qfprom_reg_write; }+ ret = devm_add_action_or_reset(dev, qfprom_runtime_disable, dev);+ if (ret)+ return ret;++ pm_runtime_enable(dev);+
Swap the order of the two. IOW first pm_runtime_enable(), then
devm_add_action_or_reset(). Specifically the "_or_reset" means that if
you fail to add the action (AKA devm_add_action() fails to allocate
the tiny amount of memory it needs) it will actually _call_ the
action. That means that in your code if the memory allocation fails
you'll call pm_runtime_disable() without the corresponding
pm_runtime_enable().
Other than those two issues this looks good to me. Feel free to add my
Reviewed-by when you fix them.
-Doug
Hi,
On Thu, Jul 29, 2021 at 5:01 AM Rajendra Nayak [off-list ref] wrote:
quoted
On sc7280, to reliably blow fuses, we need an additional vote
on max performance state of 'MX' power-domain.
Add support for power-domain performance state voting in the
driver.
Signed-off-by: Rajendra Nayak <redacted>
---
drivers/nvmem/qfprom.c | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
To me it feels as if this should be at the end of the function rather
than the beginning. I guess it doesn't matter (?), but it feels wrong
that we have writes to the register space after we're don't a
pm_runtime_put().
Right, I was confused with this too when I saw that the other resources
(regulator/clocks) were also turned off before we write into the
register space. And then looking into the driver I realized its perhaps because
the resources are needed only for the 'raw' writes and the 'conf'
read/writes can happen regardless. I'll just fix that up and put the register
writes before we really turn off any resources to avoid confusion.
quoted
@@ -420,6 +440,12 @@ static int qfprom_probe(struct platform_device *pdev) econfig.reg_write = qfprom_reg_write; }+ ret = devm_add_action_or_reset(dev, qfprom_runtime_disable, dev);+ if (ret)+ return ret;++ pm_runtime_enable(dev);+
Swap the order of the two. IOW first pm_runtime_enable(), then
devm_add_action_or_reset(). Specifically the "_or_reset" means that if
you fail to add the action (AKA devm_add_action() fails to allocate
the tiny amount of memory it needs) it will actually _call_ the
action.
Ah, I didn't know that, thanks, I'll fix the order up and repost.
That means that in your code if the memory allocation fails
you'll call pm_runtime_disable() without the corresponding
pm_runtime_enable().
Other than those two issues this looks good to me. Feel free to add my
Reviewed-by when you fix them.
Thanks.
-Doug
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation