From patchwork Mon Nov 20 13:21:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167118 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2194744vqn; Mon, 20 Nov 2023 05:23:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IGgu5hsic5TWhf5Sc9Mv7TtbBT3iQoVpAXh+l/nPRiWs8Kdm2MbT/hk+dv2RCWJEIhnUg04 X-Received: by 2002:a05:6a00:3387:b0:6cb:4bfb:6c65 with SMTP id cm7-20020a056a00338700b006cb4bfb6c65mr9238444pfb.11.1700486593747; Mon, 20 Nov 2023 05:23:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486593; cv=none; d=google.com; s=arc-20160816; b=G+0Mhjwd9aMGQWhIS2ejyMQvbBO6XRnC3DKteAbi/rgVD5JevFmeimGyMqeeJYD3Au XrF5IwYjalAS4SY5u0mDu9I2REXpdTXvHuntM9lNSsXAM/DtRQyGo9TJrNV34YcfvHW0 4c+mf/oJdqDT53cO5If8DIVpGrL+JriepVNqWq/twYXRezBBQWfusTA20g+GU3FEtcuh K6mVXm0cn4o2OMETmee0HAkQR2nGGJJIPKUTXQsNapA7fiDeL8tXlukORVKFM0DO2Spo QR+o3c17fY/+gCEGJjVmoL9N8QVY8xWvoNMZ1jTeBe3GlLeL78OUx2PITT/8uVv0ZaYc iYOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=gqwNCCuBqh/WWFIpJnk3k90Z7r8JGXi9+7UbmQKPyWc=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=eBxfVbRuHhxbHaj4TVETrCYPb6jPcK19/9Fn4Gu+YO3gHxXdXMi9IHUbBSFcgJV/Ng DyVNL8SL/6MfaRIEIcmWcuC2bhD1bIxqAgIurcpsCp/6ZYRJlpK8gy5bqbicMMHg/alE PCxS1hZQ3C8t8atgG4mGA+Ziwngqai1XgsyPG7BPmNCP0hmgvslx2x0mJ70Q2zTUoiAh tBPlmB9peaxWvA6qeer50VcKu9InuSZEKjgZDOZ7Py4ZnBOYAKZU9KxrImYByUIXbk3e Gg6PvDQIF+ThSPUsRdy5xJlrh29Bo/dRrKh4dIXe+EJbzr+B+n0hMy6Lfo06K70kxDy/ D/pw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="R6/vaF0r"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id k10-20020a056a00134a00b006cb65cfde7fsi4519319pfu.91.2023.11.20.05.23.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:23:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="R6/vaF0r"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 856918078C86; Mon, 20 Nov 2023 05:22:04 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232562AbjKTNVd (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232363AbjKTNVb (ORCPT ); Mon, 20 Nov 2023 08:21:31 -0500 Received: from mail-lj1-x234.google.com (mail-lj1-x234.google.com [IPv6:2a00:1450:4864:20::234]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EEECA137 for ; Mon, 20 Nov 2023 05:21:26 -0800 (PST) Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2c873cf9f74so27914761fa.0 for ; Mon, 20 Nov 2023 05:21:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486485; x=1701091285; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gqwNCCuBqh/WWFIpJnk3k90Z7r8JGXi9+7UbmQKPyWc=; b=R6/vaF0rCa8MwzFfVWxy1GqW98uBntOlR0UHw1LLgQHcLGrSbxLSCk7MnaCv1btu5g lQAv+ZwpiaV9juh7NZSIUd/T/9zD/hGaAXdug0rCrXHZHkklW3dWMwomS4XAour9ySWp OEY4yUYsJz339cf9E0QCwJhHrx1yvlOhK5J21SCHMrIOBRAU0YxrDMDOWxTMwe0F/USY Bewp9la51hB7r6kxmX2fWsDp3UZjz8xOEJQYfB2NUi70EfxW9hVJDK71ooBreUqschwN XP/1XSKVskmlGW97DL7rP+t+D93rFWMuN6w4x8J/hhyBydbFjoxPIr7tOhwbWAYZatQ8 WrZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486485; x=1701091285; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gqwNCCuBqh/WWFIpJnk3k90Z7r8JGXi9+7UbmQKPyWc=; b=onJulTuEhqETdEpxabIvVlRv3SOGEfJBKGu2Ykw6JNwcxMaxvpZnPYDVZXMJi2FNkT CDeXD1LRL2ynluM9Bzgpgag+MbD7smmFY8rIw4INBQ6cPRV5ZWsdVzGFBQR533a1OsoG DULljTc0Ka9+tW5yaSUbj//lN0ennXElcEmn9pc1jc/oFVNKOvj3tuxUU0P8cWFjfBu8 y1F9HwCw33mzlfsXkB7eCG49oY5e01zth6NRvZefYqr5nBKN905SYDZQQwrV4305f6yX 6iVXx/FWGOG2BdgF1qRjLpwz3YfmUQZjmkdAMQagI37A7k7BIa1NRe0WCD9hAn7NG99d SVAQ== X-Gm-Message-State: AOJu0YzAdmN/Eb+FzUyWyVz5b3nROVGi9ZCekAcFuQbfBoPzqyFfnyGY AzFzhBblXl/ZiqSUSvH/7nUpKA== X-Received: by 2002:a2e:a4d8:0:b0:2c8:87b3:420f with SMTP id p24-20020a2ea4d8000000b002c887b3420fmr574528ljm.28.1700486485053; Mon, 20 Nov 2023 05:21:25 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:24 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 01/12] firmware: qcom: add a dedicated TrustZone buffer allocator Date: Mon, 20 Nov 2023 14:21:07 +0100 Message-Id: <20231120132118.30473-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:04 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089430324998577 X-GMAIL-MSGID: 1783089430324998577 From: Bartosz Golaszewski We have several SCM calls that require passing buffers to the TrustZone on top of the SMC core which allocates memory for calls that require more than 4 arguments. Currently every user does their own thing which leads to code duplication. Many users call dma_alloc_coherent() for every call which is terribly unperformant (speed- and size-wise). Provide a set of library functions for creating and managing pool of memory which is suitable for sharing with the TrustZone, that is: page-aligned, contiguous and non-cachable as well as provides a way of mapping of kernel virtual addresses to physical space. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/Kconfig | 19 ++ drivers/firmware/qcom/Makefile | 1 + drivers/firmware/qcom/qcom_tzmem.c | 302 +++++++++++++++++++++++ drivers/firmware/qcom/qcom_tzmem.h | 13 + include/linux/firmware/qcom/qcom_tzmem.h | 28 +++ 5 files changed, 363 insertions(+) create mode 100644 drivers/firmware/qcom/qcom_tzmem.c create mode 100644 drivers/firmware/qcom/qcom_tzmem.h create mode 100644 include/linux/firmware/qcom/qcom_tzmem.h diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig index 3f05d9854ddf..b80269a28224 100644 --- a/drivers/firmware/qcom/Kconfig +++ b/drivers/firmware/qcom/Kconfig @@ -9,6 +9,25 @@ menu "Qualcomm firmware drivers" config QCOM_SCM tristate +config QCOM_TZMEM + tristate + +choice + prompt "TrustZone interface memory allocator mode" + default QCOM_TZMEM_MODE_DEFAULT + help + Selects the mode of the memory allocator providing memory buffers of + suitable format for sharing with the TrustZone. If in doubt, select + 'Default'. + +config QCOM_TZMEM_MODE_DEFAULT + bool "Default" + help + Use the default allocator mode. The memory is page-aligned, non-cachable + and contiguous. + +endchoice + config QCOM_SCM_DOWNLOAD_MODE_DEFAULT bool "Qualcomm download mode enabled by default" depends on QCOM_SCM diff --git a/drivers/firmware/qcom/Makefile b/drivers/firmware/qcom/Makefile index c9f12ee8224a..0be40a1abc13 100644 --- a/drivers/firmware/qcom/Makefile +++ b/drivers/firmware/qcom/Makefile @@ -5,5 +5,6 @@ obj-$(CONFIG_QCOM_SCM) += qcom-scm.o qcom-scm-objs += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o +obj-$(CONFIG_QCOM_TZMEM) += qcom_tzmem.o obj-$(CONFIG_QCOM_QSEECOM) += qcom_qseecom.o obj-$(CONFIG_QCOM_QSEECOM_UEFISECAPP) += qcom_qseecom_uefisecapp.o diff --git a/drivers/firmware/qcom/qcom_tzmem.c b/drivers/firmware/qcom/qcom_tzmem.c new file mode 100644 index 000000000000..68ca59c5598e --- /dev/null +++ b/drivers/firmware/qcom/qcom_tzmem.c @@ -0,0 +1,302 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Memory allocator for buffers shared with the TrustZone. + * + * Copyright (C) 2023 Linaro Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "qcom_tzmem.h" + +struct qcom_tzmem_pool { + void *vbase; + phys_addr_t pbase; + size_t size; + struct gen_pool *pool; + void *priv; +}; + +struct qcom_tzmem_chunk { + phys_addr_t paddr; + size_t size; + struct qcom_tzmem_pool *owner; +}; + +static struct device *qcom_tzmem_dev; +static RADIX_TREE(qcom_tzmem_chunks, GFP_ATOMIC); +static DEFINE_SPINLOCK(qcom_tzmem_chunks_lock); + +#if IS_ENABLED(CONFIG_QCOM_TZMEM_MODE_DEFAULT) + +static int qcom_tzmem_init(void) +{ + return 0; +} + +static int qcom_tzmem_init_pool(struct qcom_tzmem_pool *pool) +{ + return 0; +} + +static void qcom_tzmem_cleanup_pool(struct qcom_tzmem_pool *pool) +{ + +} + +#endif /* CONFIG_QCOM_TZMEM_MODE_DEFAULT */ + +/** + * qcom_tzmem_pool_new() - Create a new TZ memory pool. + * @size: Size of the new pool in bytes. + * + * Create a new pool of memory suitable for sharing with the TrustZone. + * + * Must not be used in atomic context. + * + * Returns: + * New memory pool address or ERR_PTR() on error. + */ +struct qcom_tzmem_pool *qcom_tzmem_pool_new(size_t size) +{ + struct qcom_tzmem_pool *pool; + int ret = -ENOMEM; + + if (!size) + return ERR_PTR(-EINVAL); + + size = PAGE_ALIGN(size); + + pool = kzalloc(sizeof(*pool), GFP_KERNEL); + if (!pool) + return ERR_PTR(-ENOMEM); + + pool->size = size; + + pool->vbase = dma_alloc_coherent(qcom_tzmem_dev, size, &pool->pbase, + GFP_KERNEL); + if (!pool->vbase) + goto err_kfree_pool; + + pool->pool = gen_pool_create(PAGE_SHIFT, -1); + if (!pool) + goto err_dma_free; + + gen_pool_set_algo(pool->pool, gen_pool_best_fit, NULL); + + ret = gen_pool_add_virt(pool->pool, (unsigned long)pool->vbase, + pool->pbase, size, -1); + if (ret) + goto err_destroy_genpool; + + ret = qcom_tzmem_init_pool(pool); + if (ret) + goto err_destroy_genpool; + + return pool; + +err_destroy_genpool: + gen_pool_destroy(pool->pool); +err_dma_free: + dma_free_coherent(qcom_tzmem_dev, size, pool->vbase, pool->pbase); +err_kfree_pool: + kfree(pool); + return ERR_PTR(ret); +} +EXPORT_SYMBOL_GPL(qcom_tzmem_pool_new); + +/** + * qcom_tzmem_pool_free() - Destroy a TZ memory pool and free all resources. + * @pool: Memory pool to free. + * + * Must not be called if any of the allocated chunks has not been freed. + * Must not be used in atomic context. + */ +void qcom_tzmem_pool_free(struct qcom_tzmem_pool *pool) +{ + struct qcom_tzmem_chunk *chunk; + struct radix_tree_iter iter; + bool non_empty = false; + void __rcu **slot; + + if (!pool) + return; + + qcom_tzmem_cleanup_pool(pool); + + scoped_guard(spinlock_irqsave, &qcom_tzmem_chunks_lock) { + radix_tree_for_each_slot(slot, &qcom_tzmem_chunks, &iter, 0) { + chunk = radix_tree_deref_slot_protected(slot, + &qcom_tzmem_chunks_lock); + + if (chunk->owner == pool) + non_empty = true; + } + } + + WARN(non_empty, "Freeing TZ memory pool with memory still allocated"); + + gen_pool_destroy(pool->pool); + dma_free_coherent(qcom_tzmem_dev, pool->size, pool->vbase, pool->pbase); + kfree(pool); +} +EXPORT_SYMBOL_GPL(qcom_tzmem_pool_free); + +static void devm_qcom_tzmem_pool_free(void *data) +{ + struct qcom_tzmem_pool *pool = data; + + qcom_tzmem_pool_free(pool); +} + +/** + * devm_qcom_tzmem_pool_new() - Managed variant of qcom_tzmem_pool_new(). + * @dev: Device managing this resource. + * @size: Size of the pool in bytes. + * + * Must not be used in atomic context. + * + * Returns: + * Address of the managed pool or ERR_PTR() on failure. + */ +struct qcom_tzmem_pool * +devm_qcom_tzmem_pool_new(struct device *dev, size_t size) +{ + struct qcom_tzmem_pool *pool; + int ret; + + pool = qcom_tzmem_pool_new(size); + if (IS_ERR(pool)) + return pool; + + ret = devm_add_action_or_reset(dev, devm_qcom_tzmem_pool_free, pool); + if (ret) + return ERR_PTR(ret); + + return pool; +} + +/** + * qcom_tzmem_alloc() - Allocate a memory chunk suitable for sharing with TZ. + * @pool: TZ memory pool from which to allocate memory. + * @size: Number of bytes to allocate. + * @gfp: GFP flags. + * + * Can be used in any context. + * + * Returns: + * Address of the allocated buffer or NULL if no more memory can be allocated. + * The buffer must be released using qcom_tzmem_free(). + */ +void *qcom_tzmem_alloc(struct qcom_tzmem_pool *pool, size_t size, gfp_t gfp) +{ + struct qcom_tzmem_chunk *chunk; + unsigned long vaddr; + int ret; + + if (!size) + return NULL; + + size = PAGE_ALIGN(size); + + chunk = kzalloc(sizeof(*chunk), gfp); + if (!chunk) + return NULL; + + vaddr = gen_pool_alloc(pool->pool, size); + if (!vaddr) { + kfree(chunk); + return NULL; + } + + chunk->paddr = gen_pool_virt_to_phys(pool->pool, vaddr); + chunk->size = size; + chunk->owner = pool; + + scoped_guard(spinlock_irqsave, &qcom_tzmem_chunks_lock) { + ret = radix_tree_insert(&qcom_tzmem_chunks, vaddr, chunk); + if (ret) { + gen_pool_free(pool->pool, vaddr, size); + kfree(chunk); + return NULL; + } + } + + return (void *)vaddr; +} +EXPORT_SYMBOL_GPL(qcom_tzmem_alloc); + +/** + * qcom_tzmem_free() - Release a buffer allocated from a TZ memory pool. + * @vaddr: Virtual address of the buffer. + * + * Can be used in any context. + */ +void qcom_tzmem_free(void *vaddr) +{ + struct qcom_tzmem_chunk *chunk; + + scoped_guard(spinlock_irqsave, &qcom_tzmem_chunks_lock) + chunk = radix_tree_delete_item(&qcom_tzmem_chunks, + (unsigned long)vaddr, NULL); + + if (!chunk) { + WARN(1, "Virtual address %p not owned by TZ memory allocator", + vaddr); + return; + } + + gen_pool_free(chunk->owner->pool, (unsigned long)vaddr, chunk->size); + kfree(chunk); +} +EXPORT_SYMBOL_GPL(qcom_tzmem_free); + +/** + * qcom_tzmem_to_phys() - Map the virtual address of a TZ buffer to physical. + * @vaddr: Virtual address of the buffer allocated from a TZ memory pool. + * + * Can be used in any context. The address must have been returned by a call + * to qcom_tzmem_alloc(). + * + * Returns: + * Physical address of the buffer. + */ +phys_addr_t qcom_tzmem_to_phys(void *vaddr) +{ + struct qcom_tzmem_chunk *chunk; + + guard(spinlock_irqsave)(&qcom_tzmem_chunks_lock); + + chunk = radix_tree_lookup(&qcom_tzmem_chunks, (unsigned long)vaddr); + if (!chunk) + return 0; + + return chunk->paddr; +} +EXPORT_SYMBOL_GPL(qcom_tzmem_to_phys); + +int qcom_tzmem_enable(struct device *dev) +{ + if (qcom_tzmem_dev) + return -EBUSY; + + qcom_tzmem_dev = dev; + + return qcom_tzmem_init(); +} +EXPORT_SYMBOL_GPL(qcom_tzmem_enable); + +MODULE_DESCRIPTION("TrustZone memory allocator for Qualcomm firmware drivers"); +MODULE_AUTHOR("Bartosz Golaszewski "); +MODULE_LICENSE("GPL"); diff --git a/drivers/firmware/qcom/qcom_tzmem.h b/drivers/firmware/qcom/qcom_tzmem.h new file mode 100644 index 000000000000..f82f5dc5b7b1 --- /dev/null +++ b/drivers/firmware/qcom/qcom_tzmem.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2023 Linaro Ltd. + */ + +#ifndef __QCOM_TZMEM_PRIV_H +#define __QCOM_TZMEM_PRIV_H + +struct device; + +int qcom_tzmem_enable(struct device *dev); + +#endif /* __QCOM_TZMEM_PRIV_H */ diff --git a/include/linux/firmware/qcom/qcom_tzmem.h b/include/linux/firmware/qcom/qcom_tzmem.h new file mode 100644 index 000000000000..8e7fddab8cb4 --- /dev/null +++ b/include/linux/firmware/qcom/qcom_tzmem.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2023 Linaro Ltd. + */ + +#ifndef __QCOM_TZMEM_H +#define __QCOM_TZMEM_H + +#include +#include +#include + +struct device; +struct qcom_tzmem_pool; + +struct qcom_tzmem_pool *qcom_tzmem_pool_new(size_t size); +void qcom_tzmem_pool_free(struct qcom_tzmem_pool *pool); +struct qcom_tzmem_pool * +devm_qcom_tzmem_pool_new(struct device *dev, size_t size); + +void *qcom_tzmem_alloc(struct qcom_tzmem_pool *pool, size_t size, gfp_t gfp); +void qcom_tzmem_free(void *ptr); + +DEFINE_FREE(qcom_tzmem, void *, if (_T) qcom_tzmem_free(_T)); + +phys_addr_t qcom_tzmem_to_phys(void *ptr); + +#endif /* __QCOM_TZMEM */ From patchwork Mon Nov 20 13:21:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167116 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2194353vqn; Mon, 20 Nov 2023 05:22:38 -0800 (PST) X-Google-Smtp-Source: AGHT+IGXu9WnDj+A22+aa7TghjSHcMcJfCbny5F5q4/tQ+OeS/EqeH/XmVWqmjgc1utj5VVhD9WW X-Received: by 2002:a05:6e02:1baa:b0:359:4ae3:cd8d with SMTP id n10-20020a056e021baa00b003594ae3cd8dmr10874466ili.6.1700486557891; Mon, 20 Nov 2023 05:22:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486557; cv=none; d=google.com; s=arc-20160816; b=iumt6HUDa8Pnks55ORKAcBFytwurLQ/+lbhxG8VlMgglbwtA6ZQZ5e4DXXB8BCQi4k 4w1X/8r2wNQd9pZu9fUOz+R23RkCXtvdWuXnrPXt/nbfnNlPtQ/k53QJbyV8b/7htK8z rKeFsEjJaJljsezgH7FgFnsSgqzdo1bu3v2FPfkFRlCS3jcmnEjqz7eGEOXLA0D17m7S eXQ/u2Q3YlANR8D2hja4zpPeEbhu/4oNjpTkKJRefSZxnLB6j/zwPfQpJ4dB21TsgKht 1krZqMWp+R1LiOJWdwnub/lj+QDiZTZs6239bkn8J9btg3HKWCVxPWXWOPeRj+r6NAqP pCdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=dkEfLIdUazWHVoS/f6N40pGJ+r4HD9QT8ToB//6WjKI=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=HTb30dyGnL9RiShis3ORdeJ/xQzp7lpBMXFr+DF5V67yh7x3UleovnVLZB9uScp8MV WkkG+BD9lRmOUQT+1D4HL2rXZP6WO/yQUZOSy/ox81Qj4a6tNiu4eZ52IBC9GlaPH6Au 4IpZE47fejlom7SpvqesHn13fDWa7OETGzGMcZUJSTW5MM/Jr8OB3kkkOl/GfJpWcmr0 xhP+1JfX1v/lKsCEsdeg5R15A0G4LQUTakdH9lN7qNawc4aGHBpKGUzRqPv24Xyl9nJE vc3Je0ku4766TS0kLjT8Xo9kWnmvKLX8GIqHiTsmyFcIo9ziCZexHnqOxspW7/+nWkV2 fhog== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=Zyfj7ofZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id cb6-20020a056a02070600b005ab7b51ab6csi8249912pgb.515.2023.11.20.05.22.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:22:37 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=Zyfj7ofZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 9B2C480A8DBB; Mon, 20 Nov 2023 05:22:17 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232637AbjKTNVf (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232369AbjKTNVb (ORCPT ); Mon, 20 Nov 2023 08:21:31 -0500 Received: from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com [IPv6:2a00:1450:4864:20::22f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D07BE139 for ; Mon, 20 Nov 2023 05:21:27 -0800 (PST) Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-2c6b30acacdso55077301fa.2 for ; Mon, 20 Nov 2023 05:21:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486486; x=1701091286; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dkEfLIdUazWHVoS/f6N40pGJ+r4HD9QT8ToB//6WjKI=; b=Zyfj7ofZwS7iS1mWlAnlUqhothV7z3UOni/InFGgsOrPAHLPr7P/YdlwaFkoejAu9X 5P6fMbpBmmYU+lFxzfFZbvoDxt1jcAYSmbjEGM3YPpF2GMUQCbyDvIIut0/erxQVO9PA fL9MUYSAgRvpN3LSRvKEPNgisi46bi5DEJsO6RnF+/59aLzkFaeTarVNYrdDUbJMmRAZ nalhVqx35UEcSJPZP/lfDX9dTwfQsTqJOE+xAu9EJw6ia5O8gl0Da8L2dEvpL/tHLJgv +yZVWBJoKX2nB2f2TKTQub55f9G2r6NnXZLbOM3ivcES8H4nG+pZA3a9QgKDK0qt2ASa bC2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486486; x=1701091286; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dkEfLIdUazWHVoS/f6N40pGJ+r4HD9QT8ToB//6WjKI=; b=iYR7oyc8TdtQwjCUgzsxPyPMydNRrRhq/hBbq01FS9mKn0QfjT9l0tdExt6doQArn9 w4up7nBLvwfLujVVkdFoTQEI4OKc0jqj+Bg8URkRuiABHuJ/xB8uyhoxtGMgZk0HqPTH vbgB7uTIo6sGzRQ0Rs7uyaMLNR6saywbsSNnLKHivg1LxAiNO/QdICD5yl3Wqe+7tJcl NrXK/BZXG99ZSgWCS64YYin1du9PbkhPUi8goiYWdsxRlcg63RsOmq5GaisxdDdNuyDZ Nl0jYY2UQBJkQfco/Q7jIR9iHBWyOZ9BOtrU53giH6kcbdh+7Go7Wj0K0eiOJby4jrQh Yrmg== X-Gm-Message-State: AOJu0YxF6mnA/ujiit3xi2EXuJY88Afiwuw3sjv1uEReQfIweBGfGBYT rV0JJIWABEywZRBUI7JNAs204Q== X-Received: by 2002:a2e:9008:0:b0:2c8:7176:1727 with SMTP id h8-20020a2e9008000000b002c871761727mr4806408ljg.5.1700486486135; Mon, 20 Nov 2023 05:21:26 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:25 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 02/12] firmware: qcom: scm: enable the TZ mem allocator Date: Mon, 20 Nov 2023 14:21:08 +0100 Message-Id: <20231120132118.30473-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:17 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089393226445645 X-GMAIL-MSGID: 1783089393226445645 From: Bartosz Golaszewski Select the TrustZone memory allocator in Kconfig and create a pool of memory shareable with the TrustZone when probing the SCM driver. This will allow a gradual conversion of all relevant SCM calls to using the dedicated allocator. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/Kconfig | 1 + drivers/firmware/qcom/qcom_scm.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig index b80269a28224..237da40de832 100644 --- a/drivers/firmware/qcom/Kconfig +++ b/drivers/firmware/qcom/Kconfig @@ -7,6 +7,7 @@ menu "Qualcomm firmware drivers" config QCOM_SCM + select QCOM_TZMEM tristate config QCOM_TZMEM diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 520de9b5633a..0d4c028be0c1 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -8,8 +8,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -20,9 +22,11 @@ #include #include #include +#include #include #include "qcom_scm.h" +#include "qcom_tzmem.h" static bool download_mode = IS_ENABLED(CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT); module_param(download_mode, bool, 0); @@ -41,6 +45,8 @@ struct qcom_scm { int scm_vote_count; u64 dload_mode_addr; + + struct qcom_tzmem_pool *mempool; }; struct qcom_scm_current_perm_info { @@ -1887,6 +1893,16 @@ static int qcom_scm_probe(struct platform_device *pdev) if (of_property_read_bool(pdev->dev.of_node, "qcom,sdi-enabled")) qcom_scm_disable_sdi(); + ret = qcom_tzmem_enable(__scm->dev); + if (ret) + return dev_err_probe(__scm->dev, ret, + "Failed to enable the TrustZone memory allocator\n"); + + __scm->mempool = devm_qcom_tzmem_pool_new(__scm->dev, SZ_256K); + if (IS_ERR(__scm->mempool)) + return dev_err_probe(__scm->dev, PTR_ERR(__scm->mempool), + "Failed to create the SCM memory pool\n"); + /* * Initialize the QSEECOM interface. * From patchwork Mon Nov 20 13:21:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167119 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2194956vqn; Mon, 20 Nov 2023 05:23:33 -0800 (PST) X-Google-Smtp-Source: AGHT+IF0iajqYnCMzygoEKuuMpoKi3uCBeKlebJ4B2L/hdDKiCd9yfhxoFVx3K35WdNk7/iaHtyQ X-Received: by 2002:a05:6a20:a127:b0:187:b16f:e779 with SMTP id q39-20020a056a20a12700b00187b16fe779mr10085964pzk.5.1700486613174; Mon, 20 Nov 2023 05:23:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486613; cv=none; d=google.com; s=arc-20160816; b=QOmNRaZ644mGFdp9ygJE9RH0fs72h0BEzCPCI4EyMDSDAwIaBzrxx32RgOx/oSmBX9 PEBh7LNuqU9Z/o2xPpn1p2f2xkADknrt7FBefYNTO/VMArI42r+CfjrTBYU/v1vq4sDB Rv2NIRTDNEfg7j9Sh+mYyfP4S7Bfx03szEd9Bf8y1te6h0ioooP2VfJ2foALJzBVM7S/ eRbbACcZiFPFLJOTJE8WHM15ls4z3LTXIs/kFtqXFH+0M3rQuznMKmSxYBBvLqmt5Rku nPbXwnQh7qwhWsm9AfbBVMQvDM55WpGuOe9RaPrDAoIUp2J2V8Doc/wiiNNeKS1SUSSQ OnLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=BazhM/BZ03YE7Yt2JlSm/CTHrHyW7p3eEne03QtvrUU=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=kvftlSEyGs2CAuGP/gZ++AeL4aIXP3Z4RKxwL0EfqGv2MqXLQjxb5Suvr1WgfOy7PG xODFuySSMEVxHlhj2Ynlgs4cEg/fmMsaYLKW9v7UtSDAfZsvxS+4f14C/Y7RmPNHaLEL UbfovqNpMEke9vZOQ7r/SDYzNIZdLN3OmigHcoJ21l3K1CmAb9j44lmfyrocbfVKZZyR qjKn2f3cF5MWvWtQOcsi2azFDr0h8uQY7W33AU2JfnLgvZCsK6L1QdVoM/m96dtLVKno qURWaJH+PlCKy0wLBn63JpEfMNxXl3Lt1qD9cy+I1fJlOwY9J+9kZJsMrJ52qhhTqcSR 8CBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=FCkZcHWk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id c11-20020a170902d48b00b001ce5b936707si604271plg.595.2023.11.20.05.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:23:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=FCkZcHWk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 0BC8C8088A50; Mon, 20 Nov 2023 05:22:24 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232711AbjKTNVi (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34278 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232135AbjKTNVc (ORCPT ); Mon, 20 Nov 2023 08:21:32 -0500 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9FD0E186 for ; Mon, 20 Nov 2023 05:21:28 -0800 (PST) Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4083dbc43cfso13087535e9.3 for ; Mon, 20 Nov 2023 05:21:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486487; x=1701091287; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BazhM/BZ03YE7Yt2JlSm/CTHrHyW7p3eEne03QtvrUU=; b=FCkZcHWkdl8nq2B09XOxJcXpdDL6TFmvWFR1nSJsX21yxJ0cXjkI95uJi3aGBrD82S +9Cb+zLiY9uNnQWu3yhTm6AYQVgUmjAkkLGcFHifUFFCvyB2vVJHw+dwuL4h7m5CU//2 t0RTd2cyE1EALA1D1DUoLzmbo0prHRHkXwfAQUu7M2D14fXxhiBJSZRSBr/KPbuZF5JT tcAp3b9Oq6JdYtBs0VqjKFQyGlpRqt9Cbtt3KhYcjcNOtxxhPK9fYwdbf7Yqs8ilKsPQ CRzVYsbaGNNJyz534VkVojp1I9WBm+erO2tUglIAJV++D08ifyQ60oSvlMQfVfs1t+NY 0rhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486487; x=1701091287; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BazhM/BZ03YE7Yt2JlSm/CTHrHyW7p3eEne03QtvrUU=; b=l+XUzH8SkSODrUkLHUCr+QM7AWm40nr1nWA6g6CHrFDJd3kHJK2HGxpGfxLxFRjlMb /k9Jol2tuocOQN/d+iq0twesRRXo7+Es5+Ub4pZtT1tv4klJ0VyR23pQyS+9grmjWwwL y+4Z92qBv/1LAyQS2Mc4OkXDZ0OddYnlCPoUUDqXbco5PKhSq3vwOkNKiMCXiqqu5epB 9plXdicsULLg/LAI+8hEla410sHYnLWkFeyhKzFMdtkHp0rD0n5XWHRYb8pFqX9Yoqrp lo7yHx/eqxlKRq1XVIJ1j1tbHjiODGzlvsuPWtOPX2wx1AGAlmgyOPeMuz6nr9plrqBi Vlpw== X-Gm-Message-State: AOJu0Yw8OYEEIQ22YOSnza5WP5tSe9M3ENElvNne94ulsZqUAsoyt9by rRq6Cfks/P0pJuF2/wN71K3wF0lcLEboUKk0/t8= X-Received: by 2002:a05:600c:4ecc:b0:406:5344:4212 with SMTP id g12-20020a05600c4ecc00b0040653444212mr5553894wmq.41.1700486487129; Mon, 20 Nov 2023 05:21:27 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:26 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 03/12] firmware: qcom: scm: smc: switch to using the SCM allocator Date: Mon, 20 Nov 2023 14:21:09 +0100 Message-Id: <20231120132118.30473-4-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:24 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089450800606043 X-GMAIL-MSGID: 1783089450800606043 From: Bartosz Golaszewski We need to allocate, map and pass a buffer to the trustzone if we have more than 4 arguments for a given SCM calls. Let's use the new TrustZone allocator for that memory and shrink the code in process. As this code lives in a different compilation unit than the rest of the SCM code, we need to provide a helper in the form of qcom_scm_get_tzmem_pool() that allows the SMC low-level routines to access the SCM memory pool. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/qcom_scm-smc.c | 30 ++++++++-------------------- drivers/firmware/qcom/qcom_scm.c | 5 +++++ drivers/firmware/qcom/qcom_scm.h | 3 +++ 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm-smc.c b/drivers/firmware/qcom/qcom_scm-smc.c index 16cf88acfa8e..dca5f3f1883b 100644 --- a/drivers/firmware/qcom/qcom_scm-smc.c +++ b/drivers/firmware/qcom/qcom_scm-smc.c @@ -2,6 +2,7 @@ /* Copyright (c) 2015,2019 The Linux Foundation. All rights reserved. */ +#include #include #include #include @@ -9,6 +10,7 @@ #include #include #include +#include #include #include @@ -150,11 +152,10 @@ int __scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc, enum qcom_scm_convention qcom_convention, struct qcom_scm_res *res, bool atomic) { + struct qcom_tzmem_pool *mempool = qcom_scm_get_tzmem_pool(); int arglen = desc->arginfo & 0xf; int i, ret; - dma_addr_t args_phys = 0; - void *args_virt = NULL; - size_t alloc_len; + void *args_virt __free(qcom_tzmem) = NULL; gfp_t flag = atomic ? GFP_ATOMIC : GFP_KERNEL; u32 smccc_call_type = atomic ? ARM_SMCCC_FAST_CALL : ARM_SMCCC_STD_CALL; u32 qcom_smccc_convention = (qcom_convention == SMC_CONVENTION_ARM_32) ? @@ -172,9 +173,9 @@ int __scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc, smc.args[i + SCM_SMC_FIRST_REG_IDX] = desc->args[i]; if (unlikely(arglen > SCM_SMC_N_REG_ARGS)) { - alloc_len = SCM_SMC_N_EXT_ARGS * sizeof(u64); - args_virt = kzalloc(PAGE_ALIGN(alloc_len), flag); - + args_virt = qcom_tzmem_alloc(mempool, + SCM_SMC_N_EXT_ARGS * sizeof(u64), + flag); if (!args_virt) return -ENOMEM; @@ -192,25 +193,10 @@ int __scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc, SCM_SMC_FIRST_EXT_IDX]); } - args_phys = dma_map_single(dev, args_virt, alloc_len, - DMA_TO_DEVICE); - - if (dma_mapping_error(dev, args_phys)) { - kfree(args_virt); - return -ENOMEM; - } - - smc.args[SCM_SMC_LAST_REG_IDX] = args_phys; + smc.args[SCM_SMC_LAST_REG_IDX] = qcom_tzmem_to_phys(args_virt); } - /* ret error check follows after args_virt cleanup*/ ret = __scm_smc_do(dev, &smc, &smc_res, atomic); - - if (args_virt) { - dma_unmap_single(dev, args_phys, alloc_len, DMA_TO_DEVICE); - kfree(args_virt); - } - if (ret) return ret; diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 0d4c028be0c1..71e98b666391 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -201,6 +201,11 @@ static void qcom_scm_bw_disable(void) enum qcom_scm_convention qcom_scm_convention = SMC_CONVENTION_UNKNOWN; static DEFINE_SPINLOCK(scm_query_lock); +struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void) +{ + return __scm->mempool; +} + static enum qcom_scm_convention __get_convention(void) { unsigned long flags; diff --git a/drivers/firmware/qcom/qcom_scm.h b/drivers/firmware/qcom/qcom_scm.h index 4532907e8489..aa7d06939f8e 100644 --- a/drivers/firmware/qcom/qcom_scm.h +++ b/drivers/firmware/qcom/qcom_scm.h @@ -5,6 +5,7 @@ #define __QCOM_SCM_INT_H struct device; +struct qcom_tzmem_pool; enum qcom_scm_convention { SMC_CONVENTION_UNKNOWN, @@ -78,6 +79,8 @@ int scm_legacy_call_atomic(struct device *dev, const struct qcom_scm_desc *desc, int scm_legacy_call(struct device *dev, const struct qcom_scm_desc *desc, struct qcom_scm_res *res); +struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void); + #define QCOM_SCM_SVC_BOOT 0x01 #define QCOM_SCM_BOOT_SET_ADDR 0x01 #define QCOM_SCM_BOOT_TERMINATE_PC 0x02 From patchwork Mon Nov 20 13:21:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167122 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2195489vqn; Mon, 20 Nov 2023 05:24:26 -0800 (PST) X-Google-Smtp-Source: AGHT+IGOy/e6VKI4gsyoQcEmJfNSnnin2/8a69hVwtPhx8ZkZYHWfUX51eL3G6MdZvGEN4dA24V6 X-Received: by 2002:a05:6a00:4787:b0:6c4:d78d:498e with SMTP id dh7-20020a056a00478700b006c4d78d498emr15380831pfb.2.1700486666377; Mon, 20 Nov 2023 05:24:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486666; cv=none; d=google.com; s=arc-20160816; b=dsw+psiZ/Vkifj3jaKRvGhMdP/+M3GJ4vZ27+eVIlQcIxbKBzysv80rKT1JPTzOihy 7MxFckL0/BTqLz3khM48bIr1fkDpFxat4nid1NPxcgtfzm7k2yQJWyMJy0rlI0qDsD0M kQWN0Lz/0c5rJyEl/0Z23w21F1VheV/qg3RRimwkuAgqWtlWYGxuASY8vjlwrHjpgFIU TDDcjsGPkkw0f4f5qHY7N5TKnbOZL4uBmhiuU3+lK2vX2p6QAvIN2xe/TGJ2E68tcQJx /IUAcbtDSa+dZQYDmiAtC09mBKZyuMO/Ppg5QcuBywNI9scD7tCUXTI+eDUoqiovpBcm 9gng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=L3T+Nz29XwJpeLbYrWkBbO8epnldil1IzN2t5jt5R90=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=Sv5t7mFGdoY+cHvxPDRQZe5MMHDIoo7OPGaAs10p1HvAufDeeHKOGzUwBQUH06KZwu FlBPMwIElaN4zOyOf22GWiXWJQ2uGI/KZM3HbUDQCvQr861buCHgwowCvlFFMQ5Z8woh lnXkTPaIEQdPqZeYVqy4nY/ff0vXbuSn/H7qjB4JdupTrP9sFlc0ReMtWhaDzYaFLJ2s kuMJE4OwJz5guiG+opt1+irGV7GWfGGhX2Ap5272AeC38mz7E3+LUZWN8BYhAjbYZm3W q4nidhoR4Snh0GlWaWmCg/c9+kIYAJX1c7cRLasvShahyulTdnTqTUGudks4lB7rl+ag OPKQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=LDFugB4p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id fi12-20020a056a00398c00b006be26c1be4bsi8035867pfb.73.2023.11.20.05.24.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:24:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=LDFugB4p; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 40414805EAD7; Mon, 20 Nov 2023 05:22:10 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232859AbjKTNVk (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34284 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232541AbjKTNVd (ORCPT ); Mon, 20 Nov 2023 08:21:33 -0500 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7877194 for ; Mon, 20 Nov 2023 05:21:29 -0800 (PST) Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-40a48775c58so17078675e9.3 for ; Mon, 20 Nov 2023 05:21:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486488; x=1701091288; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=L3T+Nz29XwJpeLbYrWkBbO8epnldil1IzN2t5jt5R90=; b=LDFugB4paiSlagxsN6rZsh3XxaKiE74dENjHWNTQB55eTwp73sG1DdfemiMAkOBtVB fBNT2huZp2e84BXG/zUwdfogViLJlTW+cuRmgdu0GAmsvAaGg9raBkv+QXw+LVw91KIo nwI1Oa4e3niRMx4R/eSlDlC0YUab73PltEGWvQvEAE5aAIGpdZMunrrIPW3zZC6UhLVV JSmyYcHdfKnmBlHZTvKLLUMtbrKGN7Q+Sbz9iaJHBjVLiUv9c8UrWsObM4Op8QHF3bSI ZQjwGG5VWAKNMxtD/yd4fIK6qjsVgKMcD0ngEn44C1Pz+AJym2GoT5NEiTwZo5xLBldy XdgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486488; x=1701091288; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=L3T+Nz29XwJpeLbYrWkBbO8epnldil1IzN2t5jt5R90=; b=ufuDbdbdVw/i7UWCzjH54cTYYasSBalTSixjrtSCVxJX6yK/LtvDqbw96sMEikNSzc t7uyJWsuV23Tk2TRZ0t+4gu5wxspqb627wSOw/ZhyV/bn/0HvNonwbLBDNx4IwXNupXX i1MmghNm1WpKhiGgd+ZGJk+rJy49VF1C4rJwpaHVjPuM32dSnMPp+Z5J7JNHP7oHtEus 6DuNe1Sz5l6RrH3Ml/PM4DuvLy3kKGXI8bsHDkB6/5CstKij9dnBz86cWbLWWxK07BFK CjRAt/1MWIYWBsQITrRzvNr216PLtVyyxDLDmQInmRZJNs9SFjgEXhtmKMskiikjWEEc /Jkg== X-Gm-Message-State: AOJu0Yz40uBo2pCquNfKivja8DGywfn1T/WAmd6FOGigj9Pp0ipGVKEs y+mBOaTe22Oc4av8wEKkI+V4xA== X-Received: by 2002:a05:600c:3d95:b0:40b:22de:b89a with SMTP id bi21-20020a05600c3d9500b0040b22deb89amr1639516wmb.31.1700486488069; Mon, 20 Nov 2023 05:21:28 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:27 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 04/12] firmware: qcom: scm: make qcom_scm_assign_mem() use the TZ allocator Date: Mon, 20 Nov 2023 14:21:10 +0100 Message-Id: <20231120132118.30473-5-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:10 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089506942407818 X-GMAIL-MSGID: 1783089506942407818 From: Bartosz Golaszewski Let's use the new TZ memory allocator to obtain a buffer for this call instead of using dma_alloc_coherent(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/qcom_scm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 71e98b666391..754f6056b99f 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -4,6 +4,7 @@ */ #include +#include #include #include #include @@ -998,14 +999,13 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz, struct qcom_scm_mem_map_info *mem_to_map; phys_addr_t mem_to_map_phys; phys_addr_t dest_phys; - dma_addr_t ptr_phys; + phys_addr_t ptr_phys; size_t mem_to_map_sz; size_t dest_sz; size_t src_sz; size_t ptr_sz; int next_vm; __le32 *src; - void *ptr; int ret, i, b; u64 srcvm_bits = *srcvm; @@ -1015,10 +1015,13 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz, ptr_sz = ALIGN(src_sz, SZ_64) + ALIGN(mem_to_map_sz, SZ_64) + ALIGN(dest_sz, SZ_64); - ptr = dma_alloc_coherent(__scm->dev, ptr_sz, &ptr_phys, GFP_KERNEL); + void *ptr __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, + ptr_sz, GFP_KERNEL); if (!ptr) return -ENOMEM; + ptr_phys = qcom_tzmem_to_phys(ptr); + /* Fill source vmid detail */ src = ptr; i = 0; @@ -1047,7 +1050,6 @@ int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz, ret = __qcom_scm_assign_mem(__scm->dev, mem_to_map_phys, mem_to_map_sz, ptr_phys, src_sz, dest_phys, dest_sz); - dma_free_coherent(__scm->dev, ptr_sz, ptr, ptr_phys); if (ret) { dev_err(__scm->dev, "Assign memory protection call failed %d\n", ret); From patchwork Mon Nov 20 13:21:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167117 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2194467vqn; Mon, 20 Nov 2023 05:22:47 -0800 (PST) X-Google-Smtp-Source: AGHT+IExz2MERQQAMqHXbFEZtuZ+oKW829E6DUc6e1GO3gf1M5bX1R1iqwDHHejt4zssaaqEvMhl X-Received: by 2002:a17:903:2309:b0:1cf:66a2:d369 with SMTP id d9-20020a170903230900b001cf66a2d369mr951389plh.1.1700486567590; Mon, 20 Nov 2023 05:22:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486567; cv=none; d=google.com; s=arc-20160816; b=vRPxvHbfuctjXfISxkEcOvakpKE+cmkkLiZ2yDw627GsYvhHNyrG+rX9sdplQu5yBI AQtl/a2k9i1PsLe5t4fUPbfqD5tcwzJvqleD4UKRXhWBada7HseC+AXWAwTTozcN7vDu R44CrOKcKnigx6gNdivVrkZfHsobvOIXZ+OuUiPfQ4de9De2+RHOsSOAYqGj19dbY4VQ hu3bv1IjlN9YBRsYt5JFNA6wD3hkXVM6fYUbY9LwcpTXnyHK5mik47eeUsfEcrzwdJj2 n2H1NP6JCZvXilXppbXz7EyLSqP+47YsLsKdiP4Uo51pl9oFmVpp7/AMYYJotLi/Unxm /TRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Xqz1VK0mYS8f9CyDoxvSzBDgulCTNu27LF81cKbiT0w=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=OV1Wmt/q23/jGuEZpr7d6IHGTd99uT+p4DE+SRVi4MBJNl0y5IQOCSoNU+GKT/E20S 4yWYQFIM45mGqFRNHRjuxLWQE/Y3yITfQBiolwpRysI+TKt4uueHbPGKmNw1N1p7BqER 1hJrFEzuLpJzl8/OoK2N9/HTqKTnX+hwJ84zpIgVbuA9QwhIYW2pLvziL9G06TL7coGI FYrCpm5lH9MVkEfF5aZiTo/8EVBQvhFNmj4D3LmIgvchUKKvDka1jMojB2ftrXDxIgO1 zJTUY3N7ezTLmNffMjqOjXSd9qoKWhhRUafr8++T2HerWMNbquFQHstYeKgn/ULGb4g+ lLqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="Po3/Amb7"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id a9-20020a170902ecc900b001cf50ffd38dsi5476431plh.164.2023.11.20.05.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:22:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="Po3/Amb7"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id A626A808BDBC; Mon, 20 Nov 2023 05:22:31 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232809AbjKTNVo (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232632AbjKTNVf (ORCPT ); Mon, 20 Nov 2023 08:21:35 -0500 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9D5D137 for ; Mon, 20 Nov 2023 05:21:30 -0800 (PST) Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-40859dee28cso18021015e9.0 for ; Mon, 20 Nov 2023 05:21:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486489; x=1701091289; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Xqz1VK0mYS8f9CyDoxvSzBDgulCTNu27LF81cKbiT0w=; b=Po3/Amb7v1NdnzU3tMQLlJeY7SmhfqjZ2Z+Omz2Bc0vfT1dNdthmh3earOgDyeupn7 n55oIsO8+cy90Bo8aCDtNMUqBtkf8nzI6R99ZUATe1s10MjMJpt7uhtgSK8u9qrgvW6N 2Jy9ZjHKj3inwTHS+2qSNlE1qbrv8NpOsl4jDpDzSs5fn5aoOcGuDhrwIux5XX6t6hWB nvHeRSS4QAjnwgWEVkD/vWOMYDHM9+UJBnc/Vh/lc4OpgenhOfdifere5CeIcrJhGj5m ENGVfSODVTpozEp0uAclpwGjxgBRvoLMlHP+ELoboQ6IOEZeDXZ07B9emTfaNt4udKkF 1hUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486489; x=1701091289; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xqz1VK0mYS8f9CyDoxvSzBDgulCTNu27LF81cKbiT0w=; b=nLTggS+ouULItR1H7LBwzwHg3tZJZUBEi1aRVTIpDt+CJLjJXnPtukLseZSaxhEbfU gD4SuShPoZS+ZSmWCoStx5jVDdUcKTqFPfmhh9oTs14xU/uKpnTD9lptujwXPlvuXJNa VxERhCjgq+3wYmJjnnK+GOzEyf39ZBGUsyKPgz4ZS3HyigvhnrsTmjgEzJv81T48DlL2 Cak51EifHIau67UhxSbGAN8pVGwILY0nsSG5hCZB4M29T6LfMBrrBiW56hMroH6GW8zJ 0yA7Yp5hNjGlvhwnYutuGQ2eqFIf0llRxNMzHTGNBwnZWw4kQddLtiJyZhmsbdBPESsL E0AA== X-Gm-Message-State: AOJu0YxXOn2OP+V1Jv3MpnDTDT1XL/ae7rnPIgCGt6Fz4hMTxHv/lXPM HwCC2cCA1pfU61Lk9ZzNANo3Bg== X-Received: by 2002:a05:600c:1994:b0:405:40ec:415d with SMTP id t20-20020a05600c199400b0040540ec415dmr6097795wmq.39.1700486489266; Mon, 20 Nov 2023 05:21:29 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:28 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 05/12] firmware: qcom: scm: make qcom_scm_ice_set_key() use the TZ allocator Date: Mon, 20 Nov 2023 14:21:11 +0100 Message-Id: <20231120132118.30473-6-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:31 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089403338961697 X-GMAIL-MSGID: 1783089403338961697 From: Bartosz Golaszewski Let's use the new TZ memory allocator to obtain a buffer for this call instead of using dma_alloc_coherent(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/qcom_scm.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 754f6056b99f..31071a714cf1 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1197,32 +1197,21 @@ int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size, .args[4] = data_unit_size, .owner = ARM_SMCCC_OWNER_SIP, }; - void *keybuf; - dma_addr_t key_phys; + int ret; - /* - * 'key' may point to vmalloc()'ed memory, but we need to pass a - * physical address that's been properly flushed. The sanctioned way to - * do this is by using the DMA API. But as is best practice for crypto - * keys, we also must wipe the key after use. This makes kmemdup() + - * dma_map_single() not clearly correct, since the DMA API can use - * bounce buffers. Instead, just use dma_alloc_coherent(). Programming - * keys is normally rare and thus not performance-critical. - */ - - keybuf = dma_alloc_coherent(__scm->dev, key_size, &key_phys, - GFP_KERNEL); + void *keybuf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, + key_size, + GFP_KERNEL); if (!keybuf) return -ENOMEM; memcpy(keybuf, key, key_size); - desc.args[1] = key_phys; + desc.args[1] = qcom_tzmem_to_phys(keybuf); ret = qcom_scm_call(__scm->dev, &desc, NULL); memzero_explicit(keybuf, key_size); - dma_free_coherent(__scm->dev, key_size, keybuf, key_phys); return ret; } EXPORT_SYMBOL_GPL(qcom_scm_ice_set_key); From patchwork Mon Nov 20 13:21:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167125 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2195733vqn; Mon, 20 Nov 2023 05:24:54 -0800 (PST) X-Google-Smtp-Source: AGHT+IHS0fEbhNxk+/0BpSZpEOtX4IeDNxu0Mk7E9kEjor4FbljEh7T9B1TKv+AKUwzB+uvEMnoT X-Received: by 2002:a05:6a20:4326:b0:187:651d:7d9e with SMTP id h38-20020a056a20432600b00187651d7d9emr9071992pzk.26.1700486694344; Mon, 20 Nov 2023 05:24:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486694; cv=none; d=google.com; s=arc-20160816; b=iYWk522nM8VmWNYqXL1LjomlQxfdorGNeZMWxOHe895SJG2wl5HVMHwdypC0sSu9Cr 85NPwq88nJQl3KcsaL0+z4VjSH28nAW9CQb2lAZkr2anQXI63f+7Z1x9CpLmf7tuLE0I KW/NLg6qwyAzUq28pjeDZfWstKQ6K7B6kPQJarcjBU0dfCoF5QkO6pNXuE3iaVDo66vq wIl2osMW1woRNYYwVcvqX0MwoXYogOG7J6IVWrIuZobkiRdyCr7c1StZOv+5AEjK+Ko3 DxpLHyglhDYPqKItjVl6GhYIFzI34uBjZcv2hjqGFM4oAMeqxyrMrgETvS22aSODWN2W Eo2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=eVNRTBYkQ35refPua6fnWM3rCBTplvWDVxVAY6Q7+Wo=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=tFxYC8ttqkXnpvMea6Qs6i02Jq7QbI8iQjk7MRsj2StR9kZCMPZ0onqQAqo500E6+G jl+HjZjj5PedUT9BPMUmQZMHpqJIElClEsMl9xikd0vMHqODYd+U2p6nCPuhulDG1E2E NnsAVTorrxc8aN8+jHmJpXc7zYXGkx9ErMBYx7z6AcdEG5pcdOE+vNugfQQAzNDJmqWi qZs+i8lB+LakkXRD+6J3wOsi8OXdP6ZpXrQ4gKBLCrD1nYZOQdzk+6QvTVLA4e28NYea 7BX6IGXhGi//pXXR1XOerJyZmwXmTzSgfuQj0j+sX73hmTWjypB/hOmMm9b2BVmHfBPt VtdQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=06ENAWdG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id k10-20020a056a00134a00b006cb65cfde7fsi4521924pfu.91.2023.11.20.05.24.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:24:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=06ENAWdG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 034FF80613B3; Mon, 20 Nov 2023 05:22:06 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232861AbjKTNVr (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34300 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232369AbjKTNVg (ORCPT ); Mon, 20 Nov 2023 08:21:36 -0500 Received: from mail-lj1-x231.google.com (mail-lj1-x231.google.com [IPv6:2a00:1450:4864:20::231]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11EBA129 for ; Mon, 20 Nov 2023 05:21:32 -0800 (PST) Received: by mail-lj1-x231.google.com with SMTP id 38308e7fff4ca-2c5071165d5so54159071fa.0 for ; Mon, 20 Nov 2023 05:21:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486490; x=1701091290; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eVNRTBYkQ35refPua6fnWM3rCBTplvWDVxVAY6Q7+Wo=; b=06ENAWdGBeAnHR+lsgGj3XxK1mVXckIWesjfGY03ucUnLrKvBVCmCXeUj03l5U6Bsr 2wrMSsw3b6YS28rOb8dtzwWyU0G5wk3pTEnHNEa4C4bdvUa01vw9VuiVMMPWu3NiUYdk JRgtARoc/sQySnlRXNVJ+icaCx3v5btjtWnnlhCx/48PXElyKNTqWuT0ruYE+YdK86ns woEV9DNr+n5jgSDunn847w3QFWDnBF+s7ngYAEh4BROGviCkN26SEVJSRpdACoi/sLY6 R4PSQ1YFqcYL3u/4MfFF8SUmL96lnKlp9Jdjt/4ZPa+WC1kUQLyOUWHgObcFEERe8iWl zXRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486490; x=1701091290; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eVNRTBYkQ35refPua6fnWM3rCBTplvWDVxVAY6Q7+Wo=; b=h5LhxhBu0Q0sbjsmRbDjQ9JdNO5XIzuTK/0GRhIW4ArhAhVmAYd5X8dciEe0PDQY3I ccb71OPWSc08W1y37BWvbi3mT+GcySaTnC+wcZca0qMV7TFqOUDD9Kaus0hVMYL09CRa e9QwyRfxTKiBfX7Qk3SywqQbGtF7OmpotwO7jNM32ALvT3IGBdu6gtafTdiTrF6FftGK viRnCEuqC7x3o/7CWi0rfSUbyQldgTOJ0zPAueJtoaMSGxATEkUSffwVl+y/oq6KzwCB 2qUz4XZzM8QbXFnSvlmU8qobW321Uz9qgXiN4+Tg5oxgPu6wF7GFCxZMTHLFwKbqfE93 KsyQ== X-Gm-Message-State: AOJu0YyTOU7Cn2g+u7FiGb0AhCfpUxzl4y2woafquj6ohH4/IQpMXCqc Yn7gf+/PKGrp2ABj378iDQ50Mg== X-Received: by 2002:a2e:5314:0:b0:2c2:8efd:a52b with SMTP id h20-20020a2e5314000000b002c28efda52bmr4357960ljb.36.1700486490289; Mon, 20 Nov 2023 05:21:30 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:29 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 06/12] firmware: qcom: scm: make qcom_scm_lmh_dcvsh() use the TZ allocator Date: Mon, 20 Nov 2023 14:21:12 +0100 Message-Id: <20231120132118.30473-7-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:09 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089535552337705 X-GMAIL-MSGID: 1783089535552337705 From: Bartosz Golaszewski Let's use the new TZ memory allocator to obtain a buffer for this call instead of using dma_alloc_coherent(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/qcom_scm.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 31071a714cf1..11638daa2fe5 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1340,8 +1340,6 @@ EXPORT_SYMBOL_GPL(qcom_scm_lmh_profile_change); int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, u32 payload_val, u64 limit_node, u32 node_id, u64 version) { - dma_addr_t payload_phys; - u32 *payload_buf; int ret, payload_size = 5 * sizeof(u32); struct qcom_scm_desc desc = { @@ -1356,7 +1354,9 @@ int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, u32 payload_val, .owner = ARM_SMCCC_OWNER_SIP, }; - payload_buf = dma_alloc_coherent(__scm->dev, payload_size, &payload_phys, GFP_KERNEL); + u32 *payload_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, + payload_size, + GFP_KERNEL); if (!payload_buf) return -ENOMEM; @@ -1366,11 +1366,10 @@ int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, u32 payload_val, payload_buf[3] = 1; payload_buf[4] = payload_val; - desc.args[0] = payload_phys; + desc.args[0] = qcom_tzmem_to_phys(payload_buf); ret = qcom_scm_call(__scm->dev, &desc, NULL); - dma_free_coherent(__scm->dev, payload_size, payload_buf, payload_phys); return ret; } EXPORT_SYMBOL_GPL(qcom_scm_lmh_dcvsh); From patchwork Mon Nov 20 13:21:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167123 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2195516vqn; Mon, 20 Nov 2023 05:24:29 -0800 (PST) X-Google-Smtp-Source: AGHT+IEO0OTquxYV8xdpThXY4vqGmISHattLxtiVuXZ4dt+22hWCKR6uquHD1uXW0NOhoX0Vuj3n X-Received: by 2002:a17:903:2290:b0:1cf:56fd:7acb with SMTP id b16-20020a170903229000b001cf56fd7acbmr5366988plh.62.1700486669122; Mon, 20 Nov 2023 05:24:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486669; cv=none; d=google.com; s=arc-20160816; b=Jpt/8v3Q7QyhAWHwIRix2PqQTRaHkqsiuViw/KqRkHFUdnWzadh+Zfn7Uu634Mhv4R KZAEpctol6N3A+OnJpFrvysPR5E2rMeeGzQpASsnNYX6sm7K5MB7AfHHKNY7+paR6Yt1 vsA3MHIfiqKQmpzEvWENEOAhMBp3XEx1ktbwudEqpqTJKvFWWXvix0n7PJZz7OGRo8SM dVhGoEePBZm+ZqmZkHE6AOzz4S+WR8EB3GUm6joacifX6Jo3VWeHpQe9EpYCfLPHv7sD nAiA3HdSwIOhN1mTlgyCuh755mK95lW221rQpLYI7UJF3u499XxVeL4cFBWZfwVV/qd/ 5e3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=WkxpnfZSZT5EN0UFZSvV8zs0Wwv4/j6hiBpdKDk1HxA=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=Iuwx3Q8MysqaqoZj5k/+Cb7WK2CdEDSpirX8cqhMcVvMatAilx6Wb0YZ3p5PklSiun TNxxgoSg1YLwTXxn5L9Wl9N/6WrIWR6B/gUbuCrmimDK2XS6+NWabt2Ur6H0jtfF/oOG S+JUeUnmjB1kQgNgR8y07ls99QdqjrH9kVSXLYdIw0yvn2C0zqsuOYLHBMhG28awjSKM Uj8jbDiPlypf0oc0Txv9NjA/O1CvgwEILBb7y4BSMGJTjbDPCHSBuTelLGNkFNWbd8LD en177Viyr2Ico92nbxrbOUom7PwJb+HEiYYb9QnESp5NTvIQi6rXPNFcZ1giGMMfb1/S 9QsQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=0fkW4OSB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id o19-20020a170902779300b001c604fdbb14si7808397pll.81.2023.11.20.05.24.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:24:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=0fkW4OSB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 75F6C805E42D; Mon, 20 Nov 2023 05:22:23 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232778AbjKTNVv (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34316 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232702AbjKTNVh (ORCPT ); Mon, 20 Nov 2023 08:21:37 -0500 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19D83138 for ; Mon, 20 Nov 2023 05:21:32 -0800 (PST) Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-40790b0a224so14376265e9.0 for ; Mon, 20 Nov 2023 05:21:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486491; x=1701091291; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WkxpnfZSZT5EN0UFZSvV8zs0Wwv4/j6hiBpdKDk1HxA=; b=0fkW4OSBCt98iLavL9DAiH0a3/5HVqWub5s4juyv57+6oMjTjRTRtDfRnqtipPQ8RJ 1WLGRB3KAC5z1c6xjdfcIds8FwRXbnZXDtLSBgTq33TjlUYfsgMIzUrMVkfBNosWYmx3 TNwvtqE7FjxGrXOCyFFNVRkCE27bCOJrYQSIQhxSu/xGzVG3jfJQ8I1n1QkV2nuM1xaD xDIzKxXPN+Xi97EDWYCuyqzZyF2U8pIeajugm4Xrh6pFhId8a5XLD+Eg1USxXyctG2d7 u+KVxZWb74CSbYO2oIaI7YCYwhTQs8pmkCw7wyj+/iC7BBaYuobciiFEwti6mJ0jkWGq x/Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486491; x=1701091291; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WkxpnfZSZT5EN0UFZSvV8zs0Wwv4/j6hiBpdKDk1HxA=; b=HvhPmp4c5xbmyRzNzWIT8y+jfDeTXrG6tufJ8kZxH+TTx9G+CZ5a7twc16gfhtxWIr Ni1FttxWDdWpTrG4dhu8S64N1d3+KRVHv784mS6XifF5lEr/iMsIAMiCmq36h4tgy9jT EVs3jOgsQYy5mkNfM9HMnwrKVelG0TKtY9S9YOXDKP+S9C1R9cPiHF6rfR4ntNeDf/D8 0oRNU13BPQpheexoKwjfNeSntE51XnW+OUIgbIqwnvztfXuFSm73B5H82XdtNbGiGEMM E5Tsd86rX2PuxJcw2bZj+FMPlLpw3f5QyZCaIFMCJlW8f/d7jb9YC/vf3XRwJBiR038t PXjQ== X-Gm-Message-State: AOJu0YzlwjFmHHuZ7dPNfWTmtpw8KzbZboYsL3A5RID5XTIT5txXqOUB 7vnVswUYTkcTk6mPCANcgclb1g== X-Received: by 2002:a05:600c:3b8c:b0:408:37aa:4766 with SMTP id n12-20020a05600c3b8c00b0040837aa4766mr6455184wms.5.1700486491352; Mon, 20 Nov 2023 05:21:31 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:30 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 07/12] firmware: qcom: scm: make qcom_scm_qseecom_app_get_id() use the TZ allocator Date: Mon, 20 Nov 2023 14:21:13 +0100 Message-Id: <20231120132118.30473-8-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:23 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089509588325406 X-GMAIL-MSGID: 1783089509588325406 From: Bartosz Golaszewski Let's use the new TZ memory allocator to obtain a buffer for this call instead of manually kmalloc()ing it and then mapping to physical space. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Maximilian Luz Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/qcom_scm.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 11638daa2fe5..3a6cefb4eb2e 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1525,37 +1525,27 @@ int qcom_scm_qseecom_app_get_id(const char *app_name, u32 *app_id) unsigned long app_name_len = strlen(app_name); struct qcom_scm_desc desc = {}; struct qcom_scm_qseecom_resp res = {}; - dma_addr_t name_buf_phys; - char *name_buf; int status; if (app_name_len >= name_buf_size) return -EINVAL; - name_buf = kzalloc(name_buf_size, GFP_KERNEL); + char *name_buf __free(qcom_tzmem) = qcom_tzmem_alloc(__scm->mempool, + name_buf_size, + GFP_KERNEL); if (!name_buf) return -ENOMEM; memcpy(name_buf, app_name, app_name_len); - name_buf_phys = dma_map_single(__scm->dev, name_buf, name_buf_size, DMA_TO_DEVICE); - status = dma_mapping_error(__scm->dev, name_buf_phys); - if (status) { - kfree(name_buf); - dev_err(__scm->dev, "qseecom: failed to map dma address\n"); - return status; - } - desc.owner = QSEECOM_TZ_OWNER_QSEE_OS; desc.svc = QSEECOM_TZ_SVC_APP_MGR; desc.cmd = QSEECOM_TZ_CMD_APP_LOOKUP; desc.arginfo = QCOM_SCM_ARGS(2, QCOM_SCM_RW, QCOM_SCM_VAL); - desc.args[0] = name_buf_phys; + desc.args[0] = qcom_tzmem_to_phys(name_buf); desc.args[1] = app_name_len; status = qcom_scm_qseecom_call(&desc, &res); - dma_unmap_single(__scm->dev, name_buf_phys, name_buf_size, DMA_TO_DEVICE); - kfree(name_buf); if (status) return status; From patchwork Mon Nov 20 13:21:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167124 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2195564vqn; Mon, 20 Nov 2023 05:24:35 -0800 (PST) X-Google-Smtp-Source: AGHT+IF1AcU68UgCcqfIx/5UQ8dOsRJ/npjHOt8M9s33QLsYg7jUGXmy3fCYsTHeFLM1q+BvzBxm X-Received: by 2002:a05:6a00:17a9:b0:6be:265:1bf6 with SMTP id s41-20020a056a0017a900b006be02651bf6mr6629602pfg.32.1700486675187; Mon, 20 Nov 2023 05:24:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486675; cv=none; d=google.com; s=arc-20160816; b=feEB88bpMKQaYVd+5Lc6tjCFmhrwPu1rAyQq5VhfjbPoxfwr9oMmIe1Hna5zW2MYAQ uIvE52Ny6meiup9TlFy8K6nZ71Ft2Ph2ldxPXduJRNCN+3C2GMB34TwA5HYAVBRemGPO M5/FUjoCeNBo9xGGew0hh9sl9o+QMZPhkliWdwWOU15WZoR5rQXeS+PdR2IMY/IDVJUT Ay/6QTU3IY7Nt9mnAGGjKdNSldSZmUrioHAvGIfWnHH229QuJ2pELqTojBRjxCqEZnSx O0wUID9SGoN/+oiM9W5C1x00kYsGGGYC5eViKKI0fXbp72XSvq8T6ZEOuIvQCTet/Bsu lt9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=qfx4u4aIdA8tlpL52Vj3Y1awkdo1nUXo/Cn10wDXNcc=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=ZZclVZndDuS+AzDViZP2UzddrQbLIYHcNYndrFCOoN9fgVdyMp3AKIgWdyFspw2l/a 92yID4Hk5JhpoGm389mVfXGAwzuNgXRiAlE2RwAPKcFh3s0ffAlxBXeXzAHZRXkaHzs1 l3IIQWfBfljOAkmJE2J2SxptnYZe3GkO5XKi7d+1o/yPswwv0dD1AyKIF+tzX5k3qyQK ulppHKm64rUaa+3snjJHlnv3L6P/Yik6xwXPxLFLa0T+iH62qP9S9JM1go1RJj8t9mKN o2lAaQJlSzs4UZBA7UGQwHMQrP5UT8VyW2NoS5avjuF0Ce+AKzqeDCCpb2Amy8d7J7cU 9E1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="DSfL/qGR"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id u31-20020a056a00099f00b006be1fc3ee86si8235326pfg.234.2023.11.20.05.24.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:24:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="DSfL/qGR"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 4CCF1805ED2D; Mon, 20 Nov 2023 05:23:23 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233213AbjKTNV5 (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232829AbjKTNVk (ORCPT ); Mon, 20 Nov 2023 08:21:40 -0500 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DD5BF192 for ; Mon, 20 Nov 2023 05:21:33 -0800 (PST) Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-40842752c6eso15997005e9.1 for ; Mon, 20 Nov 2023 05:21:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486492; x=1701091292; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qfx4u4aIdA8tlpL52Vj3Y1awkdo1nUXo/Cn10wDXNcc=; b=DSfL/qGRpr3nc11bwcFJlXIsDkm/jthBIFEj0KPBsS6qJvFYy4zfM0sU50+TkDljH0 97mWzqVjhJDB+mrLaP0P0ZqPwNB5PjnZN7hxa4PBiASdsjq0PNV8G6/OyUA2MtErposV NLxT6K0wagKEKyB0ydkXgYpTUtzo9ha6/8zTxv3KNqBMn5l6me/IHEt3W+cWnt5fMaye B/nh6X+PT3nsLDcb+EMjUkuJo55bG+miwTn0s0S8i4zy9s67f31rEpY02QPrDg50u4A3 zKN2/aHP6UwAE9OB8UM+E/IVPnHpueeGjm/aWBMVtEiB/MpE3Mk46GD74qaKuxbmZan7 iPUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486492; x=1701091292; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qfx4u4aIdA8tlpL52Vj3Y1awkdo1nUXo/Cn10wDXNcc=; b=oEH6XHIR+kSpCgdWT/3gNQQUoKWatneY7hvZXQHrMr8ZsKHKQp1BFjWXXSA+6CTzBN uk5lnEDLvQr+veYm4qXcujNK6/Lv9IhtaxdzLJSB4Ao2yiyiOXKJf2S5kU7LKPLv1v16 ocxj8zWeLQDWSf0TNLDpBjxtPkFEYv0QIHkq2Ct7GbEmEkv5D4I+6K2wrUWA/Sw5T2z2 tcjYAAiYftrUCNi0qUpDnv5ofvIHTMtgYHwn1akbxrNQ0kNbDTQuxDZVtsZs0A00AwvD rJ4YuFhl8cA99G9Sui3NUi7QhI8KU0HHugxy0JwI3Iue9lF7tCo7RT6l0A5/o2T5rqI1 AJbA== X-Gm-Message-State: AOJu0YwX03PCcNrXogvw9LDBm82gaMlUYYyF0MpVDxVpo2XqvEtqhWT/ YZiMoCJqxpBl4Nu+GLRM5HzfOw== X-Received: by 2002:a05:600c:3b02:b0:408:389d:c22e with SMTP id m2-20020a05600c3b0200b00408389dc22emr5452471wms.25.1700486492341; Mon, 20 Nov 2023 05:21:32 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:31 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 08/12] firmware: qcom: qseecom: convert to using the TZ allocator Date: Mon, 20 Nov 2023 14:21:14 +0100 Message-Id: <20231120132118.30473-9-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:23:23 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089515862503656 X-GMAIL-MSGID: 1783089515862503656 From: Bartosz Golaszewski Drop the DMA mapping operations from qcom_scm_qseecom_app_send() and convert all users of it in the qseecom module to using the TZ allocator for creating SCM call buffers. Together with using the cleanup macros, it has the added benefit of a significant code shrink. As this is largely a module separate from the SCM driver, let's use a separate memory pool. Signed-off-by: Bartosz Golaszewski Reviewed-by: Andrew Halaney Tested-by: Maximilian Luz Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- .../firmware/qcom/qcom_qseecom_uefisecapp.c | 261 +++++++----------- drivers/firmware/qcom/qcom_scm.c | 30 +- include/linux/firmware/qcom/qcom_qseecom.h | 4 +- 3 files changed, 104 insertions(+), 191 deletions(-) diff --git a/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c b/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c index a33acdaf7b78..3a068f8b6990 100644 --- a/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c +++ b/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c @@ -7,17 +7,21 @@ * Copyright (C) 2023 Maximilian Luz */ +#include #include #include #include #include #include #include +#include #include #include #include #include +#include +#include /* -- Qualcomm "uefisecapp" interface definitions. -------------------------- */ @@ -253,6 +257,7 @@ struct qsee_rsp_uefi_query_variable_info { struct qcuefi_client { struct qseecom_client *client; struct efivars efivars; + struct qcom_tzmem_pool *mempool; }; static struct device *qcuefi_dev(struct qcuefi_client *qcuefi) @@ -272,11 +277,11 @@ static efi_status_t qsee_uefi_get_variable(struct qcuefi_client *qcuefi, const e const efi_guid_t *guid, u32 *attributes, unsigned long *data_size, void *data) { - struct qsee_req_uefi_get_variable *req_data; - struct qsee_rsp_uefi_get_variable *rsp_data; + struct qsee_req_uefi_get_variable *req_data __free(qcom_tzmem) = NULL; + struct qsee_rsp_uefi_get_variable *rsp_data __free(qcom_tzmem) = NULL; unsigned long buffer_size = *data_size; - efi_status_t efi_status = EFI_SUCCESS; unsigned long name_length; + efi_status_t efi_status; size_t guid_offs; size_t name_offs; size_t req_size; @@ -304,17 +309,13 @@ static efi_status_t qsee_uefi_get_variable(struct qcuefi_client *qcuefi, const e __array(u8, buffer_size) ); - req_data = kzalloc(req_size, GFP_KERNEL); - if (!req_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out; - } + req_data = qcom_tzmem_alloc(qcuefi->mempool, req_size, GFP_KERNEL); + if (!req_data) + return EFI_OUT_OF_RESOURCES; - rsp_data = kzalloc(rsp_size, GFP_KERNEL); - if (!rsp_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out_free_req; - } + rsp_data = qcom_tzmem_alloc(qcuefi->mempool, rsp_size, GFP_KERNEL); + if (!rsp_data) + return EFI_OUT_OF_RESOURCES; req_data->command_id = QSEE_CMD_UEFI_GET_VARIABLE; req_data->data_size = buffer_size; @@ -331,20 +332,14 @@ static efi_status_t qsee_uefi_get_variable(struct qcuefi_client *qcuefi, const e memcpy(((void *)req_data) + req_data->guid_offset, guid, req_data->guid_size); status = qcom_qseecom_app_send(qcuefi->client, req_data, req_size, rsp_data, rsp_size); - if (status) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (status) + return EFI_DEVICE_ERROR; - if (rsp_data->command_id != QSEE_CMD_UEFI_GET_VARIABLE) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->command_id != QSEE_CMD_UEFI_GET_VARIABLE) + return EFI_DEVICE_ERROR; - if (rsp_data->length < sizeof(*rsp_data)) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->length < sizeof(*rsp_data)) + return EFI_DEVICE_ERROR; if (rsp_data->status) { dev_dbg(qcuefi_dev(qcuefi), "%s: uefisecapp error: 0x%x\n", @@ -358,18 +353,14 @@ static efi_status_t qsee_uefi_get_variable(struct qcuefi_client *qcuefi, const e *attributes = rsp_data->attributes; } - goto out_free; + return efi_status; } - if (rsp_data->length > rsp_size) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->length > rsp_size) + return EFI_DEVICE_ERROR; - if (rsp_data->data_offset + rsp_data->data_size > rsp_data->length) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->data_offset + rsp_data->data_size > rsp_data->length) + return EFI_DEVICE_ERROR; /* * Note: We need to set attributes and data size even if the buffer is @@ -392,33 +383,23 @@ static efi_status_t qsee_uefi_get_variable(struct qcuefi_client *qcuefi, const e if (attributes) *attributes = rsp_data->attributes; - if (buffer_size == 0 && !data) { - efi_status = EFI_SUCCESS; - goto out_free; - } + if (buffer_size == 0 && !data) + return EFI_SUCCESS; - if (buffer_size < rsp_data->data_size) { - efi_status = EFI_BUFFER_TOO_SMALL; - goto out_free; - } + if (buffer_size < rsp_data->data_size) + return EFI_BUFFER_TOO_SMALL; memcpy(data, ((void *)rsp_data) + rsp_data->data_offset, rsp_data->data_size); -out_free: - kfree(rsp_data); -out_free_req: - kfree(req_data); -out: - return efi_status; + return EFI_SUCCESS; } static efi_status_t qsee_uefi_set_variable(struct qcuefi_client *qcuefi, const efi_char16_t *name, const efi_guid_t *guid, u32 attributes, unsigned long data_size, const void *data) { - struct qsee_req_uefi_set_variable *req_data; - struct qsee_rsp_uefi_set_variable *rsp_data; - efi_status_t efi_status = EFI_SUCCESS; + struct qsee_req_uefi_set_variable *req_data __free(qcom_tzmem) = NULL; + struct qsee_rsp_uefi_set_variable *rsp_data __free(qcom_tzmem) = NULL; unsigned long name_length; size_t name_offs; size_t guid_offs; @@ -448,17 +429,14 @@ static efi_status_t qsee_uefi_set_variable(struct qcuefi_client *qcuefi, const e __array_offs(u8, data_size, &data_offs) ); - req_data = kzalloc(req_size, GFP_KERNEL); - if (!req_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out; - } + req_data = qcom_tzmem_alloc(qcuefi->mempool, req_size, GFP_KERNEL); + if (!req_data) + return EFI_OUT_OF_RESOURCES; - rsp_data = kzalloc(sizeof(*rsp_data), GFP_KERNEL); - if (!rsp_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out_free_req; - } + rsp_data = qcom_tzmem_alloc(qcuefi->mempool, sizeof(*rsp_data), + GFP_KERNEL); + if (!rsp_data) + return EFI_OUT_OF_RESOURCES; req_data->command_id = QSEE_CMD_UEFI_SET_VARIABLE; req_data->attributes = attributes; @@ -481,42 +459,31 @@ static efi_status_t qsee_uefi_set_variable(struct qcuefi_client *qcuefi, const e status = qcom_qseecom_app_send(qcuefi->client, req_data, req_size, rsp_data, sizeof(*rsp_data)); - if (status) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (status) + return EFI_DEVICE_ERROR; - if (rsp_data->command_id != QSEE_CMD_UEFI_SET_VARIABLE) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->command_id != QSEE_CMD_UEFI_SET_VARIABLE) + return EFI_DEVICE_ERROR; - if (rsp_data->length != sizeof(*rsp_data)) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->length != sizeof(*rsp_data)) + return EFI_DEVICE_ERROR; if (rsp_data->status) { dev_dbg(qcuefi_dev(qcuefi), "%s: uefisecapp error: 0x%x\n", __func__, rsp_data->status); - efi_status = qsee_uefi_status_to_efi(rsp_data->status); + return qsee_uefi_status_to_efi(rsp_data->status); } -out_free: - kfree(rsp_data); -out_free_req: - kfree(req_data); -out: - return efi_status; + return EFI_SUCCESS; } static efi_status_t qsee_uefi_get_next_variable(struct qcuefi_client *qcuefi, unsigned long *name_size, efi_char16_t *name, efi_guid_t *guid) { - struct qsee_req_uefi_get_next_variable *req_data; - struct qsee_rsp_uefi_get_next_variable *rsp_data; - efi_status_t efi_status = EFI_SUCCESS; + struct qsee_req_uefi_get_next_variable *req_data __free(qcom_tzmem) = NULL; + struct qsee_rsp_uefi_get_next_variable *rsp_data __free(qcom_tzmem) = NULL; + efi_status_t efi_status; size_t guid_offs; size_t name_offs; size_t req_size; @@ -541,17 +508,13 @@ static efi_status_t qsee_uefi_get_next_variable(struct qcuefi_client *qcuefi, __array(*name, *name_size / sizeof(*name)) ); - req_data = kzalloc(req_size, GFP_KERNEL); - if (!req_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out; - } + req_data = qcom_tzmem_alloc(qcuefi->mempool, req_size, GFP_KERNEL); + if (!req_data) + return EFI_OUT_OF_RESOURCES; - rsp_data = kzalloc(rsp_size, GFP_KERNEL); - if (!rsp_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out_free_req; - } + rsp_data = qcom_tzmem_alloc(qcuefi->mempool, rsp_size, GFP_KERNEL); + if (!rsp_data) + return EFI_OUT_OF_RESOURCES; req_data->command_id = QSEE_CMD_UEFI_GET_NEXT_VARIABLE; req_data->guid_offset = guid_offs; @@ -567,20 +530,14 @@ static efi_status_t qsee_uefi_get_next_variable(struct qcuefi_client *qcuefi, return EFI_INVALID_PARAMETER; status = qcom_qseecom_app_send(qcuefi->client, req_data, req_size, rsp_data, rsp_size); - if (status) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (status) + return EFI_DEVICE_ERROR; - if (rsp_data->command_id != QSEE_CMD_UEFI_GET_NEXT_VARIABLE) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->command_id != QSEE_CMD_UEFI_GET_NEXT_VARIABLE) + return EFI_DEVICE_ERROR; - if (rsp_data->length < sizeof(*rsp_data)) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->length < sizeof(*rsp_data)) + return EFI_DEVICE_ERROR; if (rsp_data->status) { dev_dbg(qcuefi_dev(qcuefi), "%s: uefisecapp error: 0x%x\n", @@ -595,77 +552,59 @@ static efi_status_t qsee_uefi_get_next_variable(struct qcuefi_client *qcuefi, if (efi_status == EFI_BUFFER_TOO_SMALL) *name_size = rsp_data->name_size; - goto out_free; + return efi_status; } - if (rsp_data->length > rsp_size) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->length > rsp_size) + return EFI_DEVICE_ERROR; - if (rsp_data->name_offset + rsp_data->name_size > rsp_data->length) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->name_offset + rsp_data->name_size > rsp_data->length) + return EFI_DEVICE_ERROR; - if (rsp_data->guid_offset + rsp_data->guid_size > rsp_data->length) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->guid_offset + rsp_data->guid_size > rsp_data->length) + return EFI_DEVICE_ERROR; if (rsp_data->name_size > *name_size) { *name_size = rsp_data->name_size; - efi_status = EFI_BUFFER_TOO_SMALL; - goto out_free; + return EFI_BUFFER_TOO_SMALL; } - if (rsp_data->guid_size != sizeof(*guid)) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->guid_size != sizeof(*guid)) + return EFI_DEVICE_ERROR; memcpy(guid, ((void *)rsp_data) + rsp_data->guid_offset, rsp_data->guid_size); status = ucs2_strscpy(name, ((void *)rsp_data) + rsp_data->name_offset, rsp_data->name_size / sizeof(*name)); *name_size = rsp_data->name_size; - if (status < 0) { + if (status < 0) /* * Return EFI_DEVICE_ERROR here because the buffer size should * have already been validated above, causing this function to * bail with EFI_BUFFER_TOO_SMALL. */ return EFI_DEVICE_ERROR; - } -out_free: - kfree(rsp_data); -out_free_req: - kfree(req_data); -out: - return efi_status; + return EFI_SUCCESS; } static efi_status_t qsee_uefi_query_variable_info(struct qcuefi_client *qcuefi, u32 attr, u64 *storage_space, u64 *remaining_space, u64 *max_variable_size) { - struct qsee_req_uefi_query_variable_info *req_data; - struct qsee_rsp_uefi_query_variable_info *rsp_data; - efi_status_t efi_status = EFI_SUCCESS; + struct qsee_req_uefi_query_variable_info *req_data __free(qcom_tzmem) = NULL; + struct qsee_rsp_uefi_query_variable_info *rsp_data __free(qcom_tzmem) = NULL; int status; - req_data = kzalloc(sizeof(*req_data), GFP_KERNEL); - if (!req_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out; - } + req_data = qcom_tzmem_alloc(qcuefi->mempool, sizeof(*req_data), + GFP_KERNEL); + if (!req_data) + return EFI_OUT_OF_RESOURCES; - rsp_data = kzalloc(sizeof(*rsp_data), GFP_KERNEL); - if (!rsp_data) { - efi_status = EFI_OUT_OF_RESOURCES; - goto out_free_req; - } + rsp_data = qcom_tzmem_alloc(qcuefi->mempool, sizeof(*rsp_data), + GFP_KERNEL); + if (!rsp_data) + return EFI_OUT_OF_RESOURCES; req_data->command_id = QSEE_CMD_UEFI_QUERY_VARIABLE_INFO; req_data->attributes = attr; @@ -673,26 +612,19 @@ static efi_status_t qsee_uefi_query_variable_info(struct qcuefi_client *qcuefi, status = qcom_qseecom_app_send(qcuefi->client, req_data, sizeof(*req_data), rsp_data, sizeof(*rsp_data)); - if (status) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (status) + return EFI_DEVICE_ERROR; - if (rsp_data->command_id != QSEE_CMD_UEFI_QUERY_VARIABLE_INFO) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->command_id != QSEE_CMD_UEFI_QUERY_VARIABLE_INFO) + return EFI_DEVICE_ERROR; - if (rsp_data->length != sizeof(*rsp_data)) { - efi_status = EFI_DEVICE_ERROR; - goto out_free; - } + if (rsp_data->length != sizeof(*rsp_data)) + return EFI_DEVICE_ERROR; if (rsp_data->status) { dev_dbg(qcuefi_dev(qcuefi), "%s: uefisecapp error: 0x%x\n", __func__, rsp_data->status); - efi_status = qsee_uefi_status_to_efi(rsp_data->status); - goto out_free; + return qsee_uefi_status_to_efi(rsp_data->status); } if (storage_space) @@ -704,12 +636,7 @@ static efi_status_t qsee_uefi_query_variable_info(struct qcuefi_client *qcuefi, if (max_variable_size) *max_variable_size = rsp_data->max_variable_size; -out_free: - kfree(rsp_data); -out_free_req: - kfree(req_data); -out: - return efi_status; + return EFI_SUCCESS; } /* -- Global efivar interface. ---------------------------------------------- */ @@ -838,6 +765,10 @@ static int qcom_uefisecapp_probe(struct auxiliary_device *aux_dev, if (status) qcuefi_set_reference(NULL); + qcuefi->mempool = devm_qcom_tzmem_pool_new(&aux_dev->dev, SZ_256K); + if (IS_ERR(qcuefi->mempool)) + return PTR_ERR(qcuefi->mempool); + return status; } diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 3a6cefb4eb2e..318d7d398e5f 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1567,9 +1567,9 @@ EXPORT_SYMBOL_GPL(qcom_scm_qseecom_app_get_id); /** * qcom_scm_qseecom_app_send() - Send to and receive data from a given QSEE app. * @app_id: The ID of the target app. - * @req: Request buffer sent to the app (must be DMA-mappable). + * @req: Request buffer sent to the app (must be TZ memory) * @req_size: Size of the request buffer. - * @rsp: Response buffer, written to by the app (must be DMA-mappable). + * @rsp: Response buffer, written to by the app (must be TZ memory) * @rsp_size: Size of the response buffer. * * Sends a request to the QSEE app associated with the given ID and read back @@ -1585,26 +1585,12 @@ int qcom_scm_qseecom_app_send(u32 app_id, void *req, size_t req_size, void *rsp, { struct qcom_scm_qseecom_resp res = {}; struct qcom_scm_desc desc = {}; - dma_addr_t req_phys; - dma_addr_t rsp_phys; + phys_addr_t req_phys; + phys_addr_t rsp_phys; int status; - /* Map request buffer */ - req_phys = dma_map_single(__scm->dev, req, req_size, DMA_TO_DEVICE); - status = dma_mapping_error(__scm->dev, req_phys); - if (status) { - dev_err(__scm->dev, "qseecom: failed to map request buffer\n"); - return status; - } - - /* Map response buffer */ - rsp_phys = dma_map_single(__scm->dev, rsp, rsp_size, DMA_FROM_DEVICE); - status = dma_mapping_error(__scm->dev, rsp_phys); - if (status) { - dma_unmap_single(__scm->dev, req_phys, req_size, DMA_TO_DEVICE); - dev_err(__scm->dev, "qseecom: failed to map response buffer\n"); - return status; - } + req_phys = qcom_tzmem_to_phys(req); + rsp_phys = qcom_tzmem_to_phys(rsp); /* Set up SCM call data */ desc.owner = QSEECOM_TZ_OWNER_TZ_APPS; @@ -1622,10 +1608,6 @@ int qcom_scm_qseecom_app_send(u32 app_id, void *req, size_t req_size, void *rsp, /* Perform call */ status = qcom_scm_qseecom_call(&desc, &res); - /* Unmap buffers */ - dma_unmap_single(__scm->dev, rsp_phys, rsp_size, DMA_FROM_DEVICE); - dma_unmap_single(__scm->dev, req_phys, req_size, DMA_TO_DEVICE); - if (status) return status; diff --git a/include/linux/firmware/qcom/qcom_qseecom.h b/include/linux/firmware/qcom/qcom_qseecom.h index 5c28298a98be..e868fac55675 100644 --- a/include/linux/firmware/qcom/qcom_qseecom.h +++ b/include/linux/firmware/qcom/qcom_qseecom.h @@ -27,9 +27,9 @@ struct qseecom_client { /** * qcom_qseecom_app_send() - Send to and receive data from a given QSEE app. * @client: The QSEECOM client associated with the target app. - * @req: Request buffer sent to the app (must be DMA-mappable). + * @req: Request buffer sent to the app (must be TZ memory). * @req_size: Size of the request buffer. - * @rsp: Response buffer, written to by the app (must be DMA-mappable). + * @rsp: Response buffer, written to by the app (must be TZ memory). * @rsp_size: Size of the response buffer. * * Sends a request to the QSEE app associated with the given client and read From patchwork Mon Nov 20 13:21:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167126 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2195788vqn; Mon, 20 Nov 2023 05:25:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IEznqGBU/nTQwcY27YZMl2kgSX9T0ugVLVuuMfXUw3EtSfIUoUPkQ/9RK3PSPSFZfS1QoP8 X-Received: by 2002:a17:90b:3504:b0:285:25b3:4d5d with SMTP id ls4-20020a17090b350400b0028525b34d5dmr2403699pjb.8.1700486700701; Mon, 20 Nov 2023 05:25:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486700; cv=none; d=google.com; s=arc-20160816; b=dcHjw/S9hxW/+eiVflP68Sj7fC2O5l15XBSGFz8R+ogc5DDSwhNeswwxbgp4NqQbzY jLlilKaEzsM2QaTboQr0PvYamniBgzQPF6nkNN9KOT17SNRJxayT77yoIZ564AIaJW2L vtqSSQojHCSwKJWgGIKdgGiiS7tyt/225OUHC9y0Wpg0SvC9AZpMBFw4itjcMrBYrYZq wa2MlR8kYFGZDKcGkhs8hOxmjcMuwQHk1NSTgZ2pC5mPBA7bHmqBhg/cuIe2OFxlzXgp 6hAiKIsNIWZROHiErJAV7rrnjli8dxlkpxT2uz25ni91BFceQVmZeeyBFdjJ1mJFA4OV svSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=W4078kP/f/V2Gky4lpqf6UFEH3ZYOdfKZS8n60prFLY=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=w92//xA28QuK0ZVfyGsAYKWve6pCRVeSAmNv+IeJOreYI9QZh5TuzSe2eufQlgW3vc EXbK1xU+mq+55Xc2ldfXLAL0UE/AOXe00SQHvsJTjNkQBXRzBUhC6FCiJT+yj40fUYj4 IbmpGDrmt926hgvE6vs3OXH6AsoA5vqKMrZzRBCDjMfNUDr6omi5HShivOzMmud2VnXA HYXD7Il+7igaVw1vGBkeC4veiUB8ehWLw0mzKzpraIMoJCkC0NIClID0Wl7Ne8L3qXpp Jp3PtaGXYmQbwCoPxaVZ4BcVeHFdLcckQB3lWDYOfIsiN5KuSiPHo1p21dKe2gFRMC0B B5gQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=BrwAdicZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id pt12-20020a17090b3d0c00b00285196ac998si3947952pjb.104.2023.11.20.05.25.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:25:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=BrwAdicZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 62D55802AD25; Mon, 20 Nov 2023 05:22:22 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233176AbjKTNVy (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34334 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232753AbjKTNVj (ORCPT ); Mon, 20 Nov 2023 08:21:39 -0500 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C7621AD for ; Mon, 20 Nov 2023 05:21:34 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-408425c7c10so15958835e9.0 for ; Mon, 20 Nov 2023 05:21:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486493; x=1701091293; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=W4078kP/f/V2Gky4lpqf6UFEH3ZYOdfKZS8n60prFLY=; b=BrwAdicZDi7QykoENutfcGs/CCA0+/YW0oC7LmKTtooHoqrpTuK8Q3W2ClCZ8BvU3z +WmojYXlZ/gNxJaB6xIOwSjPyr+JWIECbP4n15DDydQj4NUhwbTqOtKbrDTBN0xlPjkb LV+GqKkZzf1If4xW5pW7UIFLPFfpsX2OI/OIO5qLL5lj5zL49Urm/rpBEms6ypWmrgVm 0TMo3amL66x2miq3jjY5qbjsuJmumwFwWW0uCXs727dj0JypQhjLnF6WwPlpVMV4OGn4 hSoO8Ar4CtfL/kMMyAR45s89t02FWobFzHXPFA7c7RJPLnjw4qRGbO8YD5gsrqyO9J3J Jc5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486493; x=1701091293; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=W4078kP/f/V2Gky4lpqf6UFEH3ZYOdfKZS8n60prFLY=; b=V0RDahioa+xv01Qjs4cAa8pv7+UubmeEdO8VKS06+VxFo3i3BaL6v4dRlb8luhXGsn Hi9D13MQl6nOe3g/MO1ueJrouKtsJPysezVbONXwi7OsdISsYF2VFX9nj4h9hB1WHJuJ m2GullEfVNhTBLB+iFIn0eGe1dnCsQOf2lQZpFHJsTHi5RS0/MA3iBLZbQ5ifwEHWnee QbdRRPeocUKJkikhsdPJlhMITsm7PlZ8IHVaQo6deZolEbWQghhI7sSY2Iftn6QElftM /QdRGrzowMsyRbnWz6UsY/wQAijFNAHk2TKLoI011c91eH6PjqoU5yxk2+eLf5TdLAfM NU2A== X-Gm-Message-State: AOJu0YxkucmLNAZZcRzFT4e/rKrZ8f+YjrYeTJ/OQkZKwpNCicVBaXRv mehSlyRKgUOZoRE7S/vRwXon3w== X-Received: by 2002:a05:600c:45d0:b0:408:41b4:7fe5 with SMTP id s16-20020a05600c45d000b0040841b47fe5mr6639859wmo.16.1700486493295; Mon, 20 Nov 2023 05:21:33 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:32 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 09/12] firmware: qcom: scm: add support for SHM bridge operations Date: Mon, 20 Nov 2023 14:21:15 +0100 Message-Id: <20231120132118.30473-10-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:22 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089542661195357 X-GMAIL-MSGID: 1783089542661195357 From: Bartosz Golaszewski Add low-level primitives for enabling SHM bridge support as well as creating and destroying SHM bridge pools to qcom-scm. Signed-off-by: Bartosz Golaszewski Acked-by: Andrew Halaney Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/qcom_scm.c | 60 ++++++++++++++++++++++++++ drivers/firmware/qcom/qcom_scm.h | 3 ++ include/linux/firmware/qcom/qcom_scm.h | 6 +++ 3 files changed, 69 insertions(+) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 318d7d398e5f..839773270a21 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1323,6 +1323,66 @@ bool qcom_scm_lmh_dcvsh_available(void) } EXPORT_SYMBOL_GPL(qcom_scm_lmh_dcvsh_available); +int qcom_scm_shm_bridge_enable(void) +{ + struct qcom_scm_desc desc = { + .svc = QCOM_SCM_SVC_MP, + .cmd = QCOM_SCM_MP_SHM_BRIDGE_ENABLE, + .owner = ARM_SMCCC_OWNER_SIP + }; + + struct qcom_scm_res res; + + if (!__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_MP, + QCOM_SCM_MP_SHM_BRIDGE_ENABLE)) + return -EOPNOTSUPP; + + return qcom_scm_call(__scm->dev, &desc, &res) ?: res.result[0]; +} +EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_enable); + +int qcom_scm_shm_bridge_create(struct device *dev, u64 pfn_and_ns_perm_flags, + u64 ipfn_and_s_perm_flags, u64 size_and_flags, + u64 ns_vmids, u64 *handle) +{ + struct qcom_scm_desc desc = { + .svc = QCOM_SCM_SVC_MP, + .cmd = QCOM_SCM_MP_SHM_BRIDGE_CREATE, + .owner = ARM_SMCCC_OWNER_SIP, + .args[0] = pfn_and_ns_perm_flags, + .args[1] = ipfn_and_s_perm_flags, + .args[2] = size_and_flags, + .args[3] = ns_vmids, + .arginfo = QCOM_SCM_ARGS(4, QCOM_SCM_VAL, QCOM_SCM_VAL, + QCOM_SCM_VAL, QCOM_SCM_VAL), + }; + + struct qcom_scm_res res; + int ret; + + ret = qcom_scm_call(__scm->dev, &desc, &res); + + if (handle && !ret) + *handle = res.result[1]; + + return ret ?: res.result[0]; +} +EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_create); + +int qcom_scm_shm_bridge_delete(struct device *dev, u64 handle) +{ + struct qcom_scm_desc desc = { + .svc = QCOM_SCM_SVC_MP, + .cmd = QCOM_SCM_MP_SHM_BRIDGE_DELETE, + .owner = ARM_SMCCC_OWNER_SIP, + .args[0] = handle, + .arginfo = QCOM_SCM_ARGS(1, QCOM_SCM_VAL), + }; + + return qcom_scm_call(__scm->dev, &desc, NULL); +} +EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_delete); + int qcom_scm_lmh_profile_change(u32 profile_id) { struct qcom_scm_desc desc = { diff --git a/drivers/firmware/qcom/qcom_scm.h b/drivers/firmware/qcom/qcom_scm.h index aa7d06939f8e..cb7273aa0a5e 100644 --- a/drivers/firmware/qcom/qcom_scm.h +++ b/drivers/firmware/qcom/qcom_scm.h @@ -116,6 +116,9 @@ struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void); #define QCOM_SCM_MP_IOMMU_SET_CP_POOL_SIZE 0x05 #define QCOM_SCM_MP_VIDEO_VAR 0x08 #define QCOM_SCM_MP_ASSIGN 0x16 +#define QCOM_SCM_MP_SHM_BRIDGE_ENABLE 0x1c +#define QCOM_SCM_MP_SHM_BRIDGE_DELETE 0x1d +#define QCOM_SCM_MP_SHM_BRIDGE_CREATE 0x1e #define QCOM_SCM_SVC_OCMEM 0x0f #define QCOM_SCM_OCMEM_LOCK_CMD 0x01 diff --git a/include/linux/firmware/qcom/qcom_scm.h b/include/linux/firmware/qcom/qcom_scm.h index ccaf28846054..9b6054813f59 100644 --- a/include/linux/firmware/qcom/qcom_scm.h +++ b/include/linux/firmware/qcom/qcom_scm.h @@ -115,6 +115,12 @@ int qcom_scm_lmh_dcvsh(u32 payload_fn, u32 payload_reg, u32 payload_val, int qcom_scm_lmh_profile_change(u32 profile_id); bool qcom_scm_lmh_dcvsh_available(void); +int qcom_scm_shm_bridge_enable(void); +int qcom_scm_shm_bridge_create(struct device *dev, u64 pfn_and_ns_perm_flags, + u64 ipfn_and_s_perm_flags, u64 size_and_flags, + u64 ns_vmids, u64 *handle); +int qcom_scm_shm_bridge_delete(struct device *dev, u64 handle); + #ifdef CONFIG_QCOM_QSEECOM int qcom_scm_qseecom_app_get_id(const char *app_name, u32 *app_id); From patchwork Mon Nov 20 13:21:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167127 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2195798vqn; Mon, 20 Nov 2023 05:25:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IEVwlNX1LAHcMlMh2o0osIb2V5FR1aEwu5H5hl9LJqp65onHDktkPtj6dkcKwdE8zcWt9vf X-Received: by 2002:a17:902:e843:b0:1cc:4559:ff with SMTP id t3-20020a170902e84300b001cc455900ffmr10214082plg.13.1700486701617; Mon, 20 Nov 2023 05:25:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486701; cv=none; d=google.com; s=arc-20160816; b=YfWnt9y5Aom19P+yIov0+D0ExZdxKBK++j1wIXnBnrxiwqP0dPDl3fsliog8NwGbfu aU+GM3IBADmri/5h1eFbK/huc7bKCc8G4qJoqNTuXOSBaTsOEGv/SqJ05yX0M0DIaVFm Pm7spU5/N8CSj3Dzv8XDACGTXIi4z2q8o8OzN3Wm3FDzlACq51DTbfrAMRyDqJxWyqJn fJMjTw4mCWMk3fRE4KToxrdhnb/29WWRbVayr59BPIsSpUqHYivuKidBz1PiaebnaDEz EZfrf+JAgw+8W9X2ToCmcrHIoBs2kzPtD4X6ThnrqladsVyq89lQxGTSyf28WYpVmDnB bjiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Lgka31W3qpZw9qmD0Tl3+W8wAOSMxMGHO0Pnf3Jfow4=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=O5qZ+NeMUZHUkQAKPUEECdJVrtlO7e61wvb9J9ERP/hPSTxyrzTgCIdqKlzLBftQNH v+1UoZDzx5nUoogi7Jiqoou7ZwvEDAWrd9ANeRLL+KbXxyaBUC9Dft2u08/+h5/iYnST k9r6hakCHT+KLlqkL13lgBZMj7iYJaNAP5TfYPaiRiW9g9wZGoOMi7Qj34WKBkVAsEgg NoQEYeKBFpTMnFxvPqVnY+6jl+6qMfPrO4apf2torEOkbEspTEODzotCTbjdvQqkVIlf ON+D0YX8XP6dhkUETm1F45I1ln0HRcGKQmOAhMUsxQ55oXuw94e3HNqsiLD+CIDvOVcZ mz0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=Ob7A1j+Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id z3-20020a1709028f8300b001cf5cf1ca6asi2425480plo.511.2023.11.20.05.25.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:25:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=Ob7A1j+Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 30CFC80293A1; Mon, 20 Nov 2023 05:22:25 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232135AbjKTNV7 (ORCPT + 27 others); Mon, 20 Nov 2023 08:21:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232909AbjKTNVk (ORCPT ); Mon, 20 Nov 2023 08:21:40 -0500 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5B9FCD52 for ; Mon, 20 Nov 2023 05:21:36 -0800 (PST) Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4094301d505so14265785e9.2 for ; Mon, 20 Nov 2023 05:21:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486494; x=1701091294; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Lgka31W3qpZw9qmD0Tl3+W8wAOSMxMGHO0Pnf3Jfow4=; b=Ob7A1j+ZZ5KI3N8qcESLldc7P3G2pt5KxQo+st4aGoaEuAgGdr/SDu1U6JnlLGthnq mKDrO5rty37PoNhF3sbeZ+b03NO407EDv7KQdYoHpfIORWS4YjOcX+XbhJrEoGXT3PtO JgLqhIlReGGHM3XQ/JVoMUp5wOmJGLoJ4O9xwDXfqA/sMWIYCyqo+Dnq/L2R8tOyxPVZ BDiFTVTpcm9cKGwhj4xqFJLaBqf9Slz+2K/XNCfnisN/4BeHUJXaeODeLigVvFyNSH65 /U+ER8ZczGAnTnFHxqbwzuwXcqGcjxbJ3/StHpdiaVIv/bV+p990vash3hWOIzEwlFq7 HO3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486494; x=1701091294; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Lgka31W3qpZw9qmD0Tl3+W8wAOSMxMGHO0Pnf3Jfow4=; b=mDXF+LokIqruA9+dB0F7xs5TD1BuTfrfVru4sw4L03RKj2FDMQCE0Yv0lpte5YtHAj UJLOoSKHA1Bejt4F5NeStlPd+TEMadM5XMfx1xF1/RTgXsI52YntQntpr0p5s32fL2V2 jrqTGA/+aecJXzyqCLbBRR+4bzBpQ4gIRHnqoxIFj96rCgdhSCVa2e+vv6w2OgvVD/xS EEKnb5j+M71SxX/Rof/EEXaV69DI4BmstohFcbaClU4snWEni+MsM07rkiEYyEqfloAU nIib93IsxGH1UWEBe33IXgpsAqkRt8oKbRplOGJequPFk0xIjUtVJYidyyMI+NpHwJKP ADAQ== X-Gm-Message-State: AOJu0Yy3ThlH0EiFeIhHG1GQ1OKkkYuaWxATD/VctHRvt8RYh7jcp46d L+B9b4B3DQDzUTgNPsvuWQNi4Q== X-Received: by 2002:a05:600c:1c8b:b0:3fe:f667:4e4c with SMTP id k11-20020a05600c1c8b00b003fef6674e4cmr6416175wms.12.1700486494283; Mon, 20 Nov 2023 05:21:34 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:33 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 10/12] firmware: qcom: tzmem: enable SHM Bridge support Date: Mon, 20 Nov 2023 14:21:16 +0100 Message-Id: <20231120132118.30473-11-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:25 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089543728621439 X-GMAIL-MSGID: 1783089543728621439 From: Bartosz Golaszewski Add a new Kconfig option for selecting the SHM Bridge mode of operation for the TrustZone memory allocator. If enabled at build-time, it will still be checked for availability at run-time. If the architecture doesn't support SHM Bridge, the allocator will work just like in the default mode. Signed-off-by: Bartosz Golaszewski Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/Kconfig | 10 +++++ drivers/firmware/qcom/qcom_tzmem.c | 65 +++++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig index 237da40de832..e01407e31ae4 100644 --- a/drivers/firmware/qcom/Kconfig +++ b/drivers/firmware/qcom/Kconfig @@ -27,6 +27,16 @@ config QCOM_TZMEM_MODE_DEFAULT Use the default allocator mode. The memory is page-aligned, non-cachable and contiguous. +config QCOM_TZMEM_MODE_SHMBRIDGE + bool "SHM Bridge" + help + Use Qualcomm Shared Memory Bridge. The memory has the same alignment as + in the 'Default' allocator but is also explicitly marked as an SHM Bridge + buffer. + + With this selected, all buffers passed to the TrustZone must be allocated + using the TZMem allocator or else the TrustZone will refuse to use them. + endchoice config QCOM_SCM_DOWNLOAD_MODE_DEFAULT diff --git a/drivers/firmware/qcom/qcom_tzmem.c b/drivers/firmware/qcom/qcom_tzmem.c index 68ca59c5598e..8010af80fd59 100644 --- a/drivers/firmware/qcom/qcom_tzmem.c +++ b/drivers/firmware/qcom/qcom_tzmem.c @@ -55,7 +55,70 @@ static void qcom_tzmem_cleanup_pool(struct qcom_tzmem_pool *pool) } -#endif /* CONFIG_QCOM_TZMEM_MODE_DEFAULT */ +#elif IS_ENABLED(CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE) + +#include + +#define QCOM_SHM_BRIDGE_NUM_VM_SHIFT 9 + +static bool qcom_tzmem_using_shm_bridge; + +static int qcom_tzmem_init(void) +{ + int ret; + + ret = qcom_scm_shm_bridge_enable(); + if (ret == -EOPNOTSUPP) { + dev_info(qcom_tzmem_dev, "SHM Bridge not supported\n"); + return 0; + } + + if (!ret) + qcom_tzmem_using_shm_bridge = true; + + return ret; +} + +static int qcom_tzmem_init_pool(struct qcom_tzmem_pool *pool) +{ + u64 pfn_and_ns_perm, ipfn_and_s_perm, size_and_flags, ns_perms; + int ret; + + if (!qcom_tzmem_using_shm_bridge) + return 0; + + ns_perms = (QCOM_SCM_PERM_WRITE | QCOM_SCM_PERM_READ); + pfn_and_ns_perm = (u64)pool->pbase | ns_perms; + ipfn_and_s_perm = (u64)pool->pbase | ns_perms; + size_and_flags = pool->size | (1 << QCOM_SHM_BRIDGE_NUM_VM_SHIFT); + + u64 *handle __free(kfree) = kzalloc(sizeof(*handle), GFP_KERNEL); + if (!handle) + return -ENOMEM; + + ret = qcom_scm_shm_bridge_create(qcom_tzmem_dev, pfn_and_ns_perm, + ipfn_and_s_perm, size_and_flags, + QCOM_SCM_VMID_HLOS, handle); + if (ret) + return ret; + + pool->priv = no_free_ptr(handle); + + return 0; +} + +static void qcom_tzmem_cleanup_pool(struct qcom_tzmem_pool *pool) +{ + u64 *handle = pool->priv; + + if (!qcom_tzmem_using_shm_bridge) + return; + + qcom_scm_shm_bridge_delete(qcom_tzmem_dev, *handle); + kfree(handle); +} + +#endif /* CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE */ /** * qcom_tzmem_pool_new() - Create a new TZ memory pool. From patchwork Mon Nov 20 13:21:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167128 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2195799vqn; Mon, 20 Nov 2023 05:25:01 -0800 (PST) X-Google-Smtp-Source: AGHT+IHnM4UH6ujcIA9Ilqz3cY9zrN5j6cgTJb/+ZkHTJA+emcv8LHvuVIg7NdCnQkLYdVYm9+H/ X-Received: by 2002:a05:6a21:29cc:b0:186:a0d9:41a7 with SMTP id tv12-20020a056a2129cc00b00186a0d941a7mr4582362pzb.21.1700486701434; Mon, 20 Nov 2023 05:25:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486701; cv=none; d=google.com; s=arc-20160816; b=zlIRnGxm4/d8mga00jGwRhi51dOSDKusS79DNdO+UZSnHSqYuomo7s9LMu/XdfCgsT pkPN+gRQXb5+mSA71gMSqJc4sOBFquDu+R1pbti9dxcjmcu83CCHQFgELjCRsdlck/4C V8sCk9OHgJ6Zb7toq4A6Bo0Z0bipOZfmloYhMbcu7CP79xyNl2jXom9KUV0ZIx6JKm7n lAqgyfZRs3JpuQIr4UxlE0W7TRNbnQzrUUof5aBecfwbnJWH5r0IavD7cvF61m11Wek9 EzXEhyOcCG9fTGtf6nbQnA2aeb24OzKeJi7ZtRcUigQbohQxkXzthEcX6UErp1ZEhJwz SRow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=M4fo0VIV7uqzpyPDAWdX5Jk/6XQkZo9JW17PTbGLI2E=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=b9yHH7CalqegOlq/D1QboPakvom8Yq0/vrJVm+zbHPNFz5oLQOe58z2M4KXaX7ipgA aOQqWi+GhmMTvhSzzwTucHBQEchvoVr0Cdz6pDAqkVgyhA8CwOXPelFnEiTfUNl1lHM1 b7QQ87Fh1ssldLDZORS4b9tLH17rbiZh14LEQ/5uF/diConeiZ4jfcBI5/4GOqfRGxdx l3r3ANC5wq2SZFdHnOQa5OXjFPU4UUuQJCNliYnCr0+46AVHxmi5aXzDLgimTovFIufc 7vTvaugLRLRx70HNF/ClxUdvoncuuc7rizXbqDKec4xl8UZMxDAoUWmrgoEM6E49Uz5M DsEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=iWKVhgP0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id f19-20020a63dc53000000b005bd66bfc253si8094396pgj.148.2023.11.20.05.25.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:25:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=iWKVhgP0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 11491802947D; Mon, 20 Nov 2023 05:22:24 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233468AbjKTNWP (ORCPT + 27 others); Mon, 20 Nov 2023 08:22:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233258AbjKTNWA (ORCPT ); Mon, 20 Nov 2023 08:22:00 -0500 Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6943519A for ; Mon, 20 Nov 2023 05:21:37 -0800 (PST) Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-2c5087d19a6so52751881fa.0 for ; Mon, 20 Nov 2023 05:21:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486495; x=1701091295; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M4fo0VIV7uqzpyPDAWdX5Jk/6XQkZo9JW17PTbGLI2E=; b=iWKVhgP076gRs6u8mUnAthn3b+GbXzgyQq5/RZYt6OLIwMKauhpxdm78RN051Dmf7x QGJB+ouz5PCIozPqN17L2wBwF+Pp5HRyRj9XppfvUX0T3yqEKbSnOUT+12FEvC6+T2Dg c3qS+Sf73T49xawNZoLtGXnZuy7qVdsJEbZxk1/TctVOfXG5VWnDz1UTHGMXPHhks+Lz QG9m0rcCEIEtQ5Jwj9JD9JmS/59MihtOFZkvd4tIShke4r89BIiW18RnyedYTuC0zjHJ f+RfBGYfl4NVHz4elGxDsLZDa0Pp6xydLvQq51FAP36/iOSedfB+1Oudch0PBa9N61Ck HueA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486495; x=1701091295; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M4fo0VIV7uqzpyPDAWdX5Jk/6XQkZo9JW17PTbGLI2E=; b=AAoMwIZ09a3wT6FcPtAQCPwvgaf+TlqKHpLiLS4Guoc9Bg4yrZDuon2G+jA0WoQ112 RWsw3PvNwIH65ZjJCZPe5rB6fKodHGBbCJp4vaT3ypotnhBV55VQKpfST+gVkB+6v+xD IggJJS7P6wf1KJS5K9dCfu12UBoUxG+VcUBg8PBocoELvtrWeGrSRy7DQprILkmdlwak TtTR506h6IimCTW1307+mmgXQd0KEqFJL1sVBpSTVIzFqXlABCD7ZprykE8YYTJ8oUQw lKw3K0RI7mXmKuAKHFuxjnO9DCWs54NHyZ3UCJxuwhWQy1z69GHw6oTdVHS9Pjz6m8H+ ecRg== X-Gm-Message-State: AOJu0YxMatabwANktF0Ppm3SZUp1OgcHI+oQI/7QRqjNiUACdqQFdjtt bz4Xn4Kwq//higoO038ZzmSmvQ== X-Received: by 2002:a2e:9e02:0:b0:2c8:7130:c6e5 with SMTP id e2-20020a2e9e02000000b002c87130c6e5mr4656583ljk.6.1700486495208; Mon, 20 Nov 2023 05:21:35 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:34 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 11/12] firmware: qcom: scm: clarify the comment in qcom_scm_pas_init_image() Date: Mon, 20 Nov 2023 14:21:17 +0100 Message-Id: <20231120132118.30473-12-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:22:25 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089543432600635 X-GMAIL-MSGID: 1783089543432600635 From: Bartosz Golaszewski The "memory protection" mechanism mentioned in the comment is the SHM Bridge. This is also the reason why we do not convert this call to using the TZ memory allocator. Signed-off-by: Bartosz Golaszewski Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- drivers/firmware/qcom/qcom_scm.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 839773270a21..7ba5cff6e4e7 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -563,9 +563,13 @@ int qcom_scm_pas_init_image(u32 peripheral, const void *metadata, size_t size, struct qcom_scm_res res; /* - * During the scm call memory protection will be enabled for the meta - * data blob, so make sure it's physically contiguous, 4K aligned and - * non-cachable to avoid XPU violations. + * During the SCM call the hypervisor will make the buffer containing + * the program data into an SHM Bridge. This is why we exceptionally + * must not use the TrustZone memory allocator here as - depending on + * Kconfig - it may already use the SHM Bridge mechanism internally. + * + * If we pass a buffer that is already part of an SHM Bridge to this + * call, it will fail. */ mdata_buf = dma_alloc_coherent(__scm->dev, size, &mdata_phys, GFP_KERNEL); From patchwork Mon Nov 20 13:21:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 167120 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp2194963vqn; Mon, 20 Nov 2023 05:23:33 -0800 (PST) X-Google-Smtp-Source: AGHT+IFogYUKMQeSZV+fyhjPD/9uvg0u2LM8ZJIRpbIxfTc9+/4vQY5X/RVwntqROCe+KIYjCHR/ X-Received: by 2002:a05:6a00:228e:b0:6cb:73da:43c8 with SMTP id f14-20020a056a00228e00b006cb73da43c8mr4081108pfe.31.1700486613503; Mon, 20 Nov 2023 05:23:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700486613; cv=none; d=google.com; s=arc-20160816; b=d4r/Lx0LD+sjbyqVv72Gil5sHhRwGHKNltCOkQQoC8/11JIMbc5YWuywNy0/8pmdFK 8AbPyOR2QNL9cjB2b09ECLrb/EykWZkxvejf0xkuhIOWf4sz2fSoBZatjk/Kj0qPXgzQ RWaLFhu+ELnFFclq0H7Rzp2IdfvLuFjqn9bmiu0jyQjEINXj8OHoFV8WRtw6gdaUR16t NQ8UH1FkGLpKZwvc06vKiNuSY12DnCgixE2QVjVDOV3LnfAFWMdZgT9pHXXV0xXnFlER zIzMeikhY3wDC/4Zr87+eEv0I1Z2ssxxBNL5HWOY9uEtddhROw07f7g4I4/UkOjFLRVx PkmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=CFfJP54/xc7BHA8KKJGYnGca16T3qiUmmV3jKwTKBQY=; fh=lirm1ccAeXZZB1cIo+N1DqklpgcFmD/vJ7PCWNIL0HU=; b=wlNllFY/QLhEris/1jxK5ghhCBXmSOCvdAmeqMagDzfoDD8mvo5oBK7h9atxpLEX2P x1uFSCec100ByVWoC6anDrEIfF2Mjjha3ZnsAds16pl1LaH8eihiLCqmU32c8lC9Oh71 nSGdp2N3ITn56AUncTqOJYfy6ggeJ9D+alnSqpzDt14yO304JbYcKyhk/IUB+ptoHoRE D1PX5tQ3EmKrPdwzYx3EanxI0XFxyRMf9J2nV1VjWXU5Wy26seyFkoI5tcrYdHhT7VxC cuPh7YYpYtk/2qBvOta9A3yHZLA1vz3IhHTJbwLfXUgtXEGyEKWugY9QAtl7aOPxnAjp XYRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=NdESP99I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id q19-20020a656253000000b005bdfda8e04asi8245124pgv.733.2023.11.20.05.23.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:23:33 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=NdESP99I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 446C880557E4; Mon, 20 Nov 2023 05:23:29 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233389AbjKTNWL (ORCPT + 27 others); Mon, 20 Nov 2023 08:22:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233155AbjKTNVx (ORCPT ); Mon, 20 Nov 2023 08:21:53 -0500 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3001D6A for ; Mon, 20 Nov 2023 05:21:37 -0800 (PST) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40790b0a224so14376945e9.0 for ; Mon, 20 Nov 2023 05:21:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1700486496; x=1701091296; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CFfJP54/xc7BHA8KKJGYnGca16T3qiUmmV3jKwTKBQY=; b=NdESP99IGCUYwnMudb8ziVws9edff90f4SR+4gN7YxJdAJvxG12sC5thHKsLDiN8mN 8Qi0sAnHt7ev3dhLRTYxBy88W1SldgfgfXMFsWB4a+vKWGB28mmaVUTfrKcTd43s4qE5 AVnch1gPxI3DfFHDTnqrwIKT4aJqFX5sjmTLCxqVbH+apQmV3j739B1Wjb8fqPN9RDVT J82DdVBB/RXXp/Df/OR4/MDSh27c2HF9dgljTZoek2Nca7/SX69XoS21ZjUbJshQJRCc dr8pyCskMG/wNVVrKnRrPbT0XRpDPPdQqLv8ZOoOaigfw0IEVIAcTKiE2j8sEfvLOWOa K91Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1700486496; x=1701091296; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CFfJP54/xc7BHA8KKJGYnGca16T3qiUmmV3jKwTKBQY=; b=VtfZyU8PxfJqonClCI8xUdiE5QGCpsoscDv+iGeBVDVC/5C/aK9X/V92pupR6TEEZZ 8wUPB37vGvlvWCTQnxxCBx2NPXDHheVuy7EPNoOhVxavcqJk5l8gQz/c9hNv4dtHMUEJ +IIReSfrYjvAOfFgj3AkNW3Y4/JvCVzYbrhP1dzAHy+tWHGc5ODJ3wbTt294zK0UuzYm EOrGUeDuksEPtIc6cqS0i0784/cj9lXzzFzOKDUrsbunHW0iGDmlJayxgYtkuj0v9WYK fN8+woN9X7JLakPcA3aCOlPLhKyihsDdECoV+EY7mfKOeBQ5OFKdKosVOPTTzJzwRSDI EBKQ== X-Gm-Message-State: AOJu0YwmjO7d0O2440uL/mAFa9XzVd6v+z1VJLU2A6xnoeb0k/84QwZP TriKNAXAYM3Br6isAIAi70Q8Br/Wmy/4oKf4reU= X-Received: by 2002:a05:600c:474b:b0:408:575e:f24f with SMTP id w11-20020a05600c474b00b00408575ef24fmr5640653wmo.28.1700486496200; Mon, 20 Nov 2023 05:21:36 -0800 (PST) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:c590:a7ce:883:eba3]) by smtp.gmail.com with ESMTPSA id k18-20020a05600c0b5200b004065e235417sm17329192wmr.21.2023.11.20.05.21.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Nov 2023 05:21:35 -0800 (PST) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Elliot Berman , Krzysztof Kozlowski , Guru Das Srinagesh , Andrew Halaney , Maximilian Luz , Alex Elder , Srini Kandagatla Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RESEND PATCH v5 12/12] arm64: defconfig: enable SHM Bridge support for the TZ memory allocator Date: Mon, 20 Nov 2023 14:21:18 +0100 Message-Id: <20231120132118.30473-13-brgl@bgdev.pl> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231120132118.30473-1-brgl@bgdev.pl> References: <20231120132118.30473-1-brgl@bgdev.pl> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Mon, 20 Nov 2023 05:23:29 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783089451185224622 X-GMAIL-MSGID: 1783089451185224622 From: Bartosz Golaszewski Enable SHM Bridge support in the Qualcomm TrustZone allocator by default as even on architectures that don't support it, we automatically fall back to the default behavior. Signed-off-by: Bartosz Golaszewski Tested-by: Andrew Halaney # sc8280xp-lenovo-thinkpad-x13s --- arch/arm64/configs/defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig index b60aa1f89343..5380e78087a7 100644 --- a/arch/arm64/configs/defconfig +++ b/arch/arm64/configs/defconfig @@ -255,6 +255,7 @@ CONFIG_INTEL_STRATIX10_RSU=m CONFIG_EFI_CAPSULE_LOADER=y CONFIG_IMX_SCU=y CONFIG_IMX_SCU_PD=y +CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE=y CONFIG_GNSS=m CONFIG_GNSS_MTK_SERIAL=m CONFIG_MTD=y