All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] ARM: at91: add support for L2 cache write_sec() callback
@ 2022-06-06 14:56 ` Clément Léger
  0 siblings, 0 replies; 16+ messages in thread
From: Clément Léger @ 2022-06-06 14:56 UTC (permalink / raw)
  To: Russell King, Nicolas Ferre, Alexandre Belloni, Claudiu Beznea
  Cc: Clément Léger, linux-arm-kernel, linux-kernel,
	Thomas Petazzoni

When running under OP-TEE the L2 cache is configured by OP-TEE and
can't be modified for the moment. Add necessary function to get
the current execution world of Linux and add early_setup() callback
that will set the .write_sec() callback for the outer cache.


Clément Léger (2):
  ARM: at91: add sam_linux_is_in_normal_world() function
  ARM: at91: setup outer cache .write_sec() callback if needed

 arch/arm/mach-at91/sam_secure.c |  6 ++++++
 arch/arm/mach-at91/sam_secure.h |  1 +
 arch/arm/mach-at91/sama5.c      | 17 +++++++++++++++++
 3 files changed, 24 insertions(+)

-- 
2.36.1


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 0/2] ARM: at91: add support for L2 cache write_sec() callback
@ 2022-06-06 14:56 ` Clément Léger
  0 siblings, 0 replies; 16+ messages in thread
From: Clément Léger @ 2022-06-06 14:56 UTC (permalink / raw)
  To: Russell King, Nicolas Ferre, Alexandre Belloni, Claudiu Beznea
  Cc: Clément Léger, linux-arm-kernel, linux-kernel,
	Thomas Petazzoni

When running under OP-TEE the L2 cache is configured by OP-TEE and
can't be modified for the moment. Add necessary function to get
the current execution world of Linux and add early_setup() callback
that will set the .write_sec() callback for the outer cache.


Clément Léger (2):
  ARM: at91: add sam_linux_is_in_normal_world() function
  ARM: at91: setup outer cache .write_sec() callback if needed

 arch/arm/mach-at91/sam_secure.c |  6 ++++++
 arch/arm/mach-at91/sam_secure.h |  1 +
 arch/arm/mach-at91/sama5.c      | 17 +++++++++++++++++
 3 files changed, 24 insertions(+)

-- 
2.36.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
  2022-06-06 14:56 ` Clément Léger
@ 2022-06-06 14:57   ` Clément Léger
  -1 siblings, 0 replies; 16+ messages in thread
From: Clément Léger @ 2022-06-06 14:57 UTC (permalink / raw)
  To: Russell King, Nicolas Ferre, Alexandre Belloni, Claudiu Beznea
  Cc: Clément Léger, linux-arm-kernel, linux-kernel,
	Thomas Petazzoni

Add sam_linux_is_in_normal_world() which allows to know if Linux is
running in the normal world or not. This function is used by code
which needs to differentiate the world in which Linux is running.

Signed-off-by: Clément Léger <clement.leger@bootlin.com>
---
 arch/arm/mach-at91/sam_secure.c | 6 ++++++
 arch/arm/mach-at91/sam_secure.h | 1 +
 2 files changed, 7 insertions(+)

diff --git a/arch/arm/mach-at91/sam_secure.c b/arch/arm/mach-at91/sam_secure.c
index 2a01f7a7d13f..1ec8c8b9d119 100644
--- a/arch/arm/mach-at91/sam_secure.c
+++ b/arch/arm/mach-at91/sam_secure.c
@@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1)
 	return res;
 }
 
+bool sam_linux_is_in_normal_world(void)
+{
+	/* If optee has been detected, then we are running in normal world */
+	return optee_available;
+}
+
 void __init sam_secure_init(void)
 {
 	struct device_node *np;
diff --git a/arch/arm/mach-at91/sam_secure.h b/arch/arm/mach-at91/sam_secure.h
index 1e7d8b20ba1e..6d8c01f9c5f0 100644
--- a/arch/arm/mach-at91/sam_secure.h
+++ b/arch/arm/mach-at91/sam_secure.h
@@ -14,5 +14,6 @@
 
 void __init sam_secure_init(void);
 struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1);
