All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 0/5] ARM: support for Trusted Foundations secure monitor
@ 2013-10-11 21:45 ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	Alexandre Courbot

Hopefully this has received enough review to be merged (although a few more
acks/review especially from DT people on patch 1 would be nice). Thanks
everyone for all the input and comments!

Trusted Foundations is an ARM secure monitor that is used by many Tegra-based
retail devices (like SHIELD and TegraNote). Adding support to it allows these
devices to boot on a purely upstream kernel.

Public documentation about Trusted Foundations is scarce, but over the various
versions of this patch it has been established that it does not follow the ARM
SMC convention and also has no connection whatsoever with PSCI. As such, it
requires an implementation of its own and the firmware interface introduced by
Tomasz provides an adequate framework for it.

Changes since v7:
- explicitly request the TF DT node to be under /firmware/ in the bindings
  documentation
- renamed arguments of tf_generic_smc() (suggestion made by Linus W. some time
  ago that I overlooked).
- fixed multi-line comment style

TODO in a future patchset:
- disable TF-dependant features (SMP, cpuidle) if TF cannot be supported instead
  or doing an early panic
- complete TF support with idle and L2 cache handling (ongoing)

Alexandre Courbot (5):
  ARM: add basic support for Trusted Foundations
  ARM: tegra: add support for Trusted Foundations
  ARM: tegra: split setting of CPU reset handler
  ARM: tegra: set CPU reset handler with firmware op
  ARM: tegra: support Trusted Foundations by default

 .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
 Documentation/devicetree/bindings/arm/tegra.txt    |  5 ++
 .../devicetree/bindings/vendor-prefixes.txt        |  1 +
 arch/arm/Kconfig                                   |  2 +
 arch/arm/Makefile                                  |  1 +
 arch/arm/configs/tegra_defconfig                   |  1 +
 arch/arm/firmware/Kconfig                          | 28 ++++++++
 arch/arm/firmware/Makefile                         |  1 +
 arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
 arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
 arch/arm/mach-tegra/Kconfig                        |  1 +
 arch/arm/mach-tegra/common.c                       |  2 +
 arch/arm/mach-tegra/reset.c                        | 40 ++++++++---
 13 files changed, 238 insertions(+), 11 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
 create mode 100644 arch/arm/firmware/Kconfig
 create mode 100644 arch/arm/firmware/Makefile
 create mode 100644 arch/arm/firmware/trusted_foundations.c
 create mode 100644 arch/arm/include/asm/trusted_foundations.h

-- 
1.8.4

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

* [PATCH v8 0/5] ARM: support for Trusted Foundations secure monitor
@ 2013-10-11 21:45 ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Hopefully this has received enough review to be merged (although a few more
acks/review especially from DT people on patch 1 would be nice). Thanks
everyone for all the input and comments!

Trusted Foundations is an ARM secure monitor that is used by many Tegra-based
retail devices (like SHIELD and TegraNote). Adding support to it allows these
devices to boot on a purely upstream kernel.

Public documentation about Trusted Foundations is scarce, but over the various
versions of this patch it has been established that it does not follow the ARM
SMC convention and also has no connection whatsoever with PSCI. As such, it
requires an implementation of its own and the firmware interface introduced by
Tomasz provides an adequate framework for it.

Changes since v7:
- explicitly request the TF DT node to be under /firmware/ in the bindings
  documentation
- renamed arguments of tf_generic_smc() (suggestion made by Linus W. some time
  ago that I overlooked).
- fixed multi-line comment style

TODO in a future patchset:
- disable TF-dependant features (SMP, cpuidle) if TF cannot be supported instead
  or doing an early panic
- complete TF support with idle and L2 cache handling (ongoing)

Alexandre Courbot (5):
  ARM: add basic support for Trusted Foundations
  ARM: tegra: add support for Trusted Foundations
  ARM: tegra: split setting of CPU reset handler
  ARM: tegra: set CPU reset handler with firmware op
  ARM: tegra: support Trusted Foundations by default

 .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
 Documentation/devicetree/bindings/arm/tegra.txt    |  5 ++
 .../devicetree/bindings/vendor-prefixes.txt        |  1 +
 arch/arm/Kconfig                                   |  2 +
 arch/arm/Makefile                                  |  1 +
 arch/arm/configs/tegra_defconfig                   |  1 +
 arch/arm/firmware/Kconfig                          | 28 ++++++++
 arch/arm/firmware/Makefile                         |  1 +
 arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
 arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
 arch/arm/mach-tegra/Kconfig                        |  1 +
 arch/arm/mach-tegra/common.c                       |  2 +
 arch/arm/mach-tegra/reset.c                        | 40 ++++++++---
 13 files changed, 238 insertions(+), 11 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
 create mode 100644 arch/arm/firmware/Kconfig
 create mode 100644 arch/arm/firmware/Makefile
 create mode 100644 arch/arm/firmware/trusted_foundations.c
 create mode 100644 arch/arm/include/asm/trusted_foundations.h

-- 
1.8.4


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

* [PATCH v8 0/5] ARM: support for Trusted Foundations secure monitor
@ 2013-10-11 21:45 ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: linux-arm-kernel

Hopefully this has received enough review to be merged (although a few more
acks/review especially from DT people on patch 1 would be nice). Thanks
everyone for all the input and comments!

Trusted Foundations is an ARM secure monitor that is used by many Tegra-based
retail devices (like SHIELD and TegraNote). Adding support to it allows these
devices to boot on a purely upstream kernel.

Public documentation about Trusted Foundations is scarce, but over the various
versions of this patch it has been established that it does not follow the ARM
SMC convention and also has no connection whatsoever with PSCI. As such, it
requires an implementation of its own and the firmware interface introduced by
Tomasz provides an adequate framework for it.

Changes since v7:
- explicitly request the TF DT node to be under /firmware/ in the bindings
  documentation
- renamed arguments of tf_generic_smc() (suggestion made by Linus W. some time
  ago that I overlooked).
- fixed multi-line comment style

TODO in a future patchset:
- disable TF-dependant features (SMP, cpuidle) if TF cannot be supported instead
  or doing an early panic
- complete TF support with idle and L2 cache handling (ongoing)

Alexandre Courbot (5):
  ARM: add basic support for Trusted Foundations
  ARM: tegra: add support for Trusted Foundations
  ARM: tegra: split setting of CPU reset handler
  ARM: tegra: set CPU reset handler with firmware op
  ARM: tegra: support Trusted Foundations by default

 .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
 Documentation/devicetree/bindings/arm/tegra.txt    |  5 ++
 .../devicetree/bindings/vendor-prefixes.txt        |  1 +
 arch/arm/Kconfig                                   |  2 +
 arch/arm/Makefile                                  |  1 +
 arch/arm/configs/tegra_defconfig                   |  1 +
 arch/arm/firmware/Kconfig                          | 28 ++++++++
 arch/arm/firmware/Makefile                         |  1 +
 arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
 arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
 arch/arm/mach-tegra/Kconfig                        |  1 +
 arch/arm/mach-tegra/common.c                       |  2 +
 arch/arm/mach-tegra/reset.c                        | 40 ++++++++---
 13 files changed, 238 insertions(+), 11 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
 create mode 100644 arch/arm/firmware/Kconfig
 create mode 100644 arch/arm/firmware/Makefile
 create mode 100644 arch/arm/firmware/trusted_foundations.c
 create mode 100644 arch/arm/include/asm/trusted_foundations.h

-- 
1.8.4

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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
  2013-10-11 21:45 ` Alexandre Courbot
  (?)
@ 2013-10-11 21:45     ` Alexandre Courbot
  -1 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	Alexandre Courbot

Trusted Foundations is a TrustZone-based secure monitor for ARM that
can be invoked using the same SMC-based API on all supported
platforms. This patch adds initial basic support for Trusted
Foundations using the ARM firmware API. Current features are limited
to the ability to boot secondary processors.

Note: The API followed by Trusted Foundations does *not* follow the SMC
calling conventions. It has nothing to do with PSCI neither and is only
relevant to devices that use Trusted Foundations (like most Tegra-based
retail devices).

Signed-off-by: Alexandre Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Reviewed-by: Tomasz Figa <t.figa-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
Reviewed-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
---
 .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
 .../devicetree/bindings/vendor-prefixes.txt        |  1 +
 arch/arm/Kconfig                                   |  2 +
 arch/arm/Makefile                                  |  1 +
 arch/arm/firmware/Kconfig                          | 28 ++++++++
 arch/arm/firmware/Makefile                         |  1 +
 arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
 arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
 8 files changed, 200 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
 create mode 100644 arch/arm/firmware/Kconfig
 create mode 100644 arch/arm/firmware/Makefile
 create mode 100644 arch/arm/firmware/trusted_foundations.c
 create mode 100644 arch/arm/include/asm/trusted_foundations.h

diff --git a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
new file mode 100644
index 0000000..2ec75c9
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
@@ -0,0 +1,20 @@
+Trusted Foundations
+-------------------
+
+Boards that use the Trusted Foundations secure monitor can signal its
+presence by declaring a node compatible with "tl,trusted-foundations"
+under the /firmware/ node
+
+Required properties:
+- compatible : "tl,trusted-foundations"
+- version-major : major version number of Trusted Foundations firmware
+- version-minor: minor version number of Trusted Foundations firmware
+
+Example:
+	firmware {
+		trusted-foundations {
+			compatible = "tl,trusted-foundations";
+			version-major = <2>;
+			version-minor = <8>;
+		};
+	};
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 2956800..a374eaa 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -66,6 +66,7 @@ ste	ST-Ericsson
 stericsson	ST-Ericsson
 toumaz	Toumaz
 ti	Texas Instruments
+tl	Trusted Logic
 toshiba	Toshiba Corporation
 v3	V3 Semiconductor
 via	VIA Technologies, Inc.
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 1ad6fb6..bf14cec 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1076,6 +1076,8 @@ config ARM_TIMER_SP804
 	select CLKSRC_MMIO
 	select CLKSRC_OF if OF
 
+source "arch/arm/firmware/Kconfig"
+
 source arch/arm/mm/Kconfig
 
 config ARM_NR_BANKS
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index a37a50f..f26712c 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -268,6 +268,7 @@ core-$(CONFIG_KVM_ARM_HOST) 	+= arch/arm/kvm/
 core-y				+= arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
 core-y				+= arch/arm/net/
 core-y				+= arch/arm/crypto/
+core-y				+= arch/arm/firmware/
 core-y				+= $(machdirs) $(platdirs)
 
 drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/
diff --git a/arch/arm/firmware/Kconfig b/arch/arm/firmware/Kconfig
new file mode 100644
index 0000000..bb00ccf
--- /dev/null
+++ b/arch/arm/firmware/Kconfig
@@ -0,0 +1,28 @@
+config ARCH_SUPPORTS_FIRMWARE
+	bool
+
+config ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	bool
+	select ARCH_SUPPORTS_FIRMWARE
+
+menu "Firmware options"
+	depends on ARCH_SUPPORTS_FIRMWARE
+
+config TRUSTED_FOUNDATIONS
+	bool "Trusted Foundations secure monitor support"
+	depends on ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	help
+	  Some devices (including most Tegra-based consumer devices on the
+	  market) are booted with the Trusted Foundations secure monitor
+	  active, requiring some core operations to be performed by the secure
+	  monitor instead of the kernel.
+
+	  This option allows the kernel to invoke the secure monitor whenever
+	  required on devices using Trusted Foundations. See
+	  arch/arm/include/asm/trusted_foundations.h or the
+	  tl,trusted-foundations device tree binding documentation for details
+	  on how to use it.
+
+	  Say n if you don't know what this is about.
+
+endmenu
diff --git a/arch/arm/firmware/Makefile b/arch/arm/firmware/Makefile
new file mode 100644
index 0000000..a71f165
--- /dev/null
+++ b/arch/arm/firmware/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_TRUSTED_FOUNDATIONS)	+= trusted_foundations.o
diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c
new file mode 100644
index 0000000..fe063d5
--- /dev/null
+++ b/arch/arm/firmware/trusted_foundations.c
@@ -0,0 +1,79 @@
+/*
+ * Trusted Foundations support for ARM CPUs
+ *
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/of.h>
+#include <asm/firmware.h>
+#include <asm/trusted_foundations.h>
+
+#define TF_SET_CPU_BOOT_ADDR_SMC 0xfffff200
+
+static void __naked tf_generic_smc(u32 type, u32 arg1, u32 arg2)
+{
+	asm volatile(
+		".arch_extension	sec\n\t"
+		"stmfd	sp!, {r4 - r11, lr}\n\t"
+		__asmeq("%0", "r0")
+		__asmeq("%1", "r1")
+		__asmeq("%2", "r2")
+		"mov	r3, #0\n\t"
+		"mov	r4, #0\n\t"
+		"smc	#0\n\t"
+		"ldmfd	sp!, {r4 - r11, pc}"
+		:
+		: "r" (type), "r" (arg1), "r" (arg2)
+		: "memory");
+}
+
+static int tf_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
+{
+	tf_generic_smc(TF_SET_CPU_BOOT_ADDR_SMC, boot_addr, 0);
+
+	return 0;
+}
+
+static const struct firmware_ops trusted_foundations_ops = {
+	.set_cpu_boot_addr = tf_set_cpu_boot_addr,
+};
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * we are not using version information for now since currently
+	 * supported SMCs are compatible with all TF releases
+	 */
+	register_firmware_ops(&trusted_foundations_ops);
+}
+
+void of_register_trusted_foundations(void)
+{
+	struct device_node *node;
+	struct trusted_foundations_platform_data pdata;
+	int err;
+
+	node = of_find_compatible_node(NULL, NULL, "tl,trusted-foundations");
+	if (!node)
+		return;
+
+	err = of_property_read_u32(node, "version-major", &pdata.version_major);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-major property\n");
+	err = of_property_read_u32(node, "version-minor", &pdata.version_minor);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-minor property\n");
+	register_trusted_foundations(&pdata);
+}
diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
new file mode 100644
index 0000000..c6f20bd
--- /dev/null
+++ b/arch/arm/include/asm/trusted_foundations.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+/*
+ * Support for the Trusted Foundations secure monitor.
+ *
+ * Trusted Foundation comes active on some ARM consumer devices (most
+ * Tegra-based devices sold on the market are concerned). Such devices can only
+ * perform some basic operations, like setting the CPU reset vector, through
+ * SMC calls to the secure monitor. The calls are completely specific to
+ * Trusted Foundations, and do *not* follow the SMC calling convention or the
+ * PSCI standard.
+ */
+
+#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
+#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
+
+#include <linux/kconfig.h>
+
+struct trusted_foundations_platform_data {
+	unsigned int version_major;
+	unsigned int version_minor;
+};
+
+#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
+void of_register_trusted_foundations(void);
+
+#else /* CONFIG_TRUSTED_FOUNDATIONS */
+
+#include <linux/printk.h>
+#include <linux/of.h>
+#include <asm/bug.h>
+
+static inline void register_trusted_foundations(
+				   struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * If we try to register TF, this means the system needs it to continue.
+	 * Its absence if thus a fatal error.
+	 */
+	panic("No support for Trusted Foundations, stopping...\n");
+}
+
+static inline void of_register_trusted_foundations(void)
+{
+	/*
+	 * If we find the target should enable TF but does not support it,
+	 * fail as the system won't be able to do much anyway
+	 */
+	if (of_find_compatible_node(NULL, NULL, "tl,trusted-foundations"))
+		register_trusted_foundations(NULL);
+}
+#endif /* CONFIG_TRUSTED_FOUNDATIONS */
+
+#endif
-- 
1.8.4

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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-11 21:45     ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Trusted Foundations is a TrustZone-based secure monitor for ARM that
can be invoked using the same SMC-based API on all supported
platforms. This patch adds initial basic support for Trusted
Foundations using the ARM firmware API. Current features are limited
to the ability to boot secondary processors.

Note: The API followed by Trusted Foundations does *not* follow the SMC
calling conventions. It has nothing to do with PSCI neither and is only
relevant to devices that use Trusted Foundations (like most Tegra-based
retail devices).

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
 .../devicetree/bindings/vendor-prefixes.txt        |  1 +
 arch/arm/Kconfig                                   |  2 +
 arch/arm/Makefile                                  |  1 +
 arch/arm/firmware/Kconfig                          | 28 ++++++++
 arch/arm/firmware/Makefile                         |  1 +
 arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
 arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
 8 files changed, 200 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
 create mode 100644 arch/arm/firmware/Kconfig
 create mode 100644 arch/arm/firmware/Makefile
 create mode 100644 arch/arm/firmware/trusted_foundations.c
 create mode 100644 arch/arm/include/asm/trusted_foundations.h

diff --git a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
new file mode 100644
index 0000000..2ec75c9
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
@@ -0,0 +1,20 @@
+Trusted Foundations
+-------------------
+
+Boards that use the Trusted Foundations secure monitor can signal its
+presence by declaring a node compatible with "tl,trusted-foundations"
+under the /firmware/ node
+
+Required properties:
+- compatible : "tl,trusted-foundations"
+- version-major : major version number of Trusted Foundations firmware
+- version-minor: minor version number of Trusted Foundations firmware
+
+Example:
+	firmware {
+		trusted-foundations {
+			compatible = "tl,trusted-foundations";
+			version-major = <2>;
+			version-minor = <8>;
+		};
+	};
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 2956800..a374eaa 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -66,6 +66,7 @@ ste	ST-Ericsson
 stericsson	ST-Ericsson
 toumaz	Toumaz
 ti	Texas Instruments
+tl	Trusted Logic
 toshiba	Toshiba Corporation
 v3	V3 Semiconductor
 via	VIA Technologies, Inc.
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 1ad6fb6..bf14cec 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1076,6 +1076,8 @@ config ARM_TIMER_SP804
 	select CLKSRC_MMIO
 	select CLKSRC_OF if OF
 
+source "arch/arm/firmware/Kconfig"
+
 source arch/arm/mm/Kconfig
 
 config ARM_NR_BANKS
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index a37a50f..f26712c 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -268,6 +268,7 @@ core-$(CONFIG_KVM_ARM_HOST) 	+= arch/arm/kvm/
 core-y				+= arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
 core-y				+= arch/arm/net/
 core-y				+= arch/arm/crypto/
+core-y				+= arch/arm/firmware/
 core-y				+= $(machdirs) $(platdirs)
 
 drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/
diff --git a/arch/arm/firmware/Kconfig b/arch/arm/firmware/Kconfig
new file mode 100644
index 0000000..bb00ccf
--- /dev/null
+++ b/arch/arm/firmware/Kconfig
@@ -0,0 +1,28 @@
+config ARCH_SUPPORTS_FIRMWARE
+	bool
+
+config ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	bool
+	select ARCH_SUPPORTS_FIRMWARE
+
+menu "Firmware options"
+	depends on ARCH_SUPPORTS_FIRMWARE
+
+config TRUSTED_FOUNDATIONS
+	bool "Trusted Foundations secure monitor support"
+	depends on ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	help
+	  Some devices (including most Tegra-based consumer devices on the
+	  market) are booted with the Trusted Foundations secure monitor
+	  active, requiring some core operations to be performed by the secure
+	  monitor instead of the kernel.
+
+	  This option allows the kernel to invoke the secure monitor whenever
+	  required on devices using Trusted Foundations. See
+	  arch/arm/include/asm/trusted_foundations.h or the
+	  tl,trusted-foundations device tree binding documentation for details
+	  on how to use it.
+
+	  Say n if you don't know what this is about.
+
+endmenu
diff --git a/arch/arm/firmware/Makefile b/arch/arm/firmware/Makefile
new file mode 100644
index 0000000..a71f165
--- /dev/null
+++ b/arch/arm/firmware/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_TRUSTED_FOUNDATIONS)	+= trusted_foundations.o
diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c
new file mode 100644
index 0000000..fe063d5
--- /dev/null
+++ b/arch/arm/firmware/trusted_foundations.c
@@ -0,0 +1,79 @@
+/*
+ * Trusted Foundations support for ARM CPUs
+ *
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/of.h>
+#include <asm/firmware.h>
+#include <asm/trusted_foundations.h>
+
+#define TF_SET_CPU_BOOT_ADDR_SMC 0xfffff200
+
+static void __naked tf_generic_smc(u32 type, u32 arg1, u32 arg2)
+{
+	asm volatile(
+		".arch_extension	sec\n\t"
+		"stmfd	sp!, {r4 - r11, lr}\n\t"
+		__asmeq("%0", "r0")
+		__asmeq("%1", "r1")
+		__asmeq("%2", "r2")
+		"mov	r3, #0\n\t"
+		"mov	r4, #0\n\t"
+		"smc	#0\n\t"
+		"ldmfd	sp!, {r4 - r11, pc}"
+		:
+		: "r" (type), "r" (arg1), "r" (arg2)
+		: "memory");
+}
+
+static int tf_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
+{
+	tf_generic_smc(TF_SET_CPU_BOOT_ADDR_SMC, boot_addr, 0);
+
+	return 0;
+}
+
+static const struct firmware_ops trusted_foundations_ops = {
+	.set_cpu_boot_addr = tf_set_cpu_boot_addr,
+};
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * we are not using version information for now since currently
+	 * supported SMCs are compatible with all TF releases
+	 */
+	register_firmware_ops(&trusted_foundations_ops);
+}
+
+void of_register_trusted_foundations(void)
+{
+	struct device_node *node;
+	struct trusted_foundations_platform_data pdata;
+	int err;
+
+	node = of_find_compatible_node(NULL, NULL, "tl,trusted-foundations");
+	if (!node)
+		return;
+
+	err = of_property_read_u32(node, "version-major", &pdata.version_major);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-major property\n");
+	err = of_property_read_u32(node, "version-minor", &pdata.version_minor);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-minor property\n");
+	register_trusted_foundations(&pdata);
+}
diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
new file mode 100644
index 0000000..c6f20bd
--- /dev/null
+++ b/arch/arm/include/asm/trusted_foundations.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+/*
+ * Support for the Trusted Foundations secure monitor.
+ *
+ * Trusted Foundation comes active on some ARM consumer devices (most
+ * Tegra-based devices sold on the market are concerned). Such devices can only
+ * perform some basic operations, like setting the CPU reset vector, through
+ * SMC calls to the secure monitor. The calls are completely specific to
+ * Trusted Foundations, and do *not* follow the SMC calling convention or the
+ * PSCI standard.
+ */
+
+#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
+#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
+
+#include <linux/kconfig.h>
+
+struct trusted_foundations_platform_data {
+	unsigned int version_major;
+	unsigned int version_minor;
+};
+
+#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
+void of_register_trusted_foundations(void);
+
+#else /* CONFIG_TRUSTED_FOUNDATIONS */
+
+#include <linux/printk.h>
+#include <linux/of.h>
+#include <asm/bug.h>
+
+static inline void register_trusted_foundations(
+				   struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * If we try to register TF, this means the system needs it to continue.
+	 * Its absence if thus a fatal error.
+	 */
+	panic("No support for Trusted Foundations, stopping...\n");
+}
+
+static inline void of_register_trusted_foundations(void)
+{
+	/*
+	 * If we find the target should enable TF but does not support it,
+	 * fail as the system won't be able to do much anyway
+	 */
+	if (of_find_compatible_node(NULL, NULL, "tl,trusted-foundations"))
+		register_trusted_foundations(NULL);
+}
+#endif /* CONFIG_TRUSTED_FOUNDATIONS */
+
+#endif
-- 
1.8.4


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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-11 21:45     ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: linux-arm-kernel

Trusted Foundations is a TrustZone-based secure monitor for ARM that
can be invoked using the same SMC-based API on all supported
platforms. This patch adds initial basic support for Trusted
Foundations using the ARM firmware API. Current features are limited
to the ability to boot secondary processors.

Note: The API followed by Trusted Foundations does *not* follow the SMC
calling conventions. It has nothing to do with PSCI neither and is only
relevant to devices that use Trusted Foundations (like most Tegra-based
retail devices).

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
 .../devicetree/bindings/vendor-prefixes.txt        |  1 +
 arch/arm/Kconfig                                   |  2 +
 arch/arm/Makefile                                  |  1 +
 arch/arm/firmware/Kconfig                          | 28 ++++++++
 arch/arm/firmware/Makefile                         |  1 +
 arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
 arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
 8 files changed, 200 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
 create mode 100644 arch/arm/firmware/Kconfig
 create mode 100644 arch/arm/firmware/Makefile
 create mode 100644 arch/arm/firmware/trusted_foundations.c
 create mode 100644 arch/arm/include/asm/trusted_foundations.h

diff --git a/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
new file mode 100644
index 0000000..2ec75c9
--- /dev/null
+++ b/Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
@@ -0,0 +1,20 @@
+Trusted Foundations
+-------------------
+
+Boards that use the Trusted Foundations secure monitor can signal its
+presence by declaring a node compatible with "tl,trusted-foundations"
+under the /firmware/ node
+
+Required properties:
+- compatible : "tl,trusted-foundations"
+- version-major : major version number of Trusted Foundations firmware
+- version-minor: minor version number of Trusted Foundations firmware
+
+Example:
+	firmware {
+		trusted-foundations {
+			compatible = "tl,trusted-foundations";
+			version-major = <2>;
+			version-minor = <8>;
+		};
+	};
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 2956800..a374eaa 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -66,6 +66,7 @@ ste	ST-Ericsson
 stericsson	ST-Ericsson
 toumaz	Toumaz
 ti	Texas Instruments
+tl	Trusted Logic
 toshiba	Toshiba Corporation
 v3	V3 Semiconductor
 via	VIA Technologies, Inc.
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 1ad6fb6..bf14cec 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1076,6 +1076,8 @@ config ARM_TIMER_SP804
 	select CLKSRC_MMIO
 	select CLKSRC_OF if OF
 
+source "arch/arm/firmware/Kconfig"
+
 source arch/arm/mm/Kconfig
 
 config ARM_NR_BANKS
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index a37a50f..f26712c 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -268,6 +268,7 @@ core-$(CONFIG_KVM_ARM_HOST) 	+= arch/arm/kvm/
 core-y				+= arch/arm/kernel/ arch/arm/mm/ arch/arm/common/
 core-y				+= arch/arm/net/
 core-y				+= arch/arm/crypto/
+core-y				+= arch/arm/firmware/
 core-y				+= $(machdirs) $(platdirs)
 
 drivers-$(CONFIG_OPROFILE)      += arch/arm/oprofile/
diff --git a/arch/arm/firmware/Kconfig b/arch/arm/firmware/Kconfig
new file mode 100644
index 0000000..bb00ccf
--- /dev/null
+++ b/arch/arm/firmware/Kconfig
@@ -0,0 +1,28 @@
+config ARCH_SUPPORTS_FIRMWARE
+	bool
+
+config ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	bool
+	select ARCH_SUPPORTS_FIRMWARE
+
+menu "Firmware options"
+	depends on ARCH_SUPPORTS_FIRMWARE
+
+config TRUSTED_FOUNDATIONS
+	bool "Trusted Foundations secure monitor support"
+	depends on ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
+	help
+	  Some devices (including most Tegra-based consumer devices on the
+	  market) are booted with the Trusted Foundations secure monitor
+	  active, requiring some core operations to be performed by the secure
+	  monitor instead of the kernel.
+
+	  This option allows the kernel to invoke the secure monitor whenever
+	  required on devices using Trusted Foundations. See
+	  arch/arm/include/asm/trusted_foundations.h or the
+	  tl,trusted-foundations device tree binding documentation for details
+	  on how to use it.
+
+	  Say n if you don't know what this is about.
+
+endmenu
diff --git a/arch/arm/firmware/Makefile b/arch/arm/firmware/Makefile
new file mode 100644
index 0000000..a71f165
--- /dev/null
+++ b/arch/arm/firmware/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_TRUSTED_FOUNDATIONS)	+= trusted_foundations.o
diff --git a/arch/arm/firmware/trusted_foundations.c b/arch/arm/firmware/trusted_foundations.c
new file mode 100644
index 0000000..fe063d5
--- /dev/null
+++ b/arch/arm/firmware/trusted_foundations.c
@@ -0,0 +1,79 @@
+/*
+ * Trusted Foundations support for ARM CPUs
+ *
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/of.h>
+#include <asm/firmware.h>
+#include <asm/trusted_foundations.h>
+
+#define TF_SET_CPU_BOOT_ADDR_SMC 0xfffff200
+
+static void __naked tf_generic_smc(u32 type, u32 arg1, u32 arg2)
+{
+	asm volatile(
+		".arch_extension	sec\n\t"
+		"stmfd	sp!, {r4 - r11, lr}\n\t"
+		__asmeq("%0", "r0")
+		__asmeq("%1", "r1")
+		__asmeq("%2", "r2")
+		"mov	r3, #0\n\t"
+		"mov	r4, #0\n\t"
+		"smc	#0\n\t"
+		"ldmfd	sp!, {r4 - r11, pc}"
+		:
+		: "r" (type), "r" (arg1), "r" (arg2)
+		: "memory");
+}
+
+static int tf_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
+{
+	tf_generic_smc(TF_SET_CPU_BOOT_ADDR_SMC, boot_addr, 0);
+
+	return 0;
+}
+
+static const struct firmware_ops trusted_foundations_ops = {
+	.set_cpu_boot_addr = tf_set_cpu_boot_addr,
+};
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * we are not using version information for now since currently
+	 * supported SMCs are compatible with all TF releases
+	 */
+	register_firmware_ops(&trusted_foundations_ops);
+}
+
+void of_register_trusted_foundations(void)
+{
+	struct device_node *node;
+	struct trusted_foundations_platform_data pdata;
+	int err;
+
+	node = of_find_compatible_node(NULL, NULL, "tl,trusted-foundations");
+	if (!node)
+		return;
+
+	err = of_property_read_u32(node, "version-major", &pdata.version_major);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-major property\n");
+	err = of_property_read_u32(node, "version-minor", &pdata.version_minor);
+	if (err != 0)
+		panic("Trusted Foundation: missing version-minor property\n");
+	register_trusted_foundations(&pdata);
+}
diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
new file mode 100644
index 0000000..c6f20bd
--- /dev/null
+++ b/arch/arm/include/asm/trusted_foundations.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2013, NVIDIA Corporation.
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+/*
+ * Support for the Trusted Foundations secure monitor.
+ *
+ * Trusted Foundation comes active on some ARM consumer devices (most
+ * Tegra-based devices sold on the market are concerned). Such devices can only
+ * perform some basic operations, like setting the CPU reset vector, through
+ * SMC calls to the secure monitor. The calls are completely specific to
+ * Trusted Foundations, and do *not* follow the SMC calling convention or the
+ * PSCI standard.
+ */
+
+#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
+#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
+
+#include <linux/kconfig.h>
+
+struct trusted_foundations_platform_data {
+	unsigned int version_major;
+	unsigned int version_minor;
+};
+
+#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
+
+void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
+void of_register_trusted_foundations(void);
+
+#else /* CONFIG_TRUSTED_FOUNDATIONS */
+
+#include <linux/printk.h>
+#include <linux/of.h>
+#include <asm/bug.h>
+
+static inline void register_trusted_foundations(
+				   struct trusted_foundations_platform_data *pd)
+{
+	/*
+	 * If we try to register TF, this means the system needs it to continue.
+	 * Its absence if thus a fatal error.
+	 */
+	panic("No support for Trusted Foundations, stopping...\n");
+}
+
+static inline void of_register_trusted_foundations(void)
+{
+	/*
+	 * If we find the target should enable TF but does not support it,
+	 * fail as the system won't be able to do much anyway
+	 */
+	if (of_find_compatible_node(NULL, NULL, "tl,trusted-foundations"))
+		register_trusted_foundations(NULL);
+}
+#endif /* CONFIG_TRUSTED_FOUNDATIONS */
+
+#endif
-- 
1.8.4

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

* [PATCH v8 2/5] ARM: tegra: add support for Trusted Foundations
  2013-10-11 21:45 ` Alexandre Courbot
  (?)
@ 2013-10-11 21:45   ` Alexandre Courbot
  -1 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Register the firmware operations for Trusted Foundations if the device
tree indicates it is active on the device.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 Documentation/devicetree/bindings/arm/tegra.txt | 5 +++++
 arch/arm/mach-tegra/Kconfig                     | 1 +
 arch/arm/mach-tegra/common.c                    | 2 ++
 3 files changed, 8 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/tegra.txt b/Documentation/devicetree/bindings/arm/tegra.txt
index ed9c853..8e51884 100644
--- a/Documentation/devicetree/bindings/arm/tegra.txt
+++ b/Documentation/devicetree/bindings/arm/tegra.txt
@@ -32,3 +32,8 @@ board-specific compatible values:
   nvidia,whistler
   toradex,colibri_t20-512
   toradex,iris
+
+Trusted Foundations
+-------------------------------------------
+Tegra supports the Trusted Foundation secure monitor. See the
+"tl,trusted-foundations" binding's documentation for more details.
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index 67a76f2..4e51278 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -2,6 +2,7 @@ config ARCH_TEGRA
 	bool "NVIDIA Tegra" if ARCH_MULTI_V7
 	select ARCH_HAS_CPUFREQ
 	select ARCH_REQUIRE_GPIOLIB
+	select ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
 	select ARM_GIC
 	select CLKDEV_LOOKUP
 	select CLKSRC_MMIO
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index 94a119a..b405e45 100644
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
@@ -27,6 +27,7 @@
 #include <linux/clk-provider.h>
 
 #include <asm/hardware/cache-l2x0.h>
+#include <asm/trusted_foundations.h>
 
 #include "board.h"
 #include "common.h"
@@ -99,6 +100,7 @@ static void __init tegra_init_cache(void)
 
 void __init tegra_init_early(void)
 {
+	of_register_trusted_foundations();
 	tegra_cpu_reset_handler_init();
 	tegra_apb_io_init();
 	tegra_init_fuse();
-- 
1.8.4

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

* [PATCH v8 2/5] ARM: tegra: add support for Trusted Foundations
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Register the firmware operations for Trusted Foundations if the device
tree indicates it is active on the device.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 Documentation/devicetree/bindings/arm/tegra.txt | 5 +++++
 arch/arm/mach-tegra/Kconfig                     | 1 +
 arch/arm/mach-tegra/common.c                    | 2 ++
 3 files changed, 8 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/tegra.txt b/Documentation/devicetree/bindings/arm/tegra.txt
index ed9c853..8e51884 100644
--- a/Documentation/devicetree/bindings/arm/tegra.txt
+++ b/Documentation/devicetree/bindings/arm/tegra.txt
@@ -32,3 +32,8 @@ board-specific compatible values:
   nvidia,whistler
   toradex,colibri_t20-512
   toradex,iris
+
+Trusted Foundations
+-------------------------------------------
+Tegra supports the Trusted Foundation secure monitor. See the
+"tl,trusted-foundations" binding's documentation for more details.
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index 67a76f2..4e51278 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -2,6 +2,7 @@ config ARCH_TEGRA
 	bool "NVIDIA Tegra" if ARCH_MULTI_V7
 	select ARCH_HAS_CPUFREQ
 	select ARCH_REQUIRE_GPIOLIB
+	select ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
 	select ARM_GIC
 	select CLKDEV_LOOKUP
 	select CLKSRC_MMIO
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index 94a119a..b405e45 100644
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
@@ -27,6 +27,7 @@
 #include <linux/clk-provider.h>
 
 #include <asm/hardware/cache-l2x0.h>
+#include <asm/trusted_foundations.h>
 
 #include "board.h"
 #include "common.h"
@@ -99,6 +100,7 @@ static void __init tegra_init_cache(void)
 
 void __init tegra_init_early(void)
 {
+	of_register_trusted_foundations();
 	tegra_cpu_reset_handler_init();
 	tegra_apb_io_init();
 	tegra_init_fuse();
-- 
1.8.4


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

* [PATCH v8 2/5] ARM: tegra: add support for Trusted Foundations
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: linux-arm-kernel

Register the firmware operations for Trusted Foundations if the device
tree indicates it is active on the device.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 Documentation/devicetree/bindings/arm/tegra.txt | 5 +++++
 arch/arm/mach-tegra/Kconfig                     | 1 +
 arch/arm/mach-tegra/common.c                    | 2 ++
 3 files changed, 8 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/tegra.txt b/Documentation/devicetree/bindings/arm/tegra.txt
index ed9c853..8e51884 100644
--- a/Documentation/devicetree/bindings/arm/tegra.txt
+++ b/Documentation/devicetree/bindings/arm/tegra.txt
@@ -32,3 +32,8 @@ board-specific compatible values:
   nvidia,whistler
   toradex,colibri_t20-512
   toradex,iris
+
+Trusted Foundations
+-------------------------------------------
+Tegra supports the Trusted Foundation secure monitor. See the
+"tl,trusted-foundations" binding's documentation for more details.
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index 67a76f2..4e51278 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -2,6 +2,7 @@ config ARCH_TEGRA
 	bool "NVIDIA Tegra" if ARCH_MULTI_V7
 	select ARCH_HAS_CPUFREQ
 	select ARCH_REQUIRE_GPIOLIB
+	select ARCH_SUPPORTS_TRUSTED_FOUNDATIONS
 	select ARM_GIC
 	select CLKDEV_LOOKUP
 	select CLKSRC_MMIO
diff --git a/arch/arm/mach-tegra/common.c b/arch/arm/mach-tegra/common.c
index 94a119a..b405e45 100644
--- a/arch/arm/mach-tegra/common.c
+++ b/arch/arm/mach-tegra/common.c
@@ -27,6 +27,7 @@
 #include <linux/clk-provider.h>
 
 #include <asm/hardware/cache-l2x0.h>
+#include <asm/trusted_foundations.h>
 
 #include "board.h"
 #include "common.h"
@@ -99,6 +100,7 @@ static void __init tegra_init_cache(void)
 
 void __init tegra_init_early(void)
 {
+	of_register_trusted_foundations();
 	tegra_cpu_reset_handler_init();
 	tegra_apb_io_init();
 	tegra_init_fuse();
-- 
1.8.4

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

* [PATCH v8 3/5] ARM: tegra: split setting of CPU reset handler
  2013-10-11 21:45 ` Alexandre Courbot
  (?)
@ 2013-10-11 21:45   ` Alexandre Courbot
  -1 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Not all Tegra devices can set the CPU reset handler in the same way.
In particular, devices using a TrustZone secure monitor cannot set the
reset handler directly and need to do it through a firmware operation.

This patch separates the act of setting the reset handler from its
preparation, so the former can be implemented in a different way.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/mach-tegra/reset.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
index fd0bbf8..e282395 100644
--- a/arch/arm/mach-tegra/reset.c
+++ b/arch/arm/mach-tegra/reset.c
@@ -33,26 +33,18 @@
 
 static bool is_enabled;
 
-static void __init tegra_cpu_reset_handler_enable(void)
+static void __init tegra_cpu_reset_handler_set(const u32 reset_address)
 {
-	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
 	void __iomem *evp_cpu_reset =
 		IO_ADDRESS(TEGRA_EXCEPTION_VECTORS_BASE + 0x100);
 	void __iomem *sb_ctrl = IO_ADDRESS(TEGRA_SB_BASE);
 	u32 reg;
 
-	BUG_ON(is_enabled);
-	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
-
-	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
-			tegra_cpu_reset_handler_size);
-
 	/*
 	 * NOTE: This must be the one and only write to the EVP CPU reset
 	 *       vector in the entire system.
 	 */
-	writel(TEGRA_IRAM_RESET_BASE + tegra_cpu_reset_handler_offset,
-			evp_cpu_reset);
+	writel(reset_address, evp_cpu_reset);
 	wmb();
 	reg = readl(evp_cpu_reset);
 
@@ -66,6 +58,21 @@ static void __init tegra_cpu_reset_handler_enable(void)
 		writel(reg, sb_ctrl);
 		wmb();
 	}
+}
+
+static void __init tegra_cpu_reset_handler_enable(void)
+{
+	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
+	const u32 reset_address = TEGRA_IRAM_RESET_BASE +
+						tegra_cpu_reset_handler_offset;
+
+	BUG_ON(is_enabled);
+	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
+
+	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
+			tegra_cpu_reset_handler_size);
+
+	tegra_cpu_reset_handler_set(reset_address);
 
 	is_enabled = true;
 }
