Hi,

On 23/01/2015 at 20:17:19 +0100, Sylvain Rochet wrote :
> Hello Wenyou,
> 
> On Tue, Jan 20, 2015 at 04:17:01PM +0800, Wenyou Yang wrote:
> > 
> > diff --git a/arch/arm/mach-at91/pm_suspend.S 
> > b/arch/arm/mach-at91/pm_suspend.S
> > new file mode 100644
> > index 0000000..420e730
> > --- /dev/null
> 
> 
> > +   /* Turn off the main oscillator */
> > +   ldr     tmp1, [pmc, #AT91_CKGR_MOR]
> > +   bic     tmp1, tmp1, #AT91_PMC_MOSCEN
> 
> at91sam9x5 and probably others need a key here:
>       orr     tmp1, tmp1, #AT91_PMC_KEY
> 
> > +   str     tmp1, [pmc, #AT91_CKGR_MOR]
> 
> 
> 
> > +   /* Wait for interrupt */
> > +   mcr     p15, 0, tmp1, c7, c0, 4
> 
> The linux-3.10-at91 branch uses a different approach which seem 
> necessary for newer board, you probably forget to merge the following:
> 
> /*
>  * Put the processor to enter into Standby mode, wait for interrupt to wakeup
>  */
>       .macro _do_wfi
> 
> #if defined(CONFIG_CPU_V7)
>       dsb
> 
>       /* Disable the processor clock */
>       mov     tmp1, #AT91_PMC_PCK
>       str     tmp1, [pmc, #AT91_PMC_SCDR]
> 
>       wfi             @ Wait For Interrupt
> #else
>       mcr     p15, 0, tmp1, c7, c0, 4
> #endif
> 
>       .endm
> 
>       .text
> 
> ENTRY(at91_slow_clock)
> (...)
>       /* Wait for interrupt */
>       _do_wfi
> (...)
> 
> 
> 
> 
> > +   /* Turn on the main oscillator */
> > +   ldr     tmp1, [pmc, #AT91_CKGR_MOR]
> > +   orr     tmp1, tmp1, #AT91_PMC_MOSCEN
> 
> at91sam9x5 and probably others need a key here:
>         orr     tmp1, tmp1, #AT91_PMC_KEY
> 
> > +   str     tmp1, [pmc, #AT91_CKGR_MOR]
> 
> 
> 
> What about the following parts which are also in linux-3.10-at91 branch 
> but not in this rework, are they necessary ?
> 
> sdr_sr_done:
>       /* Disable MPDDRC Clock*/
>       cmp     ddrcid, #0
>       beq     2f
>       bic     tmp2, ddrcid, #0xe0 /* fetch lowest 5 bits */
>       mov     tmp1, #0x01
>       mov     tmp1, tmp1, lsl tmp2
> 
>       tst     ddrcid, #0x20   /* > 32 ? */
>       beq     1f
>       str     tmp1, [pmc, #AT91_PMC_PCDR1]
>       b       2f
> 1:
>       str     tmp1, [pmc, #AT91_PMC_PCDR]
> 2:
> 
>       /* Disable DDR Clock */
>       mov     tmp1, #AT91_PMC_SYS_DDR
>       str     tmp1, [pmc, #AT91_PMC_SCDR]
> 
> 
> 
> 
>       /* Enable MPDDRC Clock*/
>       cmp     ddrcid, #0
>       beq     4f
>       bic     tmp2, ddrcid, #0xe0 /* fetch lowest 5 bits */
>       mov     tmp1, #0x01
>       mov     tmp1, tmp1, lsl tmp2
> 
>       tst     ddrcid, #0x20   /* > 32 ? */
>       beq     3f
>       str     tmp1, [pmc, #AT91_PMC_PCER1]
>       b       4f
> 3:
>       str     tmp1, [pmc, #AT91_PMC_PCER]
> 4:
> 
>       /* Enable DDR clock */
>       mov     tmp1, #AT91_PMC_SYS_DDR
>       str     tmp1, [pmc, #AT91_PMC_SCER]
> 
> 

This is a rework, what is part of linux-3.10-at91 and not yet present in
mainline should be part of a following series. I would prefer not mixing
reworks and "new" functionalities (they have been present in the atmel
tree for a while but never mainlined). I would say that PM on 9x5, n12
and sama5 in mainline is clearly not well tested and is lagging behind
the atmel tree.

-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to