From: Elliot Berman <eberman@codeaurora.org>
To: Bjorn Andersson <bjorn.andersson@linaro.org>,
agross@kernel.org, swboyd@chromium.org,
Stephan Gerhold <stephan@gerhold.net>
Cc: Elliot Berman <eberman@codeaurora.org>,
saiprakash.ranjan@codeaurora.org, tsoni@codeaurora.org,
sidgup@codeaurora.org, psodagud@codeaurora.org,
Brian Masney <masneyb@onstation.org>,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v5 09/17] firmware: qcom_scm-32: Use SMC arch wrappers
Date: Tue, 7 Jan 2020 13:04:18 -0800 [thread overview]
Message-ID: <1578431066-19600-10-git-send-email-eberman@codeaurora.org> (raw)
In-Reply-To: <1578431066-19600-1-git-send-email-eberman@codeaurora.org>
Use SMC arch wrappers instead of inline assembly.
Change-Id: Ia8b8518f842462eb3f7e0d3200497431ca9c2c4e
Tested-by: Brian Masney <masneyb@onstation.org> # arm32
Tested-by: Stephan Gerhold <stephan@gerhold.net>
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
---
drivers/firmware/Makefile | 1 -
drivers/firmware/qcom_scm-32.c | 71 ++++++++++--------------------------------
2 files changed, 17 insertions(+), 55 deletions(-)
diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile
index 3fcb919..747fb73 100644
--- a/drivers/firmware/Makefile
+++ b/drivers/firmware/Makefile
@@ -20,7 +20,6 @@ obj-$(CONFIG_FW_CFG_SYSFS) += qemu_fw_cfg.o
obj-$(CONFIG_QCOM_SCM) += qcom_scm.o
obj-$(CONFIG_QCOM_SCM_64) += qcom_scm-64.o
obj-$(CONFIG_QCOM_SCM_32) += qcom_scm-32.o
-CFLAGS_qcom_scm-32.o :=$(call as-instr,.arch armv7-a\n.arch_extension sec,-DREQUIRES_SEC=1) -march=armv7-a
obj-$(CONFIG_TI_SCI_PROTOCOL) += ti_sci.o
obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o
obj-$(CONFIG_TURRIS_MOX_RWTM) += turris-mox-rwtm.o
diff --git a/drivers/firmware/qcom_scm-32.c b/drivers/firmware/qcom_scm-32.c
index 8b57240..362d042 100644
--- a/drivers/firmware/qcom_scm-32.c
+++ b/drivers/firmware/qcom_scm-32.c
@@ -10,6 +10,7 @@
#include <linux/errno.h>
#include <linux/err.h>
#include <linux/qcom_scm.h>
+#include <linux/arm-smccc.h>
#include <linux/dma-mapping.h>
#include "qcom_scm.h"
@@ -121,25 +122,13 @@ static inline void *scm_legacy_get_response_buffer(
static u32 __scm_legacy_do(u32 cmd_addr)
{
int context_id;
- register u32 r0 asm("r0") = 1;
- register u32 r1 asm("r1") = (u32)&context_id;
- register u32 r2 asm("r2") = cmd_addr;
+ struct arm_smccc_res res;
do {
- asm volatile(
- __asmeq("%0", "r0")
- __asmeq("%1", "r0")
- __asmeq("%2", "r1")
- __asmeq("%3", "r2")
-#ifdef REQUIRES_SEC
- ".arch_extension sec\n"
-#endif
- "smc #0 @ switch to secure world\n"
- : "=r" (r0)
- : "r" (r0), "r" (r1), "r" (r2)
- : "r3", "r12");
- } while (r0 == QCOM_SCM_INTERRUPTED);
-
- return r0;
+ arm_smccc_smc(1, (unsigned long)&context_id, cmd_addr,
+ 0, 0, 0, 0, 0, &res);
+ } while (res.a0 == QCOM_SCM_INTERRUPTED);
+
+ return res.a0;
}
/**
@@ -237,24 +226,12 @@ static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
static s32 qcom_scm_call_atomic1(u32 svc, u32 cmd, u32 arg1)
{
int context_id;
+ struct arm_smccc_res res;
+
+ arm_smccc_smc(SCM_LEGACY_ATOMIC_ID(svc, cmd, 1),
+ (unsigned long)&context_id, arg1, 0, 0, 0, 0, 0, &res);
- register u32 r0 asm("r0") = SCM_LEGACY_ATOMIC_ID(svc, cmd, 1);
- register u32 r1 asm("r1") = (u32)&context_id;
- register u32 r2 asm("r2") = arg1;
-
- asm volatile(
- __asmeq("%0", "r0")
- __asmeq("%1", "r0")
- __asmeq("%2", "r1")
- __asmeq("%3", "r2")
-#ifdef REQUIRES_SEC
- ".arch_extension sec\n"
-#endif
- "smc #0 @ switch to secure world\n"
- : "=r" (r0)
- : "r" (r0), "r" (r1), "r" (r2)
- : "r3", "r12");
- return r0;
+ return res.a0;
}
/**
@@ -270,26 +247,12 @@ static s32 qcom_scm_call_atomic1(u32 svc, u32 cmd, u32 arg1)
static s32 qcom_scm_call_atomic2(u32 svc, u32 cmd, u32 arg1, u32 arg2)
{
int context_id;
+ struct arm_smccc_res res;
+
+ arm_smccc_smc(SCM_LEGACY_ATOMIC_ID(svc, cmd, 2),
+ (unsigned long)&context_id, arg1, 0, 0, 0, 0, 0, &res);
- register u32 r0 asm("r0") = SCM_LEGACY_ATOMIC_ID(svc, cmd, 2);
- register u32 r1 asm("r1") = (u32)&context_id;
- register u32 r2 asm("r2") = arg1;
- register u32 r3 asm("r3") = arg2;
-
- asm volatile(
- __asmeq("%0", "r0")
- __asmeq("%1", "r0")
- __asmeq("%2", "r1")
- __asmeq("%3", "r2")
- __asmeq("%4", "r3")
-#ifdef REQUIRES_SEC
- ".arch_extension sec\n"
-#endif
- "smc #0 @ switch to secure world\n"
- : "=r" (r0)
- : "r" (r0), "r" (r1), "r" (r2), "r" (r3)
- : "r12");
- return r0;
+ return res.a0;
}
/**
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2020-01-07 21:19 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-07 21:04 [PATCH v5 00/17] Restructure, improve target support for qcom_scm driver Elliot Berman
2020-01-07 21:04 ` [PATCH v5 01/17] firmware: qcom_scm: Rename macros and structures Elliot Berman
2020-01-07 21:04 ` [PATCH v5 02/17] firmware: qcom_scm: Apply consistent naming scheme to command IDs Elliot Berman
2020-01-07 21:04 ` [PATCH v5 03/17] firmware: qcom_scm: Remove unused qcom_scm_get_version Elliot Berman
2020-01-07 21:04 ` [PATCH v5 04/17] firmware: qcom_scm-64: Make SMC macros less magical Elliot Berman
2020-01-07 21:04 ` [PATCH v5 05/17] firmware: qcom_scm-64: Move svc/cmd/owner into qcom_scm_desc Elliot Berman
2020-01-07 21:04 ` [PATCH v5 06/17] firmware: qcom_scm-64: Add SCM results struct Elliot Berman
2020-01-07 21:04 ` [PATCH v5 07/17] firmware: qcom_scm-64: Move SMC register filling to qcom_scm_call_smccc Elliot Berman
2020-01-07 21:04 ` [PATCH v5 08/17] firmware: qcom_scm-64: Improve SMC convention detection Elliot Berman
2020-01-07 21:04 ` Elliot Berman [this message]
2020-01-07 21:04 ` [PATCH v5 10/17] firmware: qcom_scm-32: Add funcnum IDs Elliot Berman
2020-01-07 21:04 ` [PATCH v5 11/17] firmware: qcom_scm-32: Use qcom_scm_desc in non-atomic calls Elliot Berman
2020-01-07 21:04 ` [PATCH v5 12/17] firmware: qcom_scm-32: Move SMCCC register filling to qcom_scm_call Elliot Berman
2020-01-07 21:04 ` [PATCH v5 13/17] firmware: qcom_scm-32: Create common legacy atomic call Elliot Berman
2020-01-07 21:04 ` [PATCH v5 14/17] firmware: qcom_scm-32: Add device argument to atomic calls Elliot Berman
2020-01-07 21:04 ` [PATCH v5 15/17] firmware: qcom_scm: Order functions, definitions by service/command Elliot Berman
2020-01-07 21:04 ` [PATCH v5 16/17] firmware: qcom_scm: Remove thin wrappers Elliot Berman
2020-01-07 21:04 ` [PATCH v5 17/17] firmware: qcom_scm: Dynamically support SMCCC and legacy conventions Elliot Berman
2020-01-08 7:02 ` Stephen Boyd
2020-01-08 6:42 ` [PATCH v5 00/17] Restructure, improve target support for qcom_scm driver Bjorn Andersson
2020-01-08 6:54 ` Stephen Boyd
2020-01-08 7:21 ` Bjorn Andersson
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=1578431066-19600-10-git-send-email-eberman@codeaurora.org \
--to=eberman@codeaurora.org \
--cc=agross@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masneyb@onstation.org \
--cc=psodagud@codeaurora.org \
--cc=saiprakash.ranjan@codeaurora.org \
--cc=sidgup@codeaurora.org \
--cc=stephan@gerhold.net \
--cc=swboyd@chromium.org \
--cc=tsoni@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox