All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124"
@ 2018-06-22 19:02 Stephen Warren
  2018-06-22 19:02 ` [U-Boot] [PATCH 2/2] ARM: tegra: implement RAM repair Stephen Warren
  2018-07-26 19:40 ` [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124" Stephen Warren
  0 siblings, 2 replies; 4+ messages in thread
From: Stephen Warren @ 2018-06-22 19:02 UTC (permalink / raw)
  To: u-boot

From: Stephen Warren <swarren@nvidia.com>

This reverts commit 701b7b1d2cf657d435d2bd6caf43d0247d37220d. It will
be immediately replaced by a different implementation that is more
complete and runs are more targetted times.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/include/asm/arch-tegra124/flow.h | 12 ------------
 arch/arm/mach-tegra/powergate.c           | 20 +-------------------
 2 files changed, 1 insertion(+), 31 deletions(-)

diff --git a/arch/arm/include/asm/arch-tegra124/flow.h b/arch/arm/include/asm/arch-tegra124/flow.h
index a54425692b57..2b330dc9e1dd 100644
--- a/arch/arm/include/asm/arch-tegra124/flow.h
+++ b/arch/arm/include/asm/arch-tegra124/flow.h
@@ -25,12 +25,6 @@ struct flow_ctlr {
 	u32 cpu_pwr_csr;	/* offset 0x38 */
 	u32 mpid;		/* offset 0x3c */
 	u32 ram_repair;		/* offset 0x40 */
-	u32 flow_dbg_sel;	/* offset 0x44 */
-	u32 flow_dbg_cnt0;	/* offset 0x48 */
-	u32 flow_dbg_cnt1;	/* offset 0x4c */
-	u32 flow_dbg_qual;	/* offset 0x50 */
-	u32 flow_ctlr_spare;	/* offset 0x54 */
-	u32 ram_repair_cluster1;/* offset 0x58 */
 };
 
 /* HALT_COP_EVENTS_0, 0x04 */
@@ -48,10 +42,4 @@ struct flow_ctlr {
 #define CSR_WAIT_WFI_SHIFT	8
 #define CSR_PWR_OFF_STS		(1 << 16)
 
-/* RAM_REPAIR, 0x40, 0x58 */
-enum {
-	RAM_REPAIR_REQ = 0x1 << 0,
-	RAM_REPAIR_STS = 0x1 << 1,
-};
-
 #endif	/*  _TEGRA124_FLOW_H_ */
diff --git a/arch/arm/mach-tegra/powergate.c b/arch/arm/mach-tegra/powergate.c
index d32d559f13ad..e45f0961b242 100644
--- a/arch/arm/mach-tegra/powergate.c
+++ b/arch/arm/mach-tegra/powergate.c
@@ -8,7 +8,7 @@
 
 #include <asm/io.h>
 #include <asm/types.h>
-#include <asm/arch/flow.h>
+
 #include <asm/arch/powergate.h>
 #include <asm/arch/tegra.h>
 
@@ -74,29 +74,11 @@ static int tegra_powergate_remove_clamping(enum tegra_powergate id)
 	return 0;
 }
 
-static void tegra_powergate_ram_repair(void)
-{
-#ifdef CONFIG_TEGRA124
-	struct flow_ctlr *flow = (struct flow_ctlr *)NV_PA_FLOW_BASE;
-
-	/* Request RAM repair for cluster 0 and wait until complete */
-	setbits_le32(&flow->ram_repair, RAM_REPAIR_REQ);
-	while (!(readl(&flow->ram_repair) & RAM_REPAIR_STS))
-		;
-
-	/* Same for cluster 1 */
-	setbits_le32(&flow->ram_repair_cluster1, RAM_REPAIR_REQ);
-	while (!(readl(&flow->ram_repair_cluster1) & RAM_REPAIR_STS))
-		;
-#endif
-}
-
 int tegra_powergate_sequence_power_up(enum tegra_powergate id,
 				      enum periph_id periph)
 {
 	int err;
 
-	tegra_powergate_ram_repair();
 	reset_set_enable(periph, 1);
 
 	err = tegra_powergate_power_on(id);
-- 
2.17.1

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

* [U-Boot] [PATCH 2/2] ARM: tegra: implement RAM repair
  2018-06-22 19:02 [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124" Stephen Warren
@ 2018-06-22 19:02 ` Stephen Warren
  2018-07-26 19:40 ` [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124" Stephen Warren
  1 sibling, 0 replies; 4+ messages in thread
From: Stephen Warren @ 2018-06-22 19:02 UTC (permalink / raw)
  To: u-boot

From: Bibek Basu <bbasu@nvidia.com>

RAM repair has a few pre-requisites:
1) PMIC power supply (rail) enabled.
2) PMC CRAIL power partition powered.
3) Fuse clock active (it's the default).
4) PLLP reshift branch enabled (it's the default, when PLLP is active).

RAM repair also only need run whenever specific partitions are powered
(main SoC and CCPLEX respectively); RAM repair does not need to be
triggered when any other partition changes state.

start_cpu() needs to be re-ordered slightly to match these requirements.
Note that C0NC and CE0 aren't required for RAM repair to
operate, but they also do no harm, so the entire of powerup_cpus() is
moved rather than splitting it up. The call to remove_cpu_resets() is
moved last to ensure that all other actions complete before releasing
reset; since the PMC power partitions are now enabled early, releasing
reset is what causes the CPUs to start executing code, and RAM repair must
complete before the CPU boots.

Note that this commit is the result of squashing a numbmer of commits
in NVIDIA's downstream L4T branch, hence the multiple signoffs below.

Signed-off-by: Bibek Basu <bbasu@nvidia.com>
Signed-off-by: Sandipan Patra <spatra@nvidia.com>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/include/asm/arch-tegra124/flow.h | 10 ++++++
 arch/arm/mach-tegra/tegra124/cpu.c        | 42 +++++++++++++++++++++--
 2 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/arch/arm/include/asm/arch-tegra124/flow.h b/arch/arm/include/asm/arch-tegra124/flow.h
index 2b330dc9e1dd..62947bf99c84 100644
--- a/arch/arm/include/asm/arch-tegra124/flow.h
+++ b/arch/arm/include/asm/arch-tegra124/flow.h
@@ -25,6 +25,12 @@ struct flow_ctlr {
 	u32 cpu_pwr_csr;	/* offset 0x38 */
 	u32 mpid;		/* offset 0x3c */
 	u32 ram_repair;		/* offset 0x40 */
+	u32 flow_dbg_sel;	/* offset 0x44 */
+	u32 flow_dbg_cnt0;	/* offset 0x48 */
+	u32 flow_dbg_cnt1;	/* offset 0x4c */
+	u32 flow_dbg_qual;	/* offset 0x50 */
+	u32 flow_ctrl_spare;	/* offset 0x54 */
+	u32 ram_repair_cluster1;/* offset 0x58 */
 };
 
 /* HALT_COP_EVENTS_0, 0x04 */
@@ -42,4 +48,8 @@ struct flow_ctlr {
 #define CSR_WAIT_WFI_SHIFT	8
 #define CSR_PWR_OFF_STS		(1 << 16)
 
+#define RAM_REPAIR_REQ		BIT(0)
+#define RAM_REPAIR_STS		BIT(1)
+#define RAM_REPAIR_BYPASS_EN	BIT(2)
+
 #endif	/*  _TEGRA124_FLOW_H_ */
diff --git a/arch/arm/mach-tegra/tegra124/cpu.c b/arch/arm/mach-tegra/tegra124/cpu.c
index 204d6e95395d..992c0beb04dc 100644
--- a/arch/arm/mach-tegra/tegra124/cpu.c
+++ b/arch/arm/mach-tegra/tegra124/cpu.c
@@ -104,6 +104,43 @@ static void remove_cpu_resets(void)
 	writel(reg, &clkrst->crc_rst_cpug_cmplx_clr);
 }
 
+static void tegra124_ram_repair(void)
+{
+	struct flow_ctlr *flow = (struct flow_ctlr *)NV_PA_FLOW_BASE;
+	u32 ram_repair_timeout; /*usec*/
+	u32 val;
+
+	/*
+	 * Request the Flow Controller perform RAM repair whenever it turns on
+	 * a power rail that requires RAM repair.
+	 */
+	clrbits_le32(&flow->ram_repair, RAM_REPAIR_BYPASS_EN);
+
+	/* Request SW trigerred RAM repair by setting req  bit */
+	/* cluster 0 */
+	setbits_le32(&flow->ram_repair, RAM_REPAIR_REQ);
+	/* Wait for completion (status == 0) */
+	ram_repair_timeout = 500;
+	do {
+		udelay(1);
+		val = readl(&flow->ram_repair);
+	} while (!(val & RAM_REPAIR_STS) && ram_repair_timeout--);
+	if (!ram_repair_timeout)
+		debug("Ram Repair cluster0 failed\n");
+
+	/* cluster 1 */
+	setbits_le32(&flow->ram_repair_cluster1, RAM_REPAIR_REQ);
+	/* Wait for completion (status == 0) */
+	ram_repair_timeout = 500;
+	do {
+		udelay(1);
+		val = readl(&flow->ram_repair_cluster1);
+	} while (!(val & RAM_REPAIR_STS) && ram_repair_timeout--);
+
+	if (!ram_repair_timeout)
+		debug("Ram Repair cluster1 failed\n");
+}
+
 /**
  * Tegra124 requires some special clock initialization, including setting up
  * the DVC I2C, turning on MSELECT and selecting the G CPU cluster
@@ -254,10 +291,11 @@ void start_cpu(u32 reset_vector)
 	       &pmc->pmc_pwrgate_timer_mult);
 
 	enable_cpu_power_rail();
+	powerup_cpus();
+	tegra124_ram_repair();
 	enable_cpu_clocks();
 	clock_enable_coresight(1);
-	remove_cpu_resets();
 	writel(reset_vector, EXCEP_VECTOR_CPU_RESET_VECTOR);
-	powerup_cpus();
+	remove_cpu_resets();
 	debug("%s exit, should continue @ reset_vector\n", __func__);
 }
-- 
2.17.1

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

* [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124"
  2018-06-22 19:02 [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124" Stephen Warren
  2018-06-22 19:02 ` [U-Boot] [PATCH 2/2] ARM: tegra: implement RAM repair Stephen Warren
@ 2018-07-26 19:40 ` Stephen Warren
  2018-07-26 19:46   ` Tom Warren
  1 sibling, 1 reply; 4+ messages in thread
From: Stephen Warren @ 2018-07-26 19:40 UTC (permalink / raw)
  To: u-boot

On 06/22/2018 01:02 PM, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> This reverts commit 701b7b1d2cf657d435d2bd6caf43d0247d37220d. It will
> be immediately replaced by a different implementation that is more
> complete and runs are more targetted times.

Tom, can we please apply this series, and the 4-long series I sent just 
after starting with "ARM: define MON_MODE". Thanks.

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

* [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124"
  2018-07-26 19:40 ` [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124" Stephen Warren
@ 2018-07-26 19:46   ` Tom Warren
  0 siblings, 0 replies; 4+ messages in thread
From: Tom Warren @ 2018-07-26 19:46 UTC (permalink / raw)
  To: u-boot

Sure, let me take a look.

-----Original Message-----
From: Stephen Warren <swarren@wwwdotorg.org> 
Sent: Thursday, July 26, 2018 12:40 PM
To: Tom Warren <TWarren@nvidia.com>
Cc: u-boot at lists.denx.de; Simon Glass <sjg@chromium.org>; Stephen Warren <swarren@nvidia.com>
Subject: Re: [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124"

On 06/22/2018 01:02 PM, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> This reverts commit 701b7b1d2cf657d435d2bd6caf43d0247d37220d. It will 
> be immediately replaced by a different implementation that is more 
> complete and runs are more targetted times.

Tom, can we please apply this series, and the 4-long series I sent just after starting with "ARM: define MON_MODE". Thanks.

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information.  Any unauthorized review, use, disclosure or distribution
is prohibited.  If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

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

end of thread, other threads:[~2018-07-26 19:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-22 19:02 [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124" Stephen Warren
2018-06-22 19:02 ` [U-Boot] [PATCH 2/2] ARM: tegra: implement RAM repair Stephen Warren
2018-07-26 19:40 ` [U-Boot] [PATCH 1/2] Revert "tegra: Introduce SRAM repair on tegra124" Stephen Warren
2018-07-26 19:46   ` Tom Warren

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.