From: gioh.kim@lge.com (Gioh Kim)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH] ARM: cache-l2x0: add setup entry for l2 in non-secure mode
Date: Thu, 15 May 2014 14:39:57 +0900 [thread overview]
Message-ID: <5374532D.7030602@lge.com> (raw)
Hi,
My board is using Trustzone and running kernel is non-secure mode.
But setup function of PL310 driver is only for secure mode kernel.
What about adding an entry for non-secure mode setup function?
I'm sorry for my poor code but I just wanna say what I need .
------------------------------ 8< -------------------------------
>From ee4b03fb2c12038c6bbb9f752558abae8d500c07 Mon Sep 17 00:00:00 2001
From: Gioh Kim <gioh.kim@lge.com>
Date: Thu, 15 May 2014 14:06:36 +0900
Subject: [PATCH] ARM: cache-l2x0: add setup entry for l2 in non-secure mode
For some platforms using Trustzone and running kernel in non-secure mode,
another l2 setup function is necessary.
Signed-off-by: Gioh Kim <gioh.kim@lge.c>
---
arch/arm/include/asm/hardware/cache-l2x0.h | 9 +++++++++
arch/arm/mm/cache-l2x0.c | 26 +++++++++++++++++++++++++-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/arch/arm/include/asm/hardware/cache-l2x0.h b/arch/arm/include/asm/hardware/cache-l2x0.h
index 6dec6da..de31114 100644
--- a/arch/arm/include/asm/hardware/cache-l2x0.h
+++ b/arch/arm/include/asm/hardware/cache-l2x0.h
@@ -21,6 +21,7 @@
#define __ASM_ARM_HARDWARE_L2X0_H
#include <linux/errno.h>
+#include <linux/of.h>
#define L2X0_CACHE_ID 0x000
#define L2X0_CACHE_TYPE 0x004
@@ -110,11 +111,19 @@
extern void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask);
#if defined(CONFIG_CACHE_L2X0) && defined(CONFIG_OF)
extern int l2x0_of_init(u32 aux_val, u32 aux_mask);
+extern int l2x0_of_set_setup_nonsecure(const char *compatible, size_t len,
+ void (*fp)(const struct device_node *, u32 *, u32 *));
#else
static inline int l2x0_of_init(u32 aux_val, u32 aux_mask)
{
return -ENODEV;
}
+static inline int l2x0_of_set_setup_nonsecure(const char *compatible,
+ size_t len,
+ void (*fp)(const struct device_node *, u32 *, u32 *))
+{
+ return -ENODEV;
+}
#endif
struct l2x0_regs {
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
index 728d644..582ea37 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -45,6 +45,7 @@ struct l2x0_regs l2x0_saved_regs;
struct l2x0_of_data {
void (*setup)(const struct device_node *, u32 *, u32 *);
void (*save)(void);
+ void (*setup_nonsecure)(const struct device_node *, u32 *, u32 *);
struct outer_cache_fns outer_cache;
};
@@ -968,6 +969,23 @@ static const struct of_device_id l2x0_ids[] __initconst = {
{}
};
+int l2x0_of_set_setup_nonsecure(const char *compatible, size_t len,
+ void (*fp)(const struct device_node *, u32 *, u32 *))
+{
+ const struct of_device_id *id;
+
+ for (id = &l2x0_ids[0]; id->compatible != NULL; id++) {
+ if (strncmp(id->compatible, compatible, len) == 0) {
+ struct l2x0_of_data *data = id->data;
+
+ data->setup_nonsecure = fp;
+ return 0;
+ }
+ }
+
+ return -EINVAL;
+}
+
int __init l2x0_of_init(u32 aux_val, u32 aux_mask)
{
struct device_node *np;
@@ -989,8 +1007,14 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask)
/* L2 configuration can only be changed if the cache is disabled */
if (!(readl_relaxed(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) {
- if (data->setup)
+
+ if (data->setup_nonsecure)
+ data->setup_nonsecure(np, &aux_val, &aux_mask);
+ else if (data->setup)
data->setup(np, &aux_val, &aux_mask);
+ else
+ /* no function to enable cache */
+ return -ENODEV;
/* For aurora cache in no outer mode select the
* correct mode using the coprocessor*/
--
1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Gioh Kim <gioh.kim@lge.com>
To: Russell King <linux@arm.linux.org.uk>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
linux-kernel@vger.kernel.org, Barry Song <Baohua.Song@csr.com>,
Santosh Shilimkar <santosh.shilimkar@ti.com>
Cc: 이건호 <gunho.lee@lge.com>, gurugio@gmail.com
Subject: [RFC PATCH] ARM: cache-l2x0: add setup entry for l2 in non-secure mode
Date: Thu, 15 May 2014 14:39:57 +0900 [thread overview]
Message-ID: <5374532D.7030602@lge.com> (raw)
Hi,
My board is using Trustzone and running kernel is non-secure mode.
But setup function of PL310 driver is only for secure mode kernel.
What about adding an entry for non-secure mode setup function?
I'm sorry for my poor code but I just wanna say what I need .
------------------------------ 8< -------------------------------
>From ee4b03fb2c12038c6bbb9f752558abae8d500c07 Mon Sep 17 00:00:00 2001
From: Gioh Kim <gioh.kim@lge.com>
Date: Thu, 15 May 2014 14:06:36 +0900
Subject: [PATCH] ARM: cache-l2x0: add setup entry for l2 in non-secure mode
For some platforms using Trustzone and running kernel in non-secure mode,
another l2 setup function is necessary.
Signed-off-by: Gioh Kim <gioh.kim@lge.c>
---
arch/arm/include/asm/hardware/cache-l2x0.h | 9 +++++++++
arch/arm/mm/cache-l2x0.c | 26 +++++++++++++++++++++++++-
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/arch/arm/include/asm/hardware/cache-l2x0.h b/arch/arm/include/asm/hardware/cache-l2x0.h
index 6dec6da..de31114 100644
--- a/arch/arm/include/asm/hardware/cache-l2x0.h
+++ b/arch/arm/include/asm/hardware/cache-l2x0.h
@@ -21,6 +21,7 @@
#define __ASM_ARM_HARDWARE_L2X0_H
#include <linux/errno.h>
+#include <linux/of.h>
#define L2X0_CACHE_ID 0x000
#define L2X0_CACHE_TYPE 0x004
@@ -110,11 +111,19 @@
extern void __init l2x0_init(void __iomem *base, u32 aux_val, u32 aux_mask);
#if defined(CONFIG_CACHE_L2X0) && defined(CONFIG_OF)
extern int l2x0_of_init(u32 aux_val, u32 aux_mask);
+extern int l2x0_of_set_setup_nonsecure(const char *compatible, size_t len,
+ void (*fp)(const struct device_node *, u32 *, u32 *));
#else
static inline int l2x0_of_init(u32 aux_val, u32 aux_mask)
{
return -ENODEV;
}
+static inline int l2x0_of_set_setup_nonsecure(const char *compatible,
+ size_t len,
+ void (*fp)(const struct device_node *, u32 *, u32 *))
+{
+ return -ENODEV;
+}
#endif
struct l2x0_regs {
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
index 728d644..582ea37 100644
--- a/arch/arm/mm/cache-l2x0.c
+++ b/arch/arm/mm/cache-l2x0.c
@@ -45,6 +45,7 @@ struct l2x0_regs l2x0_saved_regs;
struct l2x0_of_data {
void (*setup)(const struct device_node *, u32 *, u32 *);
void (*save)(void);
+ void (*setup_nonsecure)(const struct device_node *, u32 *, u32 *);
struct outer_cache_fns outer_cache;
};
@@ -968,6 +969,23 @@ static const struct of_device_id l2x0_ids[] __initconst = {
{}
};
+int l2x0_of_set_setup_nonsecure(const char *compatible, size_t len,
+ void (*fp)(const struct device_node *, u32 *, u32 *))
+{
+ const struct of_device_id *id;
+
+ for (id = &l2x0_ids[0]; id->compatible != NULL; id++) {
+ if (strncmp(id->compatible, compatible, len) == 0) {
+ struct l2x0_of_data *data = id->data;
+
+ data->setup_nonsecure = fp;
+ return 0;
+ }
+ }
+
+ return -EINVAL;
+}
+
int __init l2x0_of_init(u32 aux_val, u32 aux_mask)
{
struct device_node *np;
@@ -989,8 +1007,14 @@ int __init l2x0_of_init(u32 aux_val, u32 aux_mask)
/* L2 configuration can only be changed if the cache is disabled */
if (!(readl_relaxed(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)) {
- if (data->setup)
+
+ if (data->setup_nonsecure)
+ data->setup_nonsecure(np, &aux_val, &aux_mask);
+ else if (data->setup)
data->setup(np, &aux_val, &aux_mask);
+ else
+ /* no function to enable cache */
+ return -ENODEV;
/* For aurora cache in no outer mode select the
* correct mode using the coprocessor*/
--
1.7.9.5
next reply other threads:[~2014-05-15 5:39 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-15 5:39 Gioh Kim [this message]
2014-05-15 5:39 ` [RFC PATCH] ARM: cache-l2x0: add setup entry for l2 in non-secure mode Gioh Kim
2014-05-18 13:13 ` Barry Song
2014-05-18 13:13 ` Barry Song
2014-05-19 0:29 ` Gioh Kim
2014-05-19 0:29 ` Gioh Kim
2014-05-19 9:11 ` Barry Song
2014-05-19 9:11 ` Barry Song
2014-05-19 9:21 ` Gioh Kim
2014-05-19 9:21 ` Gioh Kim
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=5374532D.7030602@lge.com \
--to=gioh.kim@lge.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 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.