linux-clk.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] clk: qcom: gcc-msm8996: Fix CLKREF parenting
@ 2019-12-07 20:36 Bjorn Andersson
  2019-12-07 20:36 ` [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks Bjorn Andersson
  2019-12-07 20:36 ` [PATCH 2/2] arm64: dts: qcom: msm8996: Define parent clocks for gcc Bjorn Andersson
  0 siblings, 2 replies; 12+ messages in thread
From: Bjorn Andersson @ 2019-12-07 20:36 UTC (permalink / raw)
  To: Michael Turquette, Stephen Boyd
  Cc: Andy Gross, Rob Herring, Mark Rutland, linux-arm-msm, linux-clk,
	devicetree, linux-kernel, Paolo Pisati

We've always seen intermittent resets of msm8996 during boot, seemingly related
to PCIe somehow. The likely cause of these errors are the fact that the CLKREF
of all PHYs are parented by LN_BB, which while being on during boot is disabled
by the UFS host driver if it fails to find its PHY.

As such, depending on the timeing (and success) of the UFS initialization PCIe
might loose its clocking.

These two patches ensures that LN_BB, connected to the CXO2 pad on the SoC, is
described as parent for all the CLKREF clocks. So that they all vote for this
clock appropriately.

Bjorn Andersson (2):
  clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  arm64: dts: qcom: msm8996: Define parent clocks for gcc

 .../devicetree/bindings/clock/qcom,gcc.yaml   |  6 ++--
 arch/arm64/boot/dts/qcom/msm8996.dtsi         |  3 ++
 drivers/clk/qcom/gcc-msm8996.c                | 35 +++++++++++++++----
 3 files changed, 35 insertions(+), 9 deletions(-)

-- 
2.24.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-07 20:36 [PATCH 0/2] clk: qcom: gcc-msm8996: Fix CLKREF parenting Bjorn Andersson
@ 2019-12-07 20:36 ` Bjorn Andersson
  2019-12-18 23:43   ` Rob Herring
                     ` (2 more replies)
  2019-12-07 20:36 ` [PATCH 2/2] arm64: dts: qcom: msm8996: Define parent clocks for gcc Bjorn Andersson
  1 sibling, 3 replies; 12+ messages in thread
From: Bjorn Andersson @ 2019-12-07 20:36 UTC (permalink / raw)
  To: Michael Turquette, Stephen Boyd, Rob Herring, Mark Rutland
  Cc: Andy Gross, linux-arm-msm, linux-clk, devicetree, linux-kernel,
	Paolo Pisati

The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
SoC. Update the definition of these clocks to allow this to be wired up
to the appropriate clock source.

Retain "xo" as the global named parent to make the change a nop in the
event that DT doesn't carry the necessary clocks definition.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
---
 .../devicetree/bindings/clock/qcom,gcc.yaml   |  6 ++--
 drivers/clk/qcom/gcc-msm8996.c                | 35 +++++++++++++++----
 2 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/Documentation/devicetree/bindings/clock/qcom,gcc.yaml b/Documentation/devicetree/bindings/clock/qcom,gcc.yaml
index e73a56fb60ca..f8bd902d4e6d 100644
--- a/Documentation/devicetree/bindings/clock/qcom,gcc.yaml
+++ b/Documentation/devicetree/bindings/clock/qcom,gcc.yaml
@@ -41,19 +41,21 @@ properties:
 
   clocks:
     minItems: 1
-    maxItems: 3
+    maxItems: 4
     items:
       - description: Board XO source
       - description: Board active XO source
       - description: Sleep clock source
+      - description: Second XO source
 
   clock-names:
     minItems: 1
-    maxItems: 3
+    maxItems: 4
     items:
       - const: bi_tcxo
       - const: bi_tcxo_ao
       - const: sleep_clk
+      - const: cxo2
 
   '#clock-cells':
     const: 1
diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
index d004cdaa0e39..3c3a7ff04562 100644
--- a/drivers/clk/qcom/gcc-msm8996.c
+++ b/drivers/clk/qcom/gcc-msm8996.c
@@ -3046,7 +3046,10 @@ static struct clk_branch gcc_usb3_clkref_clk = {
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "gcc_usb3_clkref_clk",
-			.parent_names = (const char *[]){ "xo" },
+			.parent_data = &(const struct clk_parent_data){
+				.fw_name = "cxo2",
+				.name = "xo",
+			},
 			.num_parents = 1,
 			.ops = &clk_branch2_ops,
 		},
@@ -3060,7 +3063,10 @@ static struct clk_branch gcc_hdmi_clkref_clk = {
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "gcc_hdmi_clkref_clk",
-			.parent_names = (const char *[]){ "xo" },
+			.parent_data = &(const struct clk_parent_data){
+				.fw_name = "cxo2",
+				.name = "xo",
+			},
 			.num_parents = 1,
 			.ops = &clk_branch2_ops,
 		},
@@ -3074,7 +3080,10 @@ static struct clk_branch gcc_edp_clkref_clk = {
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "gcc_edp_clkref_clk",
-			.parent_names = (const char *[]){ "xo" },
+			.parent_data = &(const struct clk_parent_data){
+				.fw_name = "cxo2",
+				.name = "xo",
+			},
 			.num_parents = 1,
 			.ops = &clk_branch2_ops,
 		},
@@ -3088,7 +3097,10 @@ static struct clk_branch gcc_ufs_clkref_clk = {
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "gcc_ufs_clkref_clk",
-			.parent_names = (const char *[]){ "xo" },
+			.parent_data = &(const struct clk_parent_data){
+				.fw_name = "cxo2",
+				.name = "xo",
+			},
 			.num_parents = 1,
 			.ops = &clk_branch2_ops,
 		},
@@ -3102,7 +3114,10 @@ static struct clk_branch gcc_pcie_clkref_clk = {
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "gcc_pcie_clkref_clk",
-			.parent_names = (const char *[]){ "xo" },
+			.parent_data = &(const struct clk_parent_data){
+				.fw_name = "cxo2",
+				.name = "xo",
+			},
 			.num_parents = 1,
 			.ops = &clk_branch2_ops,
 		},
@@ -3116,7 +3131,10 @@ static struct clk_branch gcc_rx2_usb2_clkref_clk = {
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "gcc_rx2_usb2_clkref_clk",
-			.parent_names = (const char *[]){ "xo" },
+			.parent_data = &(const struct clk_parent_data){
+				.fw_name = "cxo2",
+				.name = "xo",
+			},
 			.num_parents = 1,
 			.ops = &clk_branch2_ops,
 		},
@@ -3130,7 +3148,10 @@ static struct clk_branch gcc_rx1_usb2_clkref_clk = {
 		.enable_mask = BIT(0),
 		.hw.init = &(struct clk_init_data){
 			.name = "gcc_rx1_usb2_clkref_clk",
-			.parent_names = (const char *[]){ "xo" },
+			.parent_data = &(const struct clk_parent_data){
+				.fw_name = "cxo2",
+				.name = "xo",
+			},
 			.num_parents = 1,
 			.ops = &clk_branch2_ops,
 		},
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/2] arm64: dts: qcom: msm8996: Define parent clocks for gcc
  2019-12-07 20:36 [PATCH 0/2] clk: qcom: gcc-msm8996: Fix CLKREF parenting Bjorn Andersson
  2019-12-07 20:36 ` [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks Bjorn Andersson
@ 2019-12-07 20:36 ` Bjorn Andersson
  1 sibling, 0 replies; 12+ messages in thread
From: Bjorn Andersson @ 2019-12-07 20:36 UTC (permalink / raw)
  To: Andy Gross, Bjorn Andersson
  Cc: Michael Turquette, Stephen Boyd, Rob Herring, Mark Rutland,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

The CLKREF clocks in GCC are parented by RPM_SMD_LN_BB_CLK, through the
CXO2 pad. Wire this up so that this is properly enabled when need by the
various PHYs.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
---
 arch/arm64/boot/dts/qcom/msm8996.dtsi | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/msm8996.dtsi b/arch/arm64/boot/dts/qcom/msm8996.dtsi
