All of lore.kernel.org
 help / color / mirror / Atom feed
From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv2 10/12] drivers: psci: support native SMC{32,64} calls
Date: Mon, 18 May 2015 11:38:21 +0100	[thread overview]
Message-ID: <1431945503-6939-11-git-send-email-mark.rutland@arm.com> (raw)
In-Reply-To: <1431945503-6939-1-git-send-email-mark.rutland@arm.com>

A 32-bit OS cannot make calls with SMC64 IDs, while a 64-bit OS must
invoke some PSCI functions with SMC64 IDs.

This patch introduces and makes use of a new macro to choose the
appropriate IDs based on the register width of the OS, which will allow
32-bit callers to use the PSCI client code.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
---
 drivers/firmware/psci.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c
index 792f4a7..e071ada 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
@@ -27,6 +27,18 @@
 #include <asm/smp_plat.h>
 
 /*
+ * While a 64-bit OS can make calls with SMC32 calling conventions, for some
+ * calls it is necessary to use SMC64 to pass or return 64-bit values. For such
+ * calls PSCI_0_2_FN_NATIVE(x) will choose the appropriate (native-width)
+ * function ID.
+ */
+#ifdef CONFIG_64BIT
+#define PSCI_0_2_FN_NATIVE(name)	PSCI_0_2_FN_##name
+#else
+#define PSCI_0_2_FN_NATIVE(name)	PSCI_0_2_FN64_##name
+#endif
+
+/*
  * The CPU any Trusted OS is resident on. The trusted OS may reject CPU_OFF
  * calls to its resident CPU, so we must avoid issuing those. We never migrate
  * a Trusted OS even if it claims to be capable of migration -- doing so will
@@ -121,8 +133,8 @@ static int psci_migrate(unsigned long cpuid)
 static int psci_affinity_info(unsigned long target_affinity,
 		unsigned long lowest_affinity_level)
 {
-	return invoke_psci_fn(PSCI_0_2_FN64_AFFINITY_INFO, target_affinity,
-			      lowest_affinity_level, 0);
+	return invoke_psci_fn(PSCI_0_2_FN_NATIVE(AFFINITY_INFO),
+			      target_affinity, lowest_affinity_level, 0);
 }
 
 static int psci_migrate_info_type(void)
@@ -132,7 +144,8 @@ static int psci_migrate_info_type(void)
 
 static unsigned long psci_migrate_info_up_cpu(void)
 {
-	return invoke_psci_fn(PSCI_0_2_FN64_MIGRATE_INFO_UP_CPU, 0, 0, 0);
+	return invoke_psci_fn(PSCI_0_2_FN_NATIVE(MIGRATE_INFO_UP_CPU),
+			      0, 0, 0);
 }
 
 static int get_set_conduit_method(struct device_node *np)
@@ -204,16 +217,16 @@ static void __init psci_init_migrate(void)
 static void __init psci_0_2_set_functions(void)
 {
 	pr_info("Using standard PSCI v0.2 function IDs\n");
-	psci_function_id[PSCI_FN_CPU_SUSPEND] = PSCI_0_2_FN64_CPU_SUSPEND;
+	psci_function_id[PSCI_FN_CPU_SUSPEND] = PSCI_0_2_FN_NATIVE(CPU_SUSPEND);
 	psci_ops.cpu_suspend = psci_cpu_suspend;
 
 	psci_function_id[PSCI_FN_CPU_OFF] = PSCI_0_2_FN_CPU_OFF;
 	psci_ops.cpu_off = psci_cpu_off;
 
-	psci_function_id[PSCI_FN_CPU_ON] = PSCI_0_2_FN64_CPU_ON;
+	psci_function_id[PSCI_FN_CPU_ON] = PSCI_0_2_FN_NATIVE(CPU_ON);
 	psci_ops.cpu_on = psci_cpu_on;
 
-	psci_function_id[PSCI_FN_MIGRATE] = PSCI_0_2_FN64_MIGRATE;
+	psci_function_id[PSCI_FN_MIGRATE] = PSCI_0_2_FN_NATIVE(MIGRATE);
 	psci_ops.migrate = psci_migrate;
 
 	psci_ops.affinity_info = psci_affinity_info;
-- 
1.9.1

  parent reply	other threads:[~2015-05-18 10:38 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-18 10:38 [PATCHv2 00/12] arm/arm64: Unify PSCI client support Mark Rutland
2015-05-18 10:38 ` [PATCHv2 01/12] arm/arm64: kvm: add missing PSCI include Mark Rutland
2015-05-19  3:37   ` Hanjun Guo
2015-05-18 10:38 ` [PATCHv2 02/12] arm64: smp_plat: add get_logical_index Mark Rutland
2015-05-18 17:09   ` Catalin Marinas
2015-05-18 17:55     ` Mark Rutland
2015-05-19  3:47       ` Hanjun Guo
2015-05-19  8:31       ` Catalin Marinas
2015-05-19  9:10         ` Mark Rutland
2015-05-18 10:38 ` [PATCHv2 03/12] arm64: smp: consistently use error codes Mark Rutland
2015-05-18 17:21   ` Catalin Marinas
2015-05-19  8:17   ` Hanjun Guo
2015-05-18 10:38 ` [PATCHv2 04/12] arm64: psci: remove unnecessary id indirection Mark Rutland
2015-05-18 17:28   ` Catalin Marinas
2015-05-19  8:21   ` Hanjun Guo
2015-05-18 10:38 ` [PATCHv2 05/12] arm64: psci: support unsigned return values Mark Rutland
2015-05-18 17:29   ` Catalin Marinas
2015-05-19  8:25   ` Hanjun Guo
2015-05-18 10:38 ` [PATCHv2 06/12] arm64: psci: account for Trusted OS instances Mark Rutland
2015-05-18 17:33   ` Catalin Marinas
2015-05-18 10:38 ` [PATCHv2 07/12] arm64: psci: kill psci_power_state Mark Rutland
2015-05-18 17:36   ` Catalin Marinas
2015-05-18 18:11     ` Mark Rutland
2015-05-18 10:38 ` [PATCHv2 08/12] arm64: psci: remove ACPI coupling Mark Rutland
2015-05-18 17:38   ` Catalin Marinas
2015-05-19  8:40   ` Hanjun Guo
2015-05-19  9:18     ` Mark Rutland
2015-05-18 10:38 ` [PATCHv2 09/12] arm64: psci: factor invocation code to drivers Mark Rutland
2015-05-18 17:40   ` Catalin Marinas
2015-05-19  8:46   ` Hanjun Guo
2015-05-18 10:38 ` Mark Rutland [this message]
2015-05-18 17:43   ` [PATCHv2 10/12] drivers: psci: support native SMC{32,64} calls Catalin Marinas
2015-05-18 17:49     ` Mark Rutland
2015-05-18 10:38 ` [PATCHv2 11/12] ARM: migrate to common PSCI client code Mark Rutland
2015-05-18 17:45   ` Catalin Marinas
2015-05-18 10:38 ` [PATCHv2 12/12] MAINTAINERS: add PSCI entry Mark Rutland
2015-05-18 17:45   ` Catalin Marinas
2015-05-18 17:49 ` [PATCHv2 00/12] arm/arm64: Unify PSCI client support Catalin Marinas
2015-05-19  9:03   ` Lorenzo Pieralisi
2015-05-19  9:32     ` Mark Rutland
2015-05-19 15:20       ` Catalin Marinas
2015-05-19  8:54 ` Hanjun Guo
2015-05-19  9:33   ` Mark Rutland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1431945503-6939-11-git-send-email-mark.rutland@arm.com \
    --to=mark.rutland@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

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

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is 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.