From patchwork Thu Sep 28 09:20:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 145914 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3196602vqu; Thu, 28 Sep 2023 03:05:05 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHhiK/m3c5RBahAWVg3W3WmSzITHcuYDsl+L/pgALLvmlqkA3jMfRmtyp4q3AuFIjBLpnAH X-Received: by 2002:a05:6a00:468e:b0:693:3629:2939 with SMTP id de14-20020a056a00468e00b0069336292939mr956219pfb.9.1695895505205; Thu, 28 Sep 2023 03:05:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695895505; cv=none; d=google.com; s=arc-20160816; b=d+wG94iyvo59M8lId0acBHTH8y8ZPVxO1LHeqPSW7TfgP7vl057wfxTr+wIA7QtysO zgWpdDDTR9FMS2NYMqvb6QvgiIEfi7U9V2yZPu1jMYxh8R/ljgQGFWJGow0nfWXL8HhC 4Nll6OxxnqYuVNWz5ApAM7yh5qY48XsXoPAQHTvL1CuGQ1mVnlihicMth7mx1rVoRaYF IOM0a0rkKZh4xw6s0s6ChpCtO2BtHViP4KzLu5kXKTzo99sUAPOAb2o4DNXxXMQiWGRO 35cPvHw2Zb9q/+9/IOgA62URbVxdVonpH/032Oq8jkOnbkmAjQxhIljl6bXi5Fjw5Ldw UcOQ== 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=ZM/a/+V3p5AIwbNsZKgGbA5ufrscHGvXeuqTdYg9svM=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=BwCMh0+Tx8uLZZ6AiwOaAAARLUN/27/3sEwgGyLfQCpjrGn5q3yLbmTb/a1h3P6VKh LVPB6ZqrLhoGHiKTlHfSoQMyzoXu6keViTzJlvGDAsUYo+cWV7UGUkY4JVQ+sSWSibUV pxsz3ivPgHxTKjjNJiPJ7SjtnM+zjarjFnWmOvBsXlamAC54+Pqfovkm1VhHhNVZ9TqU FmCB4nbAUUIqnVlJmc+teJ7F1qKgln+RWG+quXbtHt0Y4XWQZzGZElyUaR9fIgAT4h6R NlNYZ1WGHopvpCA5W/2oD+cbHKa1uUVE4qJBCTGy6m0WU5ziHrekwO111s7Js1dyp0Ay IrZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b="z/WYaGG7"; 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 az1-20020a056a02004100b00577461b010fsi18553670pgb.685.2023.09.28.03.05.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 03:05:05 -0700 (PDT) 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="z/WYaGG7"; 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 4349980E763B; Thu, 28 Sep 2023 02:21:43 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231633AbjI1JVT (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60676 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231535AbjI1JVJ (ORCPT ); Thu, 28 Sep 2023 05:21:09 -0400 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 DDFD4C0 for ; Thu, 28 Sep 2023 02:21:02 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-4064a0639b6so20751365e9.1 for ; Thu, 28 Sep 2023 02:21:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892861; x=1696497661; 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=ZM/a/+V3p5AIwbNsZKgGbA5ufrscHGvXeuqTdYg9svM=; b=z/WYaGG7eX2uwET6RaaIJ+PafKNFbNsyAlAzbahzqr/lfeajIRMMD2aqjC5bo403Hg YMdKcnn+HWtqnFfnnKwPnd5pxO4F6lZ7FTaa3BYeKuRFuSY3QgjfXF1j+/o4TtjvXJ2D wqRSShAhDn8Ic9sL9nmmybdE5z/XySid7YoBeUX7e0dUg1ldb6w8V5QPedsUfkkQJdqF Zj1VB5LPeCL+H81+a9m72CWlMjWOooueBvu6jVPRc6nqlAgkq9wXtFIN4SAcQho60DKQ lWhNhK5KcveK0gA77I5PvErgMWWCHUO+j4o6lbB4By0QS4Yzn+//r927za6F2iY/tWpV 1NuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892861; x=1696497661; 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=ZM/a/+V3p5AIwbNsZKgGbA5ufrscHGvXeuqTdYg9svM=; b=qF6YFjXAEaPBt8hHYr89WYaZdy6PRVHsXe5848aNjAn9yBDJrcheCWQxDwYRLdgHRN GTvYb9G5iLAtrCrRDZr8XLdJ0z7aJzqu/6KIOlqPpYO0LTscmWNVYDHLgzTO2FqZOrR0 CA4RdiupNGtl4OCnzcZEtiYw1vnDFp5H5Aegn/GMXvpMxTqEzn5lDyBF0lwJsINVRLrf 1Y2Re0Ticxdua3R7uZtAvsEWzyN6JaCZuh6HZ0ojRHZ0zCrx9M9UZRZ9NfGGyUtWM3hL hoQ/a6T7+cFEOLQeRhcK5HZi2bwN8pxny7Dlf6v6ZowNngi2rXNJMjhm3/64amM3X8O0 E7YA== X-Gm-Message-State: AOJu0YwUfabINrVxcbH/Iayli/PUAByIeTCvB2zzqVE8PA9sAREJ+yVw kI12gaThJ7sYxdVymxSqmNS2WQ== X-Received: by 2002:a05:600c:3658:b0:406:517f:ac71 with SMTP id y24-20020a05600c365800b00406517fac71mr766709wmq.29.1695892861085; Thu, 28 Sep 2023 02:21:01 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:00 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 01/11] firmware: qcom: move Qualcomm code into its own directory Date: Thu, 28 Sep 2023 11:20:30 +0200 Message-Id: <20230928092040.9420-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 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]); Thu, 28 Sep 2023 02:21:43 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778275325373795809 X-GMAIL-MSGID: 1778275325373795809 From: Bartosz Golaszewski We're getting more and more qcom specific .c files in drivers/firmware/ and about to get even more. Create a separate directory for Qualcomm firmware drivers and move existing sources in there. Signed-off-by: Bartosz Golaszewski Acked-by: Elliot Berman Reviewed-by: Krzysztof Kozlowski --- MAINTAINERS | 4 +- drivers/firmware/Kconfig | 48 +--------------- drivers/firmware/Makefile | 5 +- drivers/firmware/qcom/Kconfig | 56 +++++++++++++++++++ drivers/firmware/qcom/Makefile | 9 +++ drivers/firmware/{ => qcom}/qcom_qseecom.c | 0 .../{ => qcom}/qcom_qseecom_uefisecapp.c | 0 drivers/firmware/{ => qcom}/qcom_scm-legacy.c | 0 drivers/firmware/{ => qcom}/qcom_scm-smc.c | 0 drivers/firmware/{ => qcom}/qcom_scm.c | 0 drivers/firmware/{ => qcom}/qcom_scm.h | 0 11 files changed, 69 insertions(+), 53 deletions(-) create mode 100644 drivers/firmware/qcom/Kconfig create mode 100644 drivers/firmware/qcom/Makefile rename drivers/firmware/{ => qcom}/qcom_qseecom.c (100%) rename drivers/firmware/{ => qcom}/qcom_qseecom_uefisecapp.c (100%) rename drivers/firmware/{ => qcom}/qcom_scm-legacy.c (100%) rename drivers/firmware/{ => qcom}/qcom_scm-smc.c (100%) rename drivers/firmware/{ => qcom}/qcom_scm.c (100%) rename drivers/firmware/{ => qcom}/qcom_scm.h (100%) diff --git a/MAINTAINERS b/MAINTAINERS index 861a16b4586c..88c2186b4975 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -17887,13 +17887,13 @@ QUALCOMM QSEECOM DRIVER M: Maximilian Luz L: linux-arm-msm@vger.kernel.org S: Maintained -F: drivers/firmware/qcom_qseecom.c +F: drivers/firmware/qcom/qcom_qseecom.c QUALCOMM QSEECOM UEFISECAPP DRIVER M: Maximilian Luz L: linux-arm-msm@vger.kernel.org S: Maintained -F: drivers/firmware/qcom_qseecom_uefisecapp.c +F: drivers/firmware/qcom/qcom_qseecom_uefisecapp.c QUALCOMM RMNET DRIVER M: Subash Abhinov Kasiviswanathan diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig index 817e011a8945..74d00b0c83fe 100644 --- a/drivers/firmware/Kconfig +++ b/drivers/firmware/Kconfig @@ -188,53 +188,6 @@ config MTK_ADSP_IPC ADSP exists on some mtk processors. Client might use shared memory to exchange information with ADSP. -config QCOM_SCM - tristate - -config QCOM_SCM_DOWNLOAD_MODE_DEFAULT - bool "Qualcomm download mode enabled by default" - depends on QCOM_SCM - help - A device with "download mode" enabled will upon an unexpected - warm-restart enter a special debug mode that allows the user to - "download" memory content over USB for offline postmortem analysis. - The feature can be enabled/disabled on the kernel command line. - - Say Y here to enable "download mode" by default. - -config QCOM_QSEECOM - bool "Qualcomm QSEECOM interface driver" - depends on QCOM_SCM=y - select AUXILIARY_BUS - help - Various Qualcomm SoCs have a Secure Execution Environment (SEE) running - in the Trust Zone. This module provides an interface to that via the - QSEECOM mechanism, using SCM calls. - - The QSEECOM interface allows, among other things, access to applications - running in the SEE. An example of such an application is 'uefisecapp', - which is required to access UEFI variables on certain systems. If - selected, the interface will also attempt to detect and register client - devices for supported applications. - - Select Y here to enable the QSEECOM interface driver. - -config QCOM_QSEECOM_UEFISECAPP - bool "Qualcomm SEE UEFI Secure App client driver" - depends on QCOM_QSEECOM - depends on EFI - help - Various Qualcomm SoCs do not allow direct access to EFI variables. - Instead, these need to be accessed via the UEFI Secure Application - (uefisecapp), residing in the Secure Execution Environment (SEE). - - This module provides a client driver for uefisecapp, installing efivar - operations to allow the kernel accessing EFI variables, and via that also - provide user-space with access to EFI variables via efivarfs. - - Select Y here to provide access to EFI variables on the aforementioned - platforms. - config SYSFB bool select BOOT_VESA_SUPPORT @@ -320,6 +273,7 @@ source "drivers/firmware/efi/Kconfig" source "drivers/firmware/imx/Kconfig" source "drivers/firmware/meson/Kconfig" source "drivers/firmware/psci/Kconfig" +source "drivers/firmware/qcom/Kconfig" source "drivers/firmware/smccc/Kconfig" source "drivers/firmware/tegra/Kconfig" source "drivers/firmware/xilinx/Kconfig" diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile index cb18fd8882dc..5f9dab82e1a0 100644 --- a/drivers/firmware/Makefile +++ b/drivers/firmware/Makefile @@ -17,10 +17,6 @@ obj-$(CONFIG_FIRMWARE_MEMMAP) += memmap.o obj-$(CONFIG_MTK_ADSP_IPC) += mtk-adsp-ipc.o obj-$(CONFIG_RASPBERRYPI_FIRMWARE) += raspberrypi.o obj-$(CONFIG_FW_CFG_SYSFS) += qemu_fw_cfg.o -obj-$(CONFIG_QCOM_SCM) += qcom-scm.o -qcom-scm-objs += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o -obj-$(CONFIG_QCOM_QSEECOM) += qcom_qseecom.o -obj-$(CONFIG_QCOM_QSEECOM_UEFISECAPP) += qcom_qseecom_uefisecapp.o obj-$(CONFIG_SYSFB) += sysfb.o obj-$(CONFIG_SYSFB_SIMPLEFB) += sysfb_simplefb.o obj-$(CONFIG_TI_SCI_PROTOCOL) += ti_sci.o @@ -36,6 +32,7 @@ obj-$(CONFIG_GOOGLE_FIRMWARE) += google/ obj-y += efi/ obj-y += imx/ obj-y += psci/ +obj-y += qcom/ obj-y += smccc/ obj-y += tegra/ obj-y += xilinx/ diff --git a/drivers/firmware/qcom/Kconfig b/drivers/firmware/qcom/Kconfig new file mode 100644 index 000000000000..3f05d9854ddf --- /dev/null +++ b/drivers/firmware/qcom/Kconfig @@ -0,0 +1,56 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# For a description of the syntax of this configuration file, +# see Documentation/kbuild/kconfig-language.rst. +# + +menu "Qualcomm firmware drivers" + +config QCOM_SCM + tristate + +config QCOM_SCM_DOWNLOAD_MODE_DEFAULT + bool "Qualcomm download mode enabled by default" + depends on QCOM_SCM + help + A device with "download mode" enabled will upon an unexpected + warm-restart enter a special debug mode that allows the user to + "download" memory content over USB for offline postmortem analysis. + The feature can be enabled/disabled on the kernel command line. + + Say Y here to enable "download mode" by default. + +config QCOM_QSEECOM + bool "Qualcomm QSEECOM interface driver" + depends on QCOM_SCM=y + select AUXILIARY_BUS + help + Various Qualcomm SoCs have a Secure Execution Environment (SEE) running + in the Trust Zone. This module provides an interface to that via the + QSEECOM mechanism, using SCM calls. + + The QSEECOM interface allows, among other things, access to applications + running in the SEE. An example of such an application is 'uefisecapp', + which is required to access UEFI variables on certain systems. If + selected, the interface will also attempt to detect and register client + devices for supported applications. + + Select Y here to enable the QSEECOM interface driver. + +config QCOM_QSEECOM_UEFISECAPP + bool "Qualcomm SEE UEFI Secure App client driver" + depends on QCOM_QSEECOM + depends on EFI + help + Various Qualcomm SoCs do not allow direct access to EFI variables. + Instead, these need to be accessed via the UEFI Secure Application + (uefisecapp), residing in the Secure Execution Environment (SEE). + + This module provides a client driver for uefisecapp, installing efivar + operations to allow the kernel accessing EFI variables, and via that also + provide user-space with access to EFI variables via efivarfs. + + Select Y here to provide access to EFI variables on the aforementioned + platforms. + +endmenu diff --git a/drivers/firmware/qcom/Makefile b/drivers/firmware/qcom/Makefile new file mode 100644 index 000000000000..c9f12ee8224a --- /dev/null +++ b/drivers/firmware/qcom/Makefile @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Makefile for the linux kernel. +# + +obj-$(CONFIG_QCOM_SCM) += qcom-scm.o +qcom-scm-objs += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o +obj-$(CONFIG_QCOM_QSEECOM) += qcom_qseecom.o +obj-$(CONFIG_QCOM_QSEECOM_UEFISECAPP) += qcom_qseecom_uefisecapp.o diff --git a/drivers/firmware/qcom_qseecom.c b/drivers/firmware/qcom/qcom_qseecom.c similarity index 100% rename from drivers/firmware/qcom_qseecom.c rename to drivers/firmware/qcom/qcom_qseecom.c diff --git a/drivers/firmware/qcom_qseecom_uefisecapp.c b/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c similarity index 100% rename from drivers/firmware/qcom_qseecom_uefisecapp.c rename to drivers/firmware/qcom/qcom_qseecom_uefisecapp.c diff --git a/drivers/firmware/qcom_scm-legacy.c b/drivers/firmware/qcom/qcom_scm-legacy.c similarity index 100% rename from drivers/firmware/qcom_scm-legacy.c rename to drivers/firmware/qcom/qcom_scm-legacy.c diff --git a/drivers/firmware/qcom_scm-smc.c b/drivers/firmware/qcom/qcom_scm-smc.c similarity index 100% rename from drivers/firmware/qcom_scm-smc.c rename to drivers/firmware/qcom/qcom_scm-smc.c diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c similarity index 100% rename from drivers/firmware/qcom_scm.c rename to drivers/firmware/qcom/qcom_scm.c diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom/qcom_scm.h similarity index 100% rename from drivers/firmware/qcom_scm.h rename to drivers/firmware/qcom/qcom_scm.h From patchwork Thu Sep 28 09:20:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146014 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3236490vqu; Thu, 28 Sep 2023 04:25:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF3vFPEKOn95KqyrHOVoPwVLRcXSkc+vP6aFWIXRdhvLVr70zZ7T6Mr35zstI4yrkzq/3yr X-Received: by 2002:a17:90b:1d86:b0:271:bc40:5097 with SMTP id pf6-20020a17090b1d8600b00271bc405097mr771864pjb.30.1695900346964; Thu, 28 Sep 2023 04:25:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695900346; cv=none; d=google.com; s=arc-20160816; b=Z0cbm3hHMrAfO95/q8YvjRkpPnfmgpJysGabcTR5rn0NsNdlkovSmExcnJIn0lFqAk jnNQXoLaBWT6GzJqiMS6ACpDn7VUOKXa8Po6Be8A8+T2P9cY13uhhXaprpAI3LdJdjG7 BbEy0ZSpyh80XRtzRRgCxU/CwjClDjqYdfvCGx2lTSw2VU8UDS1bKi/o8piBSI7Gec7L sue0UQLldqKan1DKyY/QCrKVjYWTKcNHrWnTtkF9pFbn4cx5XelznVhHcPp+xs/Ve3Gq IM+xhlOmNsB3f+oBP1a8LIigqZveDXb8SXLmvc0Ux7v/vnkN/Mtkqj2c1vD3y73jidpV S15g== 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=nNsWyjWC2KILQ6F2y3+8u8Tzek7qyiCAnIFfqnam7kU=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=PPFaGcRw9DxL/eQPhqi1TKazdzlr8D4jYFDk2IvevlrZEyVr94N2oGznlhxW2wBCxV vzN1HrvtSMvpukmUEi+3+m0jsZrl75QIFhQ6taJiI8EvRLSAimdz/g8gnp0tOgqTYq3t hW03UiI7mIK9iKYCXpgUQetJiXwA/PQiDnudeiuvTJUk6+9SsAfIQflCLJ21WTCg6nrs 1ACOYgy2LOhnt73Dlzga0Scolz69I0JbS7x0b30Wns3YE34knlA0jORwzRipcWDNpAXr qT3zUBvYucbB1ilVjjouf1A8zL+gEE9R5fabK8ZXzExYvVf9b7gA8fdyUl1BxPqxSVbP 8RaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=zgRxP7rk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id az2-20020a17090b028200b00273fa934cc1si19959020pjb.167.2023.09.28.04.25.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 04:25:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=zgRxP7rk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 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 morse.vger.email (Postfix) with ESMTP id 148F9802318A; Thu, 28 Sep 2023 02:21:53 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231663AbjI1JVV (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231544AbjI1JVJ (ORCPT ); Thu, 28 Sep 2023 05:21:09 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16C8C193 for ; Thu, 28 Sep 2023 02:21:04 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3248e90f032so156270f8f.1 for ; Thu, 28 Sep 2023 02:21:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892862; x=1696497662; 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=nNsWyjWC2KILQ6F2y3+8u8Tzek7qyiCAnIFfqnam7kU=; b=zgRxP7rkh+9hH2pVaQ3+zo+yXjMhu//mQdL/h8JEc7x+qDdRL5Iw/sIlcMTXLF9Tu1 6cSaS1DlfJPrP4d3CGcWQiuJxA91W9RQzuXtHfvnx5wOra4DwY6gzZGUAk+f3pOobyh6 9rjYmyqt84X9e1b/gTKnFyEEyKVD5+yJRI8Kyz474vxVcbizenVzDZ/HteaO92V8qHmc cLOMnwl2TI2sy80roqYIU8I8DwMOKb4Km/uHArUAgiChfaSIsjRay6xiI4oHVFV71vXV pg4mpqkDhbrqc/yipibwKZxvkhXHrdkaK3JCu/+27rGXvA6/Iw25jj4piAYIdetYK1sQ DGFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892862; x=1696497662; 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=nNsWyjWC2KILQ6F2y3+8u8Tzek7qyiCAnIFfqnam7kU=; b=UyNLEf0DfZu6Et8N7th9FN0Hq/Zoar2Yn0TOULh0+hL8eqyzHrP05XiQWKVuGvKMuo 7VVj6DMeUrihNThehWNe6CipkoMw0kuZGoh47b+Lj249Z05cdOZo5a1lulNsEoMQ80Iy gDP6fo20WcYCp1DxpUOnbywFdbig/3Yo6fwN6VlD65I2WsBZLGhvqKacu0BiDj2uIO37 SzPcqcDypJP9/9x7yuSIZan1j0hFUh0zHi+h69yy05tWg2TSun6OuAbOAHfNt6jR/J+z y4jTcyKHC++tELtp5Ra0FE5arfOP3aTAPvRPN11175Fz4fT2gAEniJMYPM4/38zEceU9 DOfQ== X-Gm-Message-State: AOJu0YyDycLxygFUl70evDEUyCFuC+jPlupD4v79nqzxImDNsOMuHzJm A8ixyEWCSdESMBeXtmjcd+/Ifw== X-Received: by 2002:a5d:4f8e:0:b0:320:aea6:abb9 with SMTP id d14-20020a5d4f8e000000b00320aea6abb9mr645907wru.6.1695892862383; Thu, 28 Sep 2023 02:21:02 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:01 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 02/11] firmware: qcom: scm: add a dedicated SCM memory allocator Date: Thu, 28 Sep 2023 11:20:31 +0200 Message-Id: <20230928092040.9420-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.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 (morse.vger.email [0.0.0.0]); Thu, 28 Sep 2023 02:21:53 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778280402451333922 X-GMAIL-MSGID: 1778280402451333922 From: Bartosz Golaszewski We have several SCM calls that require passing buffers to the trustzone on top of the SMC core which allocated 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). As all but one calls allocate memory just for the duration of the call, we don't need a lot of memory. A single pool for that purpose is enough. Let's create a genalloc pool dealing out chunks of coherent, page-aligned memory suitable for SCM calls that also provides a function for mapping virtual to physical addresses. Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/Makefile | 2 +- drivers/firmware/qcom/qcom_scm-mem.c | 134 +++++++++++++++++++++++++ drivers/firmware/qcom/qcom_scm.c | 5 + drivers/firmware/qcom/qcom_scm.h | 7 ++ include/linux/firmware/qcom/qcom_scm.h | 7 ++ 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 drivers/firmware/qcom/qcom_scm-mem.c diff --git a/drivers/firmware/qcom/Makefile b/drivers/firmware/qcom/Makefile index c9f12ee8224a..b9b117f22e9f 100644 --- a/drivers/firmware/qcom/Makefile +++ b/drivers/firmware/qcom/Makefile @@ -4,6 +4,6 @@ # obj-$(CONFIG_QCOM_SCM) += qcom-scm.o -qcom-scm-objs += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o +qcom-scm-objs += qcom_scm.o qcom_scm-smc.o qcom_scm-legacy.o qcom_scm-mem.o obj-$(CONFIG_QCOM_QSEECOM) += qcom_qseecom.o obj-$(CONFIG_QCOM_QSEECOM_UEFISECAPP) += qcom_qseecom_uefisecapp.o diff --git a/drivers/firmware/qcom/qcom_scm-mem.c b/drivers/firmware/qcom/qcom_scm-mem.c new file mode 100644 index 000000000000..eafecbe23770 --- /dev/null +++ b/drivers/firmware/qcom/qcom_scm-mem.c @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2023 Linaro Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "qcom_scm.h" + +static size_t qcom_scm_mem_pool_size = SZ_2M; +module_param_named(qcom_scm_mem_pool_size, qcom_scm_mem_pool_size, + ulong, 0400); + +struct { + struct device *dev; + void *vbase; + phys_addr_t pbase; + size_t size; + struct gen_pool *pool; + struct radix_tree_root chunks; + spinlock_t lock; +} qcom_scm_mem; + +struct qcom_scm_mem_chunk { + phys_addr_t paddr; + size_t size; +}; + +void *qcom_scm_mem_alloc(size_t size, gfp_t gfp) +{ + struct qcom_scm_mem_chunk *chunk; + unsigned long vaddr; + int ret; + + if (!size) + return ZERO_SIZE_PTR; + + size = roundup(size, 1 << PAGE_SHIFT); + + chunk = kzalloc(sizeof(*chunk), gfp); + if (!chunk) + return NULL; + + vaddr = gen_pool_alloc(qcom_scm_mem.pool, size); + if (!vaddr) { + kfree(chunk); + return NULL; + } + + chunk->paddr = gen_pool_virt_to_phys(qcom_scm_mem.pool, + (unsigned long)vaddr); + chunk->size = size; + + scoped_guard(spinlock_irqsave, &qcom_scm_mem.lock) { + ret = radix_tree_insert(&qcom_scm_mem.chunks, vaddr, chunk); + if (ret) { + gen_pool_free(qcom_scm_mem.pool, (unsigned long)vaddr, + chunk->size); + kfree(chunk); + return NULL; + } + } + + return (void *)vaddr; +} +EXPORT_SYMBOL_GPL(qcom_scm_mem_alloc); + +void qcom_scm_mem_free(void *vaddr) +{ + struct qcom_scm_mem_chunk *chunk; + + if (!vaddr) + return; + + scoped_guard(spinlock_irqsave, &qcom_scm_mem.lock) + chunk = radix_tree_delete_item(&qcom_scm_mem.chunks, + (unsigned long)vaddr, NULL); + + if (!chunk) { + WARN(1, "Virtual address %p not allocated for SCM", vaddr); + return; + } + + gen_pool_free(qcom_scm_mem.pool, (unsigned long)vaddr, chunk->size); + kfree(chunk); +} +EXPORT_SYMBOL_GPL(qcom_scm_mem_free); + +phys_addr_t qcom_scm_mem_to_phys(void *vaddr) +{ + struct qcom_scm_mem_chunk *chunk; + + guard(spinlock_irqsave)(&qcom_scm_mem.lock); + + chunk = radix_tree_lookup(&qcom_scm_mem.chunks, (unsigned long)vaddr); + if (!chunk) + return 0; + + return chunk->paddr; +} + +int qcom_scm_mem_enable(struct device *dev) +{ + INIT_RADIX_TREE(&qcom_scm_mem.chunks, GFP_ATOMIC); + spin_lock_init(&qcom_scm_mem.lock); + qcom_scm_mem.dev = dev; + qcom_scm_mem.size = qcom_scm_mem_pool_size; + + qcom_scm_mem.vbase = dmam_alloc_coherent(dev, qcom_scm_mem.size, + &qcom_scm_mem.pbase, + GFP_KERNEL); + if (!qcom_scm_mem.vbase) + return -ENOMEM; + + qcom_scm_mem.pool = devm_gen_pool_create(dev, PAGE_SHIFT, -1, + "qcom-scm-mem"); + if (!qcom_scm_mem.pool) + return -ENOMEM; + + gen_pool_set_algo(qcom_scm_mem.pool, gen_pool_best_fit, NULL); + + return gen_pool_add_virt(qcom_scm_mem.pool, + (unsigned long)qcom_scm_mem.vbase, + qcom_scm_mem.pbase, qcom_scm_mem.size, -1); +} diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index c2c7fafef34b..258aa0782754 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1880,6 +1880,11 @@ 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_scm_mem_enable(scm->dev); + if (ret) + return dev_err_probe(scm->dev, ret, + "Failed to enable SCM memory\n"); + /* * Initialize the QSEECOM interface. * diff --git a/drivers/firmware/qcom/qcom_scm.h b/drivers/firmware/qcom/qcom_scm.h index 7b68fa820495..8c97e3906afa 100644 --- a/drivers/firmware/qcom/qcom_scm.h +++ b/drivers/firmware/qcom/qcom_scm.h @@ -4,6 +4,10 @@ #ifndef __QCOM_SCM_INT_H #define __QCOM_SCM_INT_H +#include + +struct device; + enum qcom_scm_convention { SMC_CONVENTION_UNKNOWN, SMC_CONVENTION_LEGACY, @@ -165,4 +169,7 @@ static inline int qcom_scm_remap_error(int err) return -EINVAL; } +int qcom_scm_mem_enable(struct device *dev); +phys_addr_t qcom_scm_mem_to_phys(void *vaddr); + #endif diff --git a/include/linux/firmware/qcom/qcom_scm.h b/include/linux/firmware/qcom/qcom_scm.h index ccaf28846054..291ef8fd21b0 100644 --- a/include/linux/firmware/qcom/qcom_scm.h +++ b/include/linux/firmware/qcom/qcom_scm.h @@ -5,7 +5,9 @@ #ifndef __QCOM_SCM_H #define __QCOM_SCM_H +#include #include +#include #include #include @@ -61,6 +63,11 @@ enum qcom_scm_ice_cipher { bool qcom_scm_is_available(void); +void *qcom_scm_mem_alloc(size_t size, gfp_t gfp); +void qcom_scm_mem_free(void *vaddr); + +DEFINE_FREE(qcom_scm_mem, void *, if (_T) qcom_scm_mem_free(_T)); + int qcom_scm_set_cold_boot_addr(void *entry); int qcom_scm_set_warm_boot_addr(void *entry); void qcom_scm_cpu_power_down(u32 flags); From patchwork Thu Sep 28 09:20:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146345 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3662904vqu; Thu, 28 Sep 2023 16:22:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG5891aA9ToB1UaaN3GvMZBKvvRQpm4B+O0fFmyJxHVzpGqqImGrSfqYUp45Avz8mzezpjC X-Received: by 2002:a05:6a20:938b:b0:161:b5f9:e78d with SMTP id x11-20020a056a20938b00b00161b5f9e78dmr3748110pzh.23.1695943334160; Thu, 28 Sep 2023 16:22:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695943334; cv=none; d=google.com; s=arc-20160816; b=U9g8GodI2ySUPvTYfZcoxKf1myPu+gtC3J0i4gSmSuGAvj3aOi7y1d4LUXziX2jXWi +7G9O+w89rVa10bx+e8X6wXZ28W87SHD/7FEvO46+u7y93lZMZxrFPqYrIYslo4OphPT 9C9WiEukjYPinWq5ocuKW+ys+cJyrGroydjSF29Bn1zGuaIm6Hc/lcVlhEyvaIMlsBQS 9K1VLxkgPXrJmdUTwci59pNDlaA5fAbiPTkR1od3QTLMJ3O4qhpTTjLrhMnig1T9AmCm X5JJ5+4NAmz7U3pjCsKvv1WYqtFOvB8AcxFZFFwtCZ8x/sdEeNCEmcIUs1UXLBo5QQ69 uwKw== 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=Bhvnh9OE997tswH9jSZ8GJnXlXkzgsgO3a5Q/DPonFc=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=SX/TM5a4J0pslmPuzVcu8cQNnhq7tUoALFnSxM/u917h0pxauXZHRAJJyZpH4r/T8X NcyZrah2Rzx0iaWEj1A/zUlFTAzPu3QYmUCrgKMgSza8JQhDHBxf3LQM0YfF1SKQ66Hl eGWmkS3ndUn0pkGifaU2tPvdqyz+vGOO2WDP5laax8fG8zYRN45MGkGyXqQm5V+DBAb6 Llr2Ulva+rW8y+86eFfWYXtNQs+WjHG885SYi/uIjoyamhWVuBxjqWmAGKaOvPrYFRqQ ZEkp0puRkfJRyPQHldDDRzLHZuKpFijLDcMui5JOMixsP9VxjcNvDh7ZLbDjNSAQMcRF OUXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=rvFi8Fj8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id bg26-20020a056a02011a00b0057771e49c25si19532792pgb.693.2023.09.28.16.22.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 16:22:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=rvFi8Fj8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 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 1FF868148BBC; Thu, 28 Sep 2023 02:22:05 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231630AbjI1JVc (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231597AbjI1JVJ (ORCPT ); Thu, 28 Sep 2023 05:21:09 -0400 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 DB261195 for ; Thu, 28 Sep 2023 02:21:04 -0700 (PDT) Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-4053cf48670so116703465e9.0 for ; Thu, 28 Sep 2023 02:21:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892863; x=1696497663; 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=Bhvnh9OE997tswH9jSZ8GJnXlXkzgsgO3a5Q/DPonFc=; b=rvFi8Fj8kRtdFRgW6wXh3179g3cMjGHxkNRoATwjwng8kbLqBx+JJNNqzjHt0P0LBB cV8mMkePJka1Ib6SlbVlRclzX+34BIys67X1FehYJvuImv22zkPim20wNH3clLSqEELt 51YP9pbaIPwLxcSSwvclA/Zom94D/6FMkFyW0yafwHDipLaMHnYsF6qyPup+e8oBcfal dZ2zncJxXDll7AM+bSwoFOSXfQTzRfWjS7ryOtECZ4ogFBw4YemmBbeUvJy4C0ZnPFXb EoFUXb52iPkCO80aL6shXYYREAadXUpFzn3nJCJpetwa8IJNgOgkRozOI8hCxUxJIi33 G6Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892863; x=1696497663; 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=Bhvnh9OE997tswH9jSZ8GJnXlXkzgsgO3a5Q/DPonFc=; b=t5sJf/hyuYJTAg4EvHSk/L3qZYV/jG9t8nBQBIUMlvgKBAZJ/tPCh3Fr6tg9KECpYG VGR3WHQtBt72LxiPbhsGAzLzAIeC/je3B4EoAEJq4TCKnyIweIhKveRueA8kAU5fzNOD y3yTWtx/Xb7ybgVzFOGPfRCv04/BwfqnOFvQaAR40zD4WFpyWST8kf69F0K0fHi9FUg+ fN9zQjMS2ANDclsjmQc3jA0z+nHDppMDwTTfNpxUPw5ODHJXNwivNvEcnBro8W2TrI0X zxeeeUVoUPOW0ffIzVounswlqO4y4b5z2fRGwZernMbV4pLV+ffzQjsuQIbWhqAOWnKr 10pQ== X-Gm-Message-State: AOJu0YycpN5ZgB8xgnYZhfAsSku+z/64Q4W+UNb3QFbaAqSrt0w73Mqt dgVZoubVEBz/rrzjCspYn09PwA== X-Received: by 2002:a5d:414e:0:b0:320:1d1:71c4 with SMTP id c14-20020a5d414e000000b0032001d171c4mr646792wrq.23.1695892863407; Thu, 28 Sep 2023 02:21:03 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:02 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 03/11] firmware: qcom: scm: switch to using the SCM allocator Date: Thu, 28 Sep 2023 11:20:32 +0200 Message-Id: <20230928092040.9420-4-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 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]); Thu, 28 Sep 2023 02:22:05 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778310261502715682 X-GMAIL-MSGID: 1778325477512526639 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 SCM allocator for that memory and shrink the code in process. Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm-smc.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm-smc.c b/drivers/firmware/qcom/qcom_scm-smc.c index 16cf88acfa8e..0d5554df1321 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 @@ -152,8 +153,7 @@ int __scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc, { int arglen = desc->arginfo & 0xf; int i, ret; - dma_addr_t args_phys = 0; - void *args_virt = NULL; + void *args_virt __free(qcom_scm_mem) = NULL; size_t alloc_len; gfp_t flag = atomic ? GFP_ATOMIC : GFP_KERNEL; u32 smccc_call_type = atomic ? ARM_SMCCC_FAST_CALL : ARM_SMCCC_STD_CALL; @@ -173,7 +173,7 @@ int __scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc, 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_scm_mem_alloc(PAGE_ALIGN(alloc_len), flag); if (!args_virt) return -ENOMEM; @@ -192,25 +192,12 @@ 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_scm_mem_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; From patchwork Thu Sep 28 09:20:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146155 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3361883vqu; Thu, 28 Sep 2023 07:40:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGhsZFBZkWIzhXNwKiRz3J2M2NfJ0Kw+AmvRsumMR6yqhForVCuje6vhNGnpg1uTh6RaV13 X-Received: by 2002:a05:6a21:2726:b0:121:e573:3680 with SMTP id rm38-20020a056a21272600b00121e5733680mr1123292pzb.62.1695912011803; Thu, 28 Sep 2023 07:40:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695912011; cv=none; d=google.com; s=arc-20160816; b=TWXPSJGShjA8BtUDPa3qQ/9q/y05sATbi3YfR1KsJn5HJRbs/ARgqzonQs0hXtsxMc +alncheYpqSHOUekTipBWYbQ9F57Zh/RZ+J7KYOoMFnif8eFaTzp66QUg0uEOZP5S1LL lWpZxErcemJlI34BgQJ4LnHoUN8KFKr4hTqTtMN+hLvoDyLgpI/7bWrEJrjkfwVNst77 ff3BXrdbZ9x5QAXp7e+rGx6xHYfAMPQTMAo9nKFMHVp43oq6JvdmC77jAXXsqUI5/ALC UR6p6S3LVLrf5F44uSA70T9ZmnBFjUtJFbOo/aSGUIzRp9YMTjGAozwlNPo1Bm+P0CEW 1UyA== 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=N+8cU6fa0dkOhujc4CdFNdtWDl3dgQeMzHDKVHwQ4Uk=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=tm+ioaN0OnnrFEwexOkzxFlfWrUvaIYzGX06+VzczcxzzXcdLAzSQJSPJ8fW3GwFN5 SCd4vq/RVMiQqrWRc0tveopAQDC79VPlsl7ilOSKB3n7CsBs1Ssv5gFIEcnCpq720z8+ fTD/cJJzPisnLfZeaMO9LOyT8UyE5kOkJZcmqrtg27+exWUp0uJbW/wisRQUZ9IYxl15 QwqrDYtorlNtX+f1tyJqkz5hZLe7Hxq7tTqqZ5DZQa1NSPZMuqM/nTDUIpvpT63vAYan Wiy8wXCoF8b2iMTdkf4byOzjvZvKtRZi3Ozupd6wpYqH4BAg/gWWJXIBDu2ZMAJl229v Ky6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=dhOblrfE; 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 w4-20020a634744000000b0057763d820d7si18660669pgk.835.2023.09.28.07.40.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 07:40:11 -0700 (PDT) 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=dhOblrfE; 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 DE8BC813CD92; Thu, 28 Sep 2023 02:21:21 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231624AbjI1JVN (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231571AbjI1JVJ (ORCPT ); Thu, 28 Sep 2023 05:21:09 -0400 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1A2FC198 for ; Thu, 28 Sep 2023 02:21:06 -0700 (PDT) Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3231dff4343so5808107f8f.0 for ; Thu, 28 Sep 2023 02:21:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892864; x=1696497664; 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=N+8cU6fa0dkOhujc4CdFNdtWDl3dgQeMzHDKVHwQ4Uk=; b=dhOblrfEXhCc8eGhlP1uuRUkq/MRbKiM3rBOvnXbMhGbkurjaNlolnkxz+WsT9X/j+ PXdTYxYLp6bjl6jI/k2QMS4PvcRi98icXp7QPr+pEfl0nODKi+sfPnhDWmc/VyLYqO2G KBXpkq19mSIa6wu+DwhjFdJ9PFYhauOZ4eOdcEYwK/b8BTn3HSjBIx5IFHaXT+g5cglQ jqtmNDMQ5Q65p+ffG5WMQbeSgpf2es1pcJ32+LoMlk1n2pW5qOS4py77sb6mGLn1+fnY mDGvLmmJRnVqD74BbXuzYQQj9rs+WyGA7Cy7fGt6aHNYBn2j+gOxEahgvDAX6YH9keJB wqEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892864; x=1696497664; 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=N+8cU6fa0dkOhujc4CdFNdtWDl3dgQeMzHDKVHwQ4Uk=; b=RPt+SG357Lik/EEYn9lVYxQjKaBpnYYiY0nD1eukwwT9/97hWfPlnXV3EmaN9o5BlE yyJHS8l2MGjY4Fn9eA3FSvy7AJTg/sNbpUVkjWaYNZYXjp1DYa0QWGibAV7kHoxD6eiO R8D2VDWz1UHHxGJRJ2S7rzSXv2Vc6xD2KVaSG37qfFtZ+RfGRF3iX4VKdGZfCO4RRE5Z X0XncEtF+Z2WhLc7BNNSQGexcgwkB48uhgANO+Cbx7tvlJM18IiMV3bPJi4nzh5fgYdH 8K3NoOyQGdW+SAO5DJ60kthz60CBjrP4o3Daf2ax8xoRuyd32l407uq86DlESnSz1oZg sTTw== X-Gm-Message-State: AOJu0Ywao//+BEPbMR1pU1f11CZ1CeVcqg/d0wcxqOUpal+m5W3rrbEh 9Z23StmCagjhrMmvD3H0yI9Klw== X-Received: by 2002:a5d:5265:0:b0:314:314e:fdda with SMTP id l5-20020a5d5265000000b00314314efddamr759882wrc.23.1695892864488; Thu, 28 Sep 2023 02:21:04 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:03 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 04/11] firmware: qcom: scm: make qcom_scm_assign_mem() use the SCM allocator Date: Thu, 28 Sep 2023 11:20:33 +0200 Message-Id: <20230928092040.9420-5-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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_NONE,SPF_HELO_NONE,SPF_NONE 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]); Thu, 28 Sep 2023 02:21:21 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778292634042081769 X-GMAIL-MSGID: 1778292634042081769 From: Bartosz Golaszewski Let's use the new SCM memory allocator to obtain a buffer for this call instead of using dma_alloc_coherent(). Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 258aa0782754..0c532e794b92 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -4,6 +4,7 @@ */ #include +#include #include #include #include @@ -980,14 +981,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; @@ -997,10 +997,12 @@ 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_scm_mem) = qcom_scm_mem_alloc(ptr_sz, GFP_KERNEL); if (!ptr) return -ENOMEM; + ptr_phys = qcom_scm_mem_to_phys(ptr); + /* Fill source vmid detail */ src = ptr; i = 0; @@ -1029,7 +1031,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 Thu Sep 28 09:20:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146223 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3468486vqu; Thu, 28 Sep 2023 10:11:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFSd45puddmDLuOYmKFbzV8NiVBIKrwdtWq6tk/NwTOCrRGtVwiJyNY5h6JPWU/1zMBtC3H X-Received: by 2002:a17:902:db0c:b0:1c6:2dbb:e5fa with SMTP id m12-20020a170902db0c00b001c62dbbe5famr1903851plx.44.1695921102601; Thu, 28 Sep 2023 10:11:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695921102; cv=none; d=google.com; s=arc-20160816; b=XVCYxKC+WpyqDEasW3YkTkjuJ8ORt1oQsSs4Z7J0zzQecyOU3pYpjy4wJEg2UJ47ih /qK14QnW2ZzG5JIHbCl7w4z2IWX3SeY0KXhd2nXj/uhRSZJu/vEh4CIYXgxGvceyfrJa awQeS7t3USnOnIoLXv2VQlUhPCna2o5Zie77sGhV/hKu4UpJWY24AWyirCIHgVodJyf+ aA9hqu4NpJreFI80CUhF52PoY0scBcStIZ71lo69yVRf5+Myc9D7WwTlxFzme1mYrAau CGqV6icUMXzvUOxE7oobbQT3qn+iVbEIuVmyJhuvZiohdiyeHNedhm+iUq1xrGdEWnXv 3Qpw== 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=9ZW43V/v3JWndTZOC7qgio7lrKv8+8C3I99C3oqf4j4=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=pmhpvm2UYaOP3rEOScxpOHTYzd22Z3WihVMxPYPo+uZY2wC2EQct6UbDFEwCW3eG9o Csp8nR/kv7opIOOdhPAqqKsF5Yyi+xEiExiZBt9t4RS7d3JtHfAsq++ASnq88J4eqmte CzkP20YAHeHv0v3yXPoeYgsdNVi2xOISZ+F4akvwhG/9Mac5E5kUfu4/9uly2rI74KzJ 2myrL49AwOmirlm9OeUwY/JaUx8qLlL4QkqP4pG5q4QeoC9/hh+GC/AIw1enM9RE/YhZ o6C9ghO9SH34j88d4E9r+I+pnYx3OhNY+QhQ3TK0IWvShwV6A/9WYcm32ZWT7LZjRsaT 2zvQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=aPvgkqbs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id x9-20020a170902ec8900b001bf0b29d935si14567356plg.34.2023.09.28.10.11.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 10:11:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=aPvgkqbs; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 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 81D9E8269F24; Thu, 28 Sep 2023 02:22:22 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231710AbjI1JVm (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231618AbjI1JVM (ORCPT ); Thu, 28 Sep 2023 05:21:12 -0400 Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E20D719C for ; Thu, 28 Sep 2023 02:21:06 -0700 (PDT) Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-40566f8a093so96296105e9.3 for ; Thu, 28 Sep 2023 02:21:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892865; x=1696497665; 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=9ZW43V/v3JWndTZOC7qgio7lrKv8+8C3I99C3oqf4j4=; b=aPvgkqbsvfVwIlxZ5kifPEF6X1I6p/Ui9LLR1DB0nUyIlD6CVGUI1GzbWmV3GYOQ2i z0iY41FSlTPuDhyzTOit1BDfZ6cQRNe9/71fYVQLO6ehGP+NIxxPeEfVzF+xGcT2BDvJ XScbx0+yazklQ3oAzmpQrZzGq8zY8GbjKNAxaLnP8D38xt9/mOvWxOgcSK8Fj6c4gGX5 hwFfPQjCdWpew9HnghopB9QpPCXwNkbjjfb5nXtP5UhT8YHoFZXgsWcbkV0CiG4DGAsl tVNpe0FCNZeQi/x9hNjRzL7EBaqlBT4oCJP76OX26Udcax/ExwHlxUZBY/WH+x2N4vwm rnmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892865; x=1696497665; 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=9ZW43V/v3JWndTZOC7qgio7lrKv8+8C3I99C3oqf4j4=; b=nAlArbigb6huCwJ1FeIBORBsIftl/FN5yn0MTYswepfivtFFEQ8DxfKJKO1mnkkNHf uqT3ZlEzgGJGbMh4BdRCuJ4QyC0SPbhFhj3mh/JSTss/iDibjlWthVw96mTvig6qZhj2 OUfpf2TuzoiO/+chFdB5I78gfKSJidi234L1CbUxVFRDxrNB+PLyMrslSbCKw5bSfRCt wolZ9DKlvG1Wit85RHBuZ23oacvzB4OaDd3bm/WKp2kjZ51lHx6HR+YITGdECD66vnBB bHUKwXS2p/0ZZzYkCaovcn/aYeQDj12r5DcF8dQJeK7oLxmoL1cgnGNYt2VPVnUhVkTI tcFg== X-Gm-Message-State: AOJu0Yxm6Mlc3Qo8NSmWLB26tOJhLBSOVUEwO89YOzdiaoDDMqElxhlb RdSG0e0kL+cUjpliA7CgKmWM9A== X-Received: by 2002:adf:e912:0:b0:31a:d8c0:cb8b with SMTP id f18-20020adfe912000000b0031ad8c0cb8bmr517938wrm.25.1695892865407; Thu, 28 Sep 2023 02:21:05 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:04 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 05/11] firmware: qcom: scm: make qcom_scm_ice_set_key() use the SCM allocator Date: Thu, 28 Sep 2023 11:20:34 +0200 Message-Id: <20230928092040.9420-6-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 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]); Thu, 28 Sep 2023 02:22:23 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778302166262547356 X-GMAIL-MSGID: 1778302166262547356 From: Bartosz Golaszewski Let's use the new SCM memory allocator to obtain a buffer for this call instead of using dma_alloc_coherent(). Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 0c532e794b92..02a773ba1383 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1178,32 +1178,20 @@ 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_scm_mem) = qcom_scm_mem_alloc(key_size, + GFP_KERNEL); if (!keybuf) return -ENOMEM; memcpy(keybuf, key, key_size); - desc.args[1] = key_phys; + desc.args[1] = qcom_scm_mem_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 Thu Sep 28 09:20:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 145886 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3185578vqu; Thu, 28 Sep 2023 02:39:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF71r8W6LV8sbLPoF4kKIXWyxxsp+UwuC8zE6gjDXk2+WcREkpddk3XDcCA/tVRttgmbdXk X-Received: by 2002:a05:6808:14c5:b0:3ab:5e9e:51f1 with SMTP id f5-20020a05680814c500b003ab5e9e51f1mr813249oiw.46.1695893949543; Thu, 28 Sep 2023 02:39:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695893949; cv=none; d=google.com; s=arc-20160816; b=zCsYShuXRaP9dqYtUqXynU8OgKHEltTXTbO4LQglLqyieoRU7NEJl2fu2oO/A6DUH+ 8Xl1hRUIcRtlujKWa5K4WjaKeCxCQMtMV6EEdUgQlrkppvZfH4GzbISTZ6i+AjOoVXRW 68kF3I1C48QHgJ+DLO0Ox4xCXn7a+TXF8e1otYa6VAryupc+y0KWyCK7C5gwV4Q3c/lg VNoDJf2lxLOEBtymalR+7HKy2u39ng+hOtid39IVDU+OdzlKvmRXOZhOInK1BAIU9P46 zyVFAFpbUcoAmU8jn1Ex1dlXI7ciR6rVlv2f/cn2PQPksYo1vdHpGrjtc5jtVv91HqFw G4zg== 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=nxuIylgD4O5skgVzMv0zVAkT/q/ETWmaZKIykuazMpk=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=XpCvL9hqst6ZrJxLtiugOIhleX8B/6d7SWetaGAfju14TFQUg9WOBgM99RJDfaNQOZ fS7EQ9cVSm7tcYlGVvmgazH/x7KXpruBI5mYCHuBYoT6/W8GrS1o3UNmyFrMx3muBOdF avO7O/5RYeT5xkikNy7zwosGvOSo0t2TgDU4bRO15hgWJqJJJBJQOpNX63M+SQlZ50qa RSMcoGrCxrCKg8m64bLoSErmHF/obmLLKKrjwjWJK+qvNOFKComeMRS3TGzQm9/kWPPR p1fUFtZBHn6Q8uWMcVHKtnsJDfbz4mLleD7momhW57KtoyEf9ZXtdxklVZctwMPTg9c7 POsw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=QsZQMhMR; 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 bw8-20020a056a00408800b0068fb95e5401si17602872pfb.65.2023.09.28.02.39.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:39:09 -0700 (PDT) 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=QsZQMhMR; 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 D059681BDDCA; Thu, 28 Sep 2023 02:21:42 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231723AbjI1JV2 (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231598AbjI1JVJ (ORCPT ); Thu, 28 Sep 2023 05:21:09 -0400 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 5D7BA8E for ; Thu, 28 Sep 2023 02:21:08 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40566f8a093so96296255e9.3 for ; Thu, 28 Sep 2023 02:21:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892866; x=1696497666; 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=nxuIylgD4O5skgVzMv0zVAkT/q/ETWmaZKIykuazMpk=; b=QsZQMhMR3GBlsKJ7Hh7RI2aRGHO/11F+Zwd3LGwooLhEF9xpYgSdM3YZKHCuA3LTH0 pY3AuWOHLJmI3j/pyBmu5avFSn9jqc6wUDK5UmCDZ3vE6OeoC51UGWYj4lz8HHH7zqhv 1Y3FnQImB+qkBxQNrbPKvsRchdc9j+z43X9h/yVD++PpY9SX3O/f6u1OPiYpU5jnX7Jm lw74P8IZDMlNPlk73nRG896X8r4SuyqB8s1bRccr6oINpNlge11A4BVeoMfhqGBWAH+6 Kgqz1kN8uU3gDZxTA7M91vFsL15dZMKb07d1SqRCAAMyFXKoJDiDcw+PeJAeMy4Y9zAe oJbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892866; x=1696497666; 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=nxuIylgD4O5skgVzMv0zVAkT/q/ETWmaZKIykuazMpk=; b=rPLl241Zxd+Pt+ZnxzUYJ2Mp/Ew1tFYTzJkMeBidpZDja8d0uGkYBcV/tDTHZHYdGQ dC0EHcD8Rhk+JhxcS+mPMlNfd6ucjsPmDWKOdSK0KW90l5C+/PvDywL9myJ872OMmggJ gkMR/Nl9AHIRWQT9cmLZiwqoPPjXxirvSzj7l6hFMnb0m3VdPiM1Z8poYdZ5PS2L+MIX eivFKxKKuvzwGm9hL+6XoMpuXll9UAa2VM8VELnuuyCckKp+NvqYxzJQd1QoDw1BDKRU JJYdd8yIHtXikjiPSa2XfISDCgRBextILhyjVySwiwNc6tbbCY98s4jqMeVGbQ7hdJKf xA8Q== X-Gm-Message-State: AOJu0Yw7MG9qKJzo4nTTSdIwuXh3PVQoyy63RQ9BFKY+ttItC2ELFOYi 8uulIwuZni8G4kx7AxbGgtglGA== X-Received: by 2002:a05:6000:11c7:b0:321:6005:8979 with SMTP id i7-20020a05600011c700b0032160058979mr787869wrx.17.1695892866569; Thu, 28 Sep 2023 02:21:06 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:06 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 06/11] firmware: qcom: scm: make qcom_scm_pas_init_image() use the SCM allocator Date: Thu, 28 Sep 2023 11:20:35 +0200 Message-Id: <20230928092040.9420-7-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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_NONE,SPF_HELO_NONE,SPF_NONE 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]); Thu, 28 Sep 2023 02:21:42 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778273694241690314 X-GMAIL-MSGID: 1778273694241690314 From: Bartosz Golaszewski Let's use the new SCM memory allocator to obtain a buffer for this call instead of using dma_alloc_coherent(). Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 02a773ba1383..c0eb81069847 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -532,7 +532,7 @@ static void qcom_scm_set_download_mode(bool enable) int qcom_scm_pas_init_image(u32 peripheral, const void *metadata, size_t size, struct qcom_scm_pas_metadata *ctx) { - dma_addr_t mdata_phys; + phys_addr_t mdata_phys; void *mdata_buf; int ret; struct qcom_scm_desc desc = { @@ -544,13 +544,7 @@ 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. - */ - mdata_buf = dma_alloc_coherent(__scm->dev, size, &mdata_phys, - GFP_KERNEL); + mdata_buf = qcom_scm_mem_alloc(size, GFP_KERNEL); if (!mdata_buf) { dev_err(__scm->dev, "Allocation of metadata buffer failed.\n"); return -ENOMEM; @@ -574,10 +568,10 @@ int qcom_scm_pas_init_image(u32 peripheral, const void *metadata, size_t size, out: if (ret < 0 || !ctx) { - dma_free_coherent(__scm->dev, size, mdata_buf, mdata_phys); + qcom_scm_mem_free(mdata_buf); } else if (ctx) { ctx->ptr = mdata_buf; - ctx->phys = mdata_phys; + ctx->phys = qcom_scm_mem_to_phys(mdata_buf); ctx->size = size; } @@ -594,7 +588,7 @@ void qcom_scm_pas_metadata_release(struct qcom_scm_pas_metadata *ctx) if (!ctx->ptr) return; - dma_free_coherent(__scm->dev, ctx->size, ctx->ptr, ctx->phys); + qcom_scm_mem_free(ctx->ptr); ctx->ptr = NULL; ctx->phys = 0; From patchwork Thu Sep 28 09:20:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146203 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3433025vqu; Thu, 28 Sep 2023 09:22:41 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH9nnjbi0J9VymhNfsP/1Bc28QNHK02nJiCQAui9UR+cgGwlt7X4xSCT1FStUoltn3imKlI X-Received: by 2002:a17:902:7008:b0:1bd:bbc3:c87b with SMTP id y8-20020a170902700800b001bdbbc3c87bmr1408649plk.41.1695918160784; Thu, 28 Sep 2023 09:22:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695918160; cv=none; d=google.com; s=arc-20160816; b=m38m3RYmAJiC9u/2dqfzoeNKIT1loH77rumaCfD50SIEMrmno3OJyQR62bQDv47ROw Y9Iof9dhC4dE1W/gTiVuXVhUMJD39yxouHk+UA5AQ8apuKQsLuNnsQ8+D8u8qPCHkLiJ ImVDZpPnWpmd+JWPTWxJAfyeUPOJrPzHiWxGHHtaznTi/MCt7LKRJkkXXyl0rrXo5hn4 FPr9d1GFkptIiA7SoFbCJDgnugGX4K5XznMd2SoIbmbWJ4gCARj1d5ioO2afRDej7a8h TLEinAfHqxBfd8EFuPvZmC+f1lLSQ9Bvjh/9AhBzPnNVXSKcDWebwPGkmBwLrAWDByWE 6dOA== 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=cMUOZtKJMrzKTINi50r8H43dxWG3CrCNn5eWPcC1U+s=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=aHbjwNHd/U7BLjwHAkDQCKmiSaZTdjMcywO7oxf5R0VPttOCbiV25ViEU6UTvoxWBa GXn1yinrbZHC1lWXFYb+HYFczgWA6iBPemuPSRlFm7K6iDdUHxQTxP63GGD7XB2cTj0b 9g0EexRyVeYN7R1SfWGnvup7F/4WrVbamvoJ47pHFSnr+ZH8JDqio2woZtEXy3qewtnX ZJwTofbBKZqUlOc7bNWITlvc/yBZk/GH5extcjt6TXCsM1qzc0BSjfnJv8DUzby0I51x HPcj7Qt0yRzXjX2JpPiUnNOuC2cfBwo7J+SCeiU61evRe/fSHpoqaaenhL8nwv5fqXkt Cd3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=V6KJhyv+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id b14-20020a170902d50e00b001c432da203asi5281567plg.270.2023.09.28.09.22.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 09:22:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=V6KJhyv+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 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 EEBD88269C60; Thu, 28 Sep 2023 02:21:50 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231642AbjI1JVZ (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60752 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231607AbjI1JVK (ORCPT ); Thu, 28 Sep 2023 05:21:10 -0400 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 EFC0B18F for ; Thu, 28 Sep 2023 02:21:08 -0700 (PDT) Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-4053cf48670so116704085e9.0 for ; Thu, 28 Sep 2023 02:21:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892867; x=1696497667; 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=cMUOZtKJMrzKTINi50r8H43dxWG3CrCNn5eWPcC1U+s=; b=V6KJhyv+CI1ywrMLPvGcD5Kg/O+5RBC9BjqQbRquufFGbdKhhYRWWMUFoLPQO5tKKi 1UjVua8wPZcqUHIvV5X1oOAprepfb9Er5C53j3R8u5mgANladoYEM9+N7b43ES8U7vEw Kjq6coVL6ZgScV3/0SetYdM+FtmRezxvMDn+KwlHoaD9nOBiPv256aI9GvZvwWZcPBnU Zkg2cNamY25VJJyzzOEv9nP7UPw0cdKEgVUzyIWcLyVOGV+S28RzHK0balzXcsalUDph ouq8diM+9uYwQrCCTv16AtJI7OvVDZi1KLUzp0a/k1mmJg1vtc3DaG1tpZdBV4o230Xx zy0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892867; x=1696497667; 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=cMUOZtKJMrzKTINi50r8H43dxWG3CrCNn5eWPcC1U+s=; b=Nt11p2FQkdRO9A/8WvJ+1w+T8Q4xscDWanhxbZca2sSSbTPUC9oCtik1+jT9g1X7Mt BVBLyXPCr4L4uncJrUZraqE6HVbJqvXjTwRiLyowG/Nu/MMm8+EryxdHoZ2yc7j+nqwr uPfsFxUS4VmIV+JfaQ10B3UIWUuNvHZ8eq0ZNLAojPyNNms7juL3hMv1PK82x1uoMfvx yY1tSP7A0GSdHA6D+Vj7JlTgV6LOYD09i6tnQktWeBj2zr5CbeJR7kg143bMU+Kvq1v3 HyHK5yAUCWvTJg1HIe0c4EsDHJAEDN1rmomZCPfvRZZWR2j45x+aC5EjEghel7b6dXu+ UFXw== X-Gm-Message-State: AOJu0YxbX8KqXnOkusZCHJtd2FdUffYLH6EpkTg+oML0PsBXuuxekiQ7 vzY5KohbWK6kl7iiuwlwpe6cmw== X-Received: by 2002:a05:6000:109:b0:317:f70b:3156 with SMTP id o9-20020a056000010900b00317f70b3156mr674945wrx.28.1695892867487; Thu, 28 Sep 2023 02:21:07 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:07 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 07/11] firmware: qcom: scm: make qcom_scm_lmh_dcvsh() use the SCM allocator Date: Thu, 28 Sep 2023 11:20:36 +0200 Message-Id: <20230928092040.9420-8-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 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]); Thu, 28 Sep 2023 02:21:51 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778299081405621835 X-GMAIL-MSGID: 1778299081405621835 From: Bartosz Golaszewski Let's use the new SCM memory allocator to obtain a buffer for this call instead of using dma_alloc_coherent(). Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index c0eb81069847..41095bf1d4d7 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1314,8 +1314,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 = { @@ -1330,7 +1328,8 @@ 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_scm_mem) = + qcom_scm_mem_alloc(payload_size, GFP_KERNEL); if (!payload_buf) return -ENOMEM; @@ -1340,11 +1339,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_scm_mem_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 Thu Sep 28 09:20:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146041 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3245494vqu; Thu, 28 Sep 2023 04:42:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEsg4w54qnpRNqwqQkN4zCWGDqhiJqD0QNh6hrlAOM/SyMEC+cyDo9VjjYZOQDT5dGIlJyl X-Received: by 2002:a17:90b:1297:b0:279:104d:1473 with SMTP id fw23-20020a17090b129700b00279104d1473mr737689pjb.45.1695901368719; Thu, 28 Sep 2023 04:42:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695901368; cv=none; d=google.com; s=arc-20160816; b=wWQcXgtBZ6RSGvv2IXpBO4LJInv20woDMxbHS2sViUGtSwo9HsiSHwM+sAx4dQ2zIl WBsI4b7B+JpxDkqyhx4gR0VLlPVZNlVah6cX8K2MLV7yUTRzZoi3oxAMBQKyf+nrU+Mr XKAfQTBmkTI/3mrnUaeoACHUna5aG9SKFu3uueTRF9C2facq0qkXXbbtpr5SWmYjhGAo 87k7bLdtT4Blf6SPQcFfx1gtTUQLZG+XbNDs0+LZApGEZXs0AkBKORHEfsY6ITwI8PDH NnCLyezcpZnoEWCZVcCoG9ELZkwRf8RePuLX48NF1A7wqF/9tYkiCs60XKXAMovw2PdO CHjg== 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=K7e3uVvAU/9XxRD0WWB/UR6KH+g5Ytg3FZjMRpb3BmQ=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=mC+mw8cevPoIlD20PuUeBEF7AdR8oyQjUnC4rVmpXh2l/juzjKz93D+FosiRzlJQtv XLqYJmOXeboIF4S/zK8hfOrvJPIIVqGGRDgy7mTycAIU9mlzOwavSqVLEUzIIi44U4If kRt1pS2ZkbXliFpQdAQZn9cGJq2dm8D96HJcWp5DKZ583+HoHeG2BBefWO0MFGuLqJab iMZ2oEVgioOBSrkBA18Ykyq7x+fnvdo+AlwxKSDc6aRjZG36EQM9LF/rzZWVBn01ZPXx 3IqK3Oz4qUOo4zn36M9uBzoUHRzefPqGki77h3Ty0jowInus6BZ9NO7SQrVd5B+q5xHP K8lw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=W9T4z9ZQ; 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 t24-20020a17090ad51800b002776e57a5d5si8991244pju.94.2023.09.28.04.42.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 04:42:48 -0700 (PDT) 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=W9T4z9ZQ; 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 D5DF282E53C3; Thu, 28 Sep 2023 02:21:48 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231620AbjI1JVh (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231617AbjI1JVM (ORCPT ); Thu, 28 Sep 2023 05:21:12 -0400 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 E9ADA180 for ; Thu, 28 Sep 2023 02:21:09 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-405361bba99so124787445e9.2 for ; Thu, 28 Sep 2023 02:21:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892868; x=1696497668; 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=K7e3uVvAU/9XxRD0WWB/UR6KH+g5Ytg3FZjMRpb3BmQ=; b=W9T4z9ZQ+Qcn35oxemG3I1bDWjfrEMLol/kezXmKOKgPMscV43tFkENsSp1gEgUVuU FUAP2hVvYqPn3ptc/4699PpDsG+btbJMlAEVQ1UdcoB5V6w53/S2KZDsb1Nl4i9vaWy2 lgEL7ajqywW5RwL3uUnHC0XjyT1nhQQfnDJ5/ACnc+b1ljnJpb+tInkhXvDQLagWZOzO QfT3YAaqJoVUGbupp6lYyyNuExhhqvJHSJrzXhmaTD9FMTyIWGvGRcFy9CvVZll+57or tYE8l43JKlvPMYyvsHfkNSstQwM+jd8Ec26jabqxZ9pauQwTyWt1NUhmPYcYvO1ghjfb N20A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892868; x=1696497668; 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=K7e3uVvAU/9XxRD0WWB/UR6KH+g5Ytg3FZjMRpb3BmQ=; b=GgR+HHa9GAR1e2gcsklE2ZCcxGpRifooCjvzWDwWIPc9JwPEHTphwXTECrSy6nWVMI LcXuHWVsswBX8ZSaBpR8WdPZMb7h+xr3RNMOlTjw5QJG5oRH+1eItDMOmatKx+tOF4OM fIOAlgOORh8Nb+EBacDiLNHOfnpx1NELH7/aYQFbfNj7grOLyPxOS14YXhTAWt6m0Jyc Rl938JnQZDvv0ZNCxuuqvvTf717Q3Hwb6EIdPdgSiGl3jTA/mhfmE/mSRtIojzBoMX9N jUs0ObGMQXxMiXq8dK9arRiup3ocE2ROvCXeRajgiUQ/9NAzRkVXyIEFoTa0yKgPxYUi IpyA== X-Gm-Message-State: AOJu0Yyd5vyJMXVbEqdJ6xB8+UeWvkIoMntcqtiqxf4ZuE8eYy3agXKV v0kFEYpdjawA9hlX6hAYPOPy0Q== X-Received: by 2002:a5d:6188:0:b0:321:707a:8ca5 with SMTP id j8-20020a5d6188000000b00321707a8ca5mr681117wru.38.1695892868485; Thu, 28 Sep 2023 02:21:08 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:08 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RFT PATCH v2 08/11] firmware: qcom: scm: make qcom_scm_qseecom_app_get_id() use the SCM allocator Date: Thu, 28 Sep 2023 11:20:37 +0200 Message-Id: <20230928092040.9420-9-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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_NONE,SPF_HELO_NONE,SPF_NONE 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]); Thu, 28 Sep 2023 02:21:48 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778281473351716111 X-GMAIL-MSGID: 1778281473351716111 From: Bartosz Golaszewski Let's use the new SCM 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 --- drivers/firmware/qcom/qcom_scm.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 41095bf1d4d7..37e876437a3e 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1498,37 +1498,26 @@ 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_scm_mem) = qcom_scm_mem_alloc(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_scm_mem_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 Thu Sep 28 09:20:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146164 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3375691vqu; Thu, 28 Sep 2023 08:01:46 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH5cgmSka+aCTwR06SyyQ/DiT0LiSIxNdhYLJpSLeVxeiC76KY4D9zYZHiJBbRap03eHPFg X-Received: by 2002:a05:6a00:1952:b0:68c:1004:1feb with SMTP id s18-20020a056a00195200b0068c10041febmr1555361pfk.32.1695913305933; Thu, 28 Sep 2023 08:01:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695913305; cv=none; d=google.com; s=arc-20160816; b=Nm9Mll63eVfGFf1U4YWouzqQXQQKiK5xNd90T8zQEdbfzMkHpTD5u2kiuI5JeDK1J6 1uH34h6sW5ZW+UffBxtBA+3XKAL6QmZ7EMg9csnUfcrRY/zVJE/EYFmvyGjmx+EDYaWI 0/Us+7g37vLkmvIamSJthNkdXFTCo9uxcEfeLdQsPTeivb8O/DLJq73jGOoCcf9zuXDb YmBj+wFTzXSNRBE6EZJNASs8h1uVEnL6Bqww8BTDahhhNSg3IOSFzlvHbD1/8GUyDzzu jbiwStkA/vmhrcydY4rYTrgw3Zx1caC8W6sPjybcDhElpKv8iQWOSqS7lg3LrUq4FfDD wHYA== 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=DChZlKiRZBb+j9T+a7xaqTe29l5ns2EGQ+8Evv55SQ0=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=mhKqcD3/Nr+Z0LBZVYX0nQ9B/Oal3apcgy6UEGSsJBwHzzV8DXQ0grA6lQhmYKeeHL qoxWXLbcelhnkP/c9W5q+63BWZuwODQQ+ItzVPFuFDbHjJnRLFomPVYD+jd1c7JJUPnY HCgYYl3hnrIDB48udn/CQ90+f7zYIScP0i05UPwuNFEgXOonYIKP1s2LgLyaFKL1TtFK GoAr2Dd74Nqu680UiCK2AO6LJPuB63JqeS4w8h2vB4tsGUzNHc0lr2EZBtkmJ4ZNvJxd Yx78s99xIliVPnT1mSVFzV5vbpDhkjpyUAoInOVwB/lLH/a1aXAFCIUbteXPLpU/pYcx yqiw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=VGhcNMGL; 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 i184-20020a6387c1000000b0057d7cff25b5si16164458pge.258.2023.09.28.08.01.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 08:01:45 -0700 (PDT) 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=VGhcNMGL; 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 A481282E53CD; Thu, 28 Sep 2023 02:21:53 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231716AbjI1JVs (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231651AbjI1JVU (ORCPT ); Thu, 28 Sep 2023 05:21:20 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EEB6091 for ; Thu, 28 Sep 2023 02:21:10 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-32164a6af64so11128384f8f.2 for ; Thu, 28 Sep 2023 02:21:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892869; x=1696497669; 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=DChZlKiRZBb+j9T+a7xaqTe29l5ns2EGQ+8Evv55SQ0=; b=VGhcNMGLASdza++zjFMauVKYRrcfGSkWDYO01/+Uv4R/4gY6YG7G4g7XdTciEuk5GZ 9/OOfY93zl8jLqoY8Iaiv1YmadoYnY+sS2zpvbouUjre/aiKnS7oH6XB/3j9hiIl1M/H TaxDEuLPhwTvr2gxYR7hcukjoAsYyicYtFmyUZ6nxTGZmRiVIE6ZRFXnjb217WahXvja g1Kn4fxg5ZDflcrLeBwEG+S/4LrNJ3WABfqT0+Ctb8tf6nFRS86wW/coJCwCcPP1VKwI LZPABht6nA5r2RPsKv0JWOEN2tnL6dBX/vHi1Orli7h0EyIpnuDQ+GZqoUW5pWfKRrIA bbXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892869; x=1696497669; 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=DChZlKiRZBb+j9T+a7xaqTe29l5ns2EGQ+8Evv55SQ0=; b=RUyWGlwxXpysNcffsrrqIjAoS/yINbCUiDT2dXK0MZG4Tg4ACL4NHPUPW++Q0qlIN7 cLyu21wf4ekVw1zvAPxfUGfXDeMAN5DpIjOjwD6/i5NghrgToYOnX8AomZ+2MBLNd0wa HymzXQaD0PP7wLmpiBaetJcbBkL0W45h73jyS3iUuqtaVxBNGwz34i9RujIkmkrhcnGd 0wzN7hVMdbtihyRFnJNaVicq/S4jEV3nMo3NdZ2Aq0i+1Owo9KiOIfe7R8oH/0dlt4cr dP+MxLlUEUaXL75pFWxrO2QEvCrWBJzAxJD1Eot6XcBOSSaiFxWYl9Y3L7H+RqbzSLYh gMZQ== X-Gm-Message-State: AOJu0YzBWiNOw5L7jMJzI3Wp3d6mr/TjPCPPfJ5hAMx91Zxhyt02Oi36 y5gsuWtt0xHNGYRFWUSQJdVutg== X-Received: by 2002:adf:e683:0:b0:321:6f5f:789f with SMTP id r3-20020adfe683000000b003216f5f789fmr689014wrm.39.1695892869429; Thu, 28 Sep 2023 02:21:09 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:09 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [RFT PATCH v2 09/11] firmware: qcom: qseecom: convert to using the SCM allocator Date: Thu, 28 Sep 2023 11:20:38 +0200 Message-Id: <20230928092040.9420-10-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 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]); Thu, 28 Sep 2023 02:21:53 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778293990783648164 X-GMAIL-MSGID: 1778293990783648164 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 SCM allocator for creating SCM call buffers. Together with using the cleanup macros, it has the added benefit of a significant code shrink Signed-off-by: Bartosz Golaszewski --- .../firmware/qcom/qcom_qseecom_uefisecapp.c | 251 ++++++------------ drivers/firmware/qcom/qcom_scm.c | 31 +-- include/linux/firmware/qcom/qcom_qseecom.h | 4 +- 3 files changed, 94 insertions(+), 192 deletions(-) diff --git a/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c b/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c index a33acdaf7b78..59193716161d 100644 --- a/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c +++ b/drivers/firmware/qcom/qcom_qseecom_uefisecapp.c @@ -7,6 +7,7 @@ * Copyright (C) 2023 Maximilian Luz */ +#include #include #include #include @@ -18,6 +19,7 @@ #include #include +#include /* -- Qualcomm "uefisecapp" interface definitions. -------------------------- */ @@ -272,11 +274,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_scm_mem) = NULL; + struct qsee_rsp_uefi_get_variable *rsp_data __free(qcom_scm_mem) = 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 +306,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_scm_mem_alloc(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_scm_mem_alloc(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 +329,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 +350,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 +380,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_scm_mem) = NULL; + struct qsee_rsp_uefi_set_variable *rsp_data __free(qcom_scm_mem) = NULL; unsigned long name_length; size_t name_offs; size_t guid_offs; @@ -448,17 +426,13 @@ 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_scm_mem_alloc(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_scm_mem_alloc(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 +455,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_scm_mem) = NULL; + struct qsee_rsp_uefi_get_next_variable *rsp_data __free(qcom_scm_mem) = NULL; + efi_status_t efi_status; size_t guid_offs; size_t name_offs; size_t req_size; @@ -541,17 +504,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_scm_mem_alloc(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_scm_mem_alloc(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 +526,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 +548,57 @@ 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_scm_mem) = NULL; + struct qsee_rsp_uefi_query_variable_info *rsp_data __free(qcom_scm_mem) = 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_scm_mem_alloc(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_scm_mem_alloc(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 +606,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 +630,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. ---------------------------------------------- */ diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 37e876437a3e..1fa27c44f472 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -1539,9 +1538,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 SCM 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 SCM memory) * @rsp_size: Size of the response buffer. * * Sends a request to the QSEE app associated with the given ID and read back @@ -1557,26 +1556,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_scm_mem_to_phys(req); + rsp_phys = qcom_scm_mem_to_phys(rsp); /* Set up SCM call data */ desc.owner = QSEECOM_TZ_OWNER_TZ_APPS; @@ -1594,10 +1579,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 b531547e1dc9..9b9803f78f03 100644 --- a/include/linux/firmware/qcom/qcom_qseecom.h +++ b/include/linux/firmware/qcom/qcom_qseecom.h @@ -23,9 +23,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 SCM 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 SCM memory). * @rsp_size: Size of the response buffer. * * Sends a request to the QSEE app associated with the given client and read From patchwork Thu Sep 28 09:20:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 146160 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3369585vqu; Thu, 28 Sep 2023 07:52:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGkFzHSezEYMr+Mq86KgoGkxO+0TWEAqf2AIfgvJnRtdSI/5UvMfKQn/+4M1QO856PrFmS4 X-Received: by 2002:aca:220e:0:b0:3a7:6385:28ac with SMTP id b14-20020aca220e000000b003a7638528acmr1310011oic.4.1695912723123; Thu, 28 Sep 2023 07:52:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695912723; cv=none; d=google.com; s=arc-20160816; b=MxI6E9kaK82kEWNBbbsWDfhMLzc5OF4j+xh3j7sLAEOfMdbTRMJD8BH1E4oreFwEGe dskVZuKSWCGc8wZddav0rso5zkZJ+QuOc4eh9ynBOl278GTrpat/ZOIpIanK9rAl1AlR +o+VPMSqoEIrqbm85Y7M+qE7DrkYm+TWP5ww6Hemv6qOnQoCTFYXZw33pV7fTk51WOfA MoGARpL46C8jqDamz8lwwhMCwskF6W15X9ITAzZwRUmksaQZ5ycvhwmWBPkxjvTgNhz4 pbef3SbKW5QB7kV/cGlOErvdzM63iojp+8QjWSGWN2zcy4pusOWNEi6P4BphdX+kK6fZ ehPw== 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=SVQfW/DeQMI23e+YZyvWhEKH7q5MhV/xZYEf73p8CUQ=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=KxIYnhhXoZLkuqYUmgL5jVHkFAX/LEZhPDAbcsAdT2UeX62uWVD41oXGTPLQAa7UE8 7pD87XJO3zcpPFbmE07x7LolXQKG1QqJbuerE4MCzlkocKt+XmZb4qJ7BCbBubfFkbmC kqn7FTK6yMAheb8ffF9yhKtZsQXndEsBVpkgvAoQ0u82IqlbyfppOS7dl0fMpVIHPS8D qcOn+938yJ+e4Kc10vaMC4NRXdjGmecya3jN/ZjsLf9/3A2NBr/j9Z592BtESZdifz8A F4CJqNFlOWazlLwiHyBpdflveqPQlrqK/rgd5JDy4wMgeNOVxoEvqeCdsGdIRGQctHfY 6nbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=mOnMowzH; 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 bk13-20020a056a02028d00b00582f2161cb4si11076097pgb.300.2023.09.28.07.52.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 07:52:03 -0700 (PDT) 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=mOnMowzH; 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 ACFC382E53E0; Thu, 28 Sep 2023 02:21:55 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231722AbjI1JVv (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231637AbjI1JVU (ORCPT ); Thu, 28 Sep 2023 05:21:20 -0400 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 D73E2193 for ; Thu, 28 Sep 2023 02:21:11 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-40572aeb6d0so93031395e9.1 for ; Thu, 28 Sep 2023 02:21:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892870; x=1696497670; 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=SVQfW/DeQMI23e+YZyvWhEKH7q5MhV/xZYEf73p8CUQ=; b=mOnMowzHxOVocJapqlph1HxIsiyxYNQNB8lK7eAHon55nk0uLBATrSiVGY452MsUh+ 6agFX9OJx4UdV4f4drO+0LPr+a9I7WeoEUWYUoUUmzrt/IVP40xUyyr26Z4/Lq4e6Yxe BaHemXivf27EXHZwf4rzjLJfvp1OhJxCWU4w9ggNFt0vMKoHdjFAE2VwGuAGkxT+2t5Q oiPMINTLglzLl2b9Od1ZV5q+5BewrOh+huB30PPcDm7gB6CABeDc1kMgvDLcOmFuobvV L+pMC1jXHxSB9TlY+P4yxLvZ3aXqa72lKOoqG3F7sB88bgueiyNbZYR1xFCH6hbPEdDs 1qZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892870; x=1696497670; 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=SVQfW/DeQMI23e+YZyvWhEKH7q5MhV/xZYEf73p8CUQ=; b=wjIV9A7A1K3s8UE+LlAPZ0KRqzGzpmaAJzcTGxSsBqMuXtIWun7KENq2x1zI13R+2T tsL3pQyqIGw9HJKt+DHPrE2JQv5+P/uaZowqWYfUHemvsTZW4ZfAtDY4DBUooOjsDdTd djfqYlC2GKyjw47mRGRraqFMzF10Sodo5SRJihYjC/QoYGPv7LwjeW24dfrlIzHIFxe3 49wvLJ97F8DC8Wvmc3wLlm/xMXMd/Y2AKrgR8DvhF2ZiuLE9IhajkAHLN50FoaDqyLdj mNIqrmXPrWjtxCnUI11tfuduk32h1NVtb0IT1dhefDL4D14AhWxQeLMVmHyhtLAWr8Kl lZgQ== X-Gm-Message-State: AOJu0YzM1596/yBI4YEPoL1u65FpO2kI4FvcXFfCjhqIupxRFhGT3CQC nslV8YpfYI1ZEC61TY78qnkJ5Q== X-Received: by 2002:a05:6000:10c4:b0:319:77dd:61f9 with SMTP id b4-20020a05600010c400b0031977dd61f9mr632629wrx.35.1695892870380; Thu, 28 Sep 2023 02:21:10 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:09 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 10/11] firmware: qcom-scm: add support for SHM bridge operations Date: Thu, 28 Sep 2023 11:20:39 +0200 Message-Id: <20230928092040.9420-11-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 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]); Thu, 28 Sep 2023 02:21:55 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778293379381157498 X-GMAIL-MSGID: 1778293379381157498 From: Bartosz Golaszewski Add low-level primitives for enabling SHM bridge support, creating SHM bridge pools and testing the availability of SHM bridges to qcom-scm. We don't yet provide a way to destroy the bridges as the first user will not require it. Signed-off-by: Bartosz Golaszewski Reviewed-by: Elliot Berman --- drivers/firmware/qcom/qcom_scm.c | 43 ++++++++++++++++++++++++++ drivers/firmware/qcom/qcom_scm.h | 2 ++ include/linux/firmware/qcom/qcom_scm.h | 6 ++++ 3 files changed, 51 insertions(+) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c index 1fa27c44f472..5969ff0c0beb 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1296,6 +1296,49 @@ bool qcom_scm_lmh_dcvsh_available(void) } EXPORT_SYMBOL_GPL(qcom_scm_lmh_dcvsh_available); +int qcom_scm_enable_shm_bridge(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_enable_shm_bridge); + +int qcom_scm_create_shm_bridge(struct device *dev, u64 pfn_and_ns_perm_flags, + u64 ipfn_and_s_perm_flags, u64 size_and_flags, + u64 ns_vmids) +{ + struct qcom_scm_desc desc = { + .svc = QCOM_SCM_SVC_MP, + .cmd = QCOM_SCM_MP_SHM_BRDIGE_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); + + return ret ?: res.result[0]; +} +EXPORT_SYMBOL_GPL(qcom_scm_create_shm_bridge); + 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 8c97e3906afa..f5a29bc0f549 100644 --- a/drivers/firmware/qcom/qcom_scm.h +++ b/drivers/firmware/qcom/qcom_scm.h @@ -116,6 +116,8 @@ extern int scm_legacy_call(struct device *dev, const struct qcom_scm_desc *desc, #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_BRDIGE_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 291ef8fd21b0..dc26cfd6d011 100644 --- a/include/linux/firmware/qcom/qcom_scm.h +++ b/include/linux/firmware/qcom/qcom_scm.h @@ -6,6 +6,7 @@ #define __QCOM_SCM_H #include +#include #include #include #include @@ -122,6 +123,11 @@ 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_enable_shm_bridge(void); +int qcom_scm_create_shm_bridge(struct device *dev, u64 pfn_and_ns_perm_flags, + u64 ipfn_and_s_perm_flags, u64 size_and_flags, + u64 ns_vmids); + #ifdef CONFIG_QCOM_QSEECOM int qcom_scm_qseecom_app_get_id(const char *app_name, u32 *app_id); From patchwork Thu Sep 28 09:20:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 145889 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp3187165vqu; Thu, 28 Sep 2023 02:43:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEwqkCHbiF/QFtEZJiGNw7WVskP/4PgvcJBlYEmifgtfvMBi7+XkhERSAzw2RA3GKfjFh1O X-Received: by 2002:a05:6a00:428f:b0:68f:cdb8:ae33 with SMTP id bx15-20020a056a00428f00b0068fcdb8ae33mr1313913pfb.10.1695894190581; Thu, 28 Sep 2023 02:43:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695894190; cv=none; d=google.com; s=arc-20160816; b=iriceGj41FQ35CB+hwMmgv9ygYEB/CpxK5DSrI3fY4RKZ5vphTz4Biw7iIpr1Da2Pt pJk0NK594+q4PNjIihdXUF17jDgHUeu9hWaJX2KknLSGu19gZ1z8Q2vspRflz8/Hyz3/ 3fWcx9ORiatun1rZ0SnaSJDkcXrAV1CdEiVeEd4CdLfITdAbnLRZl+ogUxZrxHqCtra6 C/sShNSjShMP0YHUJ0fDZyiwq1DXMpMqkIaTBQNjkkLwb8sHT0ODz4ohW83hjfmu6sLy 4qLSmG41LsJYkzsfpnDbbePBc/LsDJ/AtsVV5phO5QHFuwdVXX1vAwtF5eS7a39/fuAg c06A== 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=bwhz75YMPOq4qEC9+ip9OVp9daQY2HSr3vN/IaeFnqw=; fh=qciho/xsTxNUsKJZ3hehiaQZTIzl+I3IMsnaV40iMRE=; b=dcUhe13aCQP3SgWsOiLWBVrZBL39AY8p+pqZB1EpFa9jgG7NMhMJtNGOGydCBEKuPF 7fjHK5Srbtv+OG/bwwk+ycHwB0DD2owGflEcWDfH5T7babe05uabd1PspQeKzhr92+a1 VMu/z/aEJgJgL46bSEXvCLV3kkbgALSJiGES5uLCxa21gTJy9b1e6v0LZZ7GrgTIdLCl hIPdhkIIi2T3qglKX+SIb0kuOlezOMKXYhBq0TGmihR7oZ4woR6E+q8G4YIlcxIhkMwg 6/NothnyT3ytAzxMjDSObGqKQOE9zCtHdSm2NxQxLtYeN+ivOfx1KaKDTpJNjTBTZhmD drGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=ZdFDth24; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id cm22-20020a056a00339600b00690c951d2cesi17704148pfb.191.2023.09.28.02.43.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:43:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@bgdev-pl.20230601.gappssmtp.com header.s=20230601 header.b=ZdFDth24; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 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 62335817C1F4; Thu, 28 Sep 2023 02:23:00 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231616AbjI1JV4 (ORCPT + 21 others); Thu, 28 Sep 2023 05:21:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231652AbjI1JVU (ORCPT ); Thu, 28 Sep 2023 05:21:20 -0400 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2530194 for ; Thu, 28 Sep 2023 02:21:12 -0700 (PDT) Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-32003aae100so9290847f8f.0 for ; Thu, 28 Sep 2023 02:21:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1695892871; x=1696497671; 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=bwhz75YMPOq4qEC9+ip9OVp9daQY2HSr3vN/IaeFnqw=; b=ZdFDth24YL6VP5Sf68aAW8r37uMQJFqqSeWLlHNT60ZZwMRLJLmztpN2sC5ES1hr22 YLrnccYBdJoTe/3xD4rLP4gK9jYfIQwhSDPkcTsEz42Fsf/mA9zxww0I99nHpu9ibuGX gmVaEC8Qze5sMMlGLvWeUx7l7CGW914AZaNpoqhsTDtMbJ1ueW8WQco9+IO3xpoxEM+Q CGiwaZCzSPUR4curXfdiGNWm79c0MfqFEVfTrwzlmXErt6rBk4dxW3dO2d41B/VOQ7Hj T7/uLsj9JHSV/LlZjGlKZklaBqtNUptZV7v7IgN48pSlW9qmtgmyB7xHOuY7hF86xNNY 9QYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695892871; x=1696497671; 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=bwhz75YMPOq4qEC9+ip9OVp9daQY2HSr3vN/IaeFnqw=; b=M8NPUdPtsR2hpScfZaMcL9ZR1AiBEPIMv150m/Y+xumN7dSRdBoK1PgZbBn0LYlldJ fGQnvPnCvSRJoxW8to5u6wnuAd6vcgfgmz7IOWz95HTqxd++eox4g3S48ts4nuQcbbSH fdgNGBxBhvVOWcGVtL9l0mwmmcCZuLgQEoGHAy4rnhl4N1Xt1KZ5LlXbcy5ca32af4dq EmewuwgJKeGfHTEwOQ0rij5xfom/62pf3ZdwEWYKfhXJKanIZdcFc6zh0EEy7zuZwBgM 9+BkCuORaPLgB/Z0FAEaofFnJKX1Uv8xgnA1y9SB4Zv7JymO+vY5u5/wc1987KUVzvfq kE3A== X-Gm-Message-State: AOJu0YytPUajvGCduchwc/vtXce99oVi+p/S50pF0V0agoixIaCTKlnr ZzOqgqL3RMxcg63lbDTTlPyyuQ== X-Received: by 2002:a5d:574f:0:b0:319:6997:9432 with SMTP id q15-20020a5d574f000000b0031969979432mr783332wrw.1.1695892871336; Thu, 28 Sep 2023 02:21:11 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:334:ac00:6e4c:e3c1:5cb8:b60e]) by smtp.gmail.com with ESMTPSA id e9-20020adfe7c9000000b003197efd1e7bsm5009156wrn.114.2023.09.28.02.21.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 02:21:10 -0700 (PDT) From: Bartosz Golaszewski To: Andy Gross , Bjorn Andersson , Konrad Dybcio , Maximilian Luz , Krzysztof Kozlowski Cc: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, kernel@quicinc.com, Bartosz Golaszewski Subject: [PATCH v2 11/11] firmware: qcom: scm: enable SHM bridge Date: Thu, 28 Sep 2023 11:20:40 +0200 Message-Id: <20230928092040.9420-12-brgl@bgdev.pl> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230928092040.9420-1-brgl@bgdev.pl> References: <20230928092040.9420-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 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]); Thu, 28 Sep 2023 02:23:00 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778273946526781238 X-GMAIL-MSGID: 1778273946526781238 From: Bartosz Golaszewski Extens the SCM memory allocator with using the SHM Bridge feature if available on the platform. This makes the trustzone only use dedicated buffers for SCM calls. We map the entire SCM genpool as a bridge. Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm-mem.c | 42 ++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm-mem.c b/drivers/firmware/qcom/qcom_scm-mem.c index eafecbe23770..12b12b15f46f 100644 --- a/drivers/firmware/qcom/qcom_scm-mem.c +++ b/drivers/firmware/qcom/qcom_scm-mem.c @@ -16,6 +16,8 @@ #include "qcom_scm.h" +#define QCOM_SHM_BRIDGE_NUM_VM_SHIFT 9 + static size_t qcom_scm_mem_pool_size = SZ_2M; module_param_named(qcom_scm_mem_pool_size, qcom_scm_mem_pool_size, ulong, 0400); @@ -108,8 +110,24 @@ phys_addr_t qcom_scm_mem_to_phys(void *vaddr) return chunk->paddr; } +static int qcom_scm_mem_shm_bridge_create(void) +{ + uint64_t pfn_and_ns_perm, ipfn_and_s_perm, size_and_flags, ns_perms; + + ns_perms = (QCOM_SCM_PERM_WRITE | QCOM_SCM_PERM_READ); + pfn_and_ns_perm = (u64)qcom_scm_mem.pbase | ns_perms; + ipfn_and_s_perm = (u64)qcom_scm_mem.pbase | ns_perms; + size_and_flags = qcom_scm_mem.size | (1 << QCOM_SHM_BRIDGE_NUM_VM_SHIFT); + + return qcom_scm_create_shm_bridge(qcom_scm_mem.dev, pfn_and_ns_perm, + ipfn_and_s_perm, size_and_flags, + QCOM_SCM_VMID_HLOS); +} + int qcom_scm_mem_enable(struct device *dev) { + int ret; + INIT_RADIX_TREE(&qcom_scm_mem.chunks, GFP_ATOMIC); spin_lock_init(&qcom_scm_mem.lock); qcom_scm_mem.dev = dev; @@ -128,7 +146,25 @@ int qcom_scm_mem_enable(struct device *dev) gen_pool_set_algo(qcom_scm_mem.pool, gen_pool_best_fit, NULL); - return gen_pool_add_virt(qcom_scm_mem.pool, - (unsigned long)qcom_scm_mem.vbase, - qcom_scm_mem.pbase, qcom_scm_mem.size, -1); + ret = gen_pool_add_virt(qcom_scm_mem.pool, + (unsigned long)qcom_scm_mem.vbase, + qcom_scm_mem.pbase, qcom_scm_mem.size, -1); + if (ret) + return ret; + + ret = qcom_scm_enable_shm_bridge(); + if (ret) { + if (ret == EOPNOTSUPP) + dev_info(dev, "SHM Bridge not supported\n"); + else + return ret; + } else { + ret = qcom_scm_mem_shm_bridge_create(); + if (ret) + return ret; + + dev_info(dev, "SHM Bridge enabled\n"); + } + + return 0; }