* [PATCH] remoteproc: Add support for xo clock
@ 2016-10-20 18:55 Sarangdhar Joshi
2016-10-20 23:54 ` Stephen Boyd
0 siblings, 1 reply; 3+ messages in thread
From: Sarangdhar Joshi @ 2016-10-20 18:55 UTC (permalink / raw)
To: Ohad Ben-Cohen, Bjorn Andersson
Cc: Sarangdhar Joshi, linux-remoteproc, linux-kernel, linux-arm-msm,
Stephen Boyd, Trilok Soni
Add xo clock support required for Qualcomm ADSP
Peripheral Image Loader.
Signed-off-by: Sarangdhar Joshi <spjoshi@codeaurora.org>
---
This patch depends on https://lkml.org/lkml/2016/8/23/50
drivers/remoteproc/qcom_adsp_pil.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/remoteproc/qcom_adsp_pil.c b/drivers/remoteproc/qcom_adsp_pil.c
index 9141633..a1f2f32 100644
--- a/drivers/remoteproc/qcom_adsp_pil.c
+++ b/drivers/remoteproc/qcom_adsp_pil.c
@@ -15,6 +15,7 @@
* GNU General Public License for more details.
*/
+#include <linux/clk.h>
#include <linux/firmware.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
@@ -48,6 +49,8 @@ struct qcom_adsp {
struct qcom_smem_state *state;
unsigned stop_bit;
+ struct clk *xo;
+
struct regulator *cx_supply;
struct completion start_done;
@@ -102,10 +105,14 @@ static int adsp_start(struct rproc *rproc)
struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv;
int ret;
- ret = regulator_enable(adsp->cx_supply);
+ ret = clk_prepare_enable(adsp->xo);
if (ret)
return ret;
+ ret = regulator_enable(adsp->cx_supply);
+ if (ret)
+ goto disable_clocks;
+
ret = qcom_scm_pas_auth_and_reset(ADSP_PAS_ID);
if (ret) {
dev_err(adsp->dev,
@@ -126,6 +133,8 @@ static int adsp_start(struct rproc *rproc)
disable_regulators:
regulator_disable(adsp->cx_supply);
+disable_clocks:
+ clk_disable_unprepare(adsp->xo);
return ret;
}
@@ -223,6 +232,17 @@ static irqreturn_t adsp_stop_ack_interrupt(int irq, void *dev)
return IRQ_HANDLED;
}
+static int adsp_init_clock(struct qcom_adsp *adsp)
+{
+ adsp->xo = devm_clk_get(adsp->dev, "xo");
+ if (IS_ERR(adsp->xo)) {
+ dev_err(adsp->dev, "failed to get xo clock");
+ return PTR_ERR(adsp->xo);
+ }
+
+ return 0;
+}
+
static int adsp_init_regulator(struct qcom_adsp *adsp)
{
adsp->cx_supply = devm_regulator_get(adsp->dev, "cx");
@@ -320,6 +340,10 @@ static int adsp_probe(struct platform_device *pdev)
if (ret)
goto free_rproc;
+ ret = adsp_init_clock(adsp);
+ if (ret)
+ goto free_rproc;
+
ret = adsp_init_regulator(adsp);
if (ret)
goto free_rproc;
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] remoteproc: Add support for xo clock
2016-10-20 18:55 [PATCH] remoteproc: Add support for xo clock Sarangdhar Joshi
@ 2016-10-20 23:54 ` Stephen Boyd
2016-10-21 23:15 ` Sarangdhar Joshi
0 siblings, 1 reply; 3+ messages in thread
From: Stephen Boyd @ 2016-10-20 23:54 UTC (permalink / raw)
To: Sarangdhar Joshi
Cc: Ohad Ben-Cohen, Bjorn Andersson, linux-remoteproc, linux-kernel,
linux-arm-msm, Trilok Soni
On 10/20, Sarangdhar Joshi wrote:
> Add xo clock support required for Qualcomm ADSP
> Peripheral Image Loader.
Yes but why is xo needed?
> @@ -223,6 +232,17 @@ static irqreturn_t adsp_stop_ack_interrupt(int irq, void *dev)
> return IRQ_HANDLED;
> }
>
> +static int adsp_init_clock(struct qcom_adsp *adsp)
> +{
> + adsp->xo = devm_clk_get(adsp->dev, "xo");
> + if (IS_ERR(adsp->xo)) {
> + dev_err(adsp->dev, "failed to get xo clock");
What if it's a probe defer error? Probably best to just be
silent/debug level, or we need a specific test for EPROBE_DEFER
and then silence in that case.
> + return PTR_ERR(adsp->xo);
> + }
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] remoteproc: Add support for xo clock
2016-10-20 23:54 ` Stephen Boyd
@ 2016-10-21 23:15 ` Sarangdhar Joshi
0 siblings, 0 replies; 3+ messages in thread
From: Sarangdhar Joshi @ 2016-10-21 23:15 UTC (permalink / raw)
To: Stephen Boyd
Cc: Ohad Ben-Cohen, Bjorn Andersson, linux-remoteproc, linux-kernel,
linux-arm-msm, Trilok Soni
On 10/20/2016 04:54 PM, Stephen Boyd wrote:
> On 10/20, Sarangdhar Joshi wrote:
>> Add xo clock support required for Qualcomm ADSP
>> Peripheral Image Loader.
>
> Yes but why is xo needed?
It is required to boot up the ADSP processor. The remoteproc driver
keeps the xo clock enabled until the driver receives an "handover"
interrupt in order to allow remote processor to vote for xo clock with rpm.
I will update the commit text.
>
>> @@ -223,6 +232,17 @@ static irqreturn_t adsp_stop_ack_interrupt(int irq, void *dev)
>> return IRQ_HANDLED;
>> }
>>
>> +static int adsp_init_clock(struct qcom_adsp *adsp)
>> +{
>> + adsp->xo = devm_clk_get(adsp->dev, "xo");
>> + if (IS_ERR(adsp->xo)) {
>> + dev_err(adsp->dev, "failed to get xo clock");
>
> What if it's a probe defer error? Probably best to just be
> silent/debug level, or we need a specific test for EPROBE_DEFER
> and then silence in that case.
Sure, I will add a check for EPROBE_DEFER. Prefer driver to return
meaningful error message in case of failure.
>
>> + return PTR_ERR(adsp->xo);
>> + }
>
Thanks for reviewing the patch.
Regards,
Sarang
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-10-21 23:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-20 18:55 [PATCH] remoteproc: Add support for xo clock Sarangdhar Joshi
2016-10-20 23:54 ` Stephen Boyd
2016-10-21 23:15 ` Sarangdhar Joshi
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).