-- 
1.8.4

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

* [PATCH v8 3/5] ARM: tegra: split setting of CPU reset handler
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Not all Tegra devices can set the CPU reset handler in the same way.
In particular, devices using a TrustZone secure monitor cannot set the
reset handler directly and need to do it through a firmware operation.

This patch separates the act of setting the reset handler from its
preparation, so the former can be implemented in a different way.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/mach-tegra/reset.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
index fd0bbf8..e282395 100644
--- a/arch/arm/mach-tegra/reset.c
+++ b/arch/arm/mach-tegra/reset.c
@@ -33,26 +33,18 @@
 
 static bool is_enabled;
 
-static void __init tegra_cpu_reset_handler_enable(void)
+static void __init tegra_cpu_reset_handler_set(const u32 reset_address)
 {
-	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
 	void __iomem *evp_cpu_reset =
 		IO_ADDRESS(TEGRA_EXCEPTION_VECTORS_BASE + 0x100);
 	void __iomem *sb_ctrl = IO_ADDRESS(TEGRA_SB_BASE);
 	u32 reg;
 
-	BUG_ON(is_enabled);
-	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
-
-	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
-			tegra_cpu_reset_handler_size);
-
 	/*
 	 * NOTE: This must be the one and only write to the EVP CPU reset
 	 *       vector in the entire system.
 	 */
-	writel(TEGRA_IRAM_RESET_BASE + tegra_cpu_reset_handler_offset,
-			evp_cpu_reset);
+	writel(reset_address, evp_cpu_reset);
 	wmb();
 	reg = readl(evp_cpu_reset);
 
@@ -66,6 +58,21 @@ static void __init tegra_cpu_reset_handler_enable(void)
 		writel(reg, sb_ctrl);
 		wmb();
 	}
+}
+
+static void __init tegra_cpu_reset_handler_enable(void)
+{
+	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
+	const u32 reset_address = TEGRA_IRAM_RESET_BASE +
+						tegra_cpu_reset_handler_offset;
+
+	BUG_ON(is_enabled);
+	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
+
+	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
+			tegra_cpu_reset_handler_size);
+
+	tegra_cpu_reset_handler_set(reset_address);
 
 	is_enabled = true;
 }
-- 
1.8.4


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

* [PATCH v8 3/5] ARM: tegra: split setting of CPU reset handler
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: linux-arm-kernel

Not all Tegra devices can set the CPU reset handler in the same way.
In particular, devices using a TrustZone secure monitor cannot set the
reset handler directly and need to do it through a firmware operation.

This patch separates the act of setting the reset handler from its
preparation, so the former can be implemented in a different way.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/mach-tegra/reset.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
index fd0bbf8..e282395 100644
--- a/arch/arm/mach-tegra/reset.c
+++ b/arch/arm/mach-tegra/reset.c
@@ -33,26 +33,18 @@
 
 static bool is_enabled;
 
-static void __init tegra_cpu_reset_handler_enable(void)
+static void __init tegra_cpu_reset_handler_set(const u32 reset_address)
 {
-	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
 	void __iomem *evp_cpu_reset =
 		IO_ADDRESS(TEGRA_EXCEPTION_VECTORS_BASE + 0x100);
 	void __iomem *sb_ctrl = IO_ADDRESS(TEGRA_SB_BASE);
 	u32 reg;
 
-	BUG_ON(is_enabled);
-	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
-
-	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
-			tegra_cpu_reset_handler_size);
-
 	/*
 	 * NOTE: This must be the one and only write to the EVP CPU reset
 	 *       vector in the entire system.
 	 */
-	writel(TEGRA_IRAM_RESET_BASE + tegra_cpu_reset_handler_offset,
-			evp_cpu_reset);
+	writel(reset_address, evp_cpu_reset);
 	wmb();
 	reg = readl(evp_cpu_reset);
 
@@ -66,6 +58,21 @@ static void __init tegra_cpu_reset_handler_enable(void)
 		writel(reg, sb_ctrl);
 		wmb();
 	}
+}
+
+static void __init tegra_cpu_reset_handler_enable(void)
+{
+	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
+	const u32 reset_address = TEGRA_IRAM_RESET_BASE +
+						tegra_cpu_reset_handler_offset;
+
+	BUG_ON(is_enabled);
+	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
+
+	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
+			tegra_cpu_reset_handler_size);
+
+	tegra_cpu_reset_handler_set(reset_address);
 
 	is_enabled = true;
 }
-- 
1.8.4

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

* [PATCH v8 4/5] ARM: tegra: set CPU reset handler with firmware op
  2013-10-11 21:45 ` Alexandre Courbot
  (?)
@ 2013-10-11 21:45   ` Alexandre Courbot
  -1 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Use a firmware operation to set the CPU reset handler and only resort to
doing it ourselves if there is none defined.

This supports the booting of secondary CPUs on devices using a TrustZone
secure monitor.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/mach-tegra/reset.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
index e282395..368af0a 100644
--- a/arch/arm/mach-tegra/reset.c
+++ b/arch/arm/mach-tegra/reset.c
@@ -21,6 +21,7 @@
 
 #include <asm/cacheflush.h>
 #include <asm/hardware/cache-l2x0.h>
+#include <asm/firmware.h>
 
 #include "iomap.h"
 #include "irammap.h"
@@ -65,6 +66,7 @@ static void __init tegra_cpu_reset_handler_enable(void)
 	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
 	const u32 reset_address = TEGRA_IRAM_RESET_BASE +
 						tegra_cpu_reset_handler_offset;
+	int err;
 
 	BUG_ON(is_enabled);
 	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
@@ -72,9 +74,18 @@ static void __init tegra_cpu_reset_handler_enable(void)
 	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
 			tegra_cpu_reset_handler_size);
 
-	tegra_cpu_reset_handler_set(reset_address);
-
-	is_enabled = true;
+	err = call_firmware_op(set_cpu_boot_addr, 0, reset_address);
+	switch (err) {
+	case -ENOSYS:
+		tegra_cpu_reset_handler_set(reset_address);
+		/* pass-through */
+	case 0:
+		is_enabled = true;
+		break;
+	default:
+		pr_crit("Cannot set CPU reset handler: %d\n", err);
+		BUG();
+	}
 }
 
 void __init tegra_cpu_reset_handler_init(void)
-- 
1.8.4

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

* [PATCH v8 4/5] ARM: tegra: set CPU reset handler with firmware op
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Use a firmware operation to set the CPU reset handler and only resort to
doing it ourselves if there is none defined.

This supports the booting of secondary CPUs on devices using a TrustZone
secure monitor.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/mach-tegra/reset.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
index e282395..368af0a 100644
--- a/arch/arm/mach-tegra/reset.c
+++ b/arch/arm/mach-tegra/reset.c
@@ -21,6 +21,7 @@
 
 #include <asm/cacheflush.h>
 #include <asm/hardware/cache-l2x0.h>
+#include <asm/firmware.h>
 
 #include "iomap.h"
 #include "irammap.h"
@@ -65,6 +66,7 @@ static void __init tegra_cpu_reset_handler_enable(void)
 	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
 	const u32 reset_address = TEGRA_IRAM_RESET_BASE +
 						tegra_cpu_reset_handler_offset;
+	int err;
 
 	BUG_ON(is_enabled);
 	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
@@ -72,9 +74,18 @@ static void __init tegra_cpu_reset_handler_enable(void)
 	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
 			tegra_cpu_reset_handler_size);
 
-	tegra_cpu_reset_handler_set(reset_address);
-
-	is_enabled = true;
+	err = call_firmware_op(set_cpu_boot_addr, 0, reset_address);
+	switch (err) {
+	case -ENOSYS:
+		tegra_cpu_reset_handler_set(reset_address);
+		/* pass-through */
+	case 0:
+		is_enabled = true;
+		break;
+	default:
+		pr_crit("Cannot set CPU reset handler: %d\n", err);
+		BUG();
+	}
 }
 
 void __init tegra_cpu_reset_handler_init(void)
-- 
1.8.4


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

* [PATCH v8 4/5] ARM: tegra: set CPU reset handler with firmware op
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: linux-arm-kernel

Use a firmware operation to set the CPU reset handler and only resort to
doing it ourselves if there is none defined.

This supports the booting of secondary CPUs on devices using a TrustZone
secure monitor.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/mach-tegra/reset.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
index e282395..368af0a 100644
--- a/arch/arm/mach-tegra/reset.c
+++ b/arch/arm/mach-tegra/reset.c
@@ -21,6 +21,7 @@
 
 #include <asm/cacheflush.h>
 #include <asm/hardware/cache-l2x0.h>
+#include <asm/firmware.h>
 
 #include "iomap.h"
 #include "irammap.h"
@@ -65,6 +66,7 @@ static void __init tegra_cpu_reset_handler_enable(void)
 	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
 	const u32 reset_address = TEGRA_IRAM_RESET_BASE +
 						tegra_cpu_reset_handler_offset;
+	int err;
 
 	BUG_ON(is_enabled);
 	BUG_ON(tegra_cpu_reset_handler_size > TEGRA_IRAM_RESET_HANDLER_SIZE);
@@ -72,9 +74,18 @@ static void __init tegra_cpu_reset_handler_enable(void)
 	memcpy(iram_base, (void *)__tegra_cpu_reset_handler_start,
 			tegra_cpu_reset_handler_size);
 
-	tegra_cpu_reset_handler_set(reset_address);
-
-	is_enabled = true;
+	err = call_firmware_op(set_cpu_boot_addr, 0, reset_address);
+	switch (err) {
+	case -ENOSYS:
+		tegra_cpu_reset_handler_set(reset_address);
+		/* pass-through */
+	case 0:
+		is_enabled = true;
+		break;
+	default:
+		pr_crit("Cannot set CPU reset handler: %d\n", err);
+		BUG();
+	}
 }
 
 void __init tegra_cpu_reset_handler_init(void)
-- 
1.8.4

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

* [PATCH v8 5/5] ARM: tegra: support Trusted Foundations by default
  2013-10-11 21:45 ` Alexandre Courbot
  (?)
@ 2013-10-11 21:45   ` Alexandre Courbot
  -1 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Support for Trusted Foundations is light and allows the kernel to run on
