On Friday 26 January 2007 14:20, Tom Talpey wrote:
> At 03:33 AM 1/26/2007, Pierre Hébert wrote:
> >I encounter the same problem on another s3c24xx hardware (G500). In
> > my case even 8 bytes was too much and seemed to overwritte
> > something. In case this may help, the only solution I found to this
> > problem was to copy the 8 bytes just before entering suspend, and
> > replace them with the previous content just after resume.
>
> What bootloader does the G500 have? If it doesn't reserve the space
> at physaddr H1940_SUSPEND_RESUMEAT (0x30081000), then the copy
> will overwrite something. Basically, this physaddr goes into a
> reserved gpio register (GSTATUS3), and the resume code jumps to it.
> Take a look at s3c2410-pm.c, pm-h1940.S and sleep.S.
I don't know what the bootloader is, it seems to be custom. I only
discovered the resume address (in my case 0x30041000) when disassembling
the bootloader (with lot of luck and trials). As far as I see the memory
region is not reserved by the bootloader but by a early call to
reserve_bootmem_node, in arch/arm/mm/mmu.c. Even with a call to
reserve_bootmem_node it does not work properly on my device. As my
knowledge on the subject is near zero, I can't say more.
> I guess if you can't reserve a physaddr, then your copy/restore fix
> will work - as long as the code you overwrite isn't needed before you
> can restore it. Come to think of it you may need to flush the icache
> around that copy...
Looking at the symbol map may help to see what is overwritten and better
understand what is overwritten.
I guess that if it works on my setup, it is with a lot of luck ! :-(
Pierre.
Received on Fri Jan 26 2007 - 11:51:33 EST
This archive was generated by hypermail 2.2.0 : Fri Jan 26 2007 - 11:51:52 EST