+bool sam_linux_is_in_normal_world(void);
 
 #endif /* SAM_SECURE_H */
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
@ 2022-06-06 14:57   ` Clément Léger
  0 siblings, 0 replies; 16+ messages in thread
From: Clément Léger @ 2022-06-06 14:57 UTC (permalink / raw)
  To: Russell King, Nicolas Ferre, Alexandre Belloni, Claudiu Beznea
  Cc: Clément Léger, linux-arm-kernel, linux-kernel,
	Thomas Petazzoni

Add sam_linux_is_in_normal_world() which allows to know if Linux is
running in the normal world or not. This function is used by code
which needs to differentiate the world in which Linux is running.

Signed-off-by: Clément Léger <clement.leger@bootlin.com>
---
 arch/arm/mach-at91/sam_secure.c | 6 ++++++
 arch/arm/mach-at91/sam_secure.h | 1 +
 2 files changed, 7 insertions(+)

diff --git a/arch/arm/mach-at91/sam_secure.c b/arch/arm/mach-at91/sam_secure.c
index 2a01f7a7d13f..1ec8c8b9d119 100644
--- a/arch/arm/mach-at91/sam_secure.c
+++ b/arch/arm/mach-at91/sam_secure.c
@@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1)
 	return res;
 }
 
+bool sam_linux_is_in_normal_world(void)
+{
+	/* If optee has been detected, then we are running in normal world */
+	return optee_available;
+}
+
 void __init sam_secure_init(void)
 {
 	struct device_node *np;
diff --git a/arch/arm/mach-at91/sam_secure.h b/arch/arm/mach-at91/sam_secure.h
index 1e7d8b20ba1e..6d8c01f9c5f0 100644
--- a/arch/arm/mach-at91/sam_secure.h
+++ b/arch/arm/mach-at91/sam_secure.h
@@ -14,5 +14,6 @@
 
 void __init sam_secure_init(void);
 struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1);
+bool sam_linux_is_in_normal_world(void);
 
 #endif /* SAM_SECURE_H */
-- 
2.36.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/2] ARM: at91: setup outer cache .write_sec() callback if needed
  2022-06-06 14:56 ` Clément Léger
@ 2022-06-06 14:57   ` Clément Léger
  -1 siblings, 0 replies; 16+ messages in thread
From: Clément Léger @ 2022-06-06 14:57 UTC (permalink / raw)
  To: Russell King, Nicolas Ferre, Alexandre Belloni, Claudiu Beznea
  Cc: Clément Léger, linux-arm-kernel, linux-kernel,
	Thomas Petazzoni

When running under OP-TEE, the L2 cache is configured by OP-TEE and the
sam platform code does not allow any modification yet. Setup a dummy
.write_sec() callback to avoid triggering exceptions when Linux tries
to modify the L2 cache configuration.

Signed-off-by: Clément Léger <clement.leger@bootlin.com>
---
 arch/arm/mach-at91/sama5.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
index de5dd28b392e..d1a9e940a785 100644
--- a/arch/arm/mach-at91/sama5.c
+++ b/arch/arm/mach-at91/sama5.c
@@ -9,13 +9,27 @@
 #include <linux/of.h>
 #include <linux/of_platform.h>
 
+#include <asm/hardware/cache-l2x0.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
+#include <asm/outercache.h>
 #include <asm/system_misc.h>
 
 #include "generic.h"
 #include "sam_secure.h"
 
+static void sama5_l2c310_write_sec(unsigned long val, unsigned reg)
+{
+	/* OP-TEE configures the L2 cache and does not allow modifying it yet */
+}
+
+static void __init sama5_secure_cache_init(void)
+{
+	sam_secure_init();
+	if (sam_linux_is_in_normal_world())
+		outer_cache.write_sec = sama5_l2c310_write_sec;
+}
+
 static void __init sama5_dt_device_init(void)
 {
 	of_platform_default_populate(NULL, NULL, NULL);
@@ -30,6 +44,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
 DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
 	/* Maintainer: Atmel */
 	.init_machine	= sama5_dt_device_init,
+	.init_early	= sama5_secure_cache_init,
 	.dt_compat	= sama5_dt_board_compat,
 MACHINE_END
 
@@ -41,6 +56,7 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
 DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
 	/* Maintainer: Atmel */
 	.init_machine	= sama5_dt_device_init,
+	.init_early	= sama5_secure_cache_init,
 	.dt_compat	= sama5_alt_dt_board_compat,
 	.l2c_aux_mask	= ~0UL,
 MACHINE_END
@@ -60,6 +76,7 @@ static const char *const sama5d2_compat[] __initconst = {
 DT_MACHINE_START(sama5d2, "Atmel SAMA5")
 	/* Maintainer: Atmel */
 	.init_machine	= sama5d2_init,
+	.init_early	= sama5_secure_cache_init,
 	.dt_compat	= sama5d2_compat,
 	.l2c_aux_mask	= ~0UL,
 MACHINE_END
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/2] ARM: at91: setup outer cache .write_sec() callback if needed
@ 2022-06-06 14:57   ` Clément Léger
  0 siblings, 0 replies; 16+ messages in thread
From: Clément Léger @ 2022-06-06 14:57 UTC (permalink / raw)
  To: Russell King, Nicolas Ferre, Alexandre Belloni, Claudiu Beznea
  Cc: Clément Léger, linux-arm-kernel, linux-kernel,
	Thomas Petazzoni

When running under OP-TEE, the L2 cache is configured by OP-TEE and the
sam platform code does not allow any modification yet. Setup a dummy
.write_sec() callback to avoid triggering exceptions when Linux tries
to modify the L2 cache configuration.

Signed-off-by: Clément Léger <clement.leger@bootlin.com>
---
 arch/arm/mach-at91/sama5.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
index de5dd28b392e..d1a9e940a785 100644
--- a/arch/arm/mach-at91/sama5.c
+++ b/arch/arm/mach-at91/sama5.c
@@ -9,13 +9,27 @@
 #include <linux/of.h>
 #include <linux/of_platform.h>
 