index 4ca2e7b44559..c9c6efbbcc01 100644
--- a/arch/arm64/boot/dts/qcom/msm8996.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8996.dtsi
@@ -635,6 +635,9 @@ gcc: clock-controller@300000 {
 			#reset-cells = <1>;
 			#power-domain-cells = <1>;
 			reg = <0x300000 0x90000>;
+
+			clocks = <&rpmcc RPM_SMD_LN_BB_CLK>;
+			clock-names = "cxo2";
 		};
 
 		stm@3002000 {
-- 
2.24.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-07 20:36 ` [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks Bjorn Andersson
@ 2019-12-18 23:43   ` Rob Herring
  2019-12-19  6:37   ` Stephen Boyd
  2019-12-24  2:48   ` Stephen Boyd
  2 siblings, 0 replies; 12+ messages in thread
From: Rob Herring @ 2019-12-18 23:43 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Michael Turquette, Stephen Boyd, Mark Rutland, Andy Gross,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

On Sat,  7 Dec 2019 12:36:02 -0800, Bjorn Andersson wrote:
> The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> SoC. Update the definition of these clocks to allow this to be wired up
> to the appropriate clock source.
> 
> Retain "xo" as the global named parent to make the change a nop in the
> event that DT doesn't carry the necessary clocks definition.
> 
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
>  .../devicetree/bindings/clock/qcom,gcc.yaml   |  6 ++--
>  drivers/clk/qcom/gcc-msm8996.c                | 35 +++++++++++++++----
>  2 files changed, 32 insertions(+), 9 deletions(-)
> 

Acked-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-07 20:36 ` [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks Bjorn Andersson
  2019-12-18 23:43   ` Rob Herring
@ 2019-12-19  6:37   ` Stephen Boyd
  2019-12-20  2:34     ` Bjorn Andersson
  2019-12-24  2:48   ` Stephen Boyd
  2 siblings, 1 reply; 12+ messages in thread
From: Stephen Boyd @ 2019-12-19  6:37 UTC (permalink / raw)
  To: Bjorn Andersson, Mark Rutland, Michael Turquette, Rob Herring
  Cc: Andy Gross, linux-arm-msm, linux-clk, devicetree, linux-kernel,
	Paolo Pisati

Quoting Bjorn Andersson (2019-12-07 12:36:02)
> The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> SoC. Update the definition of these clocks to allow this to be wired up
> to the appropriate clock source.
> 
> Retain "xo" as the global named parent to make the change a nop in the
> event that DT doesn't carry the necessary clocks definition.

Something seems wrong still.

I wonder if we need to add the XO "active only" clk to the rpm clk
driver(s) and mark it as CLK_IS_CRITICAL. In theory that is really the
truth for most of the SoCs out there because it's the only crystal that
needs to be on all the time when the CPU is active. The "normal" XO clk
will then be on all the time unless deep idle is entered and nobody has
turned that on via some clk_prepare() call. That's because we root all
other clks through the "normal" XO clk that will be on in deep
idle/suspend if someone needs it to be.

Did the downstream code explicitly enable this ln_bb_clk in the phy
drivers? I think it may have?


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-19  6:37   ` Stephen Boyd
@ 2019-12-20  2:34     ` Bjorn Andersson
  2019-12-24  2:20       ` Stephen Boyd
  0 siblings, 1 reply; 12+ messages in thread
From: Bjorn Andersson @ 2019-12-20  2:34 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Mark Rutland, Michael Turquette, Rob Herring, Andy Gross,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

On Wed 18 Dec 22:37 PST 2019, Stephen Boyd wrote:

> Quoting Bjorn Andersson (2019-12-07 12:36:02)
> > The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> > SoC. Update the definition of these clocks to allow this to be wired up
> > to the appropriate clock source.
> > 
> > Retain "xo" as the global named parent to make the change a nop in the
> > event that DT doesn't carry the necessary clocks definition.
> 
> Something seems wrong still.
> 
> I wonder if we need to add the XO "active only" clk to the rpm clk
> driver(s) and mark it as CLK_IS_CRITICAL. In theory that is really the
> truth for most of the SoCs out there because it's the only crystal that
> needs to be on all the time when the CPU is active. The "normal" XO clk
> will then be on all the time unless deep idle is entered and nobody has
> turned that on via some clk_prepare() call. That's because we root all
> other clks through the "normal" XO clk that will be on in deep
> idle/suspend if someone needs it to be.
> 

The patch doesn't attempt to address the fact that our representation of
XO is incomplete, only the fact that CXO2 isn't properly described.

Looking at the clock distribution, we do have RPM_SMD_BB_CLK1_A which
presumably is the clock you're referring to here - i.e. the clock
resource connected to CXO.

> Did the downstream code explicitly enable this ln_bb_clk in the phy
> drivers? I think it may have?
> 

Yes, afaict all downstream drivers consuming a CLKREF also consumes
LN_BB and ensures that this is enabled. So we've been relying on UFS to
either not have probed yet or that UFS probed successfully for PCIe and
USB to be functional.

So either we need this patch to ensure that the requests propagates
down, or I need to patch up the PHY drivers to ensure that they also
vote for the PMIC clock - and I do prefer this patch.

Regards,
Bjorn

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-20  2:34     ` Bjorn Andersson
@ 2019-12-24  2:20       ` Stephen Boyd
  2019-12-26 22:41         ` Bjorn Andersson
  0 siblings, 1 reply; 12+ messages in thread
From: Stephen Boyd @ 2019-12-24  2:20 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Mark Rutland, Michael Turquette, Rob Herring, Andy Gross,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

Quoting Bjorn Andersson (2019-12-19 18:34:27)
> On Wed 18 Dec 22:37 PST 2019, Stephen Boyd wrote:
> 
> > Quoting Bjorn Andersson (2019-12-07 12:36:02)
> > > The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> > > SoC. Update the definition of these clocks to allow this to be wired up
> > > to the appropriate clock source.
> > > 
> > > Retain "xo" as the global named parent to make the change a nop in the
> > > event that DT doesn't carry the necessary clocks definition.
> > 
> > Something seems wrong still.
> > 
> > I wonder if we need to add the XO "active only" clk to the rpm clk
> > driver(s) and mark it as CLK_IS_CRITICAL. In theory that is really the
> > truth for most of the SoCs out there because it's the only crystal that
> > needs to be on all the time when the CPU is active. The "normal" XO clk
> > will then be on all the time unless deep idle is entered and nobody has
> > turned that on via some clk_prepare() call. That's because we root all
> > other clks through the "normal" XO clk that will be on in deep
> > idle/suspend if someone needs it to be.
> > 
> 
> The patch doesn't attempt to address the fact that our representation of
> XO is incomplete, only the fact that CXO2 isn't properly described.
> 
> Looking at the clock distribution, we do have RPM_SMD_BB_CLK1_A which
> presumably is the clock you're referring to here - i.e. the clock
> resource connected to CXO.

I don't mean the buffer clks, but the XO resource specifically. It's the
representation to the RPM that deep sleep/deep idle should or shouldn't
turn off XO and achieve "XO shutdown". Basically it can never be off
when the CPU is active because then the CPU itself wouldn't be clocked,
but when the CPU isn't active we may want to turn it off if nothing is
using it during sleep to clock some sort of wakeup logic or device that
is active when the CPU is idle.

> 
> > Did the downstream code explicitly enable this ln_bb_clk in the phy
> > drivers? I think it may have?
> > 
> 
> Yes, afaict all downstream drivers consuming a CLKREF also consumes
> LN_BB and ensures that this is enabled. So we've been relying on UFS to
> either not have probed yet or that UFS probed successfully for PCIe and
> USB to be functional.
> 
> So either we need this patch to ensure that the requests propagates
> down, or I need to patch up the PHY drivers to ensure that they also
> vote for the PMIC clock - and I do prefer this patch.

Cool. Yeah seems better to just indicate that the reference clks are
clocked by something else and fix that problem now.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-07 20:36 ` [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks Bjorn Andersson
  2019-12-18 23:43   ` Rob Herring
  2019-12-19  6:37   ` Stephen Boyd
@ 2019-12-24  2:48   ` Stephen Boyd
  2019-12-26 22:23     ` Bjorn Andersson
  2 siblings, 1 reply; 12+ messages in thread
From: Stephen Boyd @ 2019-12-24  2:48 UTC (permalink / raw)
  To: Bjorn Andersson, Mark Rutland, Michael Turquette, Rob Herring
  Cc: Andy Gross, linux-arm-msm, linux-clk, devicetree, linux-kernel,
	Paolo Pisati

Quoting Bjorn Andersson (2019-12-07 12:36:02)
> The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> SoC. Update the definition of these clocks to allow this to be wired up
> to the appropriate clock source.
> 
> Retain "xo" as the global named parent to make the change a nop in the
> event that DT doesn't carry the necessary clocks definition.
> 
> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
>  .../devicetree/bindings/clock/qcom,gcc.yaml   |  6 ++--
>  drivers/clk/qcom/gcc-msm8996.c                | 35 +++++++++++++++----
>  2 files changed, 32 insertions(+), 9 deletions(-)

What is this patch based on? I think I'm missing some sort of 8996 yaml
gcc binding patch.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-24  2:48   ` Stephen Boyd
@ 2019-12-26 22:23     ` Bjorn Andersson
  2019-12-26 22:34       ` Stephen Boyd
  0 siblings, 1 reply; 12+ messages in thread
From: Bjorn Andersson @ 2019-12-26 22:23 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Mark Rutland, Michael Turquette, Rob Herring, Andy Gross,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

On Mon 23 Dec 18:48 PST 2019, Stephen Boyd wrote:

> Quoting Bjorn Andersson (2019-12-07 12:36:02)
> > The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> > SoC. Update the definition of these clocks to allow this to be wired up
> > to the appropriate clock source.
> > 
> > Retain "xo" as the global named parent to make the change a nop in the
> > event that DT doesn't carry the necessary clocks definition.
> > 
> > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> > ---
> >  .../devicetree/bindings/clock/qcom,gcc.yaml   |  6 ++--
> >  drivers/clk/qcom/gcc-msm8996.c                | 35 +++++++++++++++----
> >  2 files changed, 32 insertions(+), 9 deletions(-)
> 
> What is this patch based on? I think I'm missing some sort of 8996 yaml
> gcc binding patch.
> 

The patch applies cleanly on linux-next and afaict it depends on the
yamlification done in 9de7269e9703 ("dt-bindings: clock: Add YAML
schemas for the QCOM GCC clock bindings"), which git tells me is
included in v5.5-rc1 as well.

Am I misunderstanding your question?

Regards,
Bjorn

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-26 22:23     ` Bjorn Andersson
@ 2019-12-26 22:34       ` Stephen Boyd
  0 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2019-12-26 22:34 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Mark Rutland, Michael Turquette, Rob Herring, Andy Gross,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

Quoting Bjorn Andersson (2019-12-26 14:23:15)
> On Mon 23 Dec 18:48 PST 2019, Stephen Boyd wrote:
> 
> > Quoting Bjorn Andersson (2019-12-07 12:36:02)
> > > The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> > > SoC. Update the definition of these clocks to allow this to be wired up
> > > to the appropriate clock source.
> > > 
> > > Retain "xo" as the global named parent to make the change a nop in the
> > > event that DT doesn't carry the necessary clocks definition.
> > > 
> > > Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> > > ---
> > >  .../devicetree/bindings/clock/qcom,gcc.yaml   |  6 ++--
> > >  drivers/clk/qcom/gcc-msm8996.c                | 35 +++++++++++++++----
> > >  2 files changed, 32 insertions(+), 9 deletions(-)
> > 
> > What is this patch based on? I think I'm missing some sort of 8996 yaml
> > gcc binding patch.
> > 
> 
> The patch applies cleanly on linux-next and afaict it depends on the
> yamlification done in 9de7269e9703 ("dt-bindings: clock: Add YAML
> schemas for the QCOM GCC clock bindings"), which git tells me is
> included in v5.5-rc1 as well.
> 
> Am I misunderstanding your question?
> 

There doesn't seem to be any sort of minitems or maxitems in my yaml
binding file for the clocks or clock-names properties.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-24  2:20       ` Stephen Boyd
@ 2019-12-26 22:41         ` Bjorn Andersson
  2019-12-27  1:35           ` Stephen Boyd
  0 siblings, 1 reply; 12+ messages in thread
From: Bjorn Andersson @ 2019-12-26 22:41 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Mark Rutland, Michael Turquette, Rob Herring, Andy Gross,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

On Mon 23 Dec 18:20 PST 2019, Stephen Boyd wrote:

> Quoting Bjorn Andersson (2019-12-19 18:34:27)
> > On Wed 18 Dec 22:37 PST 2019, Stephen Boyd wrote:
> > 
> > > Quoting Bjorn Andersson (2019-12-07 12:36:02)
> > > > The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> > > > SoC. Update the definition of these clocks to allow this to be wired up
> > > > to the appropriate clock source.
> > > > 
> > > > Retain "xo" as the global named parent to make the change a nop in the
> > > > event that DT doesn't carry the necessary clocks definition.
> > > 
> > > Something seems wrong still.
> > > 
> > > I wonder if we need to add the XO "active only" clk to the rpm clk
> > > driver(s) and mark it as CLK_IS_CRITICAL. In theory that is really the
> > > truth for most of the SoCs out there because it's the only crystal that
> > > needs to be on all the time when the CPU is active. The "normal" XO clk
> > > will then be on all the time unless deep idle is entered and nobody has
> > > turned that on via some clk_prepare() call. That's because we root all
> > > other clks through the "normal" XO clk that will be on in deep
> > > idle/suspend if someone needs it to be.
> > > 
> > 
> > The patch doesn't attempt to address the fact that our representation of
> > XO is incomplete, only the fact that CXO2 isn't properly described.
> > 
> > Looking at the clock distribution, we do have RPM_SMD_BB_CLK1_A which
> > presumably is the clock you're referring to here - i.e. the clock
> > resource connected to CXO.
> 
> I don't mean the buffer clks, but the XO resource specifically. It's the
> representation to the RPM that deep sleep/deep idle should or shouldn't
> turn off XO and achieve "XO shutdown". Basically it can never be off
> when the CPU is active because then the CPU itself wouldn't be clocked,
> but when the CPU isn't active we may want to turn it off if nothing is
> using it during sleep to clock some sort of wakeup logic or device that
> is active when the CPU is idle.
> 

I see. So we're missing the representation of the "raw" CXO in
clk-smd-rpm.c, and I'm lacking some understanding of how these pieces
should be tied together for us to realize the "XO shutdown"...

> > 
> > > Did the downstream code explicitly enable this ln_bb_clk in the phy
> > > drivers? I think it may have?
> > > 
> > 
> > Yes, afaict all downstream drivers consuming a CLKREF also consumes
> > LN_BB and ensures that this is enabled. So we've been relying on UFS to
> > either not have probed yet or that UFS probed successfully for PCIe and
> > USB to be functional.
> > 
> > So either we need this patch to ensure that the requests propagates
> > down, or I need to patch up the PHY drivers to ensure that they also
> > vote for the PMIC clock - and I do prefer this patch.
> 
> Cool. Yeah seems better to just indicate that the reference clks are
> clocked by something else and fix that problem now.
> 

Let me know if I shouldn't interpret this sentence as "let's merge this
for now".

Regards,
Bjorn

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks
  2019-12-26 22:41         ` Bjorn Andersson
@ 2019-12-27  1:35           ` Stephen Boyd
  0 siblings, 0 replies; 12+ messages in thread
From: Stephen Boyd @ 2019-12-27  1:35 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: Mark Rutland, Michael Turquette, Rob Herring, Andy Gross,
	linux-arm-msm, linux-clk, devicetree, linux-kernel, Paolo Pisati

Quoting Bjorn Andersson (2019-12-26 14:41:56)
> On Mon 23 Dec 18:20 PST 2019, Stephen Boyd wrote:
> 
> > Quoting Bjorn Andersson (2019-12-19 18:34:27)
> > > On Wed 18 Dec 22:37 PST 2019, Stephen Boyd wrote:
> > > 
> > > > Quoting Bjorn Andersson (2019-12-07 12:36:02)
> > > > > The CLKREF clocks are all fed by the clock signal on the CXO2 pad on the
> > > > > SoC. Update the definition of these clocks to allow this to be wired up
> > > > > to the appropriate clock source.
> > > > > 
> > > > > Retain "xo" as the global named parent to make the change a nop in the
> > > > > event that DT doesn't carry the necessary clocks definition.
> > > > 
> > > > Something seems wrong still.
> > > > 
> > > > I wonder if we need to add the XO "active only" clk to the rpm clk
> > > > driver(s) and mark it as CLK_IS_CRITICAL. In theory that is really the
> > > > truth for most of the SoCs out there because it's the only crystal that
> > > > needs to be on all the time when the CPU is active. The "normal" XO clk
> > > > will then be on all the time unless deep idle is entered and nobody has
> > > > turned that on via some clk_prepare() call. That's because we root all
> > > > other clks through the "normal" XO clk that will be on in deep
> > > > idle/suspend if someone needs it to be.
> > > > 
> > > 
> > > The patch doesn't attempt to address the fact that our representation of
> > > XO is incomplete, only the fact that CXO2 isn't properly described.
> > > 
> > > Looking at the clock distribution, we do have RPM_SMD_BB_CLK1_A which
> > > presumably is the clock you're referring to here - i.e. the clock
> > > resource connected to CXO.
> > 
> > I don't mean the buffer clks, but the XO resource specifically. It's the
> > representation to the RPM that deep sleep/deep idle should or shouldn't
> > turn off XO and achieve "XO shutdown". Basically it can never be off
> > when the CPU is active because then the CPU itself wouldn't be clocked,
> > but when the CPU isn't active we may want to turn it off if nothing is
> > using it during sleep to clock some sort of wakeup logic or device that
> > is active when the CPU is idle.
> > 
> 
> I see. So we're missing the representation of the "raw" CXO in
> clk-smd-rpm.c, and I'm lacking some understanding of how these pieces
> should be tied together for us to realize the "XO shutdown"...

Ok. This is another topic so not important to this patch right now.

> 
> > > 
> > > > Did the downstream code explicitly enable this ln_bb_clk in the phy
> > > > drivers? I think it may have?
> > > > 
> > > 
> > > Yes, afaict all downstream drivers consuming a CLKREF also consumes
> > > LN_BB and ensures that this is enabled. So we've been relying on UFS to
> > > either not have probed yet or that UFS probed successfully for PCIe and
> > > USB to be functional.
> > > 
> > > So either we need this patch to ensure that the requests propagates
> > > down, or I need to patch up the PHY drivers to ensure that they also
> > > vote for the PMIC clock - and I do prefer this patch.
> > 
> > Cool. Yeah seems better to just indicate that the reference clks are
> > clocked by something else and fix that problem now.
> > 
> 
> Let me know if I shouldn't interpret this sentence as "let's merge this
> for now".

Yes I'd like to merge for now but the binding needs to be adjusted.
Please resend.


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2019-12-27  1:35 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-07 20:36 [PATCH 0/2] clk: qcom: gcc-msm8996: Fix CLKREF parenting Bjorn Andersson
2019-12-07 20:36 ` [PATCH 1/2] clk: qcom: gcc-msm8996: Fix parent for CLKREF clocks Bjorn Andersson
2019-12-18 23:43   ` Rob Herring
2019-12-19  6:37   ` Stephen Boyd
2019-12-20  2:34     ` Bjorn Andersson
2019-12-24  2:20       ` Stephen Boyd
2019-12-26 22:41         ` Bjorn Andersson
2019-12-27  1:35           ` Stephen Boyd
2019-12-24  2:48   ` Stephen Boyd
2019-12-26 22:23     ` Bjorn Andersson
2019-12-26 22:34       ` Stephen Boyd
2019-12-07 20:36 ` [PATCH 2/2] arm64: dts: qcom: msm8996: Define parent clocks for gcc Bjorn Andersson

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).