public inbox for linux-arm-kernel@lists.infradead.org 
 help / color / mirror / Atom feed
From: santosh.shilimkar@ti•com (Santosh Shilimkar)
To: linux-arm-kernel@lists•infradead.org
Subject: [PATCHv3 5/9] ARM: OMAP2+: AM33XX: Add assembly code for PM operations
Date: Thu, 8 Aug 2013 11:22:34 -0400	[thread overview]
Message-ID: <5203B7BA.9020206@ti.com> (raw)
In-Reply-To: <CA+Bv8XY9kziMftrEAnJkenzg6yS+DUYeVy+NQaPTKygJDWNnWw@mail.gmail.com>

On Thursday 08 August 2013 11:16 AM, Russ Dill wrote:
> On Thu, Aug 8, 2013 at 7:50 AM, Santosh Shilimkar
> <santosh.shilimkar@ti•com> wrote:
>> On Tuesday 06 August 2013 01:49 PM, Dave Gerlach wrote:
>>> From: Vaibhav Bedia <vaibhav.bedia@ti•com>
>>>
>>> In preparation for suspend-resume support for AM33XX, add
>>> the assembly file with the code which is copied to internal
>>> memory (OCMC RAM) during bootup and runs from there.
>>>
>>> As part of the low power entry (DeepSleep0 mode in AM33XX TRM),
>>> the code running from OCMC RAM does the following
>>> 1. Stores the EMIF configuration
>>> 2. Puts external memory in self-refresh
>>> 3. Disables EMIF clock
>>> 4. Executes WFI after writing to MPU_CLKCTRL register.
>>>
>>> If no interrupts have come, WFI execution on MPU gets registered
>>> as an interrupt with the WKUP-M3. WKUP-M3 takes care of disabling
>>> some clocks which MPU should not (L3, L4, OCMC RAM etc) and takes
>>> care of clockdomain and powerdomain transitions as part of the
>>> DeepSleep0 mode entry.
>>>
>>> In case a late interrupt comes in, WFI ends up as a NOP and MPU
>>> continues execution from internal memory. The 'abort path' code
>>> undoes whatever was done as part of the low power entry and indicates
>>> a suspend failure by passing a non-zero value to the cpu_resume routine.
>>>
>>> The 'resume path' code is similar to the 'abort path' with the key
>>> difference of MMU being enabled in the 'abort path' but being
>>> disabled in the 'resume path' due to MPU getting powered off.
>>>
>>> Signed-off-by: Vaibhav Bedia <vaibhav.bedia@ti•com>
>>> Signed-off-by: Dave Gerlach <d-gerlach@ti•com>
>>> Cc: Santosh Shilimkar <santosh.shilimkar@ti•com>
>>> Cc: Kevin Hilman <khilman@linaro•org>
>>> ---
>>>  arch/arm/mach-omap2/sleep33xx.S |  350 +++++++++++++++++++++++++++++++++++++++
>>>  1 file changed, 350 insertions(+)
>>>  create mode 100644 arch/arm/mach-omap2/sleep33xx.S
>>>
>>> diff --git a/arch/arm/mach-omap2/sleep33xx.S b/arch/arm/mach-omap2/sleep33xx.S
>>> new file mode 100644
>>> index 0000000..834c7d4
>>> --- /dev/null
>>> +++ b/arch/arm/mach-omap2/sleep33xx.S
>>> @@ -0,0 +1,350 @@
>>> +/*
>>> + * Low level suspend code for AM33XX SoCs
>>> + *
>>> + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
>>> + * Vaibhav Bedia <vaibhav.bedia@ti•com>
>>> + *
>>> + * This program is free software; you can redistribute it and/or
>>> + * modify it under the terms of the GNU General Public License as
>>> + * published by the Free Software Foundation version 2.
>>> + *
>>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>>> + * kind, whether express or implied; without even the implied warranty
>>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>>> + * GNU General Public License for more details.
>>> + */
>>> +
>>> +#include <linux/linkage.h>
>>> +#include <linux/ti_emif.h>
>>> +#include <asm/memory.h>
>>> +#include <asm/assembler.h>
>>> +
>>> +#include "cm33xx.h"
>>> +#include "pm33xx.h"
>>> +#include "prm33xx.h"
>>> +
>>> +     .text
>>> +     .align 3
>>> +
>>> +/*
>>> + * This routine is executed from internal RAM and expects some
>>> + * parameters to be passed in r0 _strictly_ in following order:
>>> + * 1) emif_addr_virt - ioremapped EMIF address
>>> + * 2) mem_type - 2 -> DDR2, 3-> DDR3
>>> + * 3) dram_sync_word - uncached word in SDRAM
>>> + *
>>> + * The code loads these values taking r0 value as reference to
>>> + * the array in registers starting from r0, i.e emif_addr_virt
>>> + * goes to r1, mem_type goes to r2 and and so on. These are
>>> + * then saved into memory locations before proceeding with the
>>> + * sleep sequence and hence registers r0, r1 etc can still be
>>> + * used in the rest of the sleep code.
>>> + */
>>> +
>>> +ENTRY(am33xx_do_wfi)
>>> +     stmfd   sp!, {r4 - r11, lr}     @ save registers on stack
>>> +
>>> +     ldm     r0, {r1-r3}             @ gather values passed
>>> +
>>> +     /* Save the values passed */
>>> +     str     r1, emif_addr_virt
>>> +     str     r2, mem_type
>>> +     str     r3, dram_sync_word
>>
>> None of this parameter are going to change for every suspend entry and
>> exit so saving them once and accessing them should be fine. Just
>> create a structure with above, save them in init from C code and
>> then access that structure where you need to.
> 
> It isn't possible to do so since the structure would be in SDRAM and
> at resume time, we don't have access to SDRAM. Additionally, I'd like
> to expand the mem_type parameter to a bit field in the future to allow
> this code path to be shared with CPU idle.
>
You can copy the structure in SRAM. So how does memtype need
changes for CPUIDLE ?