+#include <asm/hardware/cache-l2x0.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
+#include <asm/outercache.h>
 #include <asm/system_misc.h>
 
 #include "generic.h"
 #include "sam_secure.h"
 
+static void sama5_l2c310_write_sec(unsigned long val, unsigned reg)
+{
+	/* OP-TEE configures the L2 cache and does not allow modifying it yet */
+}
+
+static void __init sama5_secure_cache_init(void)
+{
+	sam_secure_init();
+	if (sam_linux_is_in_normal_world())
+		outer_cache.write_sec = sama5_l2c310_write_sec;
+}
+
 static void __init sama5_dt_device_init(void)
 {
 	of_platform_default_populate(NULL, NULL, NULL);
@@ -30,6 +44,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
 DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
 	/* Maintainer: Atmel */
 	.init_machine	= sama5_dt_device_init,
+	.init_early	= sama5_secure_cache_init,
 	.dt_compat	= sama5_dt_board_compat,
 MACHINE_END
 
@@ -41,6 +56,7 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
 DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
 	/* Maintainer: Atmel */
 	.init_machine	= sama5_dt_device_init,
+	.init_early	= sama5_secure_cache_init,
 	.dt_compat	= sama5_alt_dt_board_compat,
 	.l2c_aux_mask	= ~0UL,
 MACHINE_END
@@ -60,6 +76,7 @@ static const char *const sama5d2_compat[] __initconst = {
 DT_MACHINE_START(sama5d2, "Atmel SAMA5")
 	/* Maintainer: Atmel */
 	.init_machine	= sama5d2_init,
+	.init_early	= sama5_secure_cache_init,
 	.dt_compat	= sama5d2_compat,
 	.l2c_aux_mask	= ~0UL,
 MACHINE_END
-- 
2.36.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
  2022-06-06 14:57   ` Clément Léger
@ 2022-07-04  6:19     ` Claudiu.Beznea
  -1 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-04  6:19 UTC (permalink / raw)
  To: clement.leger, linux, Nicolas.Ferre, alexandre.belloni
  Cc: linux-arm-kernel, linux-kernel, thomas.petazzoni

Hi, Clement,

On 06.06.2022 17:57, Clément Léger wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Add sam_linux_is_in_normal_world() which allows to know if Linux is
> running in the normal world or not. This function is used by code
> which needs to differentiate the world in which Linux is running.
> 
> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
> ---
>  arch/arm/mach-at91/sam_secure.c | 6 ++++++
>  arch/arm/mach-at91/sam_secure.h | 1 +
>  2 files changed, 7 insertions(+)
> 
> diff --git a/arch/arm/mach-at91/sam_secure.c b/arch/arm/mach-at91/sam_secure.c
> index 2a01f7a7d13f..1ec8c8b9d119 100644
> --- a/arch/arm/mach-at91/sam_secure.c
> +++ b/arch/arm/mach-at91/sam_secure.c
> @@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1)
>         return res;
>  }
> 
> +bool sam_linux_is_in_normal_world(void)
> +{
> +       /* If optee has been detected, then we are running in normal world */

In case optee hasn't been detected don't we run also in normal world?
What I want to say is that maybe you can change the function name to
something like sam_linux_is_optee_available().

Thank you,
Claudiu Beznea

> +       return optee_available;
> +}
> +
>  void __init sam_secure_init(void)
>  {
>         struct device_node *np;
> diff --git a/arch/arm/mach-at91/sam_secure.h b/arch/arm/mach-at91/sam_secure.h
> index 1e7d8b20ba1e..6d8c01f9c5f0 100644
> --- a/arch/arm/mach-at91/sam_secure.h
> +++ b/arch/arm/mach-at91/sam_secure.h
> @@ -14,5 +14,6 @@
> 
>  void __init sam_secure_init(void);
>  struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1);
> +bool sam_linux_is_in_normal_world(void);
> 
>  #endif /* SAM_SECURE_H */
> --
> 2.36.1
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
@ 2022-07-04  6:19     ` Claudiu.Beznea
  0 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-04  6:19 UTC (permalink / raw)
  To: clement.leger, linux, Nicolas.Ferre, alexandre.belloni
  Cc: linux-arm-kernel, linux-kernel, thomas.petazzoni

Hi, Clement,

On 06.06.2022 17:57, Clément Léger wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Add sam_linux_is_in_normal_world() which allows to know if Linux is
> running in the normal world or not. This function is used by code
> which needs to differentiate the world in which Linux is running.
> 
> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
> ---
>  arch/arm/mach-at91/sam_secure.c | 6 ++++++
>  arch/arm/mach-at91/sam_secure.h | 1 +
>  2 files changed, 7 insertions(+)
> 
> diff --git a/arch/arm/mach-at91/sam_secure.c b/arch/arm/mach-at91/sam_secure.c
> index 2a01f7a7d13f..1ec8c8b9d119 100644
> --- a/arch/arm/mach-at91/sam_secure.c
> +++ b/arch/arm/mach-at91/sam_secure.c
> @@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1)
>         return res;
>  }
> 
> +bool sam_linux_is_in_normal_world(void)
> +{
> +       /* If optee has been detected, then we are running in normal world */

In case optee hasn't been detected don't we run also in normal world?
What I want to say is that maybe you can change the function name to
something like sam_linux_is_optee_available().

Thank you,
Claudiu Beznea

> +       return optee_available;
> +}
> +
>  void __init sam_secure_init(void)
>  {
>         struct device_node *np;
> diff --git a/arch/arm/mach-at91/sam_secure.h b/arch/arm/mach-at91/sam_secure.h
> index 1e7d8b20ba1e..6d8c01f9c5f0 100644
> --- a/arch/arm/mach-at91/sam_secure.h
> +++ b/arch/arm/mach-at91/sam_secure.h
> @@ -14,5 +14,6 @@
> 
>  void __init sam_secure_init(void);
>  struct arm_smccc_res sam_smccc_call(u32 fn, u32 arg0, u32 arg1);
> +bool sam_linux_is_in_normal_world(void);
> 
>  #endif /* SAM_SECURE_H */
> --
> 2.36.1
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] ARM: at91: setup outer cache .write_sec() callback if needed
  2022-06-06 14:57   ` Clément Léger
