From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Andy Gross <agross@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
Maximilian Luz <luzmaximilian@gmail.com>,
Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org,
kernel@quicinc.com,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [PATCH v2 11/11] firmware: qcom: scm: enable SHM bridge
Date: Thu, 28 Sep 2023 11:20:40 +0200 [thread overview]
Message-ID: <20230928092040.9420-12-brgl@bgdev.pl> (raw)
In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl>
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Extens the SCM memory allocator with using the SHM Bridge feature if
available on the platform. This makes the trustzone only use dedicated
buffers for SCM calls. We map the entire SCM genpool as a bridge.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
drivers/firmware/qcom/qcom_scm-mem.c | 42 ++++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 3 deletions(-)
diff --git a/drivers/firmware/qcom/qcom_scm-mem.c b/drivers/firmware/qcom/qcom_scm-mem.c
index eafecbe23770..12b12b15f46f 100644
--- a/drivers/firmware/qcom/qcom_scm-mem.c
+++ b/drivers/firmware/qcom/qcom_scm-mem.c
@@ -16,6 +16,8 @@
#include "qcom_scm.h"
+#define QCOM_SHM_BRIDGE_NUM_VM_SHIFT 9
+
static size_t qcom_scm_mem_pool_size = SZ_2M;
module_param_named(qcom_scm_mem_pool_size, qcom_scm_mem_pool_size,
ulong, 0400);
@@ -108,8 +110,24 @@ phys_addr_t qcom_scm_mem_to_phys(void *vaddr)
return chunk->paddr;
}
+static int qcom_scm_mem_shm_bridge_create(void)
+{
+ uint64_t pfn_and_ns_perm, ipfn_and_s_perm, size_and_flags, ns_perms;
+
+ ns_perms = (QCOM_SCM_PERM_WRITE | QCOM_SCM_PERM_READ);
+ pfn_and_ns_perm = (u64)qcom_scm_mem.pbase | ns_perms;
+ ipfn_and_s_perm = (u64)qcom_scm_mem.pbase | ns_perms;
+ size_and_flags = qcom_scm_mem.size | (1 << QCOM_SHM_BRIDGE_NUM_VM_SHIFT);
+
+ return qcom_scm_create_shm_bridge(qcom_scm_mem.dev, pfn_and_ns_perm,
+ ipfn_and_s_perm, size_and_flags,
+ QCOM_SCM_VMID_HLOS);
+}
+
int qcom_scm_mem_enable(struct device *dev)
{
+ int ret;
+
INIT_RADIX_TREE(&qcom_scm_mem.chunks, GFP_ATOMIC);
spin_lock_init(&qcom_scm_mem.lock);
qcom_scm_mem.dev = dev;
@@ -128,7 +146,25 @@ int qcom_scm_mem_enable(struct device *dev)
gen_pool_set_algo(qcom_scm_mem.pool, gen_pool_best_fit, NULL);
- return gen_pool_add_virt(qcom_scm_mem.pool,
- (unsigned long)qcom_scm_mem.vbase,
- qcom_scm_mem.pbase, qcom_scm_mem.size, -1);
+ ret = gen_pool_add_virt(qcom_scm_mem.pool,
+ (unsigned long)qcom_scm_mem.vbase,
+ qcom_scm_mem.pbase, qcom_scm_mem.size, -1);
+ if (ret)
+ return ret;
+
+ ret = qcom_scm_enable_shm_bridge();
+ if (ret) {
+ if (ret == EOPNOTSUPP)
+ dev_info(dev, "SHM Bridge not supported\n");
+ else
+ return ret;
+ } else {
+ ret = qcom_scm_mem_shm_bridge_create();
+ if (ret)
+ return ret;
+
+ dev_info(dev, "SHM Bridge enabled\n");
+ }
+
+ return 0;
}
--
2.39.2
next prev parent reply other threads:[~2023-09-28 9:21 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-28 9:20 [PATCH v2 00/11] arm64: qcom: add and enable SHM Bridge support Bartosz Golaszewski
2023-09-28 9:20 ` [PATCH v2 01/11] firmware: qcom: move Qualcomm code into its own directory Bartosz Golaszewski
2023-09-28 17:08 ` Elliot Berman
2023-10-03 7:57 ` Krzysztof Kozlowski
2023-09-28 9:20 ` [PATCH v2 02/11] firmware: qcom: scm: add a dedicated SCM memory allocator Bartosz Golaszewski
2023-09-28 18:19 ` Jeff Johnson
2023-09-28 18:23 ` Bartosz Golaszewski
2023-09-28 9:20 ` [PATCH v2 03/11] firmware: qcom: scm: switch to using the SCM allocator Bartosz Golaszewski
2023-09-28 19:11 ` Elliot Berman
2023-09-29 8:15 ` Bartosz Golaszewski
2023-09-28 9:20 ` [PATCH v2 04/11] firmware: qcom: scm: make qcom_scm_assign_mem() use " Bartosz Golaszewski
2023-09-28 9:20 ` [PATCH v2 05/11] firmware: qcom: scm: make qcom_scm_ice_set_key() " Bartosz Golaszewski
2023-09-28 9:20 ` [PATCH v2 06/11] firmware: qcom: scm: make qcom_scm_pas_init_image() " Bartosz Golaszewski
2023-09-29 19:16 ` Andrew Halaney
2023-09-29 19:22 ` Bartosz Golaszewski
2023-09-29 20:44 ` Andrew Halaney
2023-09-29 22:48 ` Elliot Berman
2023-10-02 13:24 ` Andrew Halaney
2023-10-02 14:15 ` Andrew Halaney
2023-10-02 14:23 ` Bartosz Golaszewski
2023-09-28 9:20 ` [PATCH v2 07/11] firmware: qcom: scm: make qcom_scm_lmh_dcvsh() " Bartosz Golaszewski
2023-09-28 9:20 ` [RFT PATCH v2 08/11] firmware: qcom: scm: make qcom_scm_qseecom_app_get_id() " Bartosz Golaszewski
2023-09-28 9:20 ` [RFT PATCH v2 09/11] firmware: qcom: qseecom: convert to using " Bartosz Golaszewski
2023-09-28 9:20 ` [PATCH v2 10/11] firmware: qcom-scm: add support for SHM bridge operations Bartosz Golaszewski
2023-09-28 17:09 ` Elliot Berman
2023-09-28 9:20 ` Bartosz Golaszewski [this message]
2023-09-28 17:10 ` [PATCH v2 11/11] firmware: qcom: scm: enable SHM bridge Elliot Berman
2023-09-28 18:28 ` Bartosz Golaszewski
2023-09-28 19:00 ` Jeff Johnson
2023-09-29 19:00 ` Bartosz Golaszewski
2023-10-04 22:24 ` Maximilian Luz
2023-10-05 7:12 ` Bartosz Golaszewski
2023-10-05 9:12 ` Maximilian Luz
2023-09-29 15:29 ` [PATCH v2 00/11] arm64: qcom: add and enable SHM Bridge support Andrew Halaney
2023-09-29 18:56 ` Bartosz Golaszewski
2023-09-29 19:18 ` Andrew Halaney
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=20230928092040.9420-12-brgl@bgdev.pl \
--to=brgl@bgdev.pl \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=bartosz.golaszewski@linaro.org \
--cc=kernel@quicinc.com \
--cc=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luzmaximilian@gmail.com \
/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