public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] arm: socfpga: Fix delay in freeze controller
@ 2015-08-10 23:00 Marek Vasut
  2015-08-18 20:27 ` Dinh Nguyen
  0 siblings, 1 reply; 3+ messages in thread
From: Marek Vasut @ 2015-08-10 23:00 UTC (permalink / raw)
  To: u-boot

Based on observation, this udelay(20) was apparently too high and caused
subsequent failure to calibrate DDR when U-Boot was compiled with certain
toolchains. Lowering this delay fixed the problem.

Instead of permanently lowering the delay, calculate the correct delay
based on the original comment, that is, obtain EOSC1 frequency and use
it to calculate the precise delay.

Signed-off-by: Marek Vasut <marex@denx.de>
---
 arch/arm/mach-socfpga/freeze_controller.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-socfpga/freeze_controller.c b/arch/arm/mach-socfpga/freeze_controller.c
index 0be643c..2b16795 100644
--- a/arch/arm/mach-socfpga/freeze_controller.c
+++ b/arch/arm/mach-socfpga/freeze_controller.c
@@ -7,8 +7,8 @@
 
 #include <common.h>
 #include <asm/io.h>
+#include <asm/arch/clock_manager.h>
 #include <asm/arch/freeze_controller.h>
-#include <asm/arch/timer.h>
 #include <asm/errno.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -112,6 +112,7 @@ void sys_mgr_frzctrl_thaw_req(void)
 	u32 reg_cfg_mask;
 	u32 reg_value;
 	u32 channel_id;
+	unsigned long eosc1_freq;
 
 	/* select software FSM */
 	writel(SYSMGR_FRZCTRL_SRC_VIO1_ENUM_SW,	&freeze_controller_base->src);
@@ -162,12 +163,9 @@ void sys_mgr_frzctrl_thaw_req(void)
 	setbits_le32(&freeze_controller_base->hioctrl,
 		SYSMGR_FRZCTRL_HIOCTRL_OCT_CFGEN_CALSTART_MASK);
 
-	/*
-	 * Delay 1000 intosc. intosc is based on eosc1
-	 * Use worst case which is fatest eosc1=50MHz, delay required
-	 * is 1/50MHz * 1000 = 20us
-	 */
-	udelay(20);
+	/* Delay 1000 intosc cycles. The intosc is based on eosc1. */
+	eosc1_freq = cm_get_osc_clk_hz(1) / 1000;	/* kHz */
+	udelay(DIV_ROUND_UP(1000000, eosc1_freq));
 
 	/*
 	 * de-assert active low bhniotri signals,
-- 
2.1.4

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

* [U-Boot] [PATCH] arm: socfpga: Fix delay in freeze controller
  2015-08-10 23:00 [U-Boot] [PATCH] arm: socfpga: Fix delay in freeze controller Marek Vasut
@ 2015-08-18 20:27 ` Dinh Nguyen
  2015-08-18 22:06   ` Marek Vasut
  0 siblings, 1 reply; 3+ messages in thread
From: Dinh Nguyen @ 2015-08-18 20:27 UTC (permalink / raw)
  To: u-boot



On 8/10/15 6:00 PM, Marek Vasut wrote:
> Based on observation, this udelay(20) was apparently too high and caused
> subsequent failure to calibrate DDR when U-Boot was compiled with certain
> toolchains. Lowering this delay fixed the problem.
> 
> Instead of permanently lowering the delay, calculate the correct delay
> based on the original comment, that is, obtain EOSC1 frequency and use
> it to calculate the precise delay.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> ---
>  arch/arm/mach-socfpga/freeze_controller.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/arm/mach-socfpga/freeze_controller.c b/arch/arm/mach-socfpga/freeze_controller.c
> index 0be643c..2b16795 100644
> --- a/arch/arm/mach-socfpga/freeze_controller.c
> +++ b/arch/arm/mach-socfpga/freeze_controller.c
> @@ -7,8 +7,8 @@
>  

Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>

Thanks,
Dinh

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

* [U-Boot] [PATCH] arm: socfpga: Fix delay in freeze controller
  2015-08-18 20:27 ` Dinh Nguyen
@ 2015-08-18 22:06   ` Marek Vasut
  0 siblings, 0 replies; 3+ messages in thread
From: Marek Vasut @ 2015-08-18 22:06 UTC (permalink / raw)
  To: u-boot

On Tuesday, August 18, 2015 at 10:27:29 PM, Dinh Nguyen wrote:
> On 8/10/15 6:00 PM, Marek Vasut wrote:
> > Based on observation, this udelay(20) was apparently too high and caused
> > subsequent failure to calibrate DDR when U-Boot was compiled with certain
> > toolchains. Lowering this delay fixed the problem.
> > 
> > Instead of permanently lowering the delay, calculate the correct delay
> > based on the original comment, that is, obtain EOSC1 frequency and use
> > it to calculate the precise delay.
> > 
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > ---
> > 
> >  arch/arm/mach-socfpga/freeze_controller.c | 12 +++++-------
> >  1 file changed, 5 insertions(+), 7 deletions(-)
> > 
> > diff --git a/arch/arm/mach-socfpga/freeze_controller.c
> > b/arch/arm/mach-socfpga/freeze_controller.c index 0be643c..2b16795
> > 100644
> > --- a/arch/arm/mach-socfpga/freeze_controller.c
> > +++ b/arch/arm/mach-socfpga/freeze_controller.c
> > @@ -7,8 +7,8 @@
> 
> Acked-by: Dinh Nguyen <dinguyen@opensource.altera.com>

Applied to u-boot-socfpga/master, thanks!

Best regards,
Marek Vasut

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

end of thread, other threads:[~2015-08-18 22:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-10 23:00 [U-Boot] [PATCH] arm: socfpga: Fix delay in freeze controller Marek Vasut
2015-08-18 20:27 ` Dinh Nguyen
2015-08-18 22:06   ` Marek Vasut

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox