[U-Boot-Users] [PATCH] icecube/lite5200b: wakeup from low-power support

U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
--- board/icecube/icecube.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+)
Index: u-boot.git/board/icecube/icecube.c =================================================================== --- u-boot.git.orig/board/icecube/icecube.c +++ u-boot.git/board/icecube/icecube.c @@ -42,6 +42,54 @@ #include "mt48lc16m16a2-75.h" # endif #endif + +#ifdef CONFIG_LITE5200B +/* u-boot part of low-power mode implementation */ +#define SAVED_ADDR (*(void **)0x00000000) +#define PSC2_4 0x02 + +void lite5200b_wakeup(void) +{ + unsigned char wakeup_pin; + void (*linux_wakeup)(void); + + /* check PSC2_4, if it's down "QT" is signaling we have a wakeup + * from low power mode */ + *(vu_char *)MPC5XXX_WU_GPIO_ENABLE = PSC2_4; + __asm__ volatile ("sync"); + + wakeup_pin = *(vu_char *)MPC5XXX_WU_GPIO_DATA_I; + if (wakeup_pin & PSC2_4) + return; + + /* acknowledge to "QT" + * by holding pin at 1 for 10 uS */ + *(vu_char *)MPC5XXX_WU_GPIO_DIR = PSC2_4; + __asm__ volatile ("sync"); + *(vu_char *)MPC5XXX_WU_GPIO_DATA_O = PSC2_4; + __asm__ volatile ("sync"); + udelay(10); + + /* put ram out of self-refresh */ + *(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x80000000; // mode_en + __asm__ volatile ("sync"); + *(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x50000000; // cke ref_en + __asm__ volatile ("sync"); + *(vu_long *)MPC5XXX_SDRAM_CTRL &= ~0x80000000; // !mode_en + __asm__ volatile ("sync"); + udelay(10); /* wait a bit */ + + /* jump back to linux kernel code */ + linux_wakeup = SAVED_ADDR; + printf("\n\nLooks like we just woke, transferring control to 0x%08lx\n", + linux_wakeup); + linux_wakeup(); +} +#else +#define lite5200b_wakeup() +#endif + + #ifndef CFG_RAMBOOT static void sdram_start (int hi_addr) { @@ -208,6 +256,8 @@ long int initdram (int board_type) __asm__ volatile ("sync"); }
+ lite5200b_wakeup(); + return dramsize + dramsize2; }

On 3/15/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
This looks pretty straight forward.
My only comment is that psc2_4 is probably used as GPIO instead of power control by some users (The lite5200 is an eval board after all). Maybe wrap the code with #ifdef CONFIG_LITE5200B_PM (instead of CONFIG_LITE5200B) so that it can be easily compiled out.
Also, '//' style comments should be changed to '/* */'
Otherwise; Acked-by: Grant Likely grant.likely@secretlab.ca
g.
board/icecube/icecube.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+)
Index: u-boot.git/board/icecube/icecube.c
--- u-boot.git.orig/board/icecube/icecube.c +++ u-boot.git/board/icecube/icecube.c @@ -42,6 +42,54 @@ #include "mt48lc16m16a2-75.h" # endif #endif
+#ifdef CONFIG_LITE5200B +/* u-boot part of low-power mode implementation */ +#define SAVED_ADDR (*(void **)0x00000000) +#define PSC2_4 0x02
+void lite5200b_wakeup(void) +{
unsigned char wakeup_pin;
void (*linux_wakeup)(void);
/* check PSC2_4, if it's down "QT" is signaling we have a wakeup
* from low power mode */
*(vu_char *)MPC5XXX_WU_GPIO_ENABLE = PSC2_4;
__asm__ volatile ("sync");
wakeup_pin = *(vu_char *)MPC5XXX_WU_GPIO_DATA_I;
if (wakeup_pin & PSC2_4)
return;
/* acknowledge to "QT"
* by holding pin at 1 for 10 uS */
*(vu_char *)MPC5XXX_WU_GPIO_DIR = PSC2_4;
__asm__ volatile ("sync");
*(vu_char *)MPC5XXX_WU_GPIO_DATA_O = PSC2_4;
__asm__ volatile ("sync");
udelay(10);
/* put ram out of self-refresh */
*(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x80000000; // mode_en
__asm__ volatile ("sync");
*(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x50000000; // cke ref_en
__asm__ volatile ("sync");
*(vu_long *)MPC5XXX_SDRAM_CTRL &= ~0x80000000; // !mode_en
__asm__ volatile ("sync");
udelay(10); /* wait a bit */
/* jump back to linux kernel code */
linux_wakeup = SAVED_ADDR;
printf("\n\nLooks like we just woke, transferring control to 0x%08lx\n",
linux_wakeup);
linux_wakeup();
+} +#else +#define lite5200b_wakeup() +#endif
#ifndef CFG_RAMBOOT static void sdram_start (int hi_addr) { @@ -208,6 +256,8 @@ long int initdram (int board_type) __asm__ volatile ("sync"); }
lite5200b_wakeup();
return dramsize + dramsize2;
}

U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
--- On 26/03/07 10:08 -0600, Grant Likely wrote:
On 3/15/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
This looks pretty straight forward.
My only comment is that psc2_4 is probably used as GPIO instead of power control by some users (The lite5200 is an eval board after all). Maybe wrap the code with #ifdef CONFIG_LITE5200B_PM (instead of CONFIG_LITE5200B) so that it can be easily compiled out.
Also, '//' style comments should be changed to '/* */'
Otherwise; Acked-by: Grant Likely grant.likely@secretlab.ca
OK. This one should be better:
Makefile | 5 ++++ board/icecube/icecube.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+)
Index: u-boot.git/board/icecube/icecube.c =================================================================== --- u-boot.git.orig/board/icecube/icecube.c +++ u-boot.git/board/icecube/icecube.c @@ -42,6 +42,53 @@ #include "mt48lc16m16a2-75.h" # endif #endif + +#ifdef CONFIG_LITE5200B_PM +/* u-boot part of low-power mode implementation */ +#define SAVED_ADDR (*(void **)0x00000000) +#define PSC2_4 0x02 + +void lite5200b_wakeup(void) +{ + unsigned char wakeup_pin; + void (*linux_wakeup)(void); + + /* check PSC2_4, if it's down "QT" is signaling we have a wakeup + * from low power mode */ + *(vu_char *)MPC5XXX_WU_GPIO_ENABLE = PSC2_4; + __asm__ volatile ("sync"); + + wakeup_pin = *(vu_char *)MPC5XXX_WU_GPIO_DATA_I; + if (wakeup_pin & PSC2_4) + return; + + /* acknowledge to "QT" + * by holding pin at 1 for 10 uS */ + *(vu_char *)MPC5XXX_WU_GPIO_DIR = PSC2_4; + __asm__ volatile ("sync"); + *(vu_char *)MPC5XXX_WU_GPIO_DATA_O = PSC2_4; + __asm__ volatile ("sync"); + udelay(10); + + /* put ram out of self-refresh */ + *(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x80000000; /* mode_en */ + __asm__ volatile ("sync"); + *(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x50000000; /* cke ref_en */ + __asm__ volatile ("sync"); + *(vu_long *)MPC5XXX_SDRAM_CTRL &= ~0x80000000; /* !mode_en */ + __asm__ volatile ("sync"); + udelay(10); /* wait a bit */ + + /* jump back to linux kernel code */ + linux_wakeup = SAVED_ADDR; + printf("\n\nLooks like we just woke, transferring control to 0x%08lx\n", + linux_wakeup); + linux_wakeup(); +} +#else +#define lite5200b_wakeup() +#endif + #ifndef CFG_RAMBOOT static void sdram_start (int hi_addr) { @@ -208,6 +255,8 @@ long int initdram (int board_type) __asm__ volatile ("sync"); }
+ lite5200b_wakeup(); + return dramsize + dramsize2; }
Index: u-boot.git/Makefile =================================================================== --- u-boot.git.orig/Makefile +++ u-boot.git/Makefile @@ -430,6 +430,7 @@ inka4x0_config: unconfig @$(MKCONFIG) inka4x0 ppc mpc5xxx inka4x0
lite5200b_config \ +lite5200b_PM_config \ lite5200b_LOWBOOT_config: unconfig @mkdir -p $(obj)include @mkdir -p $(obj)board/icecube @@ -438,6 +439,10 @@ lite5200b_LOWBOOT_config: unconfig @ echo "... DDR memory revision" @ echo "#define CONFIG_MPC5200" >>$(obj)include/config.h @ echo "#define CONFIG_LITE5200B" >>$(obj)include/config.h + @[ -z "$(findstring _PM_,$@)" ] || \ + { echo "#define CONFIG_LITE5200B_PM" >>$(obj)include/config.h ; \ + echo "... with power management (low-power mode) support" ; \ + } @[ -z "$(findstring LOWBOOT_,$@)" ] || \ { echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; \ echo "... with LOWBOOT configuration" ; \

On 4/3/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Looks good; almost there. Only one thing missing... you need to add your "Signed-off-by" line. :-) See Documentation/SubmittingPatches in the Linux source tree. (You can just reply to this message, and whoever merges the patch will add the line to the commit message)
Acked-by: Grant Likely grant.likely@secretlab.ca
Stefan; since there is no 5200 custodian, can you please pick up this patch once Domen sends a Signed-of-by replay?
Cheers, g.
On 26/03/07 10:08 -0600, Grant Likely wrote:
On 3/15/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
This looks pretty straight forward.
My only comment is that psc2_4 is probably used as GPIO instead of power control by some users (The lite5200 is an eval board after all). Maybe wrap the code with #ifdef CONFIG_LITE5200B_PM (instead of CONFIG_LITE5200B) so that it can be easily compiled out.
Also, '//' style comments should be changed to '/* */'
Otherwise; Acked-by: Grant Likely grant.likely@secretlab.ca
OK. This one should be better:
Makefile | 5 ++++ board/icecube/icecube.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+)
Index: u-boot.git/board/icecube/icecube.c
--- u-boot.git.orig/board/icecube/icecube.c +++ u-boot.git/board/icecube/icecube.c @@ -42,6 +42,53 @@ #include "mt48lc16m16a2-75.h" # endif #endif
+#ifdef CONFIG_LITE5200B_PM +/* u-boot part of low-power mode implementation */ +#define SAVED_ADDR (*(void **)0x00000000) +#define PSC2_4 0x02
+void lite5200b_wakeup(void) +{
unsigned char wakeup_pin;
void (*linux_wakeup)(void);
/* check PSC2_4, if it's down "QT" is signaling we have a wakeup
* from low power mode */
*(vu_char *)MPC5XXX_WU_GPIO_ENABLE = PSC2_4;
__asm__ volatile ("sync");
wakeup_pin = *(vu_char *)MPC5XXX_WU_GPIO_DATA_I;
if (wakeup_pin & PSC2_4)
return;
/* acknowledge to "QT"
* by holding pin at 1 for 10 uS */
*(vu_char *)MPC5XXX_WU_GPIO_DIR = PSC2_4;
__asm__ volatile ("sync");
*(vu_char *)MPC5XXX_WU_GPIO_DATA_O = PSC2_4;
__asm__ volatile ("sync");
udelay(10);
/* put ram out of self-refresh */
*(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x80000000; /* mode_en */
__asm__ volatile ("sync");
*(vu_long *)MPC5XXX_SDRAM_CTRL |= 0x50000000; /* cke ref_en */
__asm__ volatile ("sync");
*(vu_long *)MPC5XXX_SDRAM_CTRL &= ~0x80000000; /* !mode_en */
__asm__ volatile ("sync");
udelay(10); /* wait a bit */
/* jump back to linux kernel code */
linux_wakeup = SAVED_ADDR;
printf("\n\nLooks like we just woke, transferring control to 0x%08lx\n",
linux_wakeup);
linux_wakeup();
+} +#else +#define lite5200b_wakeup() +#endif
#ifndef CFG_RAMBOOT static void sdram_start (int hi_addr) { @@ -208,6 +255,8 @@ long int initdram (int board_type) __asm__ volatile ("sync"); }
lite5200b_wakeup();
return dramsize + dramsize2;
}
Index: u-boot.git/Makefile
--- u-boot.git.orig/Makefile +++ u-boot.git/Makefile @@ -430,6 +430,7 @@ inka4x0_config: unconfig @$(MKCONFIG) inka4x0 ppc mpc5xxx inka4x0
lite5200b_config \ +lite5200b_PM_config \ lite5200b_LOWBOOT_config: unconfig @mkdir -p $(obj)include @mkdir -p $(obj)board/icecube @@ -438,6 +439,10 @@ lite5200b_LOWBOOT_config: unconfig @ echo "... DDR memory revision" @ echo "#define CONFIG_MPC5200" >>$(obj)include/config.h @ echo "#define CONFIG_LITE5200B" >>$(obj)include/config.h
@[ -z "$(findstring _PM_,$@)" ] || \
{ echo "#define CONFIG_LITE5200B_PM" >>$(obj)include/config.h ; \
echo "... with power management (low-power mode) support" ; \
} @[ -z "$(findstring LOWBOOT_,$@)" ] || \ { echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; \ echo "... with LOWBOOT configuration" ; \

On 15/04/07 22:45 -0600, Grant Likely wrote:
On 4/3/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Looks good; almost there. Only one thing missing... you need to add your "Signed-off-by" line. :-) See Documentation/SubmittingPatches in the Linux source tree. (You can just reply to this message, and whoever merges the patch will add the line to the commit message)
Acked-by: Grant Likely grant.likely@secretlab.ca
Stefan; since there is no 5200 custodian, can you please pick up this patch once Domen sends a Signed-of-by replay?
I thought Signed-off-by's are Linux specific.
Signed-off-by: Domen Puncer domen.puncer@telargo.com
Thanks!
Domen

In message 20070416062533.GH18236@moe.telargo.com you wrote:
I thought Signed-off-by's are Linux specific.
Please read the docs.
Best regards,
Wolfgang Denk

On Monday 16 April 2007 06:45, Grant Likely wrote:
On 4/3/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Looks good; almost there. Only one thing missing... you need to add your "Signed-off-by" line. :-) See Documentation/SubmittingPatches in the Linux source tree. (You can just reply to this message, and whoever merges the patch will add the line to the commit message)
Acked-by: Grant Likely grant.likely@secretlab.ca
Stefan; since there is no 5200 custodian, can you please pick up this patch once Domen sends a Signed-of-by replay?
Done.
But this brings me to a new idea: Why not create a 5200er custodian repository and perhaps we can find somebody (Stefan looks in Grants direction ;-)) to volunteer to maintain this 5200er repository?
Grant?
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, HRB 165235 Munich, CEO: Wolfgang Denk Office: Kirchenstr. 5, D-82194 Groebenzell, Germany =====================================================================

On 16/04/07 14:04 +0200, Stefan Roese wrote:
On Monday 16 April 2007 06:45, Grant Likely wrote:
On 4/3/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Looks good; almost there. Only one thing missing... you need to add your "Signed-off-by" line. :-) See Documentation/SubmittingPatches in the Linux source tree. (You can just reply to this message, and whoever merges the patch will add the line to the commit message)
Acked-by: Grant Likely grant.likely@secretlab.ca
Stefan; since there is no 5200 custodian, can you please pick up this patch once Domen sends a Signed-of-by replay?
Done.
Thanks!
While at it, can you also take care of (Grant already agreed with the change):
G2 core reference manual says decrementer and time base are decreasing/increasing once every 4 bus clock cycles. Lets fix it, so time in Linux won't run twice as fast
Signed-off-by: Domen Puncer domen.puncer@telargo.com --- include/configs/IceCube.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Index: u-boot.git/include/configs/IceCube.h =================================================================== --- u-boot.git.orig/include/configs/IceCube.h +++ u-boot.git/include/configs/IceCube.h @@ -182,7 +182,7 @@
#define OF_CPU "PowerPC,5200@0" #define OF_SOC "soc5200@f0000000" -#define OF_TBCLK (bd->bi_busfreq / 8) +#define OF_TBCLK (bd->bi_busfreq / 4) #define OF_STDOUT_PATH "/soc5200@f0000000/serial@2000"
/*

On 4/16/07, Domen Puncer domen.puncer@telargo.com wrote:
On 16/04/07 14:04 +0200, Stefan Roese wrote:
On Monday 16 April 2007 06:45, Grant Likely wrote:
On 4/3/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Looks good; almost there. Only one thing missing... you need to add your "Signed-off-by" line. :-) See Documentation/SubmittingPatches in the Linux source tree. (You can just reply to this message, and whoever merges the patch will add the line to the commit message)
Acked-by: Grant Likely grant.likely@secretlab.ca
Stefan; since there is no 5200 custodian, can you please pick up this patch once Domen sends a Signed-of-by replay?
Done.
Thanks!
While at it, can you also take care of (Grant already agreed with the change):
G2 core reference manual says decrementer and time base are decreasing/increasing once every 4 bus clock cycles. Lets fix it, so time in Linux won't run twice as fast
Signed-off-by: Domen Puncer domen.puncer@telargo.com
Acked-by: Grant Likely grant.likely@secretlab.ca
include/configs/IceCube.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Index: u-boot.git/include/configs/IceCube.h
--- u-boot.git.orig/include/configs/IceCube.h +++ u-boot.git/include/configs/IceCube.h @@ -182,7 +182,7 @@
#define OF_CPU "PowerPC,5200@0" #define OF_SOC "soc5200@f0000000" -#define OF_TBCLK (bd->bi_busfreq / 8) +#define OF_TBCLK (bd->bi_busfreq / 4) #define OF_STDOUT_PATH "/soc5200@f0000000/serial@2000"
/*

Hi Domen,
On Monday 16 April 2007 15:08, Domen Puncer wrote:
While at it, can you also take care of (Grant already agreed with the change):
since we don't have a 52xx repository, I commited it into the u-boot-testing repository:
git://www.denx.de/git/u-boot-testing.git
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, HRB 165235 Munich, CEO: Wolfgang Denk Office: Kirchenstr. 5, D-82194 Groebenzell, Germany =====================================================================

In message 200704201413.05902.sr@denx.de you wrote:
since we don't have a 52xx repository, I commited it into the u-boot-testing repository:
git://www.denx.de/git/u-boot-testing.git
Merged.
Best regards,
Wolfgang Denk

Hi Domen,
On Monday 16 April 2007 14:04, Stefan Roese wrote:
On Monday 16 April 2007 06:45, Grant Likely wrote:
On 4/3/07, Domen Puncer domen.puncer@telargo.com wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Looks good; almost there. Only one thing missing... you need to add your "Signed-off-by" line. :-) See Documentation/SubmittingPatches in the Linux source tree. (You can just reply to this message, and whoever merges the patch will add the line to the commit message)
Acked-by: Grant Likely grant.likely@secretlab.ca
Stefan; since there is no 5200 custodian, can you please pick up this patch once Domen sends a Signed-of-by replay?
Done.
Rafal mentioned to me off-list that some documentation about this suspend/wakeup mechanism would be preferable. Here his notes:
" - regarding the U-Boot piece I'd only like to see some explanation (as a comment or short readme file) of the overall concept and scenario as it is not intuitive at all and rather difficult to understand all the ramifications and constraints from looking at the code only "
So Domen, could you please either send a reworked patch with this documentation (preferable some file in doc/README.xxx) or just send a new patch with only this documentation?
Thanks.
BTW: Wolfgang reminded me, that putting this stuff into the u-boot-ppc4xx repository is not a good solution. I'll try to move this over to u-boot-testing.
Best regards, Stefan
===================================================================== DENX Software Engineering GmbH, HRB 165235 Munich, CEO: Wolfgang Denk Office: Kirchenstr. 5, D-82194 Groebenzell, Germany =====================================================================

Dear Domen,
in message 200704171329.37002.sr@denx.de Stefan Roese wrote:
- regarding the U-Boot piece I'd only like to see some explanation (as a
comment or short readme file) of the overall concept and scenario as it is not intuitive at all and rather difficult to understand all the ramifications and constraints from looking at the code only "
So Domen, could you please either send a reworked patch with this documentation (preferable some file in doc/README.xxx) or just send a new patch with only this documentation?
The documentation should also include information which configu- rations have been tested, i. e. if PCI, IDE, USB, ... device have been attached to the system during these test cycles, and if these survived.
Best regards,
Wolfgang Denk

Document what Lite5200B low-power is about.
Signed-off-by: Domen Puncer domen.puncer@telargo.com
--- doc/README.Lite5200B_low_power | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
Index: u-boot.git/doc/README.Lite5200B_low_power =================================================================== --- /dev/null +++ u-boot.git/doc/README.Lite5200B_low_power @@ -0,0 +1,22 @@ +Lite5200B wakeup from low-power mode (CONFIG_LITE5200B_PM) +---------------------------------------------------------- + +Low-power mode as described in Lite5200B User's Manual, means that +with support of MC68HLC908QT1 microcontroller (refered to as QT), +everything but the SDRAM can be powered down. This brings +maximum power saving, while one can still restore previous state +quickly. + +Quick overview where U-Boot comes into the picture: +- OS saves device states +- OS saves wakeup handler address to physical 0x0, puts SDRAM into + self-refresh and signals to QT, it should power down the board +- / board is sleeping here / +- someone presses SW4 (connected to QT) +- U-Boot checks PSC2_4 pin, if QT drives it down, then we woke up, + so get SDRAM out of self-refresh and transfer control to OS + wakeup handler +- OS restores device states + +This was tested on Linux with USB and Ethernet in use. Adding +support for other devices is an OS issue.

Domen Puncer wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Hi Domen,
As I understand while waking up from the low-power mode the machine is effectively powering on, similarly to the cold reset, so U-Boot runs from the beginning as usual, but after the SDRAM controller has been initialised we detect the wakeup and teleport to the saved DRAM address.
Since in case of a wakeup from the low-power mode we skip everything in U-Boot that is happening past initdram(), please clarify the following:
- are you sure there are no steps beyond init_func_ram()/board_init_f() that should be performed while waking up? For example:
- are all timers settings properly re-stored?
- wouldn't the host/PCI bridge need to be re-initialised and re-configured as part of the wakeup process? Did you happen to test some PCI devices and would they survive after wakeup from the the low-power mode? (A similar question would apply to the USB controller)
Also, a more general question: isn't time base update required after the wakeup, specially if it's been a long sleep?
kind regards, Rafal

[ Gah, saw it didn't make it to u-boot ML, resending ]
On 31/03/07 19:20 +0200, Rafal Jaworowski wrote:
Domen Puncer wrote:
U-Boot part of Lite5200b low power mode support. Puts SDRAM out of self-refresh and transfers control to address saved at physical 0x0.
Hi Domen,
Hi!
As I understand while waking up from the low-power mode the machine is effectively powering on, similarly to the cold reset, so U-Boot runs from the beginning as usual, but after the SDRAM controller has been initialised we detect the wakeup and teleport to the saved DRAM address.
Right.
Since in case of a wakeup from the low-power mode we skip everything in U-Boot that is happening past initdram(), please clarify the following:
- are you sure there are no steps beyond init_func_ram()/board_init_f()
that should be performed while waking up? For example:
- are all timers settings properly re-stored?
Hmm... right, I forgot to restart watchdog... but that will be done in Linux code.
- wouldn't the host/PCI bridge need to be re-initialised and
re-configured as part of the wakeup process? Did you happen to test some PCI devices and would they survive after wakeup from the the low-power mode? (A similar question would apply to the USB controller)
Honestly, I don't know for PCI. IIRC some time ago, kernel compiled with CONFIG_PCI didn't boot for me.
USB controller/devices survived the wakeup last time I checked.
Also, a more general question: isn't time base update required after the wakeup, specially if it's been a long sleep?
Lite5200b doesn't have an external time source.
Thanks!
Domen
participants (5)
-
Domen Puncer
-
Grant Likely
-
Rafal Jaworowski
-
Stefan Roese
-
Wolfgang Denk