[U-Boot] [PATCH] at91sam9260/9263: add back up fot the rst(reset controller).

On the boards at91sam9260ek, at91sam9263ek and afed9260, the rstc register was set to 0 after being set to 500 ms for the PHY reset. Now if back up is enable it will be set to the saved value.
Signed-off-by: Sedji Gaouaou sedji.gaouaou@atmel.com --- board/afeb9260/afeb9260.c | 6 +++++- board/atmel/at91sam9260ek/at91sam9260ek.c | 6 +++++- board/atmel/at91sam9263ek/at91sam9263ek.c | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/board/afeb9260/afeb9260.c b/board/afeb9260/afeb9260.c index a247663..1af02e2 100644 --- a/board/afeb9260/afeb9260.c +++ b/board/afeb9260/afeb9260.c @@ -81,6 +81,8 @@ static void afeb9260_nand_hw_init(void) #ifdef CONFIG_MACB static void afeb9260_macb_hw_init(void) { + unsigned long rstc; + /* Enable clock */ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_EMAC);
@@ -103,6 +105,8 @@ static void afeb9260_macb_hw_init(void) pin_to_mask(AT91_PIN_PA28), pin_to_controller(AT91_PIN_PA0) + PIO_PUDR);
+ rstc = at91_sys_read(AT91_RSTC_MR); + /* Need to reset PHY -> 500ms reset */ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | AT91_RSTC_ERSTL | (0x0D << 8) | @@ -115,7 +119,7 @@ static void afeb9260_macb_hw_init(void)
/* Restore NRST value */ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | - AT91_RSTC_ERSTL | (0x0 << 8) | + (rstc) | AT91_RSTC_URSTEN);
/* Re-enable pull-up */ diff --git a/board/atmel/at91sam9260ek/at91sam9260ek.c b/board/atmel/at91sam9260ek/at91sam9260ek.c index 6bd3b44..93bc021 100644 --- a/board/atmel/at91sam9260ek/at91sam9260ek.c +++ b/board/atmel/at91sam9260ek/at91sam9260ek.c @@ -86,6 +86,8 @@ static void at91sam9260ek_nand_hw_init(void) #ifdef CONFIG_MACB static void at91sam9260ek_macb_hw_init(void) { + unsigned long rstc; + /* Enable clock */ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_EMAC);
@@ -108,6 +110,8 @@ static void at91sam9260ek_macb_hw_init(void) pin_to_mask(AT91_PIN_PA28), pin_to_controller(AT91_PIN_PA0) + PIO_PUDR);
+ rstc = at91_sys_read(AT91_RSTC_MR); + /* Need to reset PHY -> 500ms reset */ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | (AT91_RSTC_ERSTL & (0x0D << 8)) | @@ -120,7 +124,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)) | + (rstc) | AT91_RSTC_URSTEN);
/* Re-enable pull-up */ diff --git a/board/atmel/at91sam9263ek/at91sam9263ek.c b/board/atmel/at91sam9263ek/at91sam9263ek.c index 57d5c95..e41b7fa 100644 --- a/board/atmel/at91sam9263ek/at91sam9263ek.c +++ b/board/atmel/at91sam9263ek/at91sam9263ek.c @@ -91,6 +91,8 @@ static void at91sam9263ek_nand_hw_init(void) #ifdef CONFIG_MACB static void at91sam9263ek_macb_hw_init(void) { + unsigned long rstc; + /* Enable clock */ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9263_ID_EMAC);
@@ -108,6 +110,8 @@ static void at91sam9263ek_macb_hw_init(void) pin_to_mask(AT91_PIN_PE26), pin_to_controller(AT91_PIN_PE0) + PIO_PUDR);
+ rstc = at91_sys_read(AT91_RSTC_MR); + /* Need to reset PHY -> 500ms reset */ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | (AT91_RSTC_ERSTL & (0x0D << 8)) | @@ -120,7 +124,7 @@ static void at91sam9263ek_macb_hw_init(void)
/* Restore NRST value */ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | - (AT91_RSTC_ERSTL & (0x0 << 8)) | + (rstc) | AT91_RSTC_URSTEN);
/* Re-enable pull-up */

On 12:46 Tue 23 Jun , Sedji Gaouaou wrote:
On the boards at91sam9260ek, at91sam9263ek and afed9260, the rstc register was set to 0 after being set to 500 ms for the PHY reset. Now if back up is enable it will be set to the saved value.
Signed-off-by: Sedji Gaouaou sedji.gaouaou@atmel.com
board/afeb9260/afeb9260.c | 6 +++++- board/atmel/at91sam9260ek/at91sam9260ek.c | 6 +++++- board/atmel/at91sam9263ek/at91sam9263ek.c | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-)
Look fine for me, Stelian & Sergey for you?
Best Regards, J.

On Tue, Jun 23, 2009 at 12:46:50PM +0200, Sedji Gaouaou wrote:
On the boards at91sam9260ek, at91sam9263ek and afed9260, the rstc register was set to 0 after being set to 500 ms for the PHY reset. Now if back up is enable it will be set to the saved value.
The changelog message is not very clear. What means "if backup is enabled" ? I don't see anything in the patch which can be enabled or disabled...
I think you meant something like: "Do backup the old reset length and restore it after the MACB initialisation".
- rstc = at91_sys_read(AT91_RSTC_MR);
[...]
/* Restore NRST value */ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
AT91_RSTC_ERSTL | (0x0 << 8) |
(rstc) | AT91_RSTC_URSTEN);
Also, I don't like this: you backup in 'rstc' the _whole_ contents of the MR register (including for example the URSTEN bit), but on restore you still construct a bit mask...
In order to be consistent, I would do either:
rstc = at91_sys_read(AT91_RSTC_MR); ... at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | rstc);
or
rstc = at91_sys_read(AT91_RSTC_MR) & AT91_RSTC_ERSTL; ... at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | rstc | AT91_RSTC_URSTEN);
Not sure what version would be best though...
Stelian.

Stelian Pop a écrit :
On Tue, Jun 23, 2009 at 12:46:50PM +0200, Sedji Gaouaou wrote:
On the boards at91sam9260ek, at91sam9263ek and afed9260, the rstc register was set to 0 after being set to 500 ms for the PHY reset. Now if back up is enable it will be set to the saved value.
The changelog message is not very clear. What means "if backup is enabled" ? I don't see anything in the patch which can be enabled or disabled...
To enable the back up you need to put a battery, so if there is no battery there is no back up...that is why I said if back up is enable :)
I think you meant something like: "Do backup the old reset length and restore it after the MACB initialisation".
But you comment is better, so I will change it.
- rstc = at91_sys_read(AT91_RSTC_MR);
[...]
/* Restore NRST value */ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
AT91_RSTC_ERSTL | (0x0 << 8) |
(rstc) | AT91_RSTC_URSTEN);
Also, I don't like this: you backup in 'rstc' the _whole_ contents of the MR register (including for example the URSTEN bit), but on restore you still construct a bit mask...
In order to be consistent, I would do either:
rstc = at91_sys_read(AT91_RSTC_MR); ... at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | rstc);
or
rstc = at91_sys_read(AT91_RSTC_MR) & AT91_RSTC_ERSTL; ... at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY | rstc | AT91_RSTC_URSTEN);
I will change that to then.
Regards, Sedji
participants (3)
-
Jean-Christophe PLAGNIOL-VILLARD
-
Sedji Gaouaou
-
Stelian Pop