All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Gerlach <d-gerlach@ti.com>
To: Tony Lindgren <tony@atomide.com>
Cc: linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
	Paul Walmsley <paul@pwsan.com>, Kevin Hilman <khilman@linaro.org>,
	Tero Kristo <t-kristo@ti.com>, Nishanth Menon <nm@ti.com>,
	Russ Dill <russ.dill@ti.com>,
	Santosh Shilimkar <santosh.shilimkar@ti.com>,
	Daniel Mack <daniel@zonque.org>, Suman Anna <s-anna@ti.com>,
	Benoit Cousson <bcousson@baylibre.com>
Subject: Re: [PATCH v4 02/11] memory: emif: Move EMIF register defines to include/linux/
Date: Tue, 15 Jul 2014 21:44:20 -0500	[thread overview]
Message-ID: <53C5E704.5030605@ti.com> (raw)
In-Reply-To: <20140715063830.GI20068@atomide.com>

Tony,
On 07/15/2014 01:38 AM, Tony Lindgren wrote:
> * Dave Gerlach <d-gerlach@ti.com> [140714 10:44]:
>> On 07/14/2014 06:12 AM, Tony Lindgren wrote:
>>> * Dave Gerlach <d-gerlach@ti.com> [140710 19:59]:
>>>> OMAP4 and AM33XX share the same EMIF controller IP. Although there
>>>> are significant differences in the IP integration due to which
>>>> AM33XX can't reuse the EMIF driver DVFS similar to OMAP4,
>>>> it can definitely benefit by reusing the EMIF related macros
>>>> defined in drivers/memory/emif.h.
>>>>
>>>> In the current OMAP PM framework the PM code resides under
>>>> arch/arm/mach-omap2/. To enable reuse of the register defines move
>>>> the register defines in the emif header file to include/linux so that
>>>> both the EMIF driver and the AM33XX PM code can benefit.
>>>>
>>>> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
>>>> Reviewed-by: Russ Dill <russ.dill@ti.com>
>>>> Acked-by: Santosh Shililmar <santosh.shilimkar@ti.com>
>>>> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>>>> ---
>>>> v3->v4:
>>>> patch unchanged from original:
>>>> 	http://www.spinics.net/lists/linux-omap/msg95314.html
>>>>
>>>>   drivers/memory/emif.h   | 543 +---------------------------------------------
>>>>   include/linux/ti_emif.h | 558 ++++++++++++++++++++++++++++++++++++++++++++++++
>>>
>>> So far we've seen that exposing hardware registers like this
>>> will lead into various drivers misusing them. I think a better
>>> solution is to implement few targeted functions that allow
>>> sharing code between the platform idle code and memory driver.
>>>
>>> Maybe you can have the shared functions in in something like
>>> drivers/memory/ti-emif.c that's always built in? The idle
>>> code won't need any of that early on.
>>
>> Well the reason it was done this way was to utilize all of the addresses of
>> EMIF register in the ASM sleep code to do relative addressing from the EMIF
>> base address. The ASM sleep code (patch 9) needs to save and restore emif
>> context and set and unset self refresh in emif. The issues will come from
>> the ASM being copied to and running from SRAM without the ability to access
>> code in DDR (because we are shutting the EMIF off), so we would need to copy
>> these functions as well and have to worry about any issues we introduce by
>> relocating c code. Is it worth the added maintenance burden?
>
> Ah right it needs to run in SRAM. There were some relocatable
> c code patches posted a while back, so it might be worth
> revisiting that.
>
> I think it can also be done with assembly with something like
> this:
>
> 1. Make am335x idle code depends on TI_EMIF && WKUP_M3_RPROC
>
> 2. Add the memory save and restore assembly functions into
>     drivers/memory/ti-emif-sram.S
>
> 3. Allocate the SRAM preferrably with drivers/misc/sram.c
>     instead of the legacy mach-omap2/sram.c
>

This I can do, I will just need to make a change somewhere to make generic sram 
driver provide sram allocations marked for exec.

> 4. Map the idle assembly code and EMIF save and restore
>     functions into SRAM
>
> 5. Call the EMIF save and restore functions from the idle
>     assembly code at the SRAM locations and pass the save and
>     restore area in a register
>
> So basically we need to figure out a generic way to do driver
> hooks in the PM idle code even very late and early in the
> assembly code so we can keep most of the code in drivers.
> Eventually also the idle assembly code should be in the drivers
> too..

I did not consider this earlier but the cpuidle code will use the same path in 
the assembly code. The cpuidle configures the suspend path to make the emif 
actions optional (save and restore with shut off, and self refresh), so a 
generic solution probably isn't possible here as we (will) need a certain level 
of granularity of control over the emif actions, and that will be difficult to 
maintain while keeping the pm functionality out of the EMIF code.

Regards,
Dave

>
> Regards,
>
> Tony
>


WARNING: multiple messages have this Message-ID (diff)
From: d-gerlach@ti.com (Dave Gerlach)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 02/11] memory: emif: Move EMIF register defines to include/linux/
Date: Tue, 15 Jul 2014 21:44:20 -0500	[thread overview]
Message-ID: <53C5E704.5030605@ti.com> (raw)
In-Reply-To: <20140715063830.GI20068@atomide.com>

Tony,
On 07/15/2014 01:38 AM, Tony Lindgren wrote:
> * Dave Gerlach <d-gerlach@ti.com> [140714 10:44]:
>> On 07/14/2014 06:12 AM, Tony Lindgren wrote:
>>> * Dave Gerlach <d-gerlach@ti.com> [140710 19:59]:
>>>> OMAP4 and AM33XX share the same EMIF controller IP. Although there
>>>> are significant differences in the IP integration due to which
>>>> AM33XX can't reuse the EMIF driver DVFS similar to OMAP4,
>>>> it can definitely benefit by reusing the EMIF related macros
>>>> defined in drivers/memory/emif.h.
>>>>
>>>> In the current OMAP PM framework the PM code resides under
>>>> arch/arm/mach-omap2/. To enable reuse of the register defines move
>>>> the register defines in the emif header file to include/linux so that
>>>> both the EMIF driver and the AM33XX PM code can benefit.
>>>>
>>>> Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
>>>> Reviewed-by: Russ Dill <russ.dill@ti.com>
>>>> Acked-by: Santosh Shililmar <santosh.shilimkar@ti.com>
>>>> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>>>> ---
>>>> v3->v4:
>>>> patch unchanged from original:
>>>> 	http://www.spinics.net/lists/linux-omap/msg95314.html
>>>>
>>>>   drivers/memory/emif.h   | 543 +---------------------------------------------
>>>>   include/linux/ti_emif.h | 558 ++++++++++++++++++++++++++++++++++++++++++++++++
>>>
>>> So far we've seen that exposing hardware registers like this
>>> will lead into various drivers misusing them. I think a better
>>> solution is to implement few targeted functions that allow
>>> sharing code between the platform idle code and memory driver.
>>>
>>> Maybe you can have the shared functions in in something like
>>> drivers/memory/ti-emif.c that's always built in? The idle
>>> code won't need any of that early on.
>>
>> Well the reason it was done this way was to utilize all of the addresses of
>> EMIF register in the ASM sleep code to do relative addressing from the EMIF
>> base address. The ASM sleep code (patch 9) needs to save and restore emif
>> context and set and unset self refresh in emif. The issues will come from
>> the ASM being copied to and running from SRAM without the ability to access
>> code in DDR (because we are shutting the EMIF off), so we would need to copy
>> these functions as well and have to worry about any issues we introduce by
>> relocating c code. Is it worth the added maintenance burden?
>
> Ah right it needs to run in SRAM. There were some relocatable
> c code patches posted a while back, so it might be worth
> revisiting that.
>
> I think it can also be done with assembly with something like
> this:
>
> 1. Make am335x idle code depends on TI_EMIF && WKUP_M3_RPROC
>
> 2. Add the memory save and restore assembly functions into
>     drivers/memory/ti-emif-sram.S
>
> 3. Allocate the SRAM preferrably with drivers/misc/sram.c
>     instead of the legacy mach-omap2/sram.c
>

This I can do, I will just need to make a change somewhere to make generic sram 
driver provide sram allocations marked for exec.

> 4. Map the idle assembly code and EMIF save and restore
>     functions into SRAM
>
> 5. Call the EMIF save and restore functions from the idle
>     assembly code at the SRAM locations and pass the save and
>     restore area in a register
>
> So basically we need to figure out a generic way to do driver
> hooks in the PM idle code even very late and early in the
> assembly code so we can keep most of the code in drivers.
> Eventually also the idle assembly code should be in the drivers
> too..

I did not consider this earlier but the cpuidle code will use the same path in 
the assembly code. The cpuidle configures the suspend path to make the emif 
actions optional (save and restore with shut off, and self refresh), so a 
generic solution probably isn't possible here as we (will) need a certain level 
of granularity of control over the emif actions, and that will be difficult to 
maintain while keeping the pm functionality out of the EMIF code.

Regards,
Dave

>
> Regards,
>
> Tony
>

  reply	other threads:[~2014-07-16  2:44 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-11  2:55 [PATCH v4 00/11] ARM: OMAP2+: AM33XX: Add suspend-resume support Dave Gerlach
2014-07-11  2:55 ` Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 01/11] ARM: omap: edma: add suspend suspend/resume hooks Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-14 11:05   ` Tony Lindgren
2014-07-14 11:05     ` Tony Lindgren
2014-07-14 17:47     ` Dave Gerlach
2014-07-14 17:47       ` Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 02/11] memory: emif: Move EMIF register defines to include/linux/ Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-14 11:12   ` Tony Lindgren
2014-07-14 11:12     ` Tony Lindgren
2014-07-14 17:42     ` Dave Gerlach
2014-07-14 17:42       ` Dave Gerlach
2014-07-15  6:38       ` Tony Lindgren
2014-07-15  6:38         ` Tony Lindgren
2014-07-16  2:44         ` Dave Gerlach [this message]
2014-07-16  2:44           ` Dave Gerlach
2014-07-16  8:33           ` Tony Lindgren
2014-07-16  8:33             ` Tony Lindgren
2014-07-11  2:55 ` [PATCH v4 03/11] ARM: OMAP2+: timer: Add suspend-resume callbacks for clkevent device Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-14 11:15   ` Tony Lindgren
2014-07-14 11:15     ` Tony Lindgren
2014-07-14 14:37     ` Santosh Shilimkar
2014-07-14 14:37       ` Santosh Shilimkar
2014-07-14 17:42       ` Dave Gerlach
2014-07-14 17:42         ` Dave Gerlach
2014-07-15  6:48         ` Tony Lindgren
2014-07-15  6:48           ` Tony Lindgren
2014-07-15 19:10           ` Dave Gerlach
2014-07-15 19:10             ` Dave Gerlach
2014-07-16 20:17           ` Dave Gerlach
2014-07-16 20:17             ` Dave Gerlach
2014-07-17  8:16             ` Tony Lindgren
2014-07-17  8:16               ` Tony Lindgren
2014-07-11  2:55 ` [PATCH v4 04/11] ARM: OMAP2+: Use pdata-quirks for wkup_m3 deassert_hardreset Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-14 18:48   ` Suman Anna
2014-07-14 18:48     ` Suman Anna
2014-07-11  2:55 ` [PATCH v4 05/11] Documentation: dt: add ti,am3353_wkup_m3 bindings Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-14 14:41   ` Santosh Shilimkar
2014-07-14 14:41     ` [PATCH v4 05/11] Documentation: dt: add ti, am3353_wkup_m3 bindings Santosh Shilimkar
2014-07-14 16:33     ` [PATCH v4 05/11] Documentation: dt: add ti,am3353_wkup_m3 bindings Suman Anna
2014-07-14 16:33       ` [PATCH v4 05/11] Documentation: dt: add ti, am3353_wkup_m3 bindings Suman Anna
2014-07-14 17:45       ` [PATCH v4 05/11] Documentation: dt: add ti,am3353_wkup_m3 bindings Dave Gerlach
2014-07-14 17:45         ` [PATCH v4 05/11] Documentation: dt: add ti, am3353_wkup_m3 bindings Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 06/11] remoteproc: wkup_m3: Add wkup_m3 remote proc driver Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-14 14:54   ` Santosh Shilimkar
2014-07-14 14:54     ` Santosh Shilimkar
2014-07-14 17:43     ` Dave Gerlach
2014-07-14 17:43       ` Dave Gerlach
2014-07-14 19:07     ` Suman Anna
2014-07-14 19:07       ` Suman Anna
2014-07-14 21:09       ` Dave Gerlach
2014-07-14 21:09         ` Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 07/11] ARM: dts: am33xx: Update wkup_m3 node Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 08/11] ARM: OMAP2+: AM33XX: Reserve memory to comply with EMIF spec Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 09/11] ARM: OMAP2+: AM33XX: Add assembly code for PM operations Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 10/11] ARM: OMAP2+: AM33XX: Basic suspend resume support Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-09-08 22:30   ` Kevin Hilman
2014-09-08 22:30     ` Kevin Hilman
2014-09-09 10:31     ` Ohad Ben-Cohen
2014-09-09 10:31       ` Ohad Ben-Cohen
2014-09-09 19:59       ` Suman Anna
2014-09-09 19:59         ` Suman Anna
2014-09-09 20:28         ` Dave Gerlach
2014-09-09 20:28           ` Dave Gerlach
2014-09-09 21:10           ` Kevin Hilman
2014-09-09 21:10             ` Kevin Hilman
2014-09-10 21:19             ` Dave Gerlach
2014-09-10 21:19               ` Dave Gerlach
2014-09-16 15:08             ` Ohad Ben-Cohen
2014-09-16 15:08               ` Ohad Ben-Cohen
2014-09-16 16:14               ` Suman Anna
2014-09-16 16:14                 ` Suman Anna
2014-09-17 13:37                 ` Ohad Ben-Cohen
2014-09-17 13:37                   ` Ohad Ben-Cohen
2014-09-25 19:42                   ` Dave Gerlach
2014-09-25 19:42                     ` Dave Gerlach
2014-07-11  2:55 ` [PATCH v4 11/11] ARM: OMAP2+: AM33XX: Hookup AM33XX PM code into OMAP builds Dave Gerlach
2014-07-11  2:55   ` Dave Gerlach
2014-07-14 11:21   ` Tony Lindgren
2014-07-14 11:21     ` Tony Lindgren
2014-07-14 17:46     ` Dave Gerlach
2014-07-14 17:46       ` Dave Gerlach
2014-07-11  7:59 ` [PATCH v4 00/11] ARM: OMAP2+: AM33XX: Add suspend-resume support Daniel Mack
2014-07-11  7:59   ` Daniel Mack
2014-07-11 17:24   ` Dave Gerlach
2014-07-11 17:24     ` Dave Gerlach
2014-07-11 15:30 ` Andre Heider
2014-07-11 15:30   ` Andre Heider
2014-07-11 17:31   ` Dave Gerlach
2014-07-11 17:31     ` Dave Gerlach
2014-07-14  9:37     ` Andre Heider
2014-07-14  9:37       ` Andre Heider
2014-07-14 11:24 ` Tony Lindgren
2014-07-14 11:24   ` Tony Lindgren
2014-07-14 17:47   ` Dave Gerlach
2014-07-14 17:47     ` Dave Gerlach

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=53C5E704.5030605@ti.com \
    --to=d-gerlach@ti.com \
    --cc=bcousson@baylibre.com \
    --cc=daniel@zonque.org \
    --cc=khilman@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=nm@ti.com \
    --cc=paul@pwsan.com \
    --cc=russ.dill@ti.com \
    --cc=s-anna@ti.com \
    --cc=santosh.shilimkar@ti.com \
    --cc=t-kristo@ti.com \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.