From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: mm: cache-l2x0: Add support for re-enabling l2x0
Date: Mon, 13 Jun 2011 11:19:42 +0100 [thread overview]
Message-ID: <20110613101942.GA7924@e102568-lin.cambridge.arm.com> (raw)
In-Reply-To: <1307926019-28958-1-git-send-email-ccross@android.com>
On Mon, Jun 13, 2011 at 01:46:58AM +0100, Colin Cross wrote:
> Remove __init annotation from l2x0_init so it can be used to
> reinitialize the l2x0 after it has been reset during suspend.
>
> Only print the init messages the first time l2x0_init is called.
>
> Add l2x0_enable to re-enable the l2x0 after l2x0_disable if
> the l2x0 was not reset.
>
> l2x0_disable cannot use writel, as writel calls wmb(), and wmb()
> may call outer_cache_sync, which takes the same spinlock as
> l2x0_disable.
>
> Signed-off-by: Colin Cross <ccross@android.com>
> ---
> arch/arm/include/asm/hardware/cache-l2x0.h | 3 ++-
> arch/arm/mm/cache-l2x0.c | 18 ++++++++++++++----
> 2 files changed, 16 insertions(+), 5 deletions(-)
>
[...]
> +/* enables l2x0 after l2x0_disable, does not invalidate */
> +void l2x0_enable(void)
> +{
> + unsigned long flags;
> +
> + spin_lock_irqsave(&l2x0_lock, flags);
> + writel_relaxed(1, l2x0_base + L2X0_CTRL);
> + spin_unlock_irqrestore(&l2x0_lock, flags);
> +}
> +
> static void l2x0_disable(void)
> {
> unsigned long flags;
>
> spin_lock_irqsave(&l2x0_lock, flags);
> - writel(0, l2x0_base + L2X0_CTRL);
> + writel_relaxed(0, l2x0_base + L2X0_CTRL);
> spin_unlock_irqrestore(&l2x0_lock, flags);
> }
This function is still dodgy to use, since we are disabling L2
possibly with current function stack lines allocated, which might wreak havoc.
>
> -void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)
> +void l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)
> {
> __u32 aux;
> __u32 cache_id;
> @@ -340,7 +350,7 @@ void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)
> outer_cache.disable = l2x0_disable;
> outer_cache.set_debug = l2x0_set_debug;
>
> - printk(KERN_INFO "%s cache controller enabled\n", type);
> - printk(KERN_INFO "l2x0: %d ways, CACHE_ID 0x%08x, AUX_CTRL 0x%08x, Cache size: %d B\n",
> + pr_info_once("%s cache controller enabled\n", type);
> + pr_info_once("l2x0: %d ways, CACHE_ID 0x%08x, AUX_CTRL 0x%08x, Cache size: %d B\n",
> ways, cache_id, aux, l2x0_size);
> }
We might still need hooks to save/restore PL310 context since registers
like tag and data RAM control are gone on reset. Furthermore, on L2 RAM
retention we want to reinit L2 without having to invalidate L2 RAM(s),
which means we cannot use l2x0_init as it is. I added a couple of hooks to
outer_cache in order to carry out this task, patch coming.
Lorenzo
next prev parent reply other threads:[~2011-06-13 10:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-13 0:46 [PATCH] ARM: mm: cache-l2x0: Add support for re-enabling l2x0 Colin Cross
2011-06-13 10:19 ` Lorenzo Pieralisi [this message]
2011-06-13 18:20 ` Colin Cross
2011-06-14 17:30 ` Lorenzo Pieralisi
2011-06-15 6:35 ` Santosh Shilimkar
2011-06-15 9:02 ` Will Deacon
2011-07-28 7:43 ` Barry Song
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=20110613101942.GA7924@e102568-lin.cambridge.arm.com \
--to=lorenzo.pieralisi@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).