a wider range of devices, so enable it by default.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/configs/tegra_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig
index ea042e8..dddb97b 100644
--- a/arch/arm/configs/tegra_defconfig
+++ b/arch/arm/configs/tegra_defconfig
@@ -32,6 +32,7 @@ CONFIG_PCI=y
 CONFIG_PCI_MSI=y
 CONFIG_PCI_TEGRA=y
 CONFIG_PCIEPORTBUS=y
+CONFIG_TRUSTED_FOUNDATIONS=y
 CONFIG_SMP=y
 CONFIG_PREEMPT=y
 CONFIG_AEABI=y
-- 
1.8.4

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

* [PATCH v8 5/5] ARM: tegra: support Trusted Foundations by default
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Olof Johansson, Russell King, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel, Alexandre Courbot

Support for Trusted Foundations is light and allows the kernel to run on
a wider range of devices, so enable it by default.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/configs/tegra_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig
index ea042e8..dddb97b 100644
--- a/arch/arm/configs/tegra_defconfig
+++ b/arch/arm/configs/tegra_defconfig
@@ -32,6 +32,7 @@ CONFIG_PCI=y
 CONFIG_PCI_MSI=y
 CONFIG_PCI_TEGRA=y
 CONFIG_PCIEPORTBUS=y
+CONFIG_TRUSTED_FOUNDATIONS=y
 CONFIG_SMP=y
 CONFIG_PREEMPT=y
 CONFIG_AEABI=y
-- 
1.8.4


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

* [PATCH v8 5/5] ARM: tegra: support Trusted Foundations by default
@ 2013-10-11 21:45   ` Alexandre Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alexandre Courbot @ 2013-10-11 21:45 UTC (permalink / raw)
  To: linux-arm-kernel

Support for Trusted Foundations is light and allows the kernel to run on
a wider range of devices, so enable it by default.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/configs/tegra_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/configs/tegra_defconfig b/arch/arm/configs/tegra_defconfig
index ea042e8..dddb97b 100644
--- a/arch/arm/configs/tegra_defconfig
+++ b/arch/arm/configs/tegra_defconfig
@@ -32,6 +32,7 @@ CONFIG_PCI=y
 CONFIG_PCI_MSI=y
 CONFIG_PCI_TEGRA=y
 CONFIG_PCIEPORTBUS=y
+CONFIG_TRUSTED_FOUNDATIONS=y
 CONFIG_SMP=y
 CONFIG_PREEMPT=y
 CONFIG_AEABI=y
-- 
1.8.4

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
  2013-10-11 21:45     ` Alexandre Courbot
  (?)
@ 2013-10-14 22:12         ` Stephen Warren
  -1 siblings, 0 replies; 36+ messages in thread
From: Stephen Warren @ 2013-10-14 22:12 UTC (permalink / raw)
  To: Alexandre Courbot, Russell King
  Cc: Olof Johansson, Tomasz Figa, Dave Martin, Arnd Bergmann,
	Kevin Hilman, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

On 10/11/2013 03:45 PM, Alexandre Courbot wrote:
> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> can be invoked using the same SMC-based API on all supported
> platforms. This patch adds initial basic support for Trusted
> Foundations using the ARM firmware API. Current features are limited
> to the ability to boot secondary processors.
> 
> Note: The API followed by Trusted Foundations does *not* follow the SMC
> calling conventions. It has nothing to do with PSCI neither and is only
> relevant to devices that use Trusted Foundations (like most Tegra-based
> retail devices).

Russell, are you OK with this patch? Is it OK if I take it through the
Tegra tree, or would you like to take it through your tree and give me a
stable branch I can apply the rest on top of?

Thanks.

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-14 22:12         ` Stephen Warren
  0 siblings, 0 replies; 36+ messages in thread
From: Stephen Warren @ 2013-10-14 22:12 UTC (permalink / raw)
  To: Alexandre Courbot, Russell King
  Cc: Olof Johansson, Tomasz Figa, Dave Martin, Arnd Bergmann,
	Kevin Hilman, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, devicetree, linux-kernel, linux-tegra,
	linux-arm-kernel

On 10/11/2013 03:45 PM, Alexandre Courbot wrote:
> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> can be invoked using the same SMC-based API on all supported
> platforms. This patch adds initial basic support for Trusted
> Foundations using the ARM firmware API. Current features are limited
> to the ability to boot secondary processors.
> 
> Note: The API followed by Trusted Foundations does *not* follow the SMC
> calling conventions. It has nothing to do with PSCI neither and is only
> relevant to devices that use Trusted Foundations (like most Tegra-based
> retail devices).

Russell, are you OK with this patch? Is it OK if I take it through the
Tegra tree, or would you like to take it through your tree and give me a
stable branch I can apply the rest on top of?

Thanks.

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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-14 22:12         ` Stephen Warren
  0 siblings, 0 replies; 36+ messages in thread
From: Stephen Warren @ 2013-10-14 22:12 UTC (permalink / raw)
  To: linux-arm-kernel

On 10/11/2013 03:45 PM, Alexandre Courbot wrote:
> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> can be invoked using the same SMC-based API on all supported
> platforms. This patch adds initial basic support for Trusted
> Foundations using the ARM firmware API. Current features are limited
> to the ability to boot secondary processors.
> 
> Note: The API followed by Trusted Foundations does *not* follow the SMC
> calling conventions. It has nothing to do with PSCI neither and is only
> relevant to devices that use Trusted Foundations (like most Tegra-based
> retail devices).

Russell, are you OK with this patch? Is it OK if I take it through the
Tegra tree, or would you like to take it through your tree and give me a
stable branch I can apply the rest on top of?

Thanks.

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
  2013-10-11 21:45     ` Alexandre Courbot
  (?)
@ 2013-10-15 11:07         ` Russell King - ARM Linux
  -1 siblings, 0 replies; 36+ messages in thread
From: Russell King - ARM Linux @ 2013-10-15 11:07 UTC (permalink / raw)
  To: Alexandre Courbot
  Cc: Stephen Warren, Olof Johansson, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> can be invoked using the same SMC-based API on all supported
> platforms. This patch adds initial basic support for Trusted
> Foundations using the ARM firmware API. Current features are limited
> to the ability to boot secondary processors.
> 
> Note: The API followed by Trusted Foundations does *not* follow the SMC
> calling conventions. It has nothing to do with PSCI neither and is only
> relevant to devices that use Trusted Foundations (like most Tegra-based
> retail devices).
> 
> Signed-off-by: Alexandre Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> Reviewed-by: Tomasz Figa <t.figa-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> Reviewed-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> ---
>  .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>  .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>  arch/arm/Kconfig                                   |  2 +
>  arch/arm/Makefile                                  |  1 +
>  arch/arm/firmware/Kconfig                          | 28 ++++++++
>  arch/arm/firmware/Makefile                         |  1 +
>  arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>  arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>  8 files changed, 200 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>  create mode 100644 arch/arm/firmware/Kconfig
>  create mode 100644 arch/arm/firmware/Makefile
>  create mode 100644 arch/arm/firmware/trusted_foundations.c
>  create mode 100644 arch/arm/include/asm/trusted_foundations.h

Is having this under arch/arm appropriate?  What happens if the API
gets re-used on ARM64 for example?  Would drivers/firmware be a better
cross-arch location for this?

> diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
> new file mode 100644
> index 0000000..c6f20bd
> --- /dev/null
> +++ b/arch/arm/include/asm/trusted_foundations.h
> @@ -0,0 +1,68 @@
> +/*
> + * Copyright (c) 2013, NVIDIA Corporation.
> + *
> + * 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; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
> + * more details.
> + */
> +
> +/*
> + * Support for the Trusted Foundations secure monitor.
> + *
> + * Trusted Foundation comes active on some ARM consumer devices (most
> + * Tegra-based devices sold on the market are concerned). Such devices can only
> + * perform some basic operations, like setting the CPU reset vector, through
> + * SMC calls to the secure monitor. The calls are completely specific to
> + * Trusted Foundations, and do *not* follow the SMC calling convention or the
> + * PSCI standard.
> + */
> +
> +#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
> +#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
> +
> +#include <linux/kconfig.h>
> +
> +struct trusted_foundations_platform_data {
> +	unsigned int version_major;
> +	unsigned int version_minor;
> +};
> +
> +#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
> +
> +void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
> +void of_register_trusted_foundations(void);
> +
> +#else /* CONFIG_TRUSTED_FOUNDATIONS */
> +
> +#include <linux/printk.h>
> +#include <linux/of.h>
> +#include <asm/bug.h>

Please move these up along side the other #include - having includes depend
on config symbols is an additional unnecessary source of fragility.

Secondly, please use linux/*.h includes in preference to asm/*.h where the
linux/*.h include picks up the corresponding asm/*.h include.  In this case,
that should be linux/bug.h, not asm/bug.h.

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-15 11:07         ` Russell King - ARM Linux
  0 siblings, 0 replies; 36+ messages in thread
From: Russell King - ARM Linux @ 2013-10-15 11:07 UTC (permalink / raw)
  To: Alexandre Courbot
  Cc: Stephen Warren, Olof Johansson, Tomasz Figa, Dave Martin,
	Arnd Bergmann, Kevin Hilman, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, devicetree, linux-kernel,
	linux-tegra, linux-arm-kernel

On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> can be invoked using the same SMC-based API on all supported
> platforms. This patch adds initial basic support for Trusted
> Foundations using the ARM firmware API. Current features are limited
> to the ability to boot secondary processors.
> 
> Note: The API followed by Trusted Foundations does *not* follow the SMC
> calling conventions. It has nothing to do with PSCI neither and is only
> relevant to devices that use Trusted Foundations (like most Tegra-based
> retail devices).
> 
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> Reviewed-by: Stephen Warren <swarren@nvidia.com>
> ---
>  .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>  .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>  arch/arm/Kconfig                                   |  2 +
>  arch/arm/Makefile                                  |  1 +
>  arch/arm/firmware/Kconfig                          | 28 ++++++++
>  arch/arm/firmware/Makefile                         |  1 +
>  arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>  arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>  8 files changed, 200 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>  create mode 100644 arch/arm/firmware/Kconfig
>  create mode 100644 arch/arm/firmware/Makefile
>  create mode 100644 arch/arm/firmware/trusted_foundations.c
>  create mode 100644 arch/arm/include/asm/trusted_foundations.h

Is having this under arch/arm appropriate?  What happens if the API
gets re-used on ARM64 for example?  Would drivers/firmware be a better
cross-arch location for this?

> diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
> new file mode 100644
> index 0000000..c6f20bd
> --- /dev/null
> +++ b/arch/arm/include/asm/trusted_foundations.h
> @@ -0,0 +1,68 @@
> +/*
> + * Copyright (c) 2013, NVIDIA Corporation.
> + *
> + * 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; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
> + * more details.
> + */
> +
> +/*
> + * Support for the Trusted Foundations secure monitor.
> + *
> + * Trusted Foundation comes active on some ARM consumer devices (most
> + * Tegra-based devices sold on the market are concerned). Such devices can only
> + * perform some basic operations, like setting the CPU reset vector, through
> + * SMC calls to the secure monitor. The calls are completely specific to
> + * Trusted Foundations, and do *not* follow the SMC calling convention or the
> + * PSCI standard.
> + */
> +
> +#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
> +#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
> +
> +#include <linux/kconfig.h>
> +
> +struct trusted_foundations_platform_data {
> +	unsigned int version_major;
> +	unsigned int version_minor;
> +};
> +
> +#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
> +
> +void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
> +void of_register_trusted_foundations(void);
> +
> +#else /* CONFIG_TRUSTED_FOUNDATIONS */
> +
> +#include <linux/printk.h>
> +#include <linux/of.h>
> +#include <asm/bug.h>

Please move these up along side the other #include - having includes depend
on config symbols is an additional unnecessary source of fragility.

Secondly, please use linux/*.h includes in preference to asm/*.h where the
linux/*.h include picks up the corresponding asm/*.h include.  In this case,
that should be linux/bug.h, not asm/bug.h.

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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-15 11:07         ` Russell King - ARM Linux
  0 siblings, 0 replies; 36+ messages in thread
From: Russell King - ARM Linux @ 2013-10-15 11:07 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> can be invoked using the same SMC-based API on all supported
> platforms. This patch adds initial basic support for Trusted
> Foundations using the ARM firmware API. Current features are limited
> to the ability to boot secondary processors.
> 
> Note: The API followed by Trusted Foundations does *not* follow the SMC
> calling conventions. It has nothing to do with PSCI neither and is only
> relevant to devices that use Trusted Foundations (like most Tegra-based
> retail devices).
> 
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> Reviewed-by: Stephen Warren <swarren@nvidia.com>
> ---
>  .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>  .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>  arch/arm/Kconfig                                   |  2 +
>  arch/arm/Makefile                                  |  1 +
>  arch/arm/firmware/Kconfig                          | 28 ++++++++
>  arch/arm/firmware/Makefile                         |  1 +
>  arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>  arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>  8 files changed, 200 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>  create mode 100644 arch/arm/firmware/Kconfig
>  create mode 100644 arch/arm/firmware/Makefile
>  create mode 100644 arch/arm/firmware/trusted_foundations.c
>  create mode 100644 arch/arm/include/asm/trusted_foundations.h

Is having this under arch/arm appropriate?  What happens if the API
gets re-used on ARM64 for example?  Would drivers/firmware be a better
cross-arch location for this?

> diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
> new file mode 100644
> index 0000000..c6f20bd
> --- /dev/null
> +++ b/arch/arm/include/asm/trusted_foundations.h
> @@ -0,0 +1,68 @@
> +/*
> + * Copyright (c) 2013, NVIDIA Corporation.
> + *
> + * 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; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
> + * more details.
> + */
> +
> +/*
> + * Support for the Trusted Foundations secure monitor.
> + *
> + * Trusted Foundation comes active on some ARM consumer devices (most
> + * Tegra-based devices sold on the market are concerned). Such devices can only
> + * perform some basic operations, like setting the CPU reset vector, through
> + * SMC calls to the secure monitor. The calls are completely specific to
> + * Trusted Foundations, and do *not* follow the SMC calling convention or the
> + * PSCI standard.
> + */
> +
> +#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
> +#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
> +
> +#include <linux/kconfig.h>
> +
> +struct trusted_foundations_platform_data {
> +	unsigned int version_major;
> +	unsigned int version_minor;
> +};
> +
> +#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
> +
> +void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
> +void of_register_trusted_foundations(void);
> +
> +#else /* CONFIG_TRUSTED_FOUNDATIONS */
> +
> +#include <linux/printk.h>
> +#include <linux/of.h>
> +#include <asm/bug.h>

Please move these up along side the other #include - having includes depend
on config symbols is an additional unnecessary source of fragility.

Secondly, please use linux/*.h includes in preference to asm/*.h where the
linux/*.h include picks up the corresponding asm/*.h include.  In this case,
that should be linux/bug.h, not asm/bug.h.

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
  2013-10-15 11:07         ` Russell King - ARM Linux
  (?)
@ 2013-10-15 16:11             ` Stephen Warren
  -1 siblings, 0 replies; 36+ messages in thread
From: Stephen Warren @ 2013-10-15 16:11 UTC (permalink / raw)
  To: Russell King - ARM Linux, Alexandre Courbot
  Cc: Olof Johansson, Tomasz Figa, Dave Martin, Arnd Bergmann,
	Kevin Hilman, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

On 10/15/2013 05:07 AM, Russell King - ARM Linux wrote:
> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>> can be invoked using the same SMC-based API on all supported
>> platforms. This patch adds initial basic support for Trusted
>> Foundations using the ARM firmware API. Current features are limited
>> to the ability to boot secondary processors.
>>
>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>> calling conventions. It has nothing to do with PSCI neither and is only
>> relevant to devices that use Trusted Foundations (like most Tegra-based
>> retail devices).
>>
>> Signed-off-by: Alexandre Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> Reviewed-by: Tomasz Figa <t.figa-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
>> Reviewed-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> ---
>>  .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>  .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>  arch/arm/Kconfig                                   |  2 +
>>  arch/arm/Makefile                                  |  1 +
>>  arch/arm/firmware/Kconfig                          | 28 ++++++++
>>  arch/arm/firmware/Makefile                         |  1 +
>>  arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>>  arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>>  8 files changed, 200 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>  create mode 100644 arch/arm/firmware/Kconfig
>>  create mode 100644 arch/arm/firmware/Makefile
>>  create mode 100644 arch/arm/firmware/trusted_foundations.c
>>  create mode 100644 arch/arm/include/asm/trusted_foundations.h
> 
> Is having this under arch/arm appropriate?  What happens if the API
> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> cross-arch location for this?

That's probably a better location, yes.

BTW, drivers/firmware/ doesn't seem to have an overall maintainer. Who
should Alex send the patch to, or should I just take this patch throught
the Tegra tree once the files are moved?

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-15 16:11             ` Stephen Warren
  0 siblings, 0 replies; 36+ messages in thread
From: Stephen Warren @ 2013-10-15 16:11 UTC (permalink / raw)
  To: Russell King - ARM Linux, Alexandre Courbot
  Cc: Olof Johansson, Tomasz Figa, Dave Martin, Arnd Bergmann,
	Kevin Hilman, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, devicetree, linux-kernel, linux-tegra,
	linux-arm-kernel

On 10/15/2013 05:07 AM, Russell King - ARM Linux wrote:
> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>> can be invoked using the same SMC-based API on all supported
>> platforms. This patch adds initial basic support for Trusted
>> Foundations using the ARM firmware API. Current features are limited
>> to the ability to boot secondary processors.
>>
>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>> calling conventions. It has nothing to do with PSCI neither and is only
>> relevant to devices that use Trusted Foundations (like most Tegra-based
>> retail devices).
>>
>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>> ---
>>  .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>  .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>  arch/arm/Kconfig                                   |  2 +
>>  arch/arm/Makefile                                  |  1 +
>>  arch/arm/firmware/Kconfig                          | 28 ++++++++
>>  arch/arm/firmware/Makefile                         |  1 +
>>  arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>>  arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>>  8 files changed, 200 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>  create mode 100644 arch/arm/firmware/Kconfig
>>  create mode 100644 arch/arm/firmware/Makefile
>>  create mode 100644 arch/arm/firmware/trusted_foundations.c
>>  create mode 100644 arch/arm/include/asm/trusted_foundations.h
> 
> Is having this under arch/arm appropriate?  What happens if the API
> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> cross-arch location for this?

That's probably a better location, yes.

BTW, drivers/firmware/ doesn't seem to have an overall maintainer. Who
should Alex send the patch to, or should I just take this patch throught
the Tegra tree once the files are moved?

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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-15 16:11             ` Stephen Warren
  0 siblings, 0 replies; 36+ messages in thread
From: Stephen Warren @ 2013-10-15 16:11 UTC (permalink / raw)
  To: linux-arm-kernel

On 10/15/2013 05:07 AM, Russell King - ARM Linux wrote:
> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>> can be invoked using the same SMC-based API on all supported
>> platforms. This patch adds initial basic support for Trusted
>> Foundations using the ARM firmware API. Current features are limited
>> to the ability to boot secondary processors.
>>
>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>> calling conventions. It has nothing to do with PSCI neither and is only
>> relevant to devices that use Trusted Foundations (like most Tegra-based
>> retail devices).
>>
>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>> ---
>>  .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>  .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>  arch/arm/Kconfig                                   |  2 +
>>  arch/arm/Makefile                                  |  1 +
>>  arch/arm/firmware/Kconfig                          | 28 ++++++++
>>  arch/arm/firmware/Makefile                         |  1 +
>>  arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>>  arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>>  8 files changed, 200 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>  create mode 100644 arch/arm/firmware/Kconfig
>>  create mode 100644 arch/arm/firmware/Makefile
>>  create mode 100644 arch/arm/firmware/trusted_foundations.c
>>  create mode 100644 arch/arm/include/asm/trusted_foundations.h
> 
> Is having this under arch/arm appropriate?  What happens if the API
> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> cross-arch location for this?

That's probably a better location, yes.

BTW, drivers/firmware/ doesn't seem to have an overall maintainer. Who
should Alex send the patch to, or should I just take this patch throught
the Tegra tree once the files are moved?

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
  2013-10-15 11:07         ` Russell King - ARM Linux
  (?)
@ 2013-10-15 17:20             ` Alex Courbot
  -1 siblings, 0 replies; 36+ messages in thread
From: Alex Courbot @ 2013-10-15 17:20 UTC (permalink / raw)
  To: Russell King - ARM Linux, Stephen Warren, Tomasz Figa
  Cc: Olof Johansson, Dave Martin, Arnd Bergmann, Kevin Hilman,
	Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	devicetree-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>> can be invoked using the same SMC-based API on all supported
>> platforms. This patch adds initial basic support for Trusted
>> Foundations using the ARM firmware API. Current features are limited
>> to the ability to boot secondary processors.
>>
>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>> calling conventions. It has nothing to do with PSCI neither and is only
>> relevant to devices that use Trusted Foundations (like most Tegra-based
>> retail devices).
>>
>> Signed-off-by: Alexandre Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> Reviewed-by: Tomasz Figa <t.figa-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
>> Reviewed-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> ---
>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>   arch/arm/Kconfig                                   |  2 +
>>   arch/arm/Makefile                                  |  1 +
>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
>>   arch/arm/firmware/Makefile                         |  1 +
>>   arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>>   arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>>   8 files changed, 200 insertions(+)
>>   create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>   create mode 100644 arch/arm/firmware/Kconfig
>>   create mode 100644 arch/arm/firmware/Makefile
>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
>
> Is having this under arch/arm appropriate?  What happens if the API
> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> cross-arch location for this?

The reason why this has been put into arch/arm is that the firmware_ops 
feature this patch depends also resides there 
(arch/arm/include/asm/firmware.h).

On the other hand it might also make sense to move firmware_ops out of 
ARM since I don't see anything ARM-specific with it. Tomasz, could we 
have your thoughts on this?

>> diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
>> new file mode 100644
>> index 0000000..c6f20bd
>> --- /dev/null
>> +++ b/arch/arm/include/asm/trusted_foundations.h
>> @@ -0,0 +1,68 @@
>> +/*
>> + * Copyright (c) 2013, NVIDIA Corporation.
>> + *
>> + * 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; either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful, but WITHOUT
>> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
>> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
>> + * more details.
>> + */
>> +
>> +/*
>> + * Support for the Trusted Foundations secure monitor.
>> + *
>> + * Trusted Foundation comes active on some ARM consumer devices (most
>> + * Tegra-based devices sold on the market are concerned). Such devices can only
>> + * perform some basic operations, like setting the CPU reset vector, through
>> + * SMC calls to the secure monitor. The calls are completely specific to
>> + * Trusted Foundations, and do *not* follow the SMC calling convention or the
>> + * PSCI standard.
>> + */
>> +
>> +#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
>> +#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
>> +
>> +#include <linux/kconfig.h>
>> +
>> +struct trusted_foundations_platform_data {
>> +	unsigned int version_major;
>> +	unsigned int version_minor;
>> +};
>> +
>> +#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
>> +
>> +void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
>> +void of_register_trusted_foundations(void);
>> +
>> +#else /* CONFIG_TRUSTED_FOUNDATIONS */
>> +
>> +#include <linux/printk.h>
>> +#include <linux/of.h>
>> +#include <asm/bug.h>
>
> Please move these up along side the other #include - having includes depend
> on config symbols is an additional unnecessary source of fragility.
>
> Secondly, please use linux/*.h includes in preference to asm/*.h where the
> linux/*.h include picks up the corresponding asm/*.h include.  In this case,
> that should be linux/bug.h, not asm/bug.h.

Will do, thanks!

Alex.

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-15 17:20             ` Alex Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alex Courbot @ 2013-10-15 17:20 UTC (permalink / raw)
  To: Russell King - ARM Linux, Stephen Warren, Tomasz Figa
  Cc: Olof Johansson, Dave Martin, Arnd Bergmann, Kevin Hilman,
	Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, devicetree,
	linux-kernel, linux-tegra, linux-arm-kernel

On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>> can be invoked using the same SMC-based API on all supported
>> platforms. This patch adds initial basic support for Trusted
>> Foundations using the ARM firmware API. Current features are limited
>> to the ability to boot secondary processors.
>>
>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>> calling conventions. It has nothing to do with PSCI neither and is only
>> relevant to devices that use Trusted Foundations (like most Tegra-based
>> retail devices).
>>
>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>> ---
>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>   arch/arm/Kconfig                                   |  2 +
>>   arch/arm/Makefile                                  |  1 +
>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
>>   arch/arm/firmware/Makefile                         |  1 +
>>   arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>>   arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>>   8 files changed, 200 insertions(+)
>>   create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>   create mode 100644 arch/arm/firmware/Kconfig
>>   create mode 100644 arch/arm/firmware/Makefile
>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
>
> Is having this under arch/arm appropriate?  What happens if the API
> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> cross-arch location for this?

The reason why this has been put into arch/arm is that the firmware_ops 
feature this patch depends also resides there 
(arch/arm/include/asm/firmware.h).

On the other hand it might also make sense to move firmware_ops out of 
ARM since I don't see anything ARM-specific with it. Tomasz, could we 
have your thoughts on this?

>> diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
>> new file mode 100644
>> index 0000000..c6f20bd
>> --- /dev/null
>> +++ b/arch/arm/include/asm/trusted_foundations.h
>> @@ -0,0 +1,68 @@
>> +/*
>> + * Copyright (c) 2013, NVIDIA Corporation.
>> + *
>> + * 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; either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful, but WITHOUT
>> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
>> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
>> + * more details.
>> + */
>> +
>> +/*
>> + * Support for the Trusted Foundations secure monitor.
>> + *
>> + * Trusted Foundation comes active on some ARM consumer devices (most
>> + * Tegra-based devices sold on the market are concerned). Such devices can only
>> + * perform some basic operations, like setting the CPU reset vector, through
>> + * SMC calls to the secure monitor. The calls are completely specific to
>> + * Trusted Foundations, and do *not* follow the SMC calling convention or the
>> + * PSCI standard.
>> + */
>> +
>> +#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
>> +#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
>> +
>> +#include <linux/kconfig.h>
>> +
>> +struct trusted_foundations_platform_data {
>> +	unsigned int version_major;
>> +	unsigned int version_minor;
>> +};
>> +
>> +#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
>> +
>> +void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
>> +void of_register_trusted_foundations(void);
>> +
>> +#else /* CONFIG_TRUSTED_FOUNDATIONS */
>> +
>> +#include <linux/printk.h>
>> +#include <linux/of.h>
>> +#include <asm/bug.h>
>
> Please move these up along side the other #include - having includes depend
> on config symbols is an additional unnecessary source of fragility.
>
> Secondly, please use linux/*.h includes in preference to asm/*.h where the
> linux/*.h include picks up the corresponding asm/*.h include.  In this case,
> that should be linux/bug.h, not asm/bug.h.

Will do, thanks!

Alex.


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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-15 17:20             ` Alex Courbot
  0 siblings, 0 replies; 36+ messages in thread
From: Alex Courbot @ 2013-10-15 17:20 UTC (permalink / raw)
  To: linux-arm-kernel

On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>> can be invoked using the same SMC-based API on all supported
>> platforms. This patch adds initial basic support for Trusted
>> Foundations using the ARM firmware API. Current features are limited
>> to the ability to boot secondary processors.
>>
>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>> calling conventions. It has nothing to do with PSCI neither and is only
>> relevant to devices that use Trusted Foundations (like most Tegra-based
>> retail devices).
>>
>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>> ---
>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>   arch/arm/Kconfig                                   |  2 +
>>   arch/arm/Makefile                                  |  1 +
>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
>>   arch/arm/firmware/Makefile                         |  1 +
>>   arch/arm/firmware/trusted_foundations.c            | 79 ++++++++++++++++++++++
>>   arch/arm/include/asm/trusted_foundations.h         | 68 +++++++++++++++++++
>>   8 files changed, 200 insertions(+)
>>   create mode 100644 Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>   create mode 100644 arch/arm/firmware/Kconfig
>>   create mode 100644 arch/arm/firmware/Makefile
>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
>
> Is having this under arch/arm appropriate?  What happens if the API
> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> cross-arch location for this?

The reason why this has been put into arch/arm is that the firmware_ops 
feature this patch depends also resides there 
(arch/arm/include/asm/firmware.h).

On the other hand it might also make sense to move firmware_ops out of 
ARM since I don't see anything ARM-specific with it. Tomasz, could we 
have your thoughts on this?

>> diff --git a/arch/arm/include/asm/trusted_foundations.h b/arch/arm/include/asm/trusted_foundations.h
>> new file mode 100644
>> index 0000000..c6f20bd
>> --- /dev/null
>> +++ b/arch/arm/include/asm/trusted_foundations.h
>> @@ -0,0 +1,68 @@
>> +/*
>> + * Copyright (c) 2013, NVIDIA Corporation.
>> + *
>> + * 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; either version 2 of the License, or
>> + * (at your option) any later version.
>> + *
>> + * This program is distributed in the hope that it will be useful, but WITHOUT
>> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
>> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
>> + * more details.
>> + */
>> +
>> +/*
>> + * Support for the Trusted Foundations secure monitor.
>> + *
>> + * Trusted Foundation comes active on some ARM consumer devices (most
>> + * Tegra-based devices sold on the market are concerned). Such devices can only
>> + * perform some basic operations, like setting the CPU reset vector, through
>> + * SMC calls to the secure monitor. The calls are completely specific to
>> + * Trusted Foundations, and do *not* follow the SMC calling convention or the
>> + * PSCI standard.
>> + */
>> +
>> +#ifndef __ASM_ARM_TRUSTED_FOUNDATIONS_H
>> +#define __ASM_ARM_TRUSTED_FOUNDATIONS_H
>> +
>> +#include <linux/kconfig.h>
>> +
>> +struct trusted_foundations_platform_data {
>> +	unsigned int version_major;
>> +	unsigned int version_minor;
>> +};
>> +
>> +#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
>> +
>> +void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
>> +void of_register_trusted_foundations(void);
>> +
>> +#else /* CONFIG_TRUSTED_FOUNDATIONS */
>> +
>> +#include <linux/printk.h>
>> +#include <linux/of.h>
>> +#include <asm/bug.h>
>
> Please move these up along side the other #include - having includes depend
> on config symbols is an additional unnecessary source of fragility.
>
> Secondly, please use linux/*.h includes in preference to asm/*.h where the
> linux/*.h include picks up the corresponding asm/*.h include.  In this case,
> that should be linux/bug.h, not asm/bug.h.

Will do, thanks!

Alex.

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
  2013-10-15 17:20             ` Alex Courbot
  (?)
@ 2013-10-28 11:04                 ` Tomasz Figa
  -1 siblings, 0 replies; 36+ messages in thread
From: Tomasz Figa @ 2013-10-28 11:04 UTC (permalink / raw)
  To: Alex Courbot
  Cc: Russell King - ARM Linux, Stephen Warren, Tomasz Figa,
	Mark Rutland, devicetree-u79uwXL29TY76Z2rM5mHXA, Kevin Hilman,
	Arnd Bergmann, Pawel Moll, Ian Campbell,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rob Herring,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA, Olof Johansson, Dave Martin,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

Hi,

2013/10/15 Alex Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>:
> On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
>>
>> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>>>
>>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>>> can be invoked using the same SMC-based API on all supported
>>> platforms. This patch adds initial basic support for Trusted
>>> Foundations using the ARM firmware API. Current features are limited
>>> to the ability to boot secondary processors.
>>>
>>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>>> calling conventions. It has nothing to do with PSCI neither and is only
>>> relevant to devices that use Trusted Foundations (like most Tegra-based
>>> retail devices).
>>>
>>> Signed-off-by: Alexandre Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>>> Reviewed-by: Tomasz Figa <t.figa-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
>>> Reviewed-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>>> ---
>>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>>   arch/arm/Kconfig                                   |  2 +
>>>   arch/arm/Makefile                                  |  1 +
>>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
>>>   arch/arm/firmware/Makefile                         |  1 +
>>>   arch/arm/firmware/trusted_foundations.c            | 79
>>> ++++++++++++++++++++++
>>>   arch/arm/include/asm/trusted_foundations.h         | 68
>>> +++++++++++++++++++
>>>   8 files changed, 200 insertions(+)
>>>   create mode 100644
>>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>>   create mode 100644 arch/arm/firmware/Kconfig
>>>   create mode 100644 arch/arm/firmware/Makefile
>>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
>>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
>>
>>
>> Is having this under arch/arm appropriate?  What happens if the API
>> gets re-used on ARM64 for example?  Would drivers/firmware be a better
>> cross-arch location for this?
>
>
> The reason why this has been put into arch/arm is that the firmware_ops
> feature this patch depends also resides there
> (arch/arm/include/asm/firmware.h).
>
> On the other hand it might also make sense to move firmware_ops out of ARM
> since I don't see anything ARM-specific with it. Tomasz, could we have your
> thoughts on this?

I don't see anything wrong in moving this out of arch/arm, feel free
to do so.

However I guess that some (or all) of the names will have to
be put into a more separate namespace, as the term "firmware" is a bit
too generic IMHO. Possibly something like platform_firmware could be
better.

What do you think?

Best regards,
Tomasz
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-28 11:04                 ` Tomasz Figa
  0 siblings, 0 replies; 36+ messages in thread
From: Tomasz Figa @ 2013-10-28 11:04 UTC (permalink / raw)
  To: Alex Courbot
  Cc: Russell King - ARM Linux, Stephen Warren, Tomasz Figa,
	Mark Rutland, devicetree, Kevin Hilman, Arnd Bergmann,
	Pawel Moll, Ian Campbell, linux-kernel, Rob Herring, linux-tegra,
	Olof Johansson, Dave Martin, linux-arm-kernel

Hi,

2013/10/15 Alex Courbot <acourbot@nvidia.com>:
> On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
>>
>> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>>>
>>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>>> can be invoked using the same SMC-based API on all supported
>>> platforms. This patch adds initial basic support for Trusted
>>> Foundations using the ARM firmware API. Current features are limited
>>> to the ability to boot secondary processors.
>>>
>>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>>> calling conventions. It has nothing to do with PSCI neither and is only
>>> relevant to devices that use Trusted Foundations (like most Tegra-based
>>> retail devices).
>>>
>>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>>> ---
>>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>>   arch/arm/Kconfig                                   |  2 +
>>>   arch/arm/Makefile                                  |  1 +
>>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
>>>   arch/arm/firmware/Makefile                         |  1 +
>>>   arch/arm/firmware/trusted_foundations.c            | 79
>>> ++++++++++++++++++++++
>>>   arch/arm/include/asm/trusted_foundations.h         | 68
>>> +++++++++++++++++++
>>>   8 files changed, 200 insertions(+)
>>>   create mode 100644
>>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>>   create mode 100644 arch/arm/firmware/Kconfig
>>>   create mode 100644 arch/arm/firmware/Makefile
>>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
>>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
>>
>>
>> Is having this under arch/arm appropriate?  What happens if the API
>> gets re-used on ARM64 for example?  Would drivers/firmware be a better
>> cross-arch location for this?
>
>
> The reason why this has been put into arch/arm is that the firmware_ops
> feature this patch depends also resides there
> (arch/arm/include/asm/firmware.h).
>
> On the other hand it might also make sense to move firmware_ops out of ARM
> since I don't see anything ARM-specific with it. Tomasz, could we have your
> thoughts on this?

I don't see anything wrong in moving this out of arch/arm, feel free
to do so.

However I guess that some (or all) of the names will have to
be put into a more separate namespace, as the term "firmware" is a bit
too generic IMHO. Possibly something like platform_firmware could be
better.

What do you think?

Best regards,
Tomasz

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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-28 11:04                 ` Tomasz Figa
  0 siblings, 0 replies; 36+ messages in thread
From: Tomasz Figa @ 2013-10-28 11:04 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

2013/10/15 Alex Courbot <acourbot@nvidia.com>:
> On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
>>
>> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
>>>
>>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
>>> can be invoked using the same SMC-based API on all supported
>>> platforms. This patch adds initial basic support for Trusted
>>> Foundations using the ARM firmware API. Current features are limited
>>> to the ability to boot secondary processors.
>>>
>>> Note: The API followed by Trusted Foundations does *not* follow the SMC
>>> calling conventions. It has nothing to do with PSCI neither and is only
>>> relevant to devices that use Trusted Foundations (like most Tegra-based
>>> retail devices).
>>>
>>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
>>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
>>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
>>> ---
>>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
>>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
>>>   arch/arm/Kconfig                                   |  2 +
>>>   arch/arm/Makefile                                  |  1 +
>>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
>>>   arch/arm/firmware/Makefile                         |  1 +
>>>   arch/arm/firmware/trusted_foundations.c            | 79
>>> ++++++++++++++++++++++
>>>   arch/arm/include/asm/trusted_foundations.h         | 68
>>> +++++++++++++++++++
>>>   8 files changed, 200 insertions(+)
>>>   create mode 100644
>>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
>>>   create mode 100644 arch/arm/firmware/Kconfig
>>>   create mode 100644 arch/arm/firmware/Makefile
>>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
>>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
>>
>>
>> Is having this under arch/arm appropriate?  What happens if the API
>> gets re-used on ARM64 for example?  Would drivers/firmware be a better
>> cross-arch location for this?
>
>
> The reason why this has been put into arch/arm is that the firmware_ops
> feature this patch depends also resides there
> (arch/arm/include/asm/firmware.h).
>
> On the other hand it might also make sense to move firmware_ops out of ARM
> since I don't see anything ARM-specific with it. Tomasz, could we have your
> thoughts on this?

I don't see anything wrong in moving this out of arch/arm, feel free
to do so.

However I guess that some (or all) of the names will have to
be put into a more separate namespace, as the term "firmware" is a bit
too generic IMHO. Possibly something like platform_firmware could be
better.

What do you think?

Best regards,
Tomasz

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
  2013-10-28 11:04                 ` Tomasz Figa
  (?)
@ 2013-10-28 21:55                     ` Olof Johansson
  -1 siblings, 0 replies; 36+ messages in thread
From: Olof Johansson @ 2013-10-28 21:55 UTC (permalink / raw)
  To: Tomasz Figa
  Cc: Alex Courbot, Russell King - ARM Linux, Stephen Warren,
	Tomasz Figa, Mark Rutland, devicetree-u79uwXL29TY76Z2rM5mHXA,
	Kevin Hilman, Arnd Bergmann, Pawel Moll, Ian Campbell,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Rob Herring,
	linux-tegra-u79uwXL29TY76Z2rM5mHXA, Dave Martin,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r

On Mon, Oct 28, 2013 at 12:04:43PM +0100, Tomasz Figa wrote:
> Hi,
> 
> 2013/10/15 Alex Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>:
> > On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
> >>
> >> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
> >>>
> >>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> >>> can be invoked using the same SMC-based API on all supported
> >>> platforms. This patch adds initial basic support for Trusted
> >>> Foundations using the ARM firmware API. Current features are limited
> >>> to the ability to boot secondary processors.
> >>>
> >>> Note: The API followed by Trusted Foundations does *not* follow the SMC
> >>> calling conventions. It has nothing to do with PSCI neither and is only
> >>> relevant to devices that use Trusted Foundations (like most Tegra-based
> >>> retail devices).
> >>>
> >>> Signed-off-by: Alexandre Courbot <acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> >>> Reviewed-by: Tomasz Figa <t.figa-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> >>> Reviewed-by: Stephen Warren <swarren-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> >>> ---
> >>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> >>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> >>>   arch/arm/Kconfig                                   |  2 +
> >>>   arch/arm/Makefile                                  |  1 +
> >>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
> >>>   arch/arm/firmware/Makefile                         |  1 +
> >>>   arch/arm/firmware/trusted_foundations.c            | 79
> >>> ++++++++++++++++++++++
> >>>   arch/arm/include/asm/trusted_foundations.h         | 68
> >>> +++++++++++++++++++
> >>>   8 files changed, 200 insertions(+)
> >>>   create mode 100644
> >>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> >>>   create mode 100644 arch/arm/firmware/Kconfig
> >>>   create mode 100644 arch/arm/firmware/Makefile
> >>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
> >>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
> >>
> >>
> >> Is having this under arch/arm appropriate?  What happens if the API
> >> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> >> cross-arch location for this?
> >
> >
> > The reason why this has been put into arch/arm is that the firmware_ops
> > feature this patch depends also resides there
> > (arch/arm/include/asm/firmware.h).
> >
> > On the other hand it might also make sense to move firmware_ops out of ARM
> > since I don't see anything ARM-specific with it. Tomasz, could we have your
> > thoughts on this?
> 
> I don't see anything wrong in moving this out of arch/arm, feel free
> to do so.
> 
> However I guess that some (or all) of the names will have to
> be put into a more separate namespace, as the term "firmware" is a bit
> too generic IMHO. Possibly something like platform_firmware could be
> better.
> 
> What do you think?

I think we can probably merge this under arch/arm now, and when we figure out
what needs to be common with ARM64 we can move it out to a good location. It
might be that mostly just a header file with ABI conventions needs to be
shared, not actual implementation, for example.


-Olof

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

* Re: [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-28 21:55                     ` Olof Johansson
  0 siblings, 0 replies; 36+ messages in thread
From: Olof Johansson @ 2013-10-28 21:55 UTC (permalink / raw)
  To: Tomasz Figa
  Cc: Alex Courbot, Russell King - ARM Linux, Stephen Warren,
	Tomasz Figa, Mark Rutland, devicetree, Kevin Hilman,
	Arnd Bergmann, Pawel Moll, Ian Campbell, linux-kernel,
	Rob Herring, linux-tegra, Dave Martin, linux-arm-kernel

On Mon, Oct 28, 2013 at 12:04:43PM +0100, Tomasz Figa wrote:
> Hi,
> 
> 2013/10/15 Alex Courbot <acourbot@nvidia.com>:
> > On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
> >>
> >> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
> >>>
> >>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> >>> can be invoked using the same SMC-based API on all supported
> >>> platforms. This patch adds initial basic support for Trusted
> >>> Foundations using the ARM firmware API. Current features are limited
> >>> to the ability to boot secondary processors.
> >>>
> >>> Note: The API followed by Trusted Foundations does *not* follow the SMC
> >>> calling conventions. It has nothing to do with PSCI neither and is only
> >>> relevant to devices that use Trusted Foundations (like most Tegra-based
> >>> retail devices).
> >>>
> >>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> >>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> >>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
> >>> ---
> >>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> >>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> >>>   arch/arm/Kconfig                                   |  2 +
> >>>   arch/arm/Makefile                                  |  1 +
> >>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
> >>>   arch/arm/firmware/Makefile                         |  1 +
> >>>   arch/arm/firmware/trusted_foundations.c            | 79
> >>> ++++++++++++++++++++++
> >>>   arch/arm/include/asm/trusted_foundations.h         | 68
> >>> +++++++++++++++++++
> >>>   8 files changed, 200 insertions(+)
> >>>   create mode 100644
> >>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> >>>   create mode 100644 arch/arm/firmware/Kconfig
> >>>   create mode 100644 arch/arm/firmware/Makefile
> >>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
> >>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
> >>
> >>
> >> Is having this under arch/arm appropriate?  What happens if the API
> >> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> >> cross-arch location for this?
> >
> >
> > The reason why this has been put into arch/arm is that the firmware_ops
> > feature this patch depends also resides there
> > (arch/arm/include/asm/firmware.h).
> >
> > On the other hand it might also make sense to move firmware_ops out of ARM
> > since I don't see anything ARM-specific with it. Tomasz, could we have your
> > thoughts on this?
> 
> I don't see anything wrong in moving this out of arch/arm, feel free
> to do so.
> 
> However I guess that some (or all) of the names will have to
> be put into a more separate namespace, as the term "firmware" is a bit
> too generic IMHO. Possibly something like platform_firmware could be
> better.
> 
> What do you think?

I think we can probably merge this under arch/arm now, and when we figure out
what needs to be common with ARM64 we can move it out to a good location. It
might be that mostly just a header file with ABI conventions needs to be
shared, not actual implementation, for example.


-Olof

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

* [PATCH v8 1/5] ARM: add basic support for Trusted Foundations
@ 2013-10-28 21:55                     ` Olof Johansson
  0 siblings, 0 replies; 36+ messages in thread
From: Olof Johansson @ 2013-10-28 21:55 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Oct 28, 2013 at 12:04:43PM +0100, Tomasz Figa wrote:
> Hi,
> 
> 2013/10/15 Alex Courbot <acourbot@nvidia.com>:
> > On 10/15/2013 04:07 AM, Russell King - ARM Linux wrote:
> >>
> >> On Fri, Oct 11, 2013 at 02:45:34PM -0700, Alexandre Courbot wrote:
> >>>
> >>> Trusted Foundations is a TrustZone-based secure monitor for ARM that
> >>> can be invoked using the same SMC-based API on all supported
> >>> platforms. This patch adds initial basic support for Trusted
> >>> Foundations using the ARM firmware API. Current features are limited
> >>> to the ability to boot secondary processors.
> >>>
> >>> Note: The API followed by Trusted Foundations does *not* follow the SMC
> >>> calling conventions. It has nothing to do with PSCI neither and is only
> >>> relevant to devices that use Trusted Foundations (like most Tegra-based
> >>> retail devices).
> >>>
> >>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> >>> Reviewed-by: Tomasz Figa <t.figa@samsung.com>
> >>> Reviewed-by: Stephen Warren <swarren@nvidia.com>
> >>> ---
> >>>   .../arm/firmware/tl,trusted-foundations.txt        | 20 ++++++
> >>>   .../devicetree/bindings/vendor-prefixes.txt        |  1 +
> >>>   arch/arm/Kconfig                                   |  2 +
> >>>   arch/arm/Makefile                                  |  1 +
> >>>   arch/arm/firmware/Kconfig                          | 28 ++++++++
> >>>   arch/arm/firmware/Makefile                         |  1 +
> >>>   arch/arm/firmware/trusted_foundations.c            | 79
> >>> ++++++++++++++++++++++
> >>>   arch/arm/include/asm/trusted_foundations.h         | 68
> >>> +++++++++++++++++++
> >>>   8 files changed, 200 insertions(+)
> >>>   create mode 100644
> >>> Documentation/devicetree/bindings/arm/firmware/tl,trusted-foundations.txt
> >>>   create mode 100644 arch/arm/firmware/Kconfig
> >>>   create mode 100644 arch/arm/firmware/Makefile
> >>>   create mode 100644 arch/arm/firmware/trusted_foundations.c
> >>>   create mode 100644 arch/arm/include/asm/trusted_foundations.h
> >>
> >>
> >> Is having this under arch/arm appropriate?  What happens if the API
> >> gets re-used on ARM64 for example?  Would drivers/firmware be a better
> >> cross-arch location for this?
> >
> >
> > The reason why this has been put into arch/arm is that the firmware_ops
> > feature this patch depends also resides there
> > (arch/arm/include/asm/firmware.h).
> >
> > On the other hand it might also make sense to move firmware_ops out of ARM
> > since I don't see anything ARM-specific with it. Tomasz, could we have your
> > thoughts on this?
> 
> I don't see anything wrong in moving this out of arch/arm, feel free
> to do so.
> 
> However I guess that some (or all) of the names will have to
> be put into a more separate namespace, as the term "firmware" is a bit
> too generic IMHO. Possibly something like platform_firmware could be
> better.
> 
> What do you think?

I think we can probably merge this under arch/arm now, and when we figure out
what needs to be common with ARM64 we can move it out to a good location. It
might be that mostly just a header file with ABI conventions needs to be
shared, not actual implementation, for example.


-Olof

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

end of thread, other threads:[~2013-10-28 21:55 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-11 21:45 [PATCH v8 0/5] ARM: support for Trusted Foundations secure monitor Alexandre Courbot
2013-10-11 21:45 ` Alexandre Courbot
2013-10-11 21:45 ` Alexandre Courbot
     [not found] ` <1381527938-22840-1-git-send-email-acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-11 21:45   ` [PATCH v8 1/5] ARM: add basic support for Trusted Foundations Alexandre Courbot
2013-10-11 21:45     ` Alexandre Courbot
2013-10-11 21:45     ` Alexandre Courbot
     [not found]     ` <1381527938-22840-2-git-send-email-acourbot-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-14 22:12       ` Stephen Warren
2013-10-14 22:12         ` Stephen Warren
2013-10-14 22:12         ` Stephen Warren
2013-10-15 11:07       ` Russell King - ARM Linux
2013-10-15 11:07         ` Russell King - ARM Linux
2013-10-15 11:07         ` Russell King - ARM Linux
     [not found]         ` <20131015110725.GZ25034-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-10-15 16:11           ` Stephen Warren
2013-10-15 16:11             ` Stephen Warren
2013-10-15 16:11             ` Stephen Warren
2013-10-15 17:20           ` Alex Courbot
2013-10-15 17:20             ` Alex Courbot
2013-10-15 17:20             ` Alex Courbot
     [not found]             ` <525D7969.5060908-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-10-28 11:04               ` Tomasz Figa
2013-10-28 11:04                 ` Tomasz Figa
2013-10-28 11:04                 ` Tomasz Figa
     [not found]                 ` <CA+Ln22FdkcxOfq-yxVVQ7vTLWC3TYRBbAOZ=e3WmpSKkgk_DRg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-10-28 21:55                   ` Olof Johansson
2013-10-28 21:55                     ` Olof Johansson
2013-10-28 21:55                     ` Olof Johansson
2013-10-11 21:45 ` [PATCH v8 2/5] ARM: tegra: add " Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot
2013-10-11 21:45 ` [PATCH v8 3/5] ARM: tegra: split setting of CPU reset handler Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot
2013-10-11 21:45 ` [PATCH v8 4/5] ARM: tegra: set CPU reset handler with firmware op Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot
2013-10-11 21:45 ` [PATCH v8 5/5] ARM: tegra: support Trusted Foundations by default Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot
2013-10-11 21:45   ` Alexandre Courbot

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.