@ 2022-07-04  6:39     ` Claudiu.Beznea
  -1 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-04  6:39 UTC (permalink / raw)
  To: clement.leger, linux, Nicolas.Ferre, alexandre.belloni
  Cc: linux-arm-kernel, linux-kernel, thomas.petazzoni

On 06.06.2022 17:57, Clément Léger wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> When running under OP-TEE, the L2 cache is configured by OP-TEE and the
> sam platform code does not allow any modification yet. Setup a dummy
> .write_sec() callback to avoid triggering exceptions when Linux tries
> to modify the L2 cache configuration.
> 
> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
> ---
>  arch/arm/mach-at91/sama5.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
> index de5dd28b392e..d1a9e940a785 100644
> --- a/arch/arm/mach-at91/sama5.c
> +++ b/arch/arm/mach-at91/sama5.c
> @@ -9,13 +9,27 @@
>  #include <linux/of.h>
>  #include <linux/of_platform.h>
> 
> +#include <asm/hardware/cache-l2x0.h>
>  #include <asm/mach/arch.h>
>  #include <asm/mach/map.h>
> +#include <asm/outercache.h>
>  #include <asm/system_misc.h>
> 
>  #include "generic.h"
>  #include "sam_secure.h"
> 
> +static void sama5_l2c310_write_sec(unsigned long val, unsigned reg)
> +{
> +       /* OP-TEE configures the L2 cache and does not allow modifying it yet */
> +}
> +
> +static void __init sama5_secure_cache_init(void)
> +{
> +       sam_secure_init();

With this, could the sam_secure_init() in sama5d2_init() (not listed in
this diff) be removed?

> +       if (sam_linux_is_in_normal_world())
> +               outer_cache.write_sec = sama5_l2c310_write_sec;
> +}
> +
>  static void __init sama5_dt_device_init(void)
>  {
>         of_platform_default_populate(NULL, NULL, NULL);
> @@ -30,6 +44,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
>  DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
>         /* Maintainer: Atmel */
>         .init_machine   = sama5_dt_device_init,
> +       .init_early     = sama5_secure_cache_init,

This is for the generic "atmel,sama5" which can apply also to sama5d3 or
sama5d4. I know this is harmless for functionality (except maybe when optee
is in DT) but do we want it here?

>         .dt_compat      = sama5_dt_board_compat,
>  MACHINE_END
> 
> @@ -41,6 +56,7 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
>  DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
>         /* Maintainer: Atmel */
>         .init_machine   = sama5_dt_device_init,
> +       .init_early     = sama5_secure_cache_init,

Same here except it applies to sama5d4 only.

>         .dt_compat      = sama5_alt_dt_board_compat,
>         .l2c_aux_mask   = ~0UL,
>  MACHINE_END
> @@ -60,6 +76,7 @@ static const char *const sama5d2_compat[] __initconst = {
>  DT_MACHINE_START(sama5d2, "Atmel SAMA5")
>         /* Maintainer: Atmel */
>         .init_machine   = sama5d2_init,
> +       .init_early     = sama5_secure_cache_init,
>         .dt_compat      = sama5d2_compat,
>         .l2c_aux_mask   = ~0UL,
>  MACHINE_END
> --
> 2.36.1
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] ARM: at91: setup outer cache .write_sec() callback if needed
@ 2022-07-04  6:39     ` Claudiu.Beznea
  0 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-04  6:39 UTC (permalink / raw)
  To: clement.leger, linux, Nicolas.Ferre, alexandre.belloni
  Cc: linux-arm-kernel, linux-kernel, thomas.petazzoni

On 06.06.2022 17:57, Clément Léger wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> When running under OP-TEE, the L2 cache is configured by OP-TEE and the
> sam platform code does not allow any modification yet. Setup a dummy
> .write_sec() callback to avoid triggering exceptions when Linux tries
> to modify the L2 cache configuration.
> 
> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
> ---
>  arch/arm/mach-at91/sama5.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
> index de5dd28b392e..d1a9e940a785 100644
> --- a/arch/arm/mach-at91/sama5.c
> +++ b/arch/arm/mach-at91/sama5.c
> @@ -9,13 +9,27 @@
>  #include <linux/of.h>
>  #include <linux/of_platform.h>
> 
> +#include <asm/hardware/cache-l2x0.h>
>  #include <asm/mach/arch.h>
>  #include <asm/mach/map.h>
> +#include <asm/outercache.h>
>  #include <asm/system_misc.h>
> 
>  #include "generic.h"
>  #include "sam_secure.h"
> 
> +static void sama5_l2c310_write_sec(unsigned long val, unsigned reg)
> +{
> +       /* OP-TEE configures the L2 cache and does not allow modifying it yet */
> +}
> +
> +static void __init sama5_secure_cache_init(void)
> +{
> +       sam_secure_init();

With this, could the sam_secure_init() in sama5d2_init() (not listed in
this diff) be removed?

> +       if (sam_linux_is_in_normal_world())
> +               outer_cache.write_sec = sama5_l2c310_write_sec;
> +}
> +
>  static void __init sama5_dt_device_init(void)
>  {
>         of_platform_default_populate(NULL, NULL, NULL);
> @@ -30,6 +44,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
>  DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
>         /* Maintainer: Atmel */
>         .init_machine   = sama5_dt_device_init,
> +       .init_early     = sama5_secure_cache_init,

This is for the generic "atmel,sama5" which can apply also to sama5d3 or
sama5d4. I know this is harmless for functionality (except maybe when optee
is in DT) but do we want it here?

>         .dt_compat      = sama5_dt_board_compat,
>  MACHINE_END
> 
> @@ -41,6 +56,7 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
>  DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
>         /* Maintainer: Atmel */
>         .init_machine   = sama5_dt_device_init,
> +       .init_early     = sama5_secure_cache_init,

Same here except it applies to sama5d4 only.

>         .dt_compat      = sama5_alt_dt_board_compat,
>         .l2c_aux_mask   = ~0UL,
>  MACHINE_END
> @@ -60,6 +76,7 @@ static const char *const sama5d2_compat[] __initconst = {
>  DT_MACHINE_START(sama5d2, "Atmel SAMA5")
>         /* Maintainer: Atmel */
>         .init_machine   = sama5d2_init,
> +       .init_early     = sama5_secure_cache_init,
>         .dt_compat      = sama5d2_compat,
>         .l2c_aux_mask   = ~0UL,
>  MACHINE_END
> --
> 2.36.1
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
  2022-07-04  6:19     ` Claudiu.Beznea
@ 2022-07-04 17:34       ` clement.leger
  -1 siblings, 0 replies; 16+ messages in thread
From: clement.leger @ 2022-07-04 17:34 UTC (permalink / raw)
  To: Claudiu.Beznea
  Cc: linux, Nicolas.Ferre, alexandre.belloni, linux-arm-kernel,
	linux-kernel, thomas.petazzoni

Le 2022-07-04 08:19, Claudiu.Beznea@microchip.com a écrit :
> Hi, Clement,
> 
> On 06.06.2022 17:57, Clément Léger wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know 
>> the content is safe
>> 
>> Add sam_linux_is_in_normal_world() which allows to know if Linux is
>> running in the normal world or not. This function is used by code
>> which needs to differentiate the world in which Linux is running.
>> 
>> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
>> ---
>>  arch/arm/mach-at91/sam_secure.c | 6 ++++++
>>  arch/arm/mach-at91/sam_secure.h | 1 +
>>  2 files changed, 7 insertions(+)
>> 
>> diff --git a/arch/arm/mach-at91/sam_secure.c 
>> b/arch/arm/mach-at91/sam_secure.c
>> index 2a01f7a7d13f..1ec8c8b9d119 100644
>> --- a/arch/arm/mach-at91/sam_secure.c
>> +++ b/arch/arm/mach-at91/sam_secure.c
>> @@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32 
>> arg0, u32 arg1)
>>         return res;
>>  }
>> 
>> +bool sam_linux_is_in_normal_world(void)
>> +{
>> +       /* If optee has been detected, then we are running in normal 
>> world */
> 
> In case optee hasn't been detected don't we run also in normal world?
> What I want to say is that maybe you can change the function name to
> something like sam_linux_is_optee_available().

I would say it depends on the bootloader configuration, but Linux can 
run
in secure world also. It would not change a lot of thing though.
However, you are right sam_linux_optee_is_available() seems easier to
understand ;)

