devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A
@ 2020-11-02  7:26 Ran Wang
  2020-11-02  7:26 ` [PATCH v4 2/3] arm: dts: ls1021a: fix flextimer failed to wake system Ran Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Ran Wang @ 2020-11-02  7:26 UTC (permalink / raw)
  To: Li Yang, Shawn Guo
  Cc: Rob Herring, linux-arm-kernel, devicetree, linux-kernel,
	Biwen Li, Ran Wang

From: Biwen Li <biwen.li@nxp.com>

Hardware issue:
- Reading register RCPM_IPPDEXPCR1 always return zero, this causes
  system firmware could not get correct information and wrongly do
  clock gating for all wakeup source IP during system suspend. Then
  those IPs will never get chance to wake system.

Workaround:
- Copy register RCPM_IPPDEXPCR1's setting to register SCFG_SPARECR8
  to allow system firmware's psci method read it and do things accordingly.

Signed-off-by: Biwen Li <biwen.li@nxp.com>
Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
Change in v4:
 - Replace property 'fsl,ippdexpcr1-alt-reg' with compatible checking as the
   workaround trigger condition.

Change in v3:
 - Add  copy_ippdexpcr1_setting(), simplize workaournd's implementation
   according to binding update.
 - Minor update on commit message.

Change in v2:
 - Update commit message to be more clear.
 - Replace device_property_read_u32_array() with syscon_regmap_lookup_by_phandle_args()
   to make code simpler.

 drivers/soc/fsl/rcpm.c | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c
index a093dbe..4ace28c 100644
--- a/drivers/soc/fsl/rcpm.c
+++ b/drivers/soc/fsl/rcpm.c
@@ -2,7 +2,7 @@
 //
 // rcpm.c - Freescale QorIQ RCPM driver
 //
-// Copyright 2019 NXP
+// Copyright 2019-2020 NXP
 //
 // Author: Ran Wang <ran.wang_1@nxp.com>
 
@@ -22,6 +22,28 @@ struct rcpm {
 	bool		little_endian;
 };
 
+#define  SCFG_SPARECR8	0x051c
+
+static void copy_ippdexpcr1_setting(u32 val)
+{
+	struct device_node *np;
+	void __iomem *regs;
+	u32 reg_val;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,ls1021a-scfg");
+	if (!np)
+		return;
+
+	regs = of_iomap(np, 0);
+	if (!regs)
+		return;
+
+	reg_val = ioread32be(regs + SCFG_SPARECR8);
+	iowrite32be(val | reg_val, regs + SCFG_SPARECR8);
+
+	iounmap(regs);
+}
+
 /**
  * rcpm_pm_prepare - performs device-level tasks associated with power
  * management, such as programming related to the wakeup source control.
@@ -90,6 +112,17 @@ static int rcpm_pm_prepare(struct device *dev)
 			tmp |= ioread32be(address);
 			iowrite32be(tmp, address);
 		}
+		/*
+		 * Workaround of errata A-008646 on SoC LS1021A:
+		 * There is a bug of register ippdexpcr1.
+		 * Reading configuration register RCPM_IPPDEXPCR1
+		 * always return zero. So save ippdexpcr1's value
+		 * to register SCFG_SPARECR8.And the value of
+		 * ippdexpcr1 will be read from SCFG_SPARECR8.
+		 */
+		if (dev_of_node(dev) && (i == 1))
+			if (of_device_is_compatible(np, "fsl,ls1021a-rcpm"))
+				copy_ippdexpcr1_setting(tmp);
 	}
 
 	return 0;
-- 
2.7.4


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

* [PATCH v4 2/3] arm: dts: ls1021a: fix flextimer failed to wake system
  2020-11-02  7:26 [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A Ran Wang
@ 2020-11-02  7:26 ` Ran Wang
  2020-11-30  7:07   ` Shawn Guo
  2020-11-02  7:26 ` [PATCH v4 3/3] arm: dts: ls1021a: fix rcpm failed to claim resource Ran Wang
  2020-11-24  1:13 ` [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A Li Yang
  2 siblings, 1 reply; 6+ messages in thread
From: Ran Wang @ 2020-11-02  7:26 UTC (permalink / raw)
  To: Li Yang, Shawn Guo
  Cc: Rob Herring, linux-arm-kernel, devicetree, linux-kernel, Ran Wang

The data of property 'fsl,rcpm-wakeup' is not corrcet, which causing
RCPM driver incorrectly program register IPPDEXPCR1, then flextimer is
wrongly clock gated during system suspend, can't send interrupt to
wake.

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
Acked-by: Li Yang <leoyang.li@nxp.com>
---
Change in v4:
 - None

Change in v3:
 - None

Change in v2:
 - None

 arch/arm/boot/dts/ls1021a.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi
index 827373e..e12809d6 100644
--- a/arch/arm/boot/dts/ls1021a.dtsi
+++ b/arch/arm/boot/dts/ls1021a.dtsi
@@ -1013,7 +1013,7 @@
 			compatible = "fsl,ls1021a-ftm-alarm";
 			reg = <0x0 0x29d0000 0x0 0x10000>;
 			reg-names = "ftm";
-			fsl,rcpm-wakeup = <&rcpm 0x20000 0x0>;
+			fsl,rcpm-wakeup = <&rcpm 0x0 0x20000000>;
 			interrupts = <GIC_SPI 118 IRQ_TYPE_LEVEL_HIGH>;
 			big-endian;
 		};
-- 
2.7.4


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

* [PATCH v4 3/3] arm: dts: ls1021a: fix rcpm failed to claim resource
  2020-11-02  7:26 [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A Ran Wang
  2020-11-02  7:26 ` [PATCH v4 2/3] arm: dts: ls1021a: fix flextimer failed to wake system Ran Wang
@ 2020-11-02  7:26 ` Ran Wang
  2020-11-30  7:08   ` Shawn Guo
  2020-11-24  1:13 ` [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A Li Yang
  2 siblings, 1 reply; 6+ messages in thread
From: Ran Wang @ 2020-11-02  7:26 UTC (permalink / raw)
  To: Li Yang, Shawn Guo
  Cc: Rob Herring, linux-arm-kernel, devicetree, linux-kernel, Ran Wang

The range of dcfg reg is wrong, which overlap with other device,
such as rcpm. This issue causing rcpm driver failed to claim
reg resource when calling devm_ioremap_resource().

Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
Acked-by: Li Yang <leoyang.li@nxp.com>
---
Change in v4:
 - None

Change in v3:
 - None

Change in v2:
 - None

 arch/arm/boot/dts/ls1021a.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/ls1021a.dtsi b/arch/arm/boot/dts/ls1021a.dtsi
index e12809d6..16744f64 100644
--- a/arch/arm/boot/dts/ls1021a.dtsi
+++ b/arch/arm/boot/dts/ls1021a.dtsi
@@ -173,7 +173,7 @@
 
 		dcfg: dcfg@1ee0000 {
 			compatible = "fsl,ls1021a-dcfg", "syscon";
-			reg = <0x0 0x1ee0000 0x0 0x10000>;
+			reg = <0x0 0x1ee0000 0x0 0x1000>;
 			big-endian;
 		};
 
-- 
2.7.4


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

* Re: [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A
  2020-11-02  7:26 [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A Ran Wang
  2020-11-02  7:26 ` [PATCH v4 2/3] arm: dts: ls1021a: fix flextimer failed to wake system Ran Wang
  2020-11-02  7:26 ` [PATCH v4 3/3] arm: dts: ls1021a: fix rcpm failed to claim resource Ran Wang
@ 2020-11-24  1:13 ` Li Yang
  2 siblings, 0 replies; 6+ messages in thread
From: Li Yang @ 2020-11-24  1:13 UTC (permalink / raw)
  To: Ran Wang
  Cc: Shawn Guo, Rob Herring,
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	Biwen Li

On Mon, Nov 2, 2020 at 1:37 AM Ran Wang <ran.wang_1@nxp.com> wrote:
>
> From: Biwen Li <biwen.li@nxp.com>
>
> Hardware issue:
> - Reading register RCPM_IPPDEXPCR1 always return zero, this causes
>   system firmware could not get correct information and wrongly do
>   clock gating for all wakeup source IP during system suspend. Then
>   those IPs will never get chance to wake system.
>
> Workaround:
> - Copy register RCPM_IPPDEXPCR1's setting to register SCFG_SPARECR8
>   to allow system firmware's psci method read it and do things accordingly.
>
> Signed-off-by: Biwen Li <biwen.li@nxp.com>
> Signed-off-by: Ran Wang <ran.wang_1@nxp.com>

Applied for next.  Thanks.

> ---
> Change in v4:
>  - Replace property 'fsl,ippdexpcr1-alt-reg' with compatible checking as the
>    workaround trigger condition.
>
> Change in v3:
>  - Add  copy_ippdexpcr1_setting(), simplize workaournd's implementation
>    according to binding update.
>  - Minor update on commit message.
>
> Change in v2:
>  - Update commit message to be more clear.
>  - Replace device_property_read_u32_array() with syscon_regmap_lookup_by_phandle_args()
>    to make code simpler.
>
>  drivers/soc/fsl/rcpm.c | 35 ++++++++++++++++++++++++++++++++++-
>  1 file changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/soc/fsl/rcpm.c b/drivers/soc/fsl/rcpm.c
> index a093dbe..4ace28c 100644
> --- a/drivers/soc/fsl/rcpm.c
> +++ b/drivers/soc/fsl/rcpm.c
> @@ -2,7 +2,7 @@
>  //
>  // rcpm.c - Freescale QorIQ RCPM driver
>  //
> -// Copyright 2019 NXP
> +// Copyright 2019-2020 NXP
>  //
>  // Author: Ran Wang <ran.wang_1@nxp.com>
>
> @@ -22,6 +22,28 @@ struct rcpm {
>         bool            little_endian;
>  };
>
> +#define  SCFG_SPARECR8 0x051c
> +
> +static void copy_ippdexpcr1_setting(u32 val)
> +{
> +       struct device_node *np;
> +       void __iomem *regs;
> +       u32 reg_val;
> +
> +       np = of_find_compatible_node(NULL, NULL, "fsl,ls1021a-scfg");
> +       if (!np)
> +               return;
> +
> +       regs = of_iomap(np, 0);
> +       if (!regs)
> +               return;
> +
> +       reg_val = ioread32be(regs + SCFG_SPARECR8);
> +       iowrite32be(val | reg_val, regs + SCFG_SPARECR8);
> +
> +       iounmap(regs);
> +}
> +
>  /**
>   * rcpm_pm_prepare - performs device-level tasks associated with power
>   * management, such as programming related to the wakeup source control.
> @@ -90,6 +112,17 @@ static int rcpm_pm_prepare(struct device *dev)
>                         tmp |= ioread32be(address);
>                         iowrite32be(tmp, address);
>                 }
> +               /*
> +                * Workaround of errata A-008646 on SoC LS1021A:
> +                * There is a bug of register ippdexpcr1.
> +                * Reading configuration register RCPM_IPPDEXPCR1
> +                * always return zero. So save ippdexpcr1's value
> +                * to register SCFG_SPARECR8.And the value of
> +                * ippdexpcr1 will be read from SCFG_SPARECR8.
> +                */
> +               if (dev_of_node(dev) && (i == 1))
> +                       if (of_device_is_compatible(np, "fsl,ls1021a-rcpm"))
> +                               copy_ippdexpcr1_setting(tmp);
>         }
>
>         return 0;
> --
> 2.7.4
>

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

* Re: [PATCH v4 2/3] arm: dts: ls1021a: fix flextimer failed to wake system
  2020-11-02  7:26 ` [PATCH v4 2/3] arm: dts: ls1021a: fix flextimer failed to wake system Ran Wang
@ 2020-11-30  7:07   ` Shawn Guo
  0 siblings, 0 replies; 6+ messages in thread
From: Shawn Guo @ 2020-11-30  7:07 UTC (permalink / raw)
  To: Ran Wang; +Cc: Li Yang, Rob Herring, linux-arm-kernel, devicetree, linux-kernel

On Mon, Nov 02, 2020 at 03:26:51PM +0800, Ran Wang wrote:
> The data of property 'fsl,rcpm-wakeup' is not corrcet, which causing
> RCPM driver incorrectly program register IPPDEXPCR1, then flextimer is
> wrongly clock gated during system suspend, can't send interrupt to
> wake.
> 
> Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
> Acked-by: Li Yang <leoyang.li@nxp.com>

Applied, thanks.

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

* Re: [PATCH v4 3/3] arm: dts: ls1021a: fix rcpm failed to claim resource
  2020-11-02  7:26 ` [PATCH v4 3/3] arm: dts: ls1021a: fix rcpm failed to claim resource Ran Wang
@ 2020-11-30  7:08   ` Shawn Guo
  0 siblings, 0 replies; 6+ messages in thread
From: Shawn Guo @ 2020-11-30  7:08 UTC (permalink / raw)
  To: Ran Wang; +Cc: Li Yang, Rob Herring, linux-arm-kernel, devicetree, linux-kernel

On Mon, Nov 02, 2020 at 03:26:52PM +0800, Ran Wang wrote:
> The range of dcfg reg is wrong, which overlap with other device,
> such as rcpm. This issue causing rcpm driver failed to claim
> reg resource when calling devm_ioremap_resource().
> 
> Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
> Acked-by: Li Yang <leoyang.li@nxp.com>

Applied, thanks.

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

end of thread, other threads:[~2020-11-30  7:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-02  7:26 [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A Ran Wang
2020-11-02  7:26 ` [PATCH v4 2/3] arm: dts: ls1021a: fix flextimer failed to wake system Ran Wang
2020-11-30  7:07   ` Shawn Guo
2020-11-02  7:26 ` [PATCH v4 3/3] arm: dts: ls1021a: fix rcpm failed to claim resource Ran Wang
2020-11-30  7:08   ` Shawn Guo
2020-11-24  1:13 ` [PATCH v4 1/3] soc: fsl: handle RCPM errata A-008646 on SoC LS1021A Li Yang

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