From patchwork Tue Mar 11 09:25:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872568 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7184222F163 for ; Tue, 11 Mar 2025 09:25:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685148; cv=none; b=Au0PbEJwMsZFrve4JUxVPu+Fz+R/LbyFmhCm9LM9PJDET6PT6F2JUboUecmziNY6hz8nSstQDij9wEP1aOdh8aNygLYhchmYBJWeKFECK/wympDk+doVpdRCG7XpRJFe5tBsSZ+KbfHQYZosegnIcfcQe9k1xfjKakltWDd0pk0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685148; c=relaxed/simple; bh=UD83xHC/OFAOwSB+qvX6FSvB95/U7FyJrkvlFwf+cOI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c/C9oZFiJL1M1RJ3XCv4+te/6+FaFzpBHuvrkWquil1abCU/VgjBJwHXOHNelII6ymfp4KwkIcihq0LGSWnCMlSAsdZ/qQ4xq47raAgLmkA+zI7fBVpbGeopz3vt2vDO346vHYclhlceA7jIqUhgY4BjyRIftH625fmXNiAd1oA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=WNUwZmYd; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="WNUwZmYd" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43cef035a3bso15445905e9.1 for ; Tue, 11 Mar 2025 02:25:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685144; x=1742289944; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=F5gyJf+BPkvynCiKQ4tiqU3JQCzOM6uVqE1SpUYdFf4=; b=WNUwZmYdkHghb0n3Ip53/XINgRIGTb2wtZ+bZIfalI4KlMj87Pltu9GhhzttDO5tE3 0cHqWQ94Y51TgsA2d5/xc+AC80T/KxtibRDtDJFcwZzi8BsecwmRXwhVn99rIeei9s3M FVMOF0flNLd/CS5CvvNETGFgFg1loHhRNstbk4+iVPDlKZtanjwHagJYYE/oXGNFY2kU j46AzkGghvnRbHJtX8zXva7LGRqq/5ZUmvOXzBc6NXgTQNkg/aHZOQdNZmmX21KsUDQp UFUua/oqx9V0aLu1CU7z9X+gmuXPXaw1bI4DKMAq261/W0BWBf96nKQkMxma/Cyly3Yh sERw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685144; x=1742289944; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=F5gyJf+BPkvynCiKQ4tiqU3JQCzOM6uVqE1SpUYdFf4=; b=QCxxor4ym50RQQhVlIVGfYC5KbcxM6WJoh8ewAi10i2Vn2XpMYgyAg+0Gpfr3iP/HW Mr0ul75sOvZugCHWCUw+zpZHzn71K01rubGUKgpk/g7jQRLnubl4EkYHc7TlNuodKAm4 GD73E3IHZAc5Ojk9L/JhThs/knkMfpX7vcLN8Y3YeGSYJxh3/f32A4h8FxCbVGYnAOSe 1hnCcP11quyNXiOvR8apcpNmuMaMkikS1v8KDC3l8sT2WiCW55vJg6m84VddhHS9/9a0 CWgnqk85PhJfzVRTq86ReiXw1KumRv3aDU8C6SHu/+ppUwTOoKCkJ9s94c+lecdQ+y8V bVbw== X-Forwarded-Encrypted: i=1; AJvYcCUTBCm1xnbfTjUEPHc89Csv9+KDCzFmpT+7xGWSctuDWpDvbs4qlQG306INjB4V5mozxh2lxHpQLpLIxYYi@vger.kernel.org X-Gm-Message-State: AOJu0YyeXUWFgHDO2BLJYuolBSp4Q6bJDf6Onk91bygAwryDK7VZHR+Y zSuxgt+mDDhRB6vpjSWp+PQ5aZiJo1/fnScfJZe6m3ONlwgtvGwalNp1/qqTn6w= X-Gm-Gg: ASbGncvKLG5dQWxJ52BvHi40Gu3RHbjU0MvgUv3jMY+ouNh1tnEtf2VChB9xs1IwJbu z1e34RmYYSEzCc4i3vuIxCF7KxqIqd/l0VNWNYmQvyQXTrzJJk7487V9XIShZ6Fj+62pFeYLzcj PRDwSMCQ40IxD1QYChh8+elZUa7Vbv5ycMLsAgDtxwIvfcGN18TTi7lxexBmlPeN7/pV+auhd90 pMFyeEhJgft9/g455Ty7IsTQfnof1pcOAvvvSN70+uRVh0AOFU1lsXVMuZnCAgIoDwF00bEsmUh c02b2QJMTsUSft1GpN7EhSPESPg1myqHqF9b X-Google-Smtp-Source: AGHT+IHTyMRZ8iCL2pWXxScJdsm/h83C134LYTw05J5QlNSMtDGV1tUZg3DCFGmvEQ2L4hlmXhtLMQ== X-Received: by 2002:a05:600c:354c:b0:43d:94:cfe6 with SMTP id 5b1f17b1804b1-43d0094d42emr56383185e9.16.1741685144555; Tue, 11 Mar 2025 02:25:44 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:44 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:32 +0100 Subject: [PATCH v7 1/8] dmaengine: add DMA_PREP_LOCK and DMA_PREP_UNLOCK flag Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-1-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2774; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=k2JNoMjqu4cYCUFiyyJ8BPrYhDNDgsHQ3cmq2EXWh1k=; b=kA0DAAoBEacuoBRx13IByyZiAGfQAZWh0+HkXZGtwrVkV1G+XYQw0IWSpnVma/ebtd5F7Du/S IkCMwQAAQoAHRYhBBad62wLw8RgE9LHnxGnLqAUcddyBQJn0AGVAAoJEBGnLqAUcddyugMQAIb2 9t62ThB4WAqWMp3QPQOIzKHALZYmvL4AHTh9fIp1/ow2BhYp7c/Zv+VbTeVDCy0FH2GtIK1ug6z FPn0S9v28+YzAsGaFkop5aGnZ9XqxKgJlRrRk+0OrXk3SWyFMGmdma+M+l5KY0eidSnPqEGbSY+ Q+IY8XFnp4jnpUGLY+MLS/n3bP6UshcG9s/GKHuNAjR5x38vZfGztqfHWP0xN4UnMOQmNQ42w26 ctpPVOaxlelQcJvupoTgk1hbRTPPd53OVbn7XAxQT/WkcRYSS3rwN6Llb0IOusf0e6Ai1BEzE23 UoRwDDnxCqNjFXCBeq7sf/IaX94knSksW2xpibpnHa16eMnNrSpNhEYTGUQ7NTnGmQa60cX0p1g t16UQRof0YGyy0yy91dstL3fnutR9Y+KJH3XwRooqQESV/YSkN39asspgrStieDyJjGBWC5XLcU KhDfAqoSZaVBzVSpgcdCvk+Fecllq2DGeUuwo7lRVkJLoHbJDmCzppR+yDd+aRbff0vXPcfIq+B C11yi4JZ8AslaKvk7h644Y2SVg9IQE1VbNzZ+MRrg16Bd+NnFPz49qXL1l+2r55gQqkinLffep5 4OfN8d0viViFKkWJ8XLS8wxldDK0nXFfbw4rR5Y4jU2myRq7tpgioj5epPqEa/YVsDz4bqrTMMu +UG9J X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Md Sadre Alam Add lock and unlock flags for the command descriptor. With the former set in the requester pipe, the bam controller will lock all other pipes and process the request only from requester pipe. Unlocking can only be performed from the same pipe. Setting the DMA_PREP_LOCK/DMA_PREP_UNLOCK flags in the command descriptor means, the caller requests the BAM controller to be locked for the duration of the transaction. In this case the BAM driver must set the LOCK/UNLOCK bits in the HW descriptor respectively. Only BAM IPs version 1.4.0 and above support the LOCK/UNLOCK feature. Signed-off-by: Md Sadre Alam [Bartosz: reworked the commit message] Signed-off-by: Bartosz Golaszewski --- Documentation/driver-api/dmaengine/provider.rst | 15 +++++++++++++++ include/linux/dmaengine.h | 6 ++++++ 2 files changed, 21 insertions(+) diff --git a/Documentation/driver-api/dmaengine/provider.rst b/Documentation/driver-api/dmaengine/provider.rst index 3085f8b460fa..a032e55d0a4f 100644 --- a/Documentation/driver-api/dmaengine/provider.rst +++ b/Documentation/driver-api/dmaengine/provider.rst @@ -628,6 +628,21 @@ DMA_CTRL_REUSE - This flag is only supported if the channel reports the DMA_LOAD_EOT capability. +- DMA_PREP_LOCK + + - If set, the DMA will lock all other pipes not related to the current + pipe group, and keep handling the current pipe only. + + - All pipes not within this group will be locked by this pipe upon lock + event. + + - only pipes which are in the same group and relate to the same Environment + Execution(EE) will not be locked by a certain pipe. + +- DMA_PREP_UNLOCK + + - If set, DMA will release all locked pipes + General Design Notes ==================== diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 346251bf1026..8ebd43a998a7 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -200,6 +200,10 @@ struct dma_vec { * transaction is marked with DMA_PREP_REPEAT will cause the new transaction * to never be processed and stay in the issued queue forever. The flag is * ignored if the previous transaction is not a repeated transaction. + * @DMA_PREP_LOCK: tell the driver that there is a lock bit set on command + * descriptor. + * @DMA_PREP_UNLOCK: tell the driver that there is a un-lock bit set on command + * descriptor. */ enum dma_ctrl_flags { DMA_PREP_INTERRUPT = (1 << 0), @@ -212,6 +216,8 @@ enum dma_ctrl_flags { DMA_PREP_CMD = (1 << 7), DMA_PREP_REPEAT = (1 << 8), DMA_PREP_LOAD_EOT = (1 << 9), + DMA_PREP_LOCK = (1 << 10), + DMA_PREP_UNLOCK = (1 << 11), }; /** From patchwork Tue Mar 11 09:25:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872907 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9A8122FAC3 for ; Tue, 11 Mar 2025 09:25:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685151; cv=none; b=PdUMoTZ+oJQdxSBgDtJ97OwDtRcg3gif0l8jeTyvhZa/jobjyL3cPABMmrnr1V/yqB4esg83jl2E3F+UFD6gGOjAQeIA1PydyzAQpPZnrIKw9N/HYWYrXoleANqfLpFeTpp0Y0H8H9FQ01+kUVLbp3W2bDYX2o5WJAqgHP3I9Fg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685151; c=relaxed/simple; bh=3byXgp4P/O/ND2QbeLx+RU+FGOviEZdPuLQWMQhYWyc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FiF9p+EX67uKuy1twg5xaeGnQzEizqxKWvcibhsryLZOYDcULfyy8Ww+DczPHzTripq1xhD1/Cpc/KCH2iIuOGRxpnNd4TMeuT3DmQMgIucoMboVWU6uvAvv3zswEGz8C+yOnzwBbXKMmeQW47SkpR/7BcEnSoGAMrJE/u51He0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=agggFf28; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="agggFf28" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-39143200ddaso1337768f8f.1 for ; Tue, 11 Mar 2025 02:25:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685146; x=1742289946; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=TlP1aFnu/CDXSr/k7ULiiydiHqpcTMvKfeRj+DO5m9I=; b=agggFf28mKJu2Iw1KoojJHNS5bPH9YnQ0ZKl9w73bi15l7gPrU87RxuG09PRalMfGA XByG4OLfpwSRxF0fu7Ra4RUEdG/3ndVDdkmNa/kTXD/NJlgKSUZiY5W7XzNdSXzcFeTO uiw8pA44eeQeDEtv8scjYbyuKhLyQEAGbIz9EbzGsTsu3bbxr6CyMTIde8OMREh23rSf S/tWvppRoG2y6DEr0cxURIGcmx/ZNFzXGOI05hNUlg3ca+XjUuyOdOjm/jLOCkNgg2kO dQ+y17b+mHZV9BQ+2prxu78cuH24MkCZEbjxaJ2aE5lJ8VhGwPe2011gKSeNkuCcecaf 84kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685146; x=1742289946; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TlP1aFnu/CDXSr/k7ULiiydiHqpcTMvKfeRj+DO5m9I=; b=aiGx/HTD8k1akrmShIwgyTK8A5FB+NX9o4VR1L8OHMUCrQWVA63i9TqPlSBdhizf5J /dRmxZPw4C0bxjBGkyPvF1tVqAG78FeT5pOCSN2C56eFRk4oxVr2A9MwC9h5Lkmj6odV HvfDTxCirSw7rrKrq0Qt+I5Rb8g+Bmdebx5I5cZ4DH/tP+cQJCvTMbmAy0mucLvNdtCz UJFbIYg5gCZyxYeVymHOll2mKL41zLtRPampkHNUvhEFpOHISe02kX8hYA46hPXodTwM VThLDN4pxjhadCDT+oMj6Y4g1qrlC4tbVzJ5s8g/lcIwzoJouH6wmph3z/p5JUnrdzGg TMdg== X-Forwarded-Encrypted: i=1; AJvYcCVFhjg4bZf8vS2BTdsxzMwMASMNS7vQbWEm9Wlw7ehq5T5RZPZZ36cABp81tiLnhIlmM6vcWNb95lpIeQQg@vger.kernel.org X-Gm-Message-State: AOJu0Yze5oNwht6FYT9mca62cjQYMGKUU1Szi6s3xvpbJ7+9Li3qJJKT sieRp7bRqtTpwGE8mORmgDVvszHq1KHfOLN5Rr+uqd8bFTiJfbQGK63uCJGLw1k= X-Gm-Gg: ASbGncuAu8z5JB+NM4/EDP7ExNMv4mb5KoaO1+N/cOjrBmGZzm34xZQoHO6POTkItOf DH1a7fHihzN4zorWE/YgWRIjT1vK3eV1V0z2CN+s6/Ue6Hu9zSUp9SCcvfkFAP7vPGgePM1RYy0 DQQb9psLfmubiE76NPgS0aCOA7GYaIiRCe6JQsvZkC9+4+kv7W2308UE+Sc1LvQbm93roLgrXvU HqOG5kPdzPaN8Q2ewbhzrjD4bIYxU22+svQym5WbM4mvzOsVL5H0qpkO5wxgBFrP8o6goWG1n3l epg975U/c1J5Pfug4LXGB+Ep1vSJ/wFcp5Sz X-Google-Smtp-Source: AGHT+IEFonuMUsv5t7RMkQ8iEA9Po7UEbOofnFEQRO86TnGyuTu9OQAPv+aswdukrUC/lL8XbNZzxQ== X-Received: by 2002:a05:6000:2a5:b0:391:489a:ce12 with SMTP id ffacd0b85a97d-392646936demr3632369f8f.26.1741685145889; Tue, 11 Mar 2025 02:25:45 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:45 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:33 +0100 Subject: [PATCH v7 2/8] dmaengine: qcom: bam_dma: extend the driver's device match data Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-2-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3543; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=Pg4kQtSGs2f8BpuZiVEMtvVvzRRbqxcmk7ypHqWY96M=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBn0AGVl3C5lSeEdfpfP+zIBEzDJCcFCX2vmzasU gOKZib0fpaJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCZ9ABlQAKCRARpy6gFHHX chhBD/wIRjW/QOjQXff90g8HVICSDdXkKD5BRJH+wautyIX+duSZp1IFDylvKfYIMy5QHl3mTXA NTYdCzfKfzTze5I89ENDmJ+OsVC8tnYN7Qn+kPwfwYEZVFsMg9LOJHBAAOFV26FljVkgRCmImL6 WHhu6e5mJFZrqmmZLZTLGRPhO2MkzHi/QzqnFmRkILhrjaOq0rNMRtoky8jyIA10i7c98vSbUNj 05A0K55UIiNCd9o+jrsZeXG3zus+Fk+BYi0ai+cTWVBdTHYBAapa9MPPc5pCXT97mH3mJ52LzQl FVK+JbAYbRrs5A0OEiiTbkPtUNQIFUc7BUTOaPs6T1rde8MpuUi7b2+g2UhP0XmTIE1Pp0QKpIG cH7nucGIbu6fIjTG7TG9WO/+dmbd+SheIslA0pV17/0NFf7XF2FBYsMBxT/9yKMw9TOy0JCui8I Jn1jwBI3kY9AuUogPDDztpNoH5odNstKWFndGe2zgNQKEYKdyc7r7zt0ipC8e42XzsWZxU8bWXS a9mrdwihu61+tkiIuBmfVBSkeY3jRvnwTHtmcnT4tgiIsaLlZ4uX2buJg8EADfrpNq57XUPZ4Pd n/ybHmqcs/IEInA7ifOjGoq+bMe77cfKHL+wh2sNuSiEdcllYVbSTyx/HaAnO+JIYDCY6dPZV1p at4UvxJfshZDpkA== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski In preparation for supporting the pipe locking feature flag, extend the amount of information we can carry in device match data: create a separate structure and make the register information one of its fields. This way, in subsequent patches, it will be just a matter of adding a new field to the device data. Signed-off-by: Bartosz Golaszewski --- drivers/dma/qcom/bam_dma.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c index 2cf060174795..8861245314b1 100644 --- a/drivers/dma/qcom/bam_dma.c +++ b/drivers/dma/qcom/bam_dma.c @@ -111,6 +111,10 @@ struct reg_offset_data { unsigned int pipe_mult, evnt_mult, ee_mult; }; +struct bam_device_data { + const struct reg_offset_data *reg_info; +}; + static const struct reg_offset_data bam_v1_3_reg_info[] = { [BAM_CTRL] = { 0x0F80, 0x00, 0x00, 0x00 }, [BAM_REVISION] = { 0x0F84, 0x00, 0x00, 0x00 }, @@ -140,6 +144,10 @@ static const struct reg_offset_data bam_v1_3_reg_info[] = { [BAM_P_FIFO_SIZES] = { 0x1020, 0x00, 0x40, 0x00 }, }; +static const struct bam_device_data bam_v1_3_data = { + .reg_info = bam_v1_3_reg_info, +}; + static const struct reg_offset_data bam_v1_4_reg_info[] = { [BAM_CTRL] = { 0x0000, 0x00, 0x00, 0x00 }, [BAM_REVISION] = { 0x0004, 0x00, 0x00, 0x00 }, @@ -169,6 +177,10 @@ static const struct reg_offset_data bam_v1_4_reg_info[] = { [BAM_P_FIFO_SIZES] = { 0x1820, 0x00, 0x1000, 0x00 }, }; +static const struct bam_device_data bam_v1_4_data = { + .reg_info = bam_v1_4_reg_info, +}; + static const struct reg_offset_data bam_v1_7_reg_info[] = { [BAM_CTRL] = { 0x00000, 0x00, 0x00, 0x00 }, [BAM_REVISION] = { 0x01000, 0x00, 0x00, 0x00 }, @@ -198,6 +210,10 @@ static const struct reg_offset_data bam_v1_7_reg_info[] = { [BAM_P_FIFO_SIZES] = { 0x13820, 0x00, 0x1000, 0x00 }, }; +static const struct bam_device_data bam_v1_7_data = { + .reg_info = bam_v1_7_reg_info, +}; + /* BAM CTRL */ #define BAM_SW_RST BIT(0) #define BAM_EN BIT(1) @@ -391,7 +407,7 @@ struct bam_device { bool powered_remotely; u32 active_channels; - const struct reg_offset_data *layout; + const struct bam_device_data *dev_data; struct clk *bamclk; int irq; @@ -409,7 +425,7 @@ struct bam_device { static inline void __iomem *bam_addr(struct bam_device *bdev, u32 pipe, enum bam_reg reg) { - const struct reg_offset_data r = bdev->layout[reg]; + const struct reg_offset_data r = bdev->dev_data->reg_info[reg]; return bdev->regs + r.base_offset + r.pipe_mult * pipe + @@ -1225,9 +1241,9 @@ static void bam_channel_init(struct bam_device *bdev, struct bam_chan *bchan, } static const struct of_device_id bam_of_match[] = { - { .compatible = "qcom,bam-v1.3.0", .data = &bam_v1_3_reg_info }, - { .compatible = "qcom,bam-v1.4.0", .data = &bam_v1_4_reg_info }, - { .compatible = "qcom,bam-v1.7.0", .data = &bam_v1_7_reg_info }, + { .compatible = "qcom,bam-v1.3.0", .data = &bam_v1_3_data }, + { .compatible = "qcom,bam-v1.4.0", .data = &bam_v1_4_data }, + { .compatible = "qcom,bam-v1.7.0", .data = &bam_v1_7_data }, {} }; @@ -1251,7 +1267,7 @@ static int bam_dma_probe(struct platform_device *pdev) return -ENODEV; } - bdev->layout = match->data; + bdev->dev_data = match->data; bdev->regs = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(bdev->regs)) From patchwork Tue Mar 11 09:25:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872567 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EA3F0230997 for ; Tue, 11 Mar 2025 09:25:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685151; cv=none; b=pHD80nqB+r73Y3yDToAPJwe/34VQwzMI+iUBTOMny8vwX536D6reoNmhcn6sqikCCt78neI+8LBVpC5Y2KWf8Lv9fkEs1pvReeotqW2RxLJ81w99Nb0TR3i+c2thTvyeMHVh8AjGbAvKOvetNr837OSwzjzqpz3s+OblIdIUPnY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685151; c=relaxed/simple; bh=MDk4VkFEZ3Omoennvcf4KMiiddpmT7+bDeMGysrEOqw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=coUs1X6jOdA/J+JMi3jf2AA0Fbpq1wElJQB8HM0HM3Y5GKSkq+23byELkYtNi+80XgXltyaljY92myrEjcbsCSet3f992xSqwzLB1bwxycrcVdSYXyxWc9ojpncLUNKlpcKsdJfnub2kRLc/fshx13yyQL+iLJh8oNNu/2DABHc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=fEAPUbG+; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="fEAPUbG+" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4394036c0efso30407555e9.2 for ; Tue, 11 Mar 2025 02:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685147; x=1742289947; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UtqnqsyxQP/e9bo5ZCxKCH3JxZzZtKfe9AQxqfuk5ec=; b=fEAPUbG+8Tz0LIpHl+kaplvV8uf/0SzGXxuJPQ/870CG3saQgOokZFkS2XKXyBBfc5 z5q/fFnP5a2a5uHWIsDFEP79fC+V/YgzeiXLJFExca0cyELs0ap62LKd+htHRPALwkOU XRlmBOkB4JDeB1KKgj4GriH+Grmul83rpG7HMfyOun7+Rsh3qKJJCpiPWNW6hGN4AI3e BndRRE4CxInuKSrk9Z1ri1VgVy+L/Asa70Sq58+3hSqo/HFwyMgoulerHU3uoZlD31QY QxdcuvRCf0sBiP4ckg9ah6ZUSKUNK0TFKOKoVaDl3Dv+GXRRnQVvWponKpftoJs78lHi VfNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685147; x=1742289947; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UtqnqsyxQP/e9bo5ZCxKCH3JxZzZtKfe9AQxqfuk5ec=; b=u3R2cMpRL3m8kR4mEdYeqRqp7U7QOeE00ISgd4tIJnhfeENpLRO7axmg/3p5NLrvWL Jt8l+isDjdU4mT6F1wz37RpxiZIk4AMaSFrKLKDe9JIytbHFAwFm2YyfZEDvg02q9GlI E6IqIYPIJ7fWhsPpKxNtG0eSvWl8jMIduiewieyZ7O4/+kSQKltDDOz+fyxjbdxxgT4j 3T5PpPmnTZdQ7GKTVJ6FWosL9K74SQutUYDxpXBmkY2NwVWYwnmgTM2qZXvgK+Nh9434 BZ43IVGkBhnu2yGhwizZJMhThYW6nklGlFXMSOgqu5IYhQyq1zjn2VzbqYvBHghIqe+J 2qOg== X-Forwarded-Encrypted: i=1; AJvYcCUOD/lBXia43hRT50c2qsETzY8kO+4gUL9r2qybv330Iy6JEBrmlMgrTo8GDyjfxNI9eLv2aL2ayjBLIAUh@vger.kernel.org X-Gm-Message-State: AOJu0YwoSlGd1V5aBzeh6EbXS6FnbW8TxPt7TEHyfFsdZFRH611UDf8P 3x4WJ/jmSfmRReyZiLmAwBIbEJwyoGQw7j9bdCx/3FsQuPLTAVMBwF8lmEaKuwQ= X-Gm-Gg: ASbGncuzf0xWAfFj49G8PEO++RIv08oVb34x7MbKr3qlQZggXS/EMCHTSriLDFln1tw YUZ2ZFtSHgHyZQn/VGn8oZ/v3NVFJOVVyple2JDqMmeeJ2Jsz4f1meLGhRDpuPU9BJconNzuuLa z9a499KWhGu3YjLTY6XFuVZCyewWLowSuFfw6oAMaYraK4pFggO+Kd0CLULLtCXNvjKT2ClvBOF 6e97Al0cEdbEeEQ+3az/829WlWHZy3itYQauRdipw//qGfo8qjscNduT4QLlW0YKMftHy6e2tZY 81DMvheyV8uuVcCMKerYzIz+tTEwsQdbTCQw X-Google-Smtp-Source: AGHT+IG1l09uBciNj409gzaq9ZRZL6KB9sv+vZnatdy5m6HxJOreByN1ubwyWqhG8i9TAR3rokJMgw== X-Received: by 2002:a05:600c:3596:b0:43c:f8fc:f697 with SMTP id 5b1f17b1804b1-43cf8fcf8e0mr52620265e9.9.1741685146987; Tue, 11 Mar 2025 02:25:46 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:46 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:34 +0100 Subject: [PATCH v7 3/8] dmaengine: qcom: bam_dma: add bam_pipe_lock flag support Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-3-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=2188; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=q/3RP4DiTyaxTRnIH/tALxp3dBkxS3/vcvd9GKBezPM=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBn0AGVUBvjeQRh7H7aAx1rE8T2VzvFTVozUiuqz vf1B0ns0RSJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCZ9ABlQAKCRARpy6gFHHX cjelEACN3/JUgds8V7OXUaqnsGAgQkUwmon/d9kX8vT1YYVYYguRoqUrSTNeC9njYmcKrucjs5K k2k1oWasiHuafyOeEVIAqLtsXUL6sYz2cSKDl3j4dnfK1HSRE9Uh/ESR3JawYqwT4JI/cZXI6A/ JOPdtRb2ik4iGtUSxn3Uz4rEGv7zfeCKzfUTl+VimkvHv8coNAghD9bI5NsaN3Xo59kB4KesWQb j75ftmhE7WcPw6L6k0H0Y5C394+rKmt4xoFpDczUY/Lbqxbqh9tM3zjFV8H8XNqkE4OWujEkwG6 flbnLqZNiwDxXZg6bRFG24STnKsv/TsTlc54mnt3w9N2nurVJCEI0I6HoWgrv1bNaeySWOb6GS0 hdsCEU9sdYkts4FjT38yi81tbluPpvbOkfn6XOTaynYBMbqoKG0CB8TSjmM5yT58vXEDHqWME1/ r6KKVRQT+1ySkn/cXyBHRT7U3iE3jbWhjp63WTx9zGNmKVuyr1m1jXJRIa6iOHOrqmKDa4sZivJ szseRtVCJsUJ7iUeQSa5RcgQ6rtLTx0MXlxpdjTBuTUmrXvWlo3Qf5rQC/T+oyAUqiZ2+GFPPcT FH5+7j4YRP29sYKuIE0FRl+7zF4fPmhTHyohLVoDmGrF6jrQUPh5arOPMJv7tADVTNJDiX9gFPf tSS4tBeYqPZmF/Q== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Extend the device match data with a flag indicating whether the IP supports the BAM lock/unlock feature. Set it to true on BAM IP versions 1.4.0 and above. Co-developed-by: Md Sadre Alam Signed-off-by: Md Sadre Alam Signed-off-by: Bartosz Golaszewski --- drivers/dma/qcom/bam_dma.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/dma/qcom/bam_dma.c b/drivers/dma/qcom/bam_dma.c index 8861245314b1..737fce396c2e 100644 --- a/drivers/dma/qcom/bam_dma.c +++ b/drivers/dma/qcom/bam_dma.c @@ -58,6 +58,8 @@ struct bam_desc_hw { #define DESC_FLAG_EOB BIT(13) #define DESC_FLAG_NWD BIT(12) #define DESC_FLAG_CMD BIT(11) +#define DESC_FLAG_LOCK BIT(10) +#define DESC_FLAG_UNLOCK BIT(9) struct bam_async_desc { struct virt_dma_desc vd; @@ -113,6 +115,7 @@ struct reg_offset_data { struct bam_device_data { const struct reg_offset_data *reg_info; + bool bam_pipe_lock; }; static const struct reg_offset_data bam_v1_3_reg_info[] = { @@ -179,6 +182,7 @@ static const struct reg_offset_data bam_v1_4_reg_info[] = { static const struct bam_device_data bam_v1_4_data = { .reg_info = bam_v1_4_reg_info, + .bam_pipe_lock = true, }; static const struct reg_offset_data bam_v1_7_reg_info[] = { @@ -212,6 +216,7 @@ static const struct reg_offset_data bam_v1_7_reg_info[] = { static const struct bam_device_data bam_v1_7_data = { .reg_info = bam_v1_7_reg_info, + .bam_pipe_lock = true, }; /* BAM CTRL */ @@ -707,8 +712,15 @@ static struct dma_async_tx_descriptor *bam_prep_slave_sg(struct dma_chan *chan, unsigned int curr_offset = 0; do { - if (flags & DMA_PREP_CMD) + if (flags & DMA_PREP_CMD) { desc->flags |= cpu_to_le16(DESC_FLAG_CMD); + if (bdev->dev_data->bam_pipe_lock) { + if (flags & DMA_PREP_LOCK) + desc->flags |= cpu_to_le16(DESC_FLAG_LOCK); + else if (flags & DMA_PREP_UNLOCK) + desc->flags |= cpu_to_le16(DESC_FLAG_UNLOCK); + } + } desc->addr = cpu_to_le32(sg_dma_address(sg) + curr_offset); From patchwork Tue Mar 11 09:25:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872566 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B455232368 for ; Tue, 11 Mar 2025 09:25:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685152; cv=none; b=pw/hMEuZjFcLSc3uCNoXRZP0FXxr90sUpIilH3upCkmhkr8CU49Pm/tRolghIIf39VgozpGUyVejYh9x3nzlb5lISlrDZIvvynqvwAs5TH3wHKop9bKAGngPuDymHwVRNIex3j2smnx1kWnd3+5qXi2tHSXukr2TIZsSAyJXyOo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685152; c=relaxed/simple; bh=LFM9b2u67bSZaIUBYliTcIHljksO8+uTJ/L/rcNEnC4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=McSJ4G+ghEibbWKH6Ogt+jx1MGEetoBcQPgkJqIRqAzgEz8RK906mW/BK2qsyg154QCAccNQOsZ4D+dl4Yf6qClSzn4zojVI+dU2AzRCQM9VCid3JWItDegd3b5pej2zxiJcJNzMqXMsLmUQ3lX+OQxu0b0k5iEkB9XbuytJQ1g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=kOOWTexF; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="kOOWTexF" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-39127512371so2899425f8f.0 for ; Tue, 11 Mar 2025 02:25:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685148; x=1742289948; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=J9nXciZ3P4WwGQnYiP3b72/6X89GnLhZDt45DEZdMkk=; b=kOOWTexFDGeuEu6IoTX2U7l/wF9zuWLQli1trnIxMxNfshQSVETOQd0u0Krj8mQPH/ eZMvfQVlED/+UkXJaMNSqvVKOXGcR1plx5G5Y+BkjARoLmwp3B+CXgcUuuo2tJjfMfsa M6t/yZgSBPsLozsvukLfsOiL1JJg00eTdzw+f7yZ0zBacA+Z2W1prl4egVTom2WiJpn1 4Vr7HIBdTWStCLerngTULxbNGfku398w5Q7IWdUOzyjVtoKjq4ZziikBuRVPGRhhVEOV PTrtEp+bkzV3AVppWRr/0SxjIAZ3SCGbNrLJ9Ej9pg86cJDcooa5XGaicBmiNP5ol21f AAxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685148; x=1742289948; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J9nXciZ3P4WwGQnYiP3b72/6X89GnLhZDt45DEZdMkk=; b=q2ZpeWQtB3B6qgjU6+g+eEhiB278meYmmMid3TlBSxzPSWSRjNY+aXkVVgp4sv6zrD xYTWO2eWPDHNWwAILsnMDtggn8VLgxRAi5UjWnnrnSUshxp+xZNXeqCROPanK11ODoue 6VrtMbHnalj8XlaQr1S/m3JBj5A2LQbCDZt6gHROwbzvPNbWKcrvaKOr4tbNI0WDUL8E NBoC0bzSSpUxsBMoXCe7Q29/1cyK4OYmdMPE+09BJiXitEgXqH+kOOYGbNLi9ljRS5Jp N43QbdtANrP2T5oFhstUwxfMNA2RaXT5m2N5MPhwD8GiqY4n96xtI4EHy2+rhPIF2B51 kwkw== X-Forwarded-Encrypted: i=1; AJvYcCVbxYIvob5sHCEsWBVDrWAd4/eL5GV3WOSmFYXftpF7btOmVHeTP7T8okHJwqlIp7ivz7kSklIqqoPKVfgv@vger.kernel.org X-Gm-Message-State: AOJu0YzR5Wmf3J5APpTzrmofe3kDk6AEFz+B7nLl5gfoD7XNdNGe2nfO mrPUWz9MpStI3PrucJ7/9CiM770+T/hBPsdamwQ22LV+3KPtdfLiVkti4T6Aa44= X-Gm-Gg: ASbGncuw5R0yiuMTRWhAP5gp0ZVPrb9iFQx+o2Kr4UTXqd7mRg5uw1uPhoHMUgrCLKz ccLv1HReocGVPRK32MdbD0dEuPlhBdCAM7JPZMbNokqUwOEKksrL+aNwTbbnZZJoq15IZX0ZRQF FMGGsiAGCsdkAHi2AoSmVg4WtiSDmrLM+G7t/+S59BtarKCxKKWXO6MfHkuiugVp74zyEZaJz3D BL0iFx+yV0ZTI5/EhtIVMCDBCmPsuJGzu9EwQGE9sqZG7eqx5yJoOGMmO3bFjoJOtcsGWw+eE9F TfgNxe0kt0A62x07I9XYUp6SacDvD1BLjp6B X-Google-Smtp-Source: AGHT+IE2E06qFQygO0D9rODHdFFqN5iR8TR9Ya/5fd51L8cHA3jpRugMsQeHjlRJdpMOp7hvX6gTFQ== X-Received: by 2002:a05:6000:1a8f:b0:391:6fd:bb65 with SMTP id ffacd0b85a97d-39263b00732mr3395249f8f.9.1741685148109; Tue, 11 Mar 2025 02:25:48 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:47 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:35 +0100 Subject: [PATCH v7 4/8] crypto: qce - use devres to allocate the result buffer Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-4-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=1778; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=QD4k77mywEecEa6p/7h3b1ceYlu1HySwlr50tAYI57M=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBn0AGVFsw9bJEeGpjhulSppdP2lv0fkee/YIGKa tPx5XsyfJaJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCZ9ABlQAKCRARpy6gFHHX cmGlD/9/wrcM4bzrh+5npGBrHGmHl8cxk3vCvVG+9N4m8cFZB2OJ+ZuPeg3KYsOn+SmT0HxPUq0 8hp6fj+p3kuuHkrrivZABLtFkbd6xD5DDMSJQ4Ym71F3lYLadSrrZEAjUX2NsATSdy/2t8HurN0 6fvHynkYnFEU5iShfugSIhKBDpwIepItYZEfqN/vikttjMOEe36JtCquL9h2z8CJh1fCyG08imw +xIGc851nGEC6ce1IgbgGK+8zWXizMVooSuebQIMNdkIyAE182ViByWAInlwjmagblE4qyx8obH wwUPQZAhRYIsQM5q4hZW3dCaZi6Uqqpc5Thi/tx/dzECU9WkCVli0Cke+V7u4OqoB3RdJr+SuPA hYPOtax2yIxJOspX+aAmk1eUYyU4kq4Kd54ASrRb/ZDEhKYeB72Kz6/a3YpuyR+SyCQtPa4IUjS +y+NJubwdhmSFUnuEpGSqlSvnMT45EeElhZKf4aVGycNazv70VyvDcdbIN8TRa2ejyJ7ixoSEJC cdUpZaW90EbnEu2tbe9QyRIsV8ij6lkq/cIT5+CnME7B1RnxBP0sN9ix1DhxTGGUJhCDr/ElfQP 9Dcgeja5XXqn0crz3kjXoqj2gaEQYvNZlqu5QgEWmk/FZ2PTnlq5XYe1bi9vR7ypZDmBthS3GIr RJdD3lpziCPiMEw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Switch to devm_kmalloc for allocating the result_buf. This allows us to drop two labels and make the devm action callback for DMA channels smaller. Signed-off-by: Bartosz Golaszewski --- drivers/crypto/qce/dma.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/drivers/crypto/qce/dma.c b/drivers/crypto/qce/dma.c index 1dec7aea852d..6ac2efb7c2f7 100644 --- a/drivers/crypto/qce/dma.c +++ b/drivers/crypto/qce/dma.c @@ -15,7 +15,6 @@ static void qce_dma_release(void *data) dma_release_channel(dma->txchan); dma_release_channel(dma->rxchan); - kfree(dma->result_buf); } int devm_qce_dma_request(struct device *dev, struct qce_dma_data *dma) @@ -28,26 +27,23 @@ int devm_qce_dma_request(struct device *dev, struct qce_dma_data *dma) dma->rxchan = dma_request_chan(dev, "rx"); if (IS_ERR(dma->rxchan)) { - ret = PTR_ERR(dma->rxchan); - goto error_rx; + dma_release_channel(dma->txchan); + return PTR_ERR(dma->rxchan); } - dma->result_buf = kmalloc(QCE_RESULT_BUF_SZ + QCE_IGNORE_BUF_SZ, - GFP_KERNEL); - if (!dma->result_buf) { - ret = -ENOMEM; - goto error_nomem; - } + ret = devm_add_action_or_reset(dev, qce_dma_release, dma); + if (ret) + return ret; + + dma->result_buf = devm_kmalloc(dev, + QCE_RESULT_BUF_SZ + QCE_IGNORE_BUF_SZ, + GFP_KERNEL); + if (!dma->result_buf) + return -ENOMEM; dma->ignore_buf = dma->result_buf + QCE_RESULT_BUF_SZ; - return devm_add_action_or_reset(dev, qce_dma_release, dma); - -error_nomem: - dma_release_channel(dma->rxchan); -error_rx: - dma_release_channel(dma->txchan); - return ret; + return 0; } struct scatterlist * From patchwork Tue Mar 11 09:25:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872906 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D32B233145 for ; Tue, 11 Mar 2025 09:25:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685153; cv=none; b=XHUmIkkNjbeIOXoH3K6mILbOkHJcAak5SWONpLbpUewCJMaYWvjMagxGVTW4ndbtBLqq4IUfXI7pa4e2Oi7vRkhsgColxJBfd9eDB8x10G8jxlnVg1vRMMKwU/3c9exD0fbt7OtprlhF9mPTZDo5vRPV9Aw0vO+PS615L0rlnUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685153; c=relaxed/simple; bh=bCBTdiY9gpe+GjDTQ9nXaL32tLWbU4XYtUC4YeXNwR0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UXXF1G/W4g6LfJXMICAE3JNlUqRFWdNi/8Agdd4rsJe/3ks+UssLnErpPMOHDtlnA+s2hcaO+bQXkzaWHs9bqTfXzFJLb57m108/HT80lgT7Rk+vAZVVbcVAI+dvig4XSmW5wXD/SNnw1IaFNgXv5TrlDN8OOs94LazHZxsGY3k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=kJNYxgSJ; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="kJNYxgSJ" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43d04dc73b7so3134195e9.3 for ; Tue, 11 Mar 2025 02:25:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685149; x=1742289949; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/9l+f13mJPHrOnkggdATcJ5QYvscLs3l7oAK0s7GLCc=; b=kJNYxgSJCmXsB06S0hbrnzForSwgtwjq4SvYw6NaUrT2GsJkQj+pMPLrTMT5ofxpzt nsOejdDa3eOPxYURJAHJXmHmv7tFLedk7EVQG5OYyjhlXvvyU2k0OkDrbqcEF/Dj6MLL /3R2i+JPjrsHComIOrN497hpEK2GFenHkvEf44A17jVUuHzyp7tDRSwywAz0FBprHHTO 3ivdbFiXciNLMtA3ozJCzeBG65l8/egpxq5yN73zrACcZTYzf02Pkp8ejvNZ97DDGmBa 1D1mpg3/mmyK+/aSdaT5wYM+GvdkagN9qilJpijQK8a+A3V4oZ3iBtiMa4/LApnagmi7 eX2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685149; x=1742289949; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/9l+f13mJPHrOnkggdATcJ5QYvscLs3l7oAK0s7GLCc=; b=pAbJP00DT1S7U16o43ATCMu5qNahqD0Wcm1jlBUF1Rw6BGSp0uEsrdEunQUgDfvdPy iMmU0baP1hj680I8xCVpDjGMFezCSIrEiNuqBd/Fi0+7msgFEKOXybJKwm6xLnwL9vGk 8ard2phIeWlQIXjoZTUmjy5hH9l1+g1OlUKtSSbrqFbA07A6Z3+E0Bb/E67ivGtq79wM qXKrA0TftoYpeok1CPgKhHfsbaMZqpJyJWUaqCdO6pncsFK8BA/k4MlLNpQhlrgRTrn4 +rjYnF2u1+m3VYIfLxtLZA+y0w+g8Vuoj1hgOPyAYa5eBGKQYvNRdU+jz8GAtrA88jPE 6YvA== X-Forwarded-Encrypted: i=1; AJvYcCVwGyd4ijEk+An2gcAlvhsAVAV1zvhOHJOZ6nWs5SIqmPo5itTzlyId4nil/46Yn+gqBi/N0v9Ij+Ueza84@vger.kernel.org X-Gm-Message-State: AOJu0Ywuk3akLNPOcA30j6LeLDuTJG6A3z01Z/5yBEwPTyVolPLrmwJI NcN0SBjEUH59oX46t9CbW75gtnzveFUYfNGhVvXC7iKBQfNjh1vuVIhwnghYcNA= X-Gm-Gg: ASbGncsX98PYxlHyl67pJs7s9W+bFK8t12rY/xr0pd/BcJNrikZxx8e24Jk3quhHQef N5NkNTmSt6spppGI3K5RRZY6EBR/dAD78MQSlBEq8a2CD+TE7SMD8LJtlLu+sdzwQP5vBfeZFxG UcwrfbKiKJe1bJW/7xvgtOMHmioZja9GGJuPMdNNbcRkfJ3U6ley3GE7YRy8iuGu0dqqFxtNeVA Egn4uBJaBldINm4I1vq1haB7LNIEWzFOr7WERuA0Vc8ONZjtZU0iGXhA98fskqu73eh1E6qfngG v3NMsQQ6ZEUL4z8eAFOTuEu3a8IChH4sk5Ek X-Google-Smtp-Source: AGHT+IGEfyAw8lpsLkp1GcaKZsAIlWvd32NXVDeLfcXx3xz+a2E6j4imBlL6Bk3O5pZpmhsKNDWD/A== X-Received: by 2002:a05:600c:1547:b0:43c:fceb:91f with SMTP id 5b1f17b1804b1-43cfceb0aedmr71012795e9.11.1741685149316; Tue, 11 Mar 2025 02:25:49 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:48 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:36 +0100 Subject: [PATCH v7 5/8] crypto: qce - Map crypto memory for DMA Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-5-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=3050; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=9sPBxi7WcEbGhZ0zJXrjtGJm1E4sIIJKZPL3u1QqT70=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBn0AGWE9pP2abtJs+cO7NhWomGNMzeg6/jFNn1m ety2TFhJuuJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCZ9ABlgAKCRARpy6gFHHX cpSSD/91fZUju4zUV/ZekXs1tZBoKMTQqJ+czHlnxT11MLiRsg/LV4MsJahOedMuSoql8s62r/W 8yv/rhWQ2jJu4dFi+7yUsgOuzkovq3C3I4LBY5nOIHGrzndfMDLRKKj+MmcQtgb++A2ARlFYZQj OonHKfEbymseprlvt2ujCmqw1Z1erF7SUTJ5Qcve1IZwxDOUx+Jcjsdek+iZErQJp3N3MzyabIg rLOltvTYAaSAv3mEVFjvQzPXDdJwH/XItvbz/kWPwTxNEZ7IPYOCc1xkmBfHGYQAJwZaZRrNetr EerORctn8YIZ4Pu5/ReqMOpPLCafLqW8DNVShzhXQmsBr0NCQMQKLhqGoywMJZh53eoYXlyNQuG P4pRaPRQk8OXUg2UQ1j6DX40dO4CwcffVbHGKY2b/RpkHzmC71oKQ9GperypP6I2X8NJOGfLag6 9Bh9KNtjmNKNR3NAKJu0VmW7JnFghbETHCCV75FEyaoJOkvhggnLqZMjqoh+4hK4fUypbac5h55 hT8Oi6+Qz8mXQwQgKwpUjnnNJl6KKx6MGu+6FpKrmlE9bG+r7GeK+Mp7eKudruwF+IiKclRg7eT ACvkewx/fYjaU0HcoMsSivLwCXRXH+e0FDxMHzaT3XW2nYcLSBiOJ+62m0670IEyarKdEOAhV4b dSs3QNcfVaEhSwQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Md Sadre Alam In preparation for supporting command descriptors, map the crypto memory range for DMA. Signed-off-by: Md Sadre Alam [Bartosz: add kerneldocs, fix DMA mapping leak, rework commit message] Co-developed-by: Bartosz Golaszewski Signed-off-by: Bartosz Golaszewski --- drivers/crypto/qce/core.c | 24 ++++++++++++++++++++++-- drivers/crypto/qce/core.h | 4 ++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/qce/core.c b/drivers/crypto/qce/core.c index e95e84486d9a..b21c4ecd2034 100644 --- a/drivers/crypto/qce/core.c +++ b/drivers/crypto/qce/core.c @@ -187,10 +187,19 @@ static int qce_check_version(struct qce_device *qce) return 0; } +static void qce_crypto_unmap_dma(void *data) +{ + struct qce_device *qce = data; + + dma_unmap_resource(qce->dev, qce->base_dma, qce->dma_size, + DMA_BIDIRECTIONAL, 0); +} + static int qce_crypto_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct qce_device *qce; + struct resource *res; int ret; qce = devm_kzalloc(dev, sizeof(*qce), GFP_KERNEL); @@ -200,7 +209,7 @@ static int qce_crypto_probe(struct platform_device *pdev) qce->dev = dev; platform_set_drvdata(pdev, qce); - qce->base = devm_platform_ioremap_resource(pdev, 0); + qce->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res); if (IS_ERR(qce->base)) return PTR_ERR(qce->base); @@ -246,7 +255,18 @@ static int qce_crypto_probe(struct platform_device *pdev) qce->async_req_enqueue = qce_async_request_enqueue; qce->async_req_done = qce_async_request_done; - return devm_qce_register_algs(qce); + ret = devm_qce_register_algs(qce); + if (ret) + return ret; + + qce->dma_size = resource_size(res); + qce->base_dma = dma_map_resource(dev, res->start, qce->dma_size, + DMA_BIDIRECTIONAL, 0); + ret = dma_mapping_error(dev, qce->base_dma); + if (ret) + return ret; + + return devm_add_action_or_reset(qce->dev, qce_crypto_unmap_dma, qce); } static const struct of_device_id qce_crypto_of_match[] = { diff --git a/drivers/crypto/qce/core.h b/drivers/crypto/qce/core.h index eb6fa7a8b64a..b86caf8b926d 100644 --- a/drivers/crypto/qce/core.h +++ b/drivers/crypto/qce/core.h @@ -26,6 +26,8 @@ * @dma: pointer to dma data * @burst_size: the crypto burst size * @pipe_pair_id: which pipe pair id the device using + * @base_dma: base DMA address + * @dma_size: size of memory mapped for DMA * @async_req_enqueue: invoked by every algorithm to enqueue a request * @async_req_done: invoked by every algorithm to finish its request */ @@ -42,6 +44,8 @@ struct qce_device { struct qce_dma_data dma; int burst_size; unsigned int pipe_pair_id; + dma_addr_t base_dma; + size_t dma_size; int (*async_req_enqueue)(struct qce_device *qce, struct crypto_async_request *req); void (*async_req_done)(struct qce_device *qce, int ret); From patchwork Tue Mar 11 09:25:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872565 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0412A233D88 for ; Tue, 11 Mar 2025 09:25:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685154; cv=none; b=OdN3IibEDshMcSNkqXBhwAa4u/sq2LGa1fGghBXNunySfkQPzEFDJQqBFebrlWVjjks4iwQZ3IV4927WmSgsZR90ovS+r+qKiwUFX0wG5TXo76do/a68vcFf1TY/r8OQT4Topd9TeKPFPrALYsKgana6a6JbYX8RLwJpWW8B1Es= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685154; c=relaxed/simple; bh=lfAJChJjLz/lSW1KpKvETKFQV5YDFy9aq4Cf9KsGSok=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lJhBAxOGLCknzEAYUex3SSrhTcFL/EPrQd8q9on6flgs6cZYRCNn1X/NPui8yaqvF05yr/IKjvcUp5WjfbS1UJHGJZpvvhm53KdccAOGabUFlXNbqNSVZxNEJxgYRbhv9j2rCw0XIFHc1Sy3+EIE5TPUsTde99gngXV4lPC6e8w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=Cg2VAVnJ; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="Cg2VAVnJ" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-43cfecdd8b2so11289585e9.2 for ; Tue, 11 Mar 2025 02:25:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685150; x=1742289950; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=XswlyUnyyTTPtOrJW2CN4t34TCQGsofR+8BBQ7qqS3U=; b=Cg2VAVnJ4KzAVoaBM7z0/g+bCwlRLGBDoWBPFP9qiWU5si+fQYUbCkmYan39gQpKr3 CFpa5sZaj7ePAvz0npamqhaIKHYGDOBEAQoi1DSUHkHj2GJraBF/Itls3yQ/xzD/zkVx FzYhhDDWEcOmP51FyqdUgVaBuQcZws+FDjDALfIoXHtLub/nLKbVQig8ZUvoUdA7pa1m ++B5f8gkrtZX4s3oKERAHiIv4jsfv6tgSIZNq2qXegdzu0NaPzYrjSsjPdx+M/5w213r 9yTnDWmGSUVw+Qz89hzh0C7Ph7Bu3GyJFy0AkjBPAIi10SVDa0bj/VMz6E30YpUlT2I9 VJYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685150; x=1742289950; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XswlyUnyyTTPtOrJW2CN4t34TCQGsofR+8BBQ7qqS3U=; b=rrD/Vz9UJgwCKOfVSmP83veT2dtSl4VeIW0nZKSgBC/24IUiZYZD/PZJL9jRdNg2+Y LzOS8j4yOwmxluMvrrWIlS34YVa3EfUatnWAJPT0stEtzoIS4DECesCZOsFg9MTlYzbn zRdHf4JD46Je4qhKnhA1dPVlgZ/zrNjjGtlm/0e0XUU+X6yobWQOb4A8AkYVVkp0+2wd G/pUHCtaCwKxLGnPD1fPKueuIi5GXx4vOGVbHFbGoyJXcdXNxraVBCAJRXUyPW7XW/Le qK/CsbSQILvzVUAfQ4I7NO32IgGpUF2IO2yHnIxE55D5FbZ0vRsuaZK6fYYYb6OOE68j wPsA== X-Forwarded-Encrypted: i=1; AJvYcCWoXMhIfoASD/nx8Ah2SgYQCzjXpeQaav0kH+GFXS2AjC5bsIpL+FY5FJLkHus1KaLwwzKnnZ1ITv4s40/i@vger.kernel.org X-Gm-Message-State: AOJu0YwK9FuSaziQZ6SR4uKqyPMeKdlavWH332+KfuV7P33aP3L4NQvC fYjQI9COwOUMdZG7qjXb7PJ6br06Dd2oByWkL4AqHHpLveHN6tcEN1e3hPmr+Dc= X-Gm-Gg: ASbGncvL2OWF7spZggzyZ7cNyufibkHf4Pr4lJi+DXv3MhHpVjHVM18KbvpAzjm0IXL hfGQtGXd+O22RtNUub/T1fxuG93HQoUM2p8jrkLozprTiD/eNFIlX89AHpbY+ZK0Qf3cSlrLgfh qvDyOAGlG6+EEupByhPnLMuV9YUBIpVL29z/P3Xjrcvqrv4//CC8SOQwRV+fbi7Y2TZ3ecpN6Yb 17FyZxsIH0b3XWNi6n0TNgI+bJLlJ7/pj8mnCMawUI/DjOM8n6J5Nj9qb0xdz1fu5vEvg2optOZ LE5fZyfvqlvYk/WFRkDeM7PhXxcNwnYqqs+cIsY435YzpIw= X-Google-Smtp-Source: AGHT+IGi+IPBAqmAbbUAkHrv3Jb4DEucJtkroObv0fvnsxaYpxpE6miTIuthB5uIRwYBZX4ziiwNOg== X-Received: by 2002:a05:600c:da:b0:43c:f629:66f3 with SMTP id 5b1f17b1804b1-43cf62968b0mr72870215e9.18.1741685150224; Tue, 11 Mar 2025 02:25:50 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:49 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:37 +0100 Subject: [PATCH v7 6/8] crypto: qce - Add BAM DMA support for crypto register I/O Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-6-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=7268; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=SEtk1J0aHmReVO5qvg2CJQYibstzqGHei3j1EagqZzQ=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBn0AGWWyW4/po0MIHlVXsLPUJZuSDfQ4OEd9Xit SeCx9k8FKeJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCZ9ABlgAKCRARpy6gFHHX cq4VD/9FDpLWt9mPryfeerf+nPVXJLK6pl7LZQ9bw8MBT20l732sLFeEo1fBmFryCq1e8VSqaOy KzOFaDxuetC95xDRefpPGkFDnaP8gQqKchFGjyGW63WhklMmI6ejpdqjM2lLDGhw0pmHwuUixr0 RyIoREuHVYjhCsO/r7Ak1DOqPHX9GvFy4nbWiz5gHFuNeKKnPCIn00IJ13F4wY5SlWrmops+/bJ FiKEFkEj5t8Dq/hhx1IYosQnSvhaQeYlDu83HwsiT5sgPhz9SSy4xR4Fro3Rpd8imzt/8oe3qPz 7aMCrXUjiJTW7RU9ImUcrxg6weDieddBisaB9EITyX6wCAlraPMkPPNQZx2gKMMFlP5MCr9mZnJ HBVMnaWgjbpqit9mMF4Zpev5lKpvz2XaMCZHWoPj216/WVF1GwL5z161Zl84U0mbEOl11+dt3gC Xmb/mkq22/eyWgNvpc3eFFo8rjpsIIctA7RgMDE4Su1cFisReSsDPcLv0oJy/ehLtVUxl7j+HnA LqFpDM625qnIlJ/M0d01QnAdC+Rv+w97EEnIetgwwzLop7imKwr0zMh1OwoUUu95Nusn1Yqinb2 g1N6GeeiGkuceqVBoYXtjjn/xcwMt6/SJKoJ8LyiFriKee3h/gwKxwtt7GZT2oe2EAARGCZNb+4 z+kmGPdAXpvB/Kw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Md Sadre Alam Add BAM/DMA support infrastructure. These interfaces will allow us to port the algorithm implementations to use DMA for transaction with BAM locking. Signed-off-by: Md Sadre Alam [Bartosz: remove unused code, rework coding style, shuffle code around for better readability, simplify resource management, many other tweaks] Co-developed-by: Bartosz Golaszewski Signed-off-by: Bartosz Golaszewski --- drivers/crypto/qce/dma.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/crypto/qce/dma.h | 17 ++++++ 2 files changed, 156 insertions(+) diff --git a/drivers/crypto/qce/dma.c b/drivers/crypto/qce/dma.c index 6ac2efb7c2f7..71b191944e3f 100644 --- a/drivers/crypto/qce/dma.c +++ b/drivers/crypto/qce/dma.c @@ -5,10 +5,135 @@ #include #include +#include #include +#include "core.h" #include "dma.h" +struct qce_bam_transaction { + struct bam_cmd_element qce_bam_ce[QCE_BAM_CMD_ELEMENT_SIZE]; + struct scatterlist qce_reg_write_sgl[QCE_BAM_CMD_SGL_SIZE]; + struct qce_desc_info *qce_desc; + u32 qce_bam_ce_index; + u32 qce_pre_bam_ce_index; + u32 qce_write_sgl_cnt; +}; + +void qce_clear_bam_transaction(struct qce_device *qce) +{ + struct qce_bam_transaction *qce_bam_txn = qce->dma.qce_bam_txn; + + memset(&qce_bam_txn->qce_bam_ce_index, 0, sizeof(u32) * 8); +} + +static int qce_dma_prep_cmd_sg(struct qce_device *qce, struct dma_chan *chan, + struct scatterlist *qce_bam_sgl, + int qce_sgl_cnt, unsigned long flags, + enum dma_transfer_direction dir_eng, + dma_async_tx_callback cb, void *cb_param) +{ + struct dma_async_tx_descriptor *dma_desc; + struct qce_desc_info *desc; + dma_cookie_t cookie; + + desc = qce->dma.qce_bam_txn->qce_desc; + + if (dir_eng == DMA_MEM_TO_DEV) + desc->dir = DMA_TO_DEVICE; + if (dir_eng == DMA_DEV_TO_MEM) + desc->dir = DMA_FROM_DEVICE; + + if (!qce_bam_sgl || !qce_sgl_cnt) + return -EINVAL; + + if (!dma_map_sg(qce->dev, qce_bam_sgl, + qce_sgl_cnt, desc->dir)) { + dev_err(qce->dev, "failure in mapping sgl for cmd desc\n"); + return -ENOMEM; + } + + dma_desc = dmaengine_prep_slave_sg(chan, qce_bam_sgl, qce_sgl_cnt, + dir_eng, flags); + if (!dma_desc) { + dev_err(qce->dev, "failed to prepare the command descriptor\n"); + dma_unmap_sg(qce->dev, qce_bam_sgl, qce_sgl_cnt, desc->dir); + kfree(desc); + return -EINVAL; + } + + desc->dma_desc = dma_desc; + desc->dma_desc->callback = cb; + desc->dma_desc->callback_param = cb_param; + + cookie = dmaengine_submit(desc->dma_desc); + + return dma_submit_error(cookie); +} + +int qce_submit_cmd_desc(struct qce_device *qce, unsigned long flags) +{ + struct qce_bam_transaction *qce_bam_txn = qce->dma.qce_bam_txn; + struct dma_chan *chan = qce->dma.rxchan; + unsigned long desc_flags; + int ret = 0; + + desc_flags = DMA_PREP_CMD; + + /* + * The HPG recommends always using the consumer pipe for command + * descriptors. + */ + if (qce_bam_txn->qce_write_sgl_cnt) + ret = qce_dma_prep_cmd_sg(qce, chan, qce_bam_txn->qce_reg_write_sgl, + qce_bam_txn->qce_write_sgl_cnt, + desc_flags, DMA_MEM_TO_DEV, + NULL, NULL); + if (ret) { + dev_err(qce->dev, + "error while submitting the command descriptor for TX: %d\n", + ret); + return ret; + } + + qce_dma_issue_pending(&qce->dma); + + if (qce_bam_txn->qce_write_sgl_cnt) + dma_unmap_sg(qce->dev, qce_bam_txn->qce_reg_write_sgl, + qce_bam_txn->qce_write_sgl_cnt, + DMA_TO_DEVICE); + + return ret; +} + +static __maybe_unused void +qce_prep_dma_command_desc(struct qce_device *qce, struct qce_dma_data *dma, + unsigned int addr, void *buff) +{ + struct qce_bam_transaction *qce_bam_txn = dma->qce_bam_txn; + struct bam_cmd_element *qce_bam_ce_buffer; + int qce_bam_ce_size, cnt, index; + + index = qce_bam_txn->qce_bam_ce_index; + qce_bam_ce_buffer = &qce_bam_txn->qce_bam_ce[index]; + bam_prep_ce_le32(qce_bam_ce_buffer, addr, BAM_WRITE_COMMAND, + *((__le32 *)buff)); + + cnt = qce_bam_txn->qce_write_sgl_cnt; + qce_bam_ce_buffer = + &qce_bam_txn->qce_bam_ce[qce_bam_txn->qce_pre_bam_ce_index]; + ++qce_bam_txn->qce_bam_ce_index; + qce_bam_ce_size = (qce_bam_txn->qce_bam_ce_index - + qce_bam_txn->qce_pre_bam_ce_index) * + sizeof(struct bam_cmd_element); + + sg_set_buf(&qce_bam_txn->qce_reg_write_sgl[cnt], qce_bam_ce_buffer, + qce_bam_ce_size); + + ++qce_bam_txn->qce_write_sgl_cnt; + qce_bam_txn->qce_pre_bam_ce_index = qce_bam_txn->qce_bam_ce_index; +} + static void qce_dma_release(void *data) { struct qce_dma_data *dma = data; @@ -19,6 +144,7 @@ static void qce_dma_release(void *data) int devm_qce_dma_request(struct device *dev, struct qce_dma_data *dma) { + struct qce_bam_transaction *qce_bam_txn; int ret; dma->txchan = dma_request_chan(dev, "tx"); @@ -43,6 +169,19 @@ int devm_qce_dma_request(struct device *dev, struct qce_dma_data *dma) dma->ignore_buf = dma->result_buf + QCE_RESULT_BUF_SZ; + dma->qce_bam_txn = devm_kmalloc(dev, sizeof(*qce_bam_txn), GFP_KERNEL); + if (!dma->qce_bam_txn) + return -ENOMEM; + + dma->qce_bam_txn->qce_desc = devm_kzalloc(dev, + sizeof(*dma->qce_bam_txn->qce_desc), + GFP_KERNEL); + if (!dma->qce_bam_txn->qce_desc) + return -ENOMEM; + + sg_init_table(dma->qce_bam_txn->qce_reg_write_sgl, + QCE_BAM_CMD_SGL_SIZE); + return 0; } diff --git a/drivers/crypto/qce/dma.h b/drivers/crypto/qce/dma.h index 31629185000e..7d9d58b414ed 100644 --- a/drivers/crypto/qce/dma.h +++ b/drivers/crypto/qce/dma.h @@ -6,14 +6,22 @@ #ifndef _DMA_H_ #define _DMA_H_ +#include #include +struct qce_device; + /* maximum data transfer block size between BAM and CE */ #define QCE_BAM_BURST_SIZE 64 #define QCE_AUTHIV_REGS_CNT 16 #define QCE_AUTH_BYTECOUNT_REGS_CNT 4 #define QCE_CNTRIV_REGS_CNT 4 +#define QCE_BAM_CMD_SGL_SIZE 64 +#define QCE_BAM_CMD_ELEMENT_SIZE 64 +#define QCE_DMA_DESC_FLAG_BAM_NWD (0x0004) +#define QCE_MAX_REG_READ 8 + struct qce_result_dump { u32 auth_iv[QCE_AUTHIV_REGS_CNT]; @@ -31,9 +39,15 @@ struct qce_dma_data { struct dma_chan *txchan; struct dma_chan *rxchan; struct qce_result_dump *result_buf; + struct qce_bam_transaction *qce_bam_txn; void *ignore_buf; }; +struct qce_desc_info { + struct dma_async_tx_descriptor *dma_desc; + enum dma_data_direction dir; +}; + int devm_qce_dma_request(struct device *dev, struct qce_dma_data *dma); int qce_dma_prep_sgs(struct qce_dma_data *dma, struct scatterlist *sg_in, int in_ents, struct scatterlist *sg_out, int out_ents, @@ -44,4 +58,7 @@ struct scatterlist * qce_sgtable_add(struct sg_table *sgt, struct scatterlist *sg_add, unsigned int max_len); +void qce_clear_bam_transaction(struct qce_device *qce); +int qce_submit_cmd_desc(struct qce_device *qce, unsigned long flags); + #endif /* _DMA_H_ */ From patchwork Tue Mar 11 09:25:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872905 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8A26B2356CF for ; Tue, 11 Mar 2025 09:25:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685156; cv=none; b=lUsnwLoqsS03IBAHlvF0rA1B4FZ1umnkI9+1kOgdjxMWzaRiB3+RKdaZmuls6FrWgXo7vVxAjhSsnUlZ8GLBZhc8u4yHmCXZNFO0Q+PBc40cZUCfsgXHMy9k3KxTRi3QPy/0utk8fpdpTCtTmEqeOew/d+EkhiqlgalNI/568Ks= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685156; c=relaxed/simple; bh=cK1k4sh2qG8eQn/caRKPL/VXSlWxPvIeIglcX9PU3Kc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aqd+rS92nKC1/g3+MnXfmshuAKRJiFuWvXZ9Sx0ohpJXHAcvpcxQvtqI0Ob1SsxdBBgghzsml2q6VOKL48YuorPBwBhymCuSwBWultWJEnPddatX5kHX4FbW20RQTNiS4rbVYyrD7pqDCZs0l4TR4NGLIeFLC3rGARlQMY898EE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=Sz273Ldv; arc=none smtp.client-ip=209.85.128.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="Sz273Ldv" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-43cf3192f3bso20395805e9.1 for ; Tue, 11 Mar 2025 02:25:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685152; x=1742289952; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=DFzjrdJVdhcaqoN3b3hO0MWmJrj0YtyTO+Uc8+EDm/4=; b=Sz273Ldv2kzVVir/fnhubiqJlHNmMnpV8p2zVPCGMCtMNY227BT7jWQR2biFqsFila jGu4jzoVrMqKoVih+okHLrxW9OUAZUrNMTUlkTrWR2bN92gk0qHQzogU1Tbyl/PfhWjP 5ALANSXJE+KH2TZhfpsAMY2b2FcHU+wA38/4E40IF6cax6XoKUS0FbjHPEqPclBPbU3W Bz+BoJHFhCjnidqy6sr1sYPTGYP/dSwwKtmarcpy3engX/Gp4C6ks93b04X+hyOhow+C bdJ7SjPbRnT1muLB8YTnan7+UQn6QAXvjx+8wwe3AbI+m67UHwRm+CesuzS5Wlf3OUc/ tjEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685152; x=1742289952; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DFzjrdJVdhcaqoN3b3hO0MWmJrj0YtyTO+Uc8+EDm/4=; b=c24azAbunSbfc6ewqjj/rJSaXqgwfn2CECCn09Tm0Qsi8E13xENiUbOhzkyeTOKif1 +v7m488C/eEqR9+croPrcDohzV7BVXLaM2t0VeT4ENZsFqquZ9uVtSM61bVbgu78WHcI KbQEhPFpxHkTFHV/WQrNpW7nyl9K6AqQGaRjC+ahGF2f2MMroDyy+99h2AaR1LeJBiQY bFvSdK1+umBI6dp+hqLfLGknYUkUnEbmJPlriZ6ItTdgiAhdiYHskpfZ/jTKOsGuXfRo NbNGRWS9ldmot9dutFin8FdLDlzsAZm3aSfYogm9z/tUhfrCS1tgIs1RmXl+106nCDu6 s1fQ== X-Forwarded-Encrypted: i=1; AJvYcCUrTmmZBbmRJcLOO2cnOFUsQxHI8rC2BYMWulgtQK93AqUqVBDg30tE+YXHD+gHkBj16GiNtg7W4qDsp22w@vger.kernel.org X-Gm-Message-State: AOJu0YyHAXPfeEcWbpibn32I0zY8plWaE1UrB97cdOeZ2xGgHTEShhK5 GZjfDLQP7KzeHryzTxxbfhmV/TwKROijTifETGWGqgPzp3MFrqerm7SSe6eixeM= X-Gm-Gg: ASbGnctjE484jVRqZ72gaJbbBlElr0iEXOY/Ksx+1Lf010rPMmC0j9ri0haBzaaOash iRxtW6e9qFHcxNnOldNICr+Bd5LTOfETCkW9ulQdbtSFe8kwD5Z89vghRVIa6Y4pooS22KubE6g IFpFIlk8AeV9CTZatoSjKHnH4uqzwuYYsNuTZMBYljDZPpGubi0Qhyr5lH9Lbhvzw7IHP7eta3f bhCGuQh66RQVWWyXBkXs2r8HRUOlYCNJYDZ0TnPWCLbCaxq4edGU6QHxR2Sw0PkRf8ixcdLmFWm 7MoKfrov/skUzrJMrNnvEzKI5eMUZCRrtSxn X-Google-Smtp-Source: AGHT+IHmwlWwHkyGbRf0kUFOnpDYY6MK9iS/MkX793T4hldQUCYJCOh2qGczT2He4Qzduj5pX0z+pg== X-Received: by 2002:a05:600c:1c9d:b0:439:643a:c8d5 with SMTP id 5b1f17b1804b1-43c549dcc0amr147894295e9.0.1741685151930; Tue, 11 Mar 2025 02:25:51 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:50 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:38 +0100 Subject: [PATCH v7 7/8] crypto: qce - Switch to using DMA Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-7-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=4727; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=Ummz+nuGMXPRajfLduo+chy+xyXsFEfhI+3un0WGWII=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBn0AGWBpep/bMxzHaVQ/LP3izEIuA5yaLo/RFaG 4AmPWJibzmJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCZ9ABlgAKCRARpy6gFHHX co0pEADKnxz86ATPO90pb6sb4gzp0jyiY6t5PhpXJGqPeBK/X06TiIWtC7rnot42QQM0qPTWcJj yLF7pvYjPv7xO3cT0FmAkur+HvME67DfwS0OxXi4fm8XMDXRFywJv627WlaZldp/iUMMSMXURA0 o5M3ogaNrksZjI/M+x/RTeV6xRQbGS4UJ2CfBbs9936nqo3IvX9vQM65E5HjwUvRAQhe1g4zcdn knCnAsF6Ountz7kYwmgF4SXfsWhRpYi3jX+c4Sjc71bNqhCM58hrRQZjEDYRcdG8+3ADHnpV5DL eosMm7hM3ikdy8TEKxFyQK3sE0PApTGW5wK7K7AajDbglSpLCZCYRo/TC6kSt6ohHg6HQQL9aqE deTLkw1jJfPE4ZUR4ADxzAj7rxSIOqCJNjoTo2pVgT0av3VsGNmZeO8P5CU4+9sQMrCXYYmOwii n+ugme68vbrv5lx/R6hN4csW0cYaAUueu9gOe0aQw+i/KVSaPjHGzNaQzNBu6wBRMfqbcvb0j16 WmdKpRY/DTsqzqv/FMEZ2uAXlbVeuLO4VfC+tpeh8mGxen2yG6lUdZVBkGjcKGl/RS8em/L4+Ko NMPqRWVfahE6OfVHvK5kXuk5+iM2PciONT2DXkobzz+R9+4v35b/AI6ggGbe3mGqp9ROpEjLu/e 4c8QR4FQM9xnIvw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Replace the qce_write() implementation with one that uses DMA. Convert all algorithm implementations to use command descriptors. This makes the driver use BAM DMA exclusively instead of register read/writes. Co-developed-by: Md Sadre Alam Signed-off-by: Md Sadre Alam Signed-off-by: Bartosz Golaszewski --- drivers/crypto/qce/common.c | 17 +++++++++-------- drivers/crypto/qce/common.h | 1 + drivers/crypto/qce/dma.c | 13 ++++++++++--- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/drivers/crypto/qce/common.c b/drivers/crypto/qce/common.c index 04253a8d3340..80984e853454 100644 --- a/drivers/crypto/qce/common.c +++ b/drivers/crypto/qce/common.c @@ -23,11 +23,6 @@ static inline u32 qce_read(struct qce_device *qce, u32 offset) return readl(qce->base + offset); } -static inline void qce_write(struct qce_device *qce, u32 offset, u32 val) -{ - writel(val, qce->base + offset); -} - static inline void qce_write_array(struct qce_device *qce, u32 offset, const u32 *val, unsigned int len) { @@ -157,11 +152,13 @@ static int qce_setup_regs_ahash(struct crypto_async_request *async_req) __be32 mackey[QCE_SHA_HMAC_KEY_SIZE / sizeof(__be32)] = {0}; u32 auth_cfg = 0, config; unsigned int iv_words; + int ret; /* if not the last, the size has to be on the block boundary */ if (!rctx->last_blk && req->nbytes % blocksize) return -EINVAL; + qce_clear_bam_transaction(qce); qce_setup_config(qce); if (IS_CMAC(rctx->flags)) { @@ -225,7 +222,7 @@ static int qce_setup_regs_ahash(struct crypto_async_request *async_req) qce_crypto_go(qce, true); - return 0; + return qce_submit_cmd_desc(qce, 0); } #endif @@ -325,7 +322,9 @@ static int qce_setup_regs_skcipher(struct crypto_async_request *async_req) u32 encr_cfg = 0, auth_cfg = 0, config; unsigned int ivsize = rctx->ivsize; unsigned long flags = rctx->flags; + int ret; + qce_clear_bam_transaction(qce); qce_setup_config(qce); if (IS_XTS(flags)) @@ -388,7 +387,7 @@ static int qce_setup_regs_skcipher(struct crypto_async_request *async_req) qce_crypto_go(qce, true); - return 0; + return qce_submit_cmd_desc(qce, 0); } #endif @@ -438,7 +437,9 @@ static int qce_setup_regs_aead(struct crypto_async_request *async_req) unsigned long flags = rctx->flags; u32 encr_cfg, auth_cfg, config, totallen; u32 iv_last_word; + int ret; + qce_clear_bam_transaction(qce); qce_setup_config(qce); /* Write encryption key */ @@ -537,7 +538,7 @@ static int qce_setup_regs_aead(struct crypto_async_request *async_req) /* Start the process */ qce_crypto_go(qce, !IS_CCM(flags)); - return 0; + return qce_submit_cmd_desc(qce, 0); } #endif diff --git a/drivers/crypto/qce/common.h b/drivers/crypto/qce/common.h index 02e63ad9f245..ec58c1b6aa36 100644 --- a/drivers/crypto/qce/common.h +++ b/drivers/crypto/qce/common.h @@ -100,5 +100,6 @@ void qce_cpu_to_be32p_array(__be32 *dst, const u8 *src, unsigned int len); int qce_check_status(struct qce_device *qce, u32 *status); void qce_get_version(struct qce_device *qce, u32 *major, u32 *minor, u32 *step); int qce_start(struct crypto_async_request *async_req, u32 type); +void qce_write(struct qce_device *qce, unsigned int offset, u32 val); #endif /* _COMMON_H_ */ diff --git a/drivers/crypto/qce/dma.c b/drivers/crypto/qce/dma.c index 71b191944e3f..b8b305fc1b6a 100644 --- a/drivers/crypto/qce/dma.c +++ b/drivers/crypto/qce/dma.c @@ -8,6 +8,7 @@ #include #include +#include "common.h" #include "core.h" #include "dma.h" @@ -106,9 +107,9 @@ int qce_submit_cmd_desc(struct qce_device *qce, unsigned long flags) return ret; } -static __maybe_unused void -qce_prep_dma_command_desc(struct qce_device *qce, struct qce_dma_data *dma, - unsigned int addr, void *buff) +static void qce_prep_dma_command_desc(struct qce_device *qce, + struct qce_dma_data *dma, + unsigned int addr, void *buff) { struct qce_bam_transaction *qce_bam_txn = dma->qce_bam_txn; struct bam_cmd_element *qce_bam_ce_buffer; @@ -134,6 +135,12 @@ qce_prep_dma_command_desc(struct qce_device *qce, struct qce_dma_data *dma, qce_bam_txn->qce_pre_bam_ce_index = qce_bam_txn->qce_bam_ce_index; } +void qce_write(struct qce_device *qce, unsigned int offset, u32 val) +{ + qce_prep_dma_command_desc(qce, &qce->dma, (qce->base_dma + offset), + &val); +} + static void qce_dma_release(void *data) { struct qce_dma_data *dma = data; From patchwork Tue Mar 11 09:25:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 872564 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5103E236A62 for ; Tue, 11 Mar 2025 09:25:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685157; cv=none; b=CRYX+4VrgY9GMZnuJt4+Rgq5fvipWTqk7HHPGcfFSr4MmoPTV2JaWW0kqc98t9MpyKxvrHosMdKg8iO7ITF5FeEtmSn+5OKIUjvaGR/I06qOuGDO6gJiDtx5K3AXXR7vzlGVxsbCRIrfoWToA7pYF85ef4VtQcZgyzptkuCpMyU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741685157; c=relaxed/simple; bh=ufjgBriFPO+A7ho0VTKYaFG559C+e9CDQm4Go78wAzM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TsBUh5HP+jKjKHlamJiKcU41kw+OLKhg6Q+S6hct4N0ClfIaHO1RZv/0VzvKIRLq5IOhX5695zECeC4KRq25e1XcNY8jG0bSWVRCiaNBxlclVxcI7soY6cP8mPqII/2lJMPlEhmK0s5LCD5Isx2pg0VFJ8OJ6GZSgz2yupuM6fo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=ofB2xKzd; arc=none smtp.client-ip=209.85.221.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="ofB2xKzd" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-39140bd6317so1812292f8f.1 for ; Tue, 11 Mar 2025 02:25:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1741685154; x=1742289954; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=wlFvuuZEOrpJeRtBEGpuQTKmyYbAYA8BV9Jv1FjV/XM=; b=ofB2xKzdYQiFvgV1x4mQjlnStbqVHLJBWn1IcU+1xIeTcmBFk0JbZFpjBe70V86WBB tH6jY+jmRUslERIKSwXNBnJkbUTJkIjzP6aGKWYsavZE5MsDAdKw/tbFF1aTaBMqnYdz 1vvZTwdJpox2HPMhjm7AT2A1G6C0gBa2s6QoX39iSIKnFWO5/7QoAqqx8agtiqBy5hNb zAZW0ERFjN/fCf/geLBScBRIKYOiYCIf2rGPgMZuPunZyH36ivtRewgpVItlC4O3TXXA Yi+NeJBlZ3PpWI/z64PLvyOu/ZXAmVDpiB2ZiDDSihVvzvhxvMsWDSSJfEi/P8kQ4WUs tHyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741685154; x=1742289954; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wlFvuuZEOrpJeRtBEGpuQTKmyYbAYA8BV9Jv1FjV/XM=; b=X+f5SzYhN9P7wsUgdYHAToi1VJHHM2O+Wu3gt0c6vyrDQyOfhFE26CMuumWEyOeIoy BC38NEybckUAjyziO+a3TwU9jzPlbL3tDqcGWUz+pNk74MKLS09OYm9IHKhQr/e1Fz+R o6AjU9lr4CVv3P2dIqUZvKnRZztg44ef8oSVG5AfzZp7GYwlH7zQCH714aWNMnCT2Nw5 H/c/Ge3/Wos+mrkSh8Tc3Z72jiHIwxmMqxlxt1OzpowHXb+37CVgsX7ZTO8huUSU/xwm 7upRssyShvxAAGShhcu4HeCHP878LXuRevTyRhv55SzgfmeeUNXyVBTdtCQOvR4Tu273 WsOg== X-Forwarded-Encrypted: i=1; AJvYcCUQKY2eNaZH3On9zYmnewe8v5ckgOkxSwT4u2Ub7vqG4ztVskJ1rtTvNxDo+I+Tts2zRIBBcqDEro4Jqgt2@vger.kernel.org X-Gm-Message-State: AOJu0Yxqv3bFVQGY1GxUgspjY++0rb9FZu01R3KMbwEBaI2VWRJ0GV+/ luK52v7YfqknejgSGFlHdlzgOfZNuyXZzgc/ZTV3N1qPV3RIAA8kdfsaE6P24BY= X-Gm-Gg: ASbGncspItv07dTeik8YJFSZJSMjCjoRGBDy3O2SpkazqUAJOP8r3lX6eLJdEU8Oxhd XAfMkGQvuXgJ8Hlh5/YqCB+dvVLM6sfdnc/vj/dsdP6dzTX+7QHtteyeNliBrG4xowyA/6tt6Mi HlqzIKs7teVXTjMPv9niXkwEPCunHTBn14WNJlX+eJXX3lSZ1MpQPeMMtIaTYFN6uIwEwcZUpXB aqoBXRWu8RWU+/ZtGMJ5KHkPl67ck+ORqooOdYbwFjMI91bafYDEEp+y7cEJba4cCw68xT4Rr/Q JgiTSAUERmqB03CL4ldlkrLYfONeNVz2A8Tj X-Google-Smtp-Source: AGHT+IEW2hbCbJVhm6WHYg0pBOgMh7R2XmGC7pabSYhUG+f6aJX/Eh/0v963WXxGj4Z1OSHPW8JyfA== X-Received: by 2002:a05:6000:1f82:b0:391:3fde:1da with SMTP id ffacd0b85a97d-3913fde033cmr12119389f8f.16.1741685153661; Tue, 11 Mar 2025 02:25:53 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:5946:3143:114d:3f3]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cea8076fcsm107436465e9.15.2025.03.11.02.25.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Mar 2025 02:25:52 -0700 (PDT) From: Bartosz Golaszewski Date: Tue, 11 Mar 2025 10:25:39 +0100 Subject: [PATCH v7 8/8] crypto: qce - Add support for BAM locking Precedence: bulk X-Mailing-List: linux-arm-msm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250311-qce-cmd-descr-v7-8-db613f5d9c9f@linaro.org> References: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> In-Reply-To: <20250311-qce-cmd-descr-v7-0-db613f5d9c9f@linaro.org> To: Thara Gopinath , Herbert Xu , "David S. Miller" , Vinod Koul , Jonathan Corbet , Md Sadre Alam , Srinivas Kandagatla Cc: linux-crypto@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.1 X-Developer-Signature: v=1; a=openpgp-sha256; l=6057; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=mrvGg9IYidCko0IY95KksqDIDUmheB3bWnzVDjWoezs=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBn0AGW3z/MEW+57clZJmFBlWb40oPbtQUg+R7rM RG+pb3potqJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCZ9ABlgAKCRARpy6gFHHX coa+EACj+s86pmH1/FV+U6jTKbWslnLU5pSjxSz1J1xTIPXHByRw3DxuqMVwyNyB0OVctxAHYuU WUfeNHgjhkY7mdhu7ruUxgA/DbpAggoCPnzd0T3EHbSRGj/NVsalYensT/Wzx/73Ac6HIeI8eEQ s0746GNrevv9VM+ZIa6vfd6wSEsiY0QC9CpQOVWPmIzJYjd5XOkFTUgLrGczu5fvZ1fACWGp7O7 FQFiged/bW9zhEhdXYwQ+mX5Fv23kl1C/2VDsnqN/o1xlTZwe17rZkJMIPUP2wdJNXoiY5x6P0p tovPkf3+Mt410WvjsQLNZGF1CGQg10KfG37jX2rbdtlXRtTbY0hMXxnbVQkErvynLnNWS/GLVZM tqsoHO9lNg0iS4CCZ+gsXI+sS6A0FkgqNb/jjYWmZ+FyqGWdBpyLqXnmmpfvUmniL599tbxIIVr Xf29NF721nqKzCBuYyRT2IyCoSkmMLGiVoWffuAsUCntsp6LqXr+hRyfZqCqw2dDC6sW+xx8hn+ 09zGux2N0SaKZVwC/PkwySuWxufy+/0wcLoHV0esnnXhYeFqMTCBu20uaC5sU4joRbK4vwGRwCk JdSCafXkHVRTe/CW7HdQgTgYAEwGNTTJ7YYeyGZJQpjdbFmCTI0MjGstjMtZbaF1iFB0QWOIRMs GcJc1JMeyE0EXVw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Md Sadre Alam The BAM driver now supports command descriptor locking. Add helper functions that perform the dummy writes and acquire/release the lock and use them across the supported algos. With this: if mutliple execution environments (e.g.: a trusted app and linux) try to access the same crypto engine, we can serialize their accesses. Signed-off-by: Md Sadre Alam [Bartosz: rework the coding style, naming convention, commit message and ifdef logic] Co-developed-by: Bartosz Golaszewski Signed-off-by: Bartosz Golaszewski --- drivers/crypto/qce/aead.c | 4 ++++ drivers/crypto/qce/common.c | 30 ++++++++++++++++++++++++++++++ drivers/crypto/qce/core.h | 3 +++ drivers/crypto/qce/dma.c | 4 ++++ drivers/crypto/qce/dma.h | 2 ++ drivers/crypto/qce/sha.c | 4 ++++ drivers/crypto/qce/skcipher.c | 4 ++++ 7 files changed, 51 insertions(+) diff --git a/drivers/crypto/qce/aead.c b/drivers/crypto/qce/aead.c index 11cec08544c9..5d45841c029e 100644 --- a/drivers/crypto/qce/aead.c +++ b/drivers/crypto/qce/aead.c @@ -63,6 +63,8 @@ static void qce_aead_done(void *data) sg_free_table(&rctx->dst_tbl); } + qce_bam_unlock(qce); + error = qce_check_status(qce, &status); if (error < 0 && (error != -EBADMSG)) dev_err(qce->dev, "aead operation error (%x)\n", status); @@ -433,6 +435,8 @@ qce_aead_async_req_handle(struct crypto_async_request *async_req) else rctx->assoclen = req->assoclen; + qce_bam_lock(qce); + diff_dst = (req->src != req->dst) ? true : false; dir_src = diff_dst ? DMA_TO_DEVICE : DMA_BIDIRECTIONAL; dir_dst = diff_dst ? DMA_FROM_DEVICE : DMA_BIDIRECTIONAL; diff --git a/drivers/crypto/qce/common.c b/drivers/crypto/qce/common.c index 80984e853454..251bf3cb1dd5 100644 --- a/drivers/crypto/qce/common.c +++ b/drivers/crypto/qce/common.c @@ -565,6 +565,36 @@ int qce_start(struct crypto_async_request *async_req, u32 type) #define STATUS_ERRORS \ (BIT(SW_ERR_SHIFT) | BIT(AXI_ERR_SHIFT) | BIT(HSD_ERR_SHIFT)) +void qce_bam_lock(struct qce_device *qce) +{ + int ret; + + qce_clear_bam_transaction(qce); + + /* This is just a dummy write to acquire the lock on the BAM pipe. */ + qce_write(qce, REG_AUTH_SEG_CFG, 0); + + ret = qce_submit_cmd_desc(qce, QCE_DMA_DESC_FLAG_LOCK); + if (ret) + dev_err(qce->dev, + "Failed to lock the command descriptor: %d\n", ret); +} + +void qce_bam_unlock(struct qce_device *qce) +{ + int ret; + + qce_clear_bam_transaction(qce); + + /* This just dummy write to release the lock on the BAM pipe. */ + qce_write(qce, REG_AUTH_SEG_CFG, 0); + + ret = qce_submit_cmd_desc(qce, QCE_DMA_DESC_FLAG_UNLOCK); + if (ret) + dev_err(qce->dev, + "Failed to unlock the command descriptor: %d\n", ret); +} + int qce_check_status(struct qce_device *qce, u32 *status) { int ret = 0; diff --git a/drivers/crypto/qce/core.h b/drivers/crypto/qce/core.h index b86caf8b926d..3341571991a4 100644 --- a/drivers/crypto/qce/core.h +++ b/drivers/crypto/qce/core.h @@ -65,4 +65,7 @@ struct qce_algo_ops { int (*async_req_handle)(struct crypto_async_request *async_req); }; +void qce_bam_lock(struct qce_device *qce); +void qce_bam_unlock(struct qce_device *qce); + #endif /* _CORE_H_ */ diff --git a/drivers/crypto/qce/dma.c b/drivers/crypto/qce/dma.c index b8b305fc1b6a..f3178144fa94 100644 --- a/drivers/crypto/qce/dma.c +++ b/drivers/crypto/qce/dma.c @@ -80,6 +80,10 @@ int qce_submit_cmd_desc(struct qce_device *qce, unsigned long flags) int ret = 0; desc_flags = DMA_PREP_CMD; + if (flags & QCE_DMA_DESC_FLAG_LOCK) + desc_flags |= DMA_PREP_LOCK; + else if (flags & QCE_DMA_DESC_FLAG_UNLOCK) + desc_flags |= DMA_PREP_UNLOCK; /* * The HPG recommends always using the consumer pipe for command diff --git a/drivers/crypto/qce/dma.h b/drivers/crypto/qce/dma.h index 7d9d58b414ed..c98dcab1dc62 100644 --- a/drivers/crypto/qce/dma.h +++ b/drivers/crypto/qce/dma.h @@ -21,6 +21,8 @@ struct qce_device; #define QCE_BAM_CMD_ELEMENT_SIZE 64 #define QCE_DMA_DESC_FLAG_BAM_NWD (0x0004) #define QCE_MAX_REG_READ 8 +#define QCE_DMA_DESC_FLAG_LOCK (0x0002) +#define QCE_DMA_DESC_FLAG_UNLOCK (0x0001) struct qce_result_dump { diff --git a/drivers/crypto/qce/sha.c b/drivers/crypto/qce/sha.c index 0c7aab711b7b..4c701fca16f2 100644 --- a/drivers/crypto/qce/sha.c +++ b/drivers/crypto/qce/sha.c @@ -60,6 +60,8 @@ static void qce_ahash_done(void *data) rctx->byte_count[0] = cpu_to_be32(result->auth_byte_count[0]); rctx->byte_count[1] = cpu_to_be32(result->auth_byte_count[1]); + qce_bam_unlock(qce); + error = qce_check_status(qce, &status); if (error < 0) dev_dbg(qce->dev, "ahash operation error (%x)\n", status); @@ -90,6 +92,8 @@ static int qce_ahash_async_req_handle(struct crypto_async_request *async_req) rctx->authklen = AES_KEYSIZE_128; } + qce_bam_lock(qce); + rctx->src_nents = sg_nents_for_len(req->src, req->nbytes); if (rctx->src_nents < 0) { dev_err(qce->dev, "Invalid numbers of src SG.\n"); diff --git a/drivers/crypto/qce/skcipher.c b/drivers/crypto/qce/skcipher.c index cab796cd7e43..42414fe9b787 100644 --- a/drivers/crypto/qce/skcipher.c +++ b/drivers/crypto/qce/skcipher.c @@ -52,6 +52,8 @@ static void qce_skcipher_done(void *data) sg_free_table(&rctx->dst_tbl); + qce_bam_unlock(qce); + error = qce_check_status(qce, &status); if (error < 0) dev_dbg(qce->dev, "skcipher operation error (%x)\n", status); @@ -82,6 +84,8 @@ qce_skcipher_async_req_handle(struct crypto_async_request *async_req) dir_src = diff_dst ? DMA_TO_DEVICE : DMA_BIDIRECTIONAL; dir_dst = diff_dst ? DMA_FROM_DEVICE : DMA_BIDIRECTIONAL; + qce_bam_lock(qce); + rctx->src_nents = sg_nents_for_len(req->src, req->cryptlen); if (diff_dst) rctx->dst_nents = sg_nents_for_len(req->dst, req->cryptlen);