Clément

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
@ 2022-07-04 17:34       ` clement.leger
  0 siblings, 0 replies; 16+ messages in thread
From: clement.leger @ 2022-07-04 17:34 UTC (permalink / raw)
  To: Claudiu.Beznea
  Cc: alexandre.belloni, linux-kernel, linux, thomas.petazzoni,
	linux-arm-kernel

Le 2022-07-04 08:19, Claudiu.Beznea@microchip.com a écrit :
> Hi, Clement,
> 
> On 06.06.2022 17:57, Clément Léger wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know 
>> the content is safe
>> 
>> Add sam_linux_is_in_normal_world() which allows to know if Linux is
>> running in the normal world or not. This function is used by code
>> which needs to differentiate the world in which Linux is running.
>> 
>> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
>> ---
>>  arch/arm/mach-at91/sam_secure.c | 6 ++++++
>>  arch/arm/mach-at91/sam_secure.h | 1 +
>>  2 files changed, 7 insertions(+)
>> 
>> diff --git a/arch/arm/mach-at91/sam_secure.c 
>> b/arch/arm/mach-at91/sam_secure.c
>> index 2a01f7a7d13f..1ec8c8b9d119 100644
>> --- a/arch/arm/mach-at91/sam_secure.c
>> +++ b/arch/arm/mach-at91/sam_secure.c
>> @@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32 
>> arg0, u32 arg1)
>>         return res;
>>  }
>> 
>> +bool sam_linux_is_in_normal_world(void)
>> +{
>> +       /* If optee has been detected, then we are running in normal 
>> world */
> 
> In case optee hasn't been detected don't we run also in normal world?
> What I want to say is that maybe you can change the function name to
> something like sam_linux_is_optee_available().

I would say it depends on the bootloader configuration, but Linux can 
run
in secure world also. It would not change a lot of thing though.
However, you are right sam_linux_optee_is_available() seems easier to
understand ;)

Clément

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
  2022-07-04 17:34       ` clement.leger
@ 2022-07-20  8:29         ` Claudiu.Beznea
  -1 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-20  8:29 UTC (permalink / raw)
  To: clement.leger
  Cc: linux, Nicolas.Ferre, alexandre.belloni, linux-arm-kernel,
	linux-kernel, thomas.petazzoni

On 04.07.2022 20:34, clement.leger@bootlin.com wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Le 2022-07-04 08:19, Claudiu.Beznea@microchip.com a écrit :
>> Hi, Clement,
>>
>> On 06.06.2022 17:57, Clément Léger wrote:
>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know
>>> the content is safe
>>>
>>> Add sam_linux_is_in_normal_world() which allows to know if Linux is
>>> running in the normal world or not. This function is used by code
>>> which needs to differentiate the world in which Linux is running.
>>>
>>> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
>>> ---
>>>  arch/arm/mach-at91/sam_secure.c | 6 ++++++
>>>  arch/arm/mach-at91/sam_secure.h | 1 +
>>>  2 files changed, 7 insertions(+)
>>>
>>> diff --git a/arch/arm/mach-at91/sam_secure.c
>>> b/arch/arm/mach-at91/sam_secure.c
>>> index 2a01f7a7d13f..1ec8c8b9d119 100644
>>> --- a/arch/arm/mach-at91/sam_secure.c
>>> +++ b/arch/arm/mach-at91/sam_secure.c
>>> @@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32
>>> arg0, u32 arg1)
>>>         return res;
>>>  }
>>>
>>> +bool sam_linux_is_in_normal_world(void)
>>> +{
>>> +       /* If optee has been detected, then we are running in normal
>>> world */
>>
>> In case optee hasn't been detected don't we run also in normal world?
>> What I want to say is that maybe you can change the function name to
>> something like sam_linux_is_optee_available().
> 
> I would say it depends on the bootloader configuration, but Linux can
> run
> in secure world also. It would not change a lot of thing though.
> However, you are right sam_linux_optee_is_available() seems easier to
> understand ;)

Changed the name and applied it to at91-soc, thanks!

> 
> Clément


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function
@ 2022-07-20  8:29         ` Claudiu.Beznea
  0 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-20  8:29 UTC (permalink / raw)
  To: clement.leger
  Cc: alexandre.belloni, linux-kernel, linux, thomas.petazzoni,
	linux-arm-kernel

On 04.07.2022 20:34, clement.leger@bootlin.com wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Le 2022-07-04 08:19, Claudiu.Beznea@microchip.com a écrit :
>> Hi, Clement,
>>
>> On 06.06.2022 17:57, Clément Léger wrote:
>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know
>>> the content is safe
>>>
>>> Add sam_linux_is_in_normal_world() which allows to know if Linux is
>>> running in the normal world or not. This function is used by code
>>> which needs to differentiate the world in which Linux is running.
>>>
>>> Signed-off-by: Clément Léger <clement.leger@bootlin.com>
>>> ---
>>>  arch/arm/mach-at91/sam_secure.c | 6 ++++++
>>>  arch/arm/mach-at91/sam_secure.h | 1 +
>>>  2 files changed, 7 insertions(+)
>>>
>>> diff --git a/arch/arm/mach-at91/sam_secure.c
>>> b/arch/arm/mach-at91/sam_secure.c
>>> index 2a01f7a7d13f..1ec8c8b9d119 100644
>>> --- a/arch/arm/mach-at91/sam_secure.c
>>> +++ b/arch/arm/mach-at91/sam_secure.c
>>> @@ -27,6 +27,12 @@ struct arm_smccc_res sam_smccc_call(u32 fn, u32
>>> arg0, u32 arg1)
>>>         return res;
>>>  }
>>>
>>> +bool sam_linux_is_in_normal_world(void)
>>> +{
>>> +       /* If optee has been detected, then we are running in normal
>>> world */
>>
>> In case optee hasn't been detected don't we run also in normal world?
>> What I want to say is that maybe you can change the function name to
>> something like sam_linux_is_optee_available().
> 
> I would say it depends on the bootloader configuration, but Linux can
> run
> in secure world also. It would not change a lot of thing though.
> However, you are right sam_linux_optee_is_available() seems easier to
> understand ;)

Changed the name and applied it to at91-soc, thanks!

> 
> Clément

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] ARM: at91: setup outer cache .write_sec() callback if needed
  2022-07-04  6:39     ` Claudiu.Beznea
@ 2022-07-20  8:30       ` Claudiu.Beznea
  -1 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-20  8:30 UTC (permalink / raw)
  To: clement.leger, linux, Nicolas.Ferre, alexandre.belloni
  Cc: linux-arm-kernel, linux-kernel, thomas.petazzoni

On 04.07.2022 09:39, Claudiu Beznea - M18063 wrote:
> On 06.06.2022 17:57, Clément Léger wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>
>> When running under OP-TEE, the L2 cache is configured by OP-TEE and the
>> sam platform code does not allow any modification yet. Setup a dummy
>> .write_sec() callback to avoid triggering exceptions when Linux tries
>> to modify the L2 cache configuration.
>>
>> Signed-off-by: Clément Léger <clement.leger@bootlin.com>

Applied it to at91-soc with adjustments described in previous reply, thanks!

>> ---
>>  arch/arm/mach-at91/sama5.c | 17 +++++++++++++++++
>>  1 file changed, 17 insertions(+)
>>
>> diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
>> index de5dd28b392e..d1a9e940a785 100644
>> --- a/arch/arm/mach-at91/sama5.c
>> +++ b/arch/arm/mach-at91/sama5.c
>> @@ -9,13 +9,27 @@
>>  #include <linux/of.h>
>>  #include <linux/of_platform.h>
>>
>> +#include <asm/hardware/cache-l2x0.h>
>>  #include <asm/mach/arch.h>
>>  #include <asm/mach/map.h>
>> +#include <asm/outercache.h>
>>  #include <asm/system_misc.h>
>>
>>  #include "generic.h"
>>  #include "sam_secure.h"
>>
>> +static void sama5_l2c310_write_sec(unsigned long val, unsigned reg)
>> +{
>> +       /* OP-TEE configures the L2 cache and does not allow modifying it yet */
>> +}
>> +
>> +static void __init sama5_secure_cache_init(void)
>> +{
>> +       sam_secure_init();
> 
> With this, could the sam_secure_init() in sama5d2_init() (not listed in
> this diff) be removed?
> 
>> +       if (sam_linux_is_in_normal_world())
>> +               outer_cache.write_sec = sama5_l2c310_write_sec;
>> +}
>> +
>>  static void __init sama5_dt_device_init(void)
>>  {
>>         of_platform_default_populate(NULL, NULL, NULL);
>> @@ -30,6 +44,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
>>  DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
>>         /* Maintainer: Atmel */
>>         .init_machine   = sama5_dt_device_init,
>> +       .init_early     = sama5_secure_cache_init,
> 
> This is for the generic "atmel,sama5" which can apply also to sama5d3 or
> sama5d4. I know this is harmless for functionality (except maybe when optee
> is in DT) but do we want it here?
> 
>>         .dt_compat      = sama5_dt_board_compat,
>>  MACHINE_END
>>
>> @@ -41,6 +56,7 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
>>  DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
>>         /* Maintainer: Atmel */
>>         .init_machine   = sama5_dt_device_init,
>> +       .init_early     = sama5_secure_cache_init,
> 
> Same here except it applies to sama5d4 only.
> 
>>         .dt_compat      = sama5_alt_dt_board_compat,
>>         .l2c_aux_mask   = ~0UL,
>>  MACHINE_END
>> @@ -60,6 +76,7 @@ static const char *const sama5d2_compat[] __initconst = {
>>  DT_MACHINE_START(sama5d2, "Atmel SAMA5")
>>         /* Maintainer: Atmel */
>>         .init_machine   = sama5d2_init,
>> +       .init_early     = sama5_secure_cache_init,
>>         .dt_compat      = sama5d2_compat,
>>         .l2c_aux_mask   = ~0UL,
>>  MACHINE_END
>> --
>> 2.36.1
>>
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/2] ARM: at91: setup outer cache .write_sec() callback if needed
@ 2022-07-20  8:30       ` Claudiu.Beznea
  0 siblings, 0 replies; 16+ messages in thread
From: Claudiu.Beznea @ 2022-07-20  8:30 UTC (permalink / raw)
  To: clement.leger, linux, Nicolas.Ferre, alexandre.belloni
  Cc: linux-arm-kernel, linux-kernel, thomas.petazzoni

On 04.07.2022 09:39, Claudiu Beznea - M18063 wrote:
> On 06.06.2022 17:57, Clément Léger wrote:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>
>> When running under OP-TEE, the L2 cache is configured by OP-TEE and the
>> sam platform code does not allow any modification yet. Setup a dummy
>> .write_sec() callback to avoid triggering exceptions when Linux tries
>> to modify the L2 cache configuration.
>>
>> Signed-off-by: Clément Léger <clement.leger@bootlin.com>

Applied it to at91-soc with adjustments described in previous reply, thanks!

>> ---
>>  arch/arm/mach-at91/sama5.c | 17 +++++++++++++++++
>>  1 file changed, 17 insertions(+)
>>
>> diff --git a/arch/arm/mach-at91/sama5.c b/arch/arm/mach-at91/sama5.c
>> index de5dd28b392e..d1a9e940a785 100644
>> --- a/arch/arm/mach-at91/sama5.c
>> +++ b/arch/arm/mach-at91/sama5.c
>> @@ -9,13 +9,27 @@
>>  #include <linux/of.h>
>>  #include <linux/of_platform.h>
>>
>> +#include <asm/hardware/cache-l2x0.h>
>>  #include <asm/mach/arch.h>
>>  #include <asm/mach/map.h>
>> +#include <asm/outercache.h>
>>  #include <asm/system_misc.h>
>>
>>  #include "generic.h"
>>  #include "sam_secure.h"
>>
>> +static void sama5_l2c310_write_sec(unsigned long val, unsigned reg)
>> +{
>> +       /* OP-TEE configures the L2 cache and does not allow modifying it yet */
>> +}
>> +
>> +static void __init sama5_secure_cache_init(void)
>> +{
>> +       sam_secure_init();
> 
> With this, could the sam_secure_init() in sama5d2_init() (not listed in
> this diff) be removed?
> 
>> +       if (sam_linux_is_in_normal_world())
>> +               outer_cache.write_sec = sama5_l2c310_write_sec;
>> +}
>> +
>>  static void __init sama5_dt_device_init(void)
>>  {
>>         of_platform_default_populate(NULL, NULL, NULL);
>> @@ -30,6 +44,7 @@ static const char *const sama5_dt_board_compat[] __initconst = {
>>  DT_MACHINE_START(sama5_dt, "Atmel SAMA5")
>>         /* Maintainer: Atmel */
>>         .init_machine   = sama5_dt_device_init,
>> +       .init_early     = sama5_secure_cache_init,
> 
> This is for the generic "atmel,sama5" which can apply also to sama5d3 or
> sama5d4. I know this is harmless for functionality (except maybe when optee
> is in DT) but do we want it here?
> 
>>         .dt_compat      = sama5_dt_board_compat,
>>  MACHINE_END
>>
>> @@ -41,6 +56,7 @@ static const char *const sama5_alt_dt_board_compat[] __initconst = {
>>  DT_MACHINE_START(sama5_alt_dt, "Atmel SAMA5")
>>         /* Maintainer: Atmel */
>>         .init_machine   = sama5_dt_device_init,
>> +       .init_early     = sama5_secure_cache_init,
> 
> Same here except it applies to sama5d4 only.
> 
>>         .dt_compat      = sama5_alt_dt_board_compat,
>>         .l2c_aux_mask   = ~0UL,
>>  MACHINE_END
>> @@ -60,6 +76,7 @@ static const char *const sama5d2_compat[] __initconst = {
>>  DT_MACHINE_START(sama5d2, "Atmel SAMA5")
>>         /* Maintainer: Atmel */
>>         .init_machine   = sama5d2_init,
>> +       .init_early     = sama5_secure_cache_init,
>>         .dt_compat      = sama5d2_compat,
>>         .l2c_aux_mask   = ~0UL,
>>  MACHINE_END
>> --
>> 2.36.1
>>
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2022-07-20  8:31 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-06 14:56 [PATCH 0/2] ARM: at91: add support for L2 cache write_sec() callback Clément Léger
2022-06-06 14:56 ` Clément Léger
2022-06-06 14:57 ` [PATCH 1/2] ARM: at91: add sam_linux_is_in_normal_world() function Clément Léger
2022-06-06 14:57   ` Clément Léger
2022-07-04  6:19   ` Claudiu.Beznea
2022-07-04  6:19     ` Claudiu.Beznea
2022-07-04 17:34     ` clement.leger
2022-07-04 17:34       ` clement.leger
2022-07-20  8:29       ` Claudiu.Beznea
2022-07-20  8:29         ` Claudiu.Beznea
2022-06-06 14:57 ` [PATCH 2/2] ARM: at91: setup outer cache .write_sec() callback if needed Clément Léger
2022-06-06 14:57   ` Clément Léger
2022-07-04  6:39   ` Claudiu.Beznea
2022-07-04  6:39     ` Claudiu.Beznea
2022-07-20  8:30     ` Claudiu.Beznea
2022-07-20  8:30       ` Claudiu.Beznea

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.