public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot-Users] [PATCH] Fix boot from NOR due to incorrect reset delay.
@ 2008-05-21 22:15 Stelian Pop
  2008-06-30 14:27 ` Stelian Pop
  0 siblings, 1 reply; 4+ messages in thread
From: Stelian Pop @ 2008-05-21 22:15 UTC (permalink / raw)
  To: u-boot

AT91 RSTC registers are battery-backuped, so their values
are not reset across power cycles. One of those registers,
the AT91_RSTC_MR register, is being modified by U-Boot, in
the ethernet initialisation routine, to generate a 500ms
user reset.

Unfortunately, this value is not being restored afterwards,
causing subsequent resets to also last for 500ms.

This long reset sequence causes problems (at least) in the
boot sequence from NOR: by the time the CPU tries to load
a program from the NOR flash, the latter is still in reset
and not yet available.

Additionaly, this patch fixes a bug in the original code which
caused the reset delay to last for 2s instead of 500ms.

Signed-off-by: Stelian Pop <stelian@popies.net>
---

This patch applies on top of the latest AT91 patches,
as integrated in the testing-V2 branch of the u-boot-at91
repository.

 board/atmel/at91cap9adk/at91cap9adk.c     |    7 ++++++-
 board/atmel/at91sam9260ek/at91sam9260ek.c |    4 ++--
 board/atmel/at91sam9263ek/at91sam9263ek.c |    7 ++++++-
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/board/atmel/at91cap9adk/at91cap9adk.c b/board/atmel/at91cap9adk/at91cap9adk.c
index a3eaf19..c5082a0 100644
--- a/board/atmel/at91cap9adk/at91cap9adk.c
+++ b/board/atmel/at91cap9adk/at91cap9adk.c
@@ -196,7 +196,7 @@ static void at91cap9_macb_hw_init(void)
 
 	/* Need to reset PHY -> 500ms reset */
 	at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
-				     AT91_RSTC_ERSTL | (0x0D << 8) |
+				     (AT91_RSTC_ERSTL & (0x0D << 8)) |
 				     AT91_RSTC_URSTEN);
 
 	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST);
@@ -204,6 +204,11 @@ static void at91cap9_macb_hw_init(void)
 	/* Wait for end hardware reset */
 	while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL));
 
+	/* Restore NRST value */
+	at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+				     (AT91_RSTC_ERSTL & (0x0 << 8)) |
+				     AT91_RSTC_URSTEN);
+
 	/* Re-enable pull-up */
 	writel(pin_to_mask(AT91_PIN_PB22) |
 	       pin_to_mask(AT91_PIN_PB25) |
diff --git a/board/atmel/at91sam9260ek/at91sam9260ek.c b/board/atmel/at91sam9260ek/at91sam9260ek.c
index 4635f0f..3572b16 100644
--- a/board/atmel/at91sam9260ek/at91sam9260ek.c
+++ b/board/atmel/at91sam9260ek/at91sam9260ek.c
@@ -149,7 +149,7 @@ static void at91sam9260ek_macb_hw_init(void)
 
 	/* Need to reset PHY -> 500ms reset */
 	at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
-				     AT91_RSTC_ERSTL | (0x0D << 8) |
+				     (AT91_RSTC_ERSTL & (0x0D << 8)) |
 				     AT91_RSTC_URSTEN);
 
 	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST);
@@ -159,7 +159,7 @@ static void at91sam9260ek_macb_hw_init(void)
 
 	/* Restore NRST value */
 	at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
-				     AT91_RSTC_ERSTL | (0x0 << 8) |
+				     (AT91_RSTC_ERSTL & (0x0 << 8)) |
 				     AT91_RSTC_URSTEN);
 
 	/* Re-enable pull-up */
diff --git a/board/atmel/at91sam9263ek/at91sam9263ek.c b/board/atmel/at91sam9263ek/at91sam9263ek.c
index ba7fc71..169ee25 100644
--- a/board/atmel/at91sam9263ek/at91sam9263ek.c
+++ b/board/atmel/at91sam9263ek/at91sam9263ek.c
@@ -147,7 +147,7 @@ static void at91sam9263ek_macb_hw_init(void)
 
 	/* Need to reset PHY -> 500ms reset */
 	at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
-				     AT91_RSTC_ERSTL | (0x0D << 8) |
+				     (AT91_RSTC_ERSTL & (0x0D << 8)) |
 				     AT91_RSTC_URSTEN);
 
 	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST);
@@ -155,6 +155,11 @@ static void at91sam9263ek_macb_hw_init(void)
 	/* Wait for end hardware reset */
 	while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL));
 
+	/* Restore NRST value */
+	at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+				     (AT91_RSTC_ERSTL & (0x0 << 8)) |
+				     AT91_RSTC_URSTEN);
+
 	/* Re-enable pull-up */
 	writel(pin_to_mask(AT91_PIN_PC25),
 	       pin_to_controller(AT91_PIN_PC0) + PIO_PUER);
-- 
1.5.3.3

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

* [U-Boot-Users] [PATCH] Fix boot from NOR due to incorrect reset delay.
  2008-05-21 22:15 [U-Boot-Users] [PATCH] Fix boot from NOR due to incorrect reset delay Stelian Pop
@ 2008-06-30 14:27 ` Stelian Pop
  2008-07-09 21:49   ` Wolfgang Denk
  0 siblings, 1 reply; 4+ messages in thread
From: Stelian Pop @ 2008-06-30 14:27 UTC (permalink / raw)
  To: u-boot

Hi,

Le jeudi 22 mai 2008 ? 00:15 +0200, Stelian Pop a ?crit :
> AT91 RSTC registers are battery-backuped, so their values
> are not reset across power cycles. One of those registers,
> the AT91_RSTC_MR register, is being modified by U-Boot, in
> the ethernet initialisation routine, to generate a 500ms
> user reset.
[...]

It seems that the patch above has not made it in the mainline. Since
this can cause some nasty boot problems, it would be nice to have this
upstream for the next stable version.

Thanks,

-- 
Stelian Pop <stelian@popies.net>

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

* [U-Boot-Users] [PATCH] Fix boot from NOR due to incorrect reset delay.
  2008-06-30 14:27 ` Stelian Pop
@ 2008-07-09 21:49   ` Wolfgang Denk
  2008-07-10  7:11     ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 4+ messages in thread
From: Wolfgang Denk @ 2008-07-09 21:49 UTC (permalink / raw)
  To: u-boot

In message <1214836051.6496.40.camel@galileo> you wrote:
> 
> Le jeudi 22 mai 2008 ?? 00:15 +0200, Stelian Pop a ??crit :
> AT91 RSTC registers are battery-backuped, so their values
> are not reset across power cycles. One of those registers,
> the AT91_RSTC_MR register, is being modified by U-Boot, in
> the ethernet initialisation routine, to generate a 500ms
> user reset.
> [...]
> 
> It seems that the patch above has not made it in the mainline. Since
> this can cause some nasty boot problems, it would be nice to have this
> upstream for the next stable version.

Jean-Christophe, is this on your queue?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Another megabytes the dust.

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

* [U-Boot-Users] [PATCH] Fix boot from NOR due to incorrect reset delay.
  2008-07-09 21:49   ` Wolfgang Denk
@ 2008-07-10  7:11     ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 4+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2008-07-10  7:11 UTC (permalink / raw)
  To: u-boot

On 23:49 Wed 09 Jul     , Wolfgang Denk wrote:
> In message <1214836051.6496.40.camel@galileo> you wrote:
> > 
> > Le jeudi 22 mai 2008 ?? 00:15 +0200, Stelian Pop a ??crit :
> > AT91 RSTC registers are battery-backuped, so their values
> > are not reset across power cycles. One of those registers,
> > the AT91_RSTC_MR register, is being modified by U-Boot, in
> > the ethernet initialisation routine, to generate a 500ms
> > user reset.
> > [...]
> > 
> > It seems that the patch above has not made it in the mainline. Since
> > this can cause some nasty boot problems, it would be nice to have this
> > upstream for the next stable version.
> 
> Jean-Christophe, is this on your queue?
> 
I've send a pull requeset for this
and you applied in your tree.

Best Regards,
J.

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

end of thread, other threads:[~2008-07-10  7:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-21 22:15 [U-Boot-Users] [PATCH] Fix boot from NOR due to incorrect reset delay Stelian Pop
2008-06-30 14:27 ` Stelian Pop
2008-07-09 21:49   ` Wolfgang Denk
2008-07-10  7:11     ` Jean-Christophe PLAGNIOL-VILLARD

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