IMX6q hibernation resume problem

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX6q hibernation resume problem

1,036 Views
parkhyeonggeun
Contributor I

I had apply this patch :

http://lists.infradead.org/pipermail/linux-arm-kernel/2010-December/036055.html

I had found a solution to this problem:

in file arch/arm/kernel/hibernate.c

You need to change in this mode:

/* Used in hibernate_asm.S */

#define USER_CONTEXT_SIZE (15 * sizeof(u32))

unsigned long saved_spsr_svc;

unsigned long saved_context_r14_svc;

unsigned long saved_context_r13_svc;

unsigned long saved_cpsr;

unsigned long saved_context_r0[USER_CONTEXT_SIZE];

static struct saved_context saved_context;

/* References to section boundaries */

extern const void __nosave_begin, __nosave_end;

the sequence is VERY IMPORTAN because in assemble file ( arch/arm/kernel/hibernate_asm.S)

load the R13 and R14 register in sequence.

ENTRY(swsusp_arch_resume)
       /*
        * Restore_pblist is the starting point for loaded pages
        */
       ldr     r0, .Lrestore_pblist
       ldr     r6, [r0]

.Lcopy_loop:
       ldr     r4, [r6]     /* src IOW present address */
       ldr     r5, [r6, #4] /* dst IOW original address*/
       mov     r9, #1024    /* No. of entries in one page, where each entry is bytes */

.Lcopy_one_page:
       /*
        * This loop could be optimized by using stm and ldm.
        */
       ldr     r8, [r4], #4
       str     r8, [r5], #4
       subs    r9, r9, #1
       bne     .Lcopy_one_page

       /* The last field of struct pbe is a pointer to the next pbe structure */
       ldr     r6, [r6, #8]
       cmp     r6, #0
       bne     .Lcopy_loop

       /*
        * Restore SVC context
        */
       ldr     r3, .Lsaved_context_r13_svc
       ldmia   r3, {r13-r14}
       ldr     r3, .Lsaved_spsr_svc
       ldr     r1, [r3]
       msr     spsr_cxsf, r1

       mrs     r0, cpsr        /* Save current mode into r0 */

       /*
        * Change to system(user) mode
        */
       mov     r1, r0
       orr     r1, r1, #0x1f
       msr     cpsr_c, r1

       /*
        * Restore User context
        */
       ldr     r3, .Lsaved_context_r0
       ldmia   r3, {r0-r14}
       ldr     r3, .Lsaved_cpsr
       ldr     r1, [r3]
       msr     cpsr_cxsf, r1

       msr     cpsr_c, r0      /* Restore original mode from r0 */

       /*
        * Flush TLB (Invalidate unified TLB unlocked entries)
        */
       mov     r1, #0
       mcr     p15, 0, r1, c8, c7, 0

       /* Set the return value */
       mov     r0, #0

       /* Restore return address */
       ldr     r3, .Lsaved_context_r14_svc
       ldr     lr, [r3]
       mov     pc, lr
ENDPROC(swsusp_arch_resume)

after about 40000 pages copy loop the function stop.

str     r8, [r5], #4

virtual of r5 stop adress is about 0xcb080000 ~.

Have you idea for solution?

Labels (1)
0 Kudos
3 Replies

461 Views
igorpadykov
NXP Employee
NXP Employee

Hi park

please try latest linux on

meta-fsl-arm - Layer containing Freescale ARM hardware support metadata

Best regards

igor

0 Kudos

461 Views
parkhyeonggeun
Contributor I

Hi igor

I use android Lollipo - linux version imx-3.10.53.

I'm try patch version.

repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.10.53-1.1.0_ga

I want to know.

What did you modify in the Linux version?

Do you give informed?

thank you

0 Kudos

461 Views
john_smith
Contributor II

Hello!

I have the same problem, did you find a solution???

Thank you in advance.

0 Kudos