I have several comments on this patch so I assume you are
going to address them then.

Regards,
Santosh

  reply	other threads:[~2013-08-08 15:22 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-06 17:49 [PATCHv3 0/9] ARM: OMAP2+: AM33XX: Add suspend-resume support Dave Gerlach
2013-08-06 17:49 ` [PATCHv3 1/9] memory: emif: Move EMIF register defines to include/linux/ Dave Gerlach
2013-08-08  0:48   ` Russ Dill
2013-08-08 13:35   ` Santosh Shilimkar
2013-08-12 19:32     ` Greg Kroah-Hartman
2013-08-12 19:33       ` Santosh Shilimkar
2013-08-06 17:49 ` [PATCHv3 2/9] ARM: OMAP2+: AM33XX: control: Add some control module registers and APIs Dave Gerlach
2013-08-08  0:52   ` Russ Dill
2013-08-08 13:44   ` Santosh Shilimkar
2013-08-08 16:16     ` Dave Gerlach
2013-08-09  5:11       ` Tony Lindgren
2013-08-09 20:55         ` Dave Gerlach
2013-08-12  7:54           ` Tony Lindgren
2013-08-12 19:17           ` Kevin Hilman
2013-08-12 21:40             ` Dave Gerlach
2013-08-13 14:29               ` Kevin Hilman
2013-08-13 15:08                 ` Santosh Shilimkar
2013-08-13 16:19                   ` Kevin Hilman
2013-08-13 18:18                     ` Santosh Shilimkar
2013-08-13 18:30                       ` Russ Dill
2013-08-13 18:40                         ` Santosh Shilimkar
2013-08-13 19:11                         ` Kevin Hilman
2013-08-14 17:27                           ` Suman Anna
2013-08-14 19:16                             ` Russ Dill
2013-08-20 23:39                             ` Paul Walmsley
2013-08-21 17:32                               ` Suman Anna
2013-08-06 17:49 ` [PATCHv3 3/9] ARM: OMAP: DTB: Update IRQ data for WKUP_M3 Dave Gerlach
2013-08-08  0:53   ` Russ Dill
2013-08-08 13:46   ` Santosh Shilimkar
2013-08-06 17:49 ` [PATCHv3 4/9] ARM: OMAP2+: AM33XX: Reserve memory to comply with EMIF spec Dave Gerlach
2013-08-08  2:30   ` Russ Dill
2013-08-08 14:19   ` Santosh Shilimkar
2013-08-08 18:16   ` Kevin Hilman
2013-08-08 19:31     ` Santosh Shilimkar
2013-08-08 20:05       ` Kevin Hilman
2013-08-08 20:11         ` Santosh Shilimkar
2013-08-09 15:11           ` Kevin Hilman
2013-08-09 16:25             ` Dave Gerlach
2013-08-06 17:49 ` [PATCHv3 5/9] ARM: OMAP2+: AM33XX: Add assembly code for PM operations Dave Gerlach
2013-08-08  7:02   ` Russ Dill
2013-08-08 14:50   ` Santosh Shilimkar
2013-08-08 15:16     ` Russ Dill
2013-08-08 15:22       ` Santosh Shilimkar [this message]
2013-08-08 16:03         ` Russ Dill
2013-08-19 12:54   ` Gururaja Hebbar
2013-08-19 17:51     ` Dave Gerlach
2013-08-06 17:49 ` [PATCHv3 6/9] ARM: OMAP2+: timer: Add suspend-resume callbacks for clkevent device Dave Gerlach
2013-08-08  7:03   ` Russ Dill
2013-08-08 14:23   ` Santosh Shilimkar
2013-08-08 16:09     ` Dave Gerlach
2013-08-08 18:25   ` Kevin Hilman
2013-08-08 19:49     ` Dave Gerlach
2013-08-06 17:49 ` [PATCHv3 7/9] ARM: OMAP: omap_device: Add APIs to enable and idle hwmods Dave Gerlach
2013-08-08  7:05   ` Russ Dill
2013-08-08 14:26   ` Santosh Shilimkar
2013-08-06 17:49 ` [PATCHv3 8/9] ARM: OMAP2+: AM33XX: Basic suspend resume support Dave Gerlach
2013-08-07 16:22   ` Nishanth Menon
2013-08-07 18:12     ` Dave Gerlach
2013-08-07 19:16       ` Nishanth Menon
2013-08-08  8:45   ` Russ Dill
2013-08-08 12:26     ` Nishanth Menon
2013-08-08 15:03       ` Santosh Shilimkar
2013-08-08 16:06         ` Dave Gerlach
2013-08-08 16:22           ` Nishanth Menon
2013-08-08 21:14           ` Kevin Hilman
2013-08-08 21:32             ` Nishanth Menon
2013-08-08 23:04               ` Kevin Hilman
2013-08-09 15:11                 ` Nishanth Menon
2013-08-09 16:12                   ` Kevin Hilman
2013-08-09 16:36                     ` Nishanth Menon
2013-08-09 20:34                       ` Kevin Hilman
2013-08-09 21:35                         ` Nishanth Menon
2013-08-09 22:28                         ` Russ Dill
2013-08-12 16:09                           ` Kevin Hilman
2013-08-30 17:29                 ` Vaibhav Bedia
2013-08-20 22:48             ` Paul Walmsley
2013-08-23 14:56               ` Dave Gerlach
2013-08-13  7:43   ` Russ Dill
2013-08-13 14:59     ` Kevin Hilman
2013-08-27 21:45   ` Kevin Hilman
2013-08-29 21:41     ` Dave Gerlach
2013-08-29 22:02       ` Kevin Hilman
2013-08-30 17:39     ` Vaibhav Bedia
2013-08-30 21:18       ` Kevin Hilman
2013-08-06 17:49 ` [PATCHv3 9/9] ARM: OMAP2+: AM33XX: Hookup AM33XX PM code into OMAP builds Dave Gerlach
2013-08-08  8:47   ` Russ Dill
2013-08-08 14:53   ` Santosh Shilimkar
2013-08-08 13:31 ` [PATCHv3 0/9] ARM: OMAP2+: AM33XX: Add suspend-resume support Santosh Shilimkar
2013-08-11 11:53 ` Daniel Mack
2013-08-12 18:59   ` Dave Gerlach
2013-08-13 12:39     ` Daniel Mack
2013-08-13 15:33       ` Dave Gerlach
2013-08-13 15:51         ` Daniel Mack
2013-08-19  9:23 ` Gururaja Hebbar
2013-08-19 17:47   ` Dave Gerlach
2013-08-27 20:23     ` Kevin Hilman
2013-08-29 21:30       ` Dave Gerlach
2013-08-29 21:52         ` Kevin Hilman
2013-08-29 22:20           ` Dave Gerlach
2013-08-29 22:20         ` Kevin Hilman
2013-08-29 22:43           ` Russ Dill
2013-08-29 23:02             ` Kevin Hilman
2013-09-03 17:24               ` Dave Gerlach
2013-09-04 15:01                 ` Kevin Hilman
2013-09-04 15:12                   ` Russ Dill
2013-09-04 15:18                     ` Kevin Hilman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5203B7BA.9020206@ti.com \
    --to=santosh.shilimkar@ti$(echo .)com \
    --cc=linux-arm-kernel@lists$(echo .)infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox