From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 152C3C433FE for ; Mon, 14 Feb 2022 16:10:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230228AbiBNQKW (ORCPT ); Mon, 14 Feb 2022 11:10:22 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53616 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356143AbiBNQKR (ORCPT ); Mon, 14 Feb 2022 11:10:17 -0500 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CEAAE4D27C for ; Mon, 14 Feb 2022 08:10:09 -0800 (PST) Received: by mail-wr1-x435.google.com with SMTP id p9so7140838wra.12 for ; Mon, 14 Feb 2022 08:10:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OMqER4NRD5Otzp5gHFYzWyzVuvKEBWmPon9W1scP81E=; b=cpVlbt9KWDeqAjZQ9dsEuDDaENkntWrDih6e5myV7CH/PSn78t29QejoNwQrGhu51B PvdshXgBwg/16Xc82k1qHwLfygCoSQ/ta8FybGfFMUB6MndFvq+LnR0JmM69VAwQi0Pv 2a6Kwpj/Z4yTwS0BuVzI3DrWkLCKET3ilZ/f03/dRNXQt1I2BD2K7uX5LM3g8lr7uStL gQxas/5N38OO5zN/ygia7OUOkhOuoK+zUU7XevKwYhpCQLPE+VXAckEUmtKPiE+vDiNz eU123tAxY2XFqcXIp6DHELrJ5laStzwr/NmvV3TnG1/1eZRQriL6y3L+P8qXeQjUM6gX RYWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OMqER4NRD5Otzp5gHFYzWyzVuvKEBWmPon9W1scP81E=; b=OkjU9DobsOj2I9g2fw2ZGJLGh2udOuBI35PRTu/jkD43y2hbcyIrQFHvsw2tR7AN8e d3OOkdJGf/sm0wJoa9oRN3sM6fMj2fnUtyGEyMBf51/o6rcms4ywmdiV8r6HNQOfoPb3 Mtb0oUlVwdQXMCSqD7TputkhzXFg42iO8KfPH1soYSVTazFqShpa3SQHSbmabKkVTLkg gFVColbz7pSItEHuTTdlB61QAMFSMV4V0LzqozpPLFS14qD9Qw+1C5DxJRiheHpIuhmf wy0rPxYo59TxezenmNL5LjF0oR+Ki8IQASKxlTNnNW2gDcS2zCKQsNWye0sXf3Cs3CDO 2f3w== X-Gm-Message-State: AOAM532jKWaqaOTpGkp6PqbatbxVUnD6OOyxVbW1ov7B+Gg8BFTMAtpH YyJ4iV5y6jUelpAIv47+uAwiYmHTJzrqcg== X-Google-Smtp-Source: ABdhPJxgDu6sRJNqq8FQUZIphNIUVp7AZu9LzYrSIcz73UMn+/yxFe+lkbJAuQuvaseU+Rn1/vUnUw== X-Received: by 2002:a5d:4bd1:: with SMTP id l17mr296664wrt.176.1644855008397; Mon, 14 Feb 2022 08:10:08 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:07 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH v4 01/12] misc: fastrpc: separate fastrpc device from channel context Date: Mon, 14 Feb 2022 16:09:51 +0000 Message-Id: <20220214161002.6831-2-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently fastrpc misc device instance is within channel context struct with a kref. So we have 2 structs with refcount, both of them managing the same channel context structure. Separate fastrpc device from channel context and by adding a dedicated fastrpc_device structure, this should clean the structures a bit and also h= elp when adding secure device node support. Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 46 +++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 4ccbf43e6bfa..7e1c66591716 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -78,7 +78,7 @@ #define USER_PD (1) #define SENSORS_PD (2) =20 -#define miscdev_to_cctx(d) container_of(d, struct fastrpc_channel_ctx, mis= cdev) +#define miscdev_to_fdevice(d) container_of(d, struct fastrpc_device, miscd= ev) =20 static const char *domains[FASTRPC_DEV_MAX] =3D { "adsp", "mdsp", "sdsp", "cdsp"}; @@ -212,8 +212,13 @@ struct fastrpc_channel_ctx { spinlock_t lock; struct idr ctx_idr; struct list_head users; - struct miscdevice miscdev; struct kref refcount; + struct fastrpc_device *fdevice; +}; + +struct fastrpc_device { + struct fastrpc_channel_ctx *cctx; + struct miscdevice miscdev; }; =20 struct fastrpc_user { @@ -1220,10 +1225,14 @@ static int fastrpc_device_release(struct inode *ino= de, struct file *file) =20 static int fastrpc_device_open(struct inode *inode, struct file *filp) { - struct fastrpc_channel_ctx *cctx =3D miscdev_to_cctx(filp->private_data); + struct fastrpc_channel_ctx *cctx; + struct fastrpc_device *fdevice; struct fastrpc_user *fl =3D NULL; unsigned long flags; =20 + fdevice =3D miscdev_to_fdevice(filp->private_data); + cctx =3D fdevice->cctx; + fl =3D kzalloc(sizeof(*fl), GFP_KERNEL); if (!fl) return -ENOMEM; @@ -1608,6 +1617,27 @@ static struct platform_driver fastrpc_cb_driver =3D { }, }; =20 +static int fastrpc_device_register(struct device *dev, struct fastrpc_chan= nel_ctx *cctx, + const char *domain) +{ + struct fastrpc_device *fdev; + int err; + + fdev =3D devm_kzalloc(dev, sizeof(*fdev), GFP_KERNEL); + if (!fdev) + return -ENOMEM; + + fdev->cctx =3D cctx; + fdev->miscdev.minor =3D MISC_DYNAMIC_MINOR; + fdev->miscdev.fops =3D &fastrpc_fops; + fdev->miscdev.name =3D devm_kasprintf(dev, GFP_KERNEL, "fastrpc-%s", doma= in); + err =3D misc_register(&fdev->miscdev); + if (!err) + cctx->fdevice =3D fdev; + + return err; +} + static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) { struct device *rdev =3D &rpdev->dev; @@ -1637,11 +1667,7 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *= rpdev) if (!data) return -ENOMEM; =20 - data->miscdev.minor =3D MISC_DYNAMIC_MINOR; - data->miscdev.name =3D devm_kasprintf(rdev, GFP_KERNEL, "fastrpc-%s", - domains[domain_id]); - data->miscdev.fops =3D &fastrpc_fops; - err =3D misc_register(&data->miscdev); + err =3D fastrpc_device_register(rdev, data, domains[domain_id]); if (err) { kfree(data); return err; @@ -1681,7 +1707,9 @@ static void fastrpc_rpmsg_remove(struct rpmsg_device = *rpdev) fastrpc_notify_users(user); spin_unlock_irqrestore(&cctx->lock, flags); =20 - misc_deregister(&cctx->miscdev); + if (cctx->fdevice) + misc_deregister(&cctx->fdevice->miscdev); + of_platform_depopulate(&rpdev->dev); =20 cctx->rpdev =3D NULL; --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 77CBCC433FE for ; Mon, 14 Feb 2022 16:10:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356157AbiBNQKZ (ORCPT ); Mon, 14 Feb 2022 11:10:25 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356150AbiBNQKT (ORCPT ); Mon, 14 Feb 2022 11:10:19 -0500 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2D0364D27C for ; Mon, 14 Feb 2022 08:10:11 -0800 (PST) Received: by mail-wr1-x42b.google.com with SMTP id k1so27666139wrd.8 for ; Mon, 14 Feb 2022 08:10:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SEIW7YRrgEve1EnXf1IOLow6tqVRtOQkIRjRHaqNPcY=; b=jgc5X1dKFdko4ZVk0ZRuMd+ChZLeODM3JVlLaCVZwY/IsXQCLT+7KPiIfdq8HOVrMf MGBQZryx7CA6FZgswngZ6fGlcDUFZvj7dQBZc4XlZkSyyGRLJ960WwYcmZ/atfIV20h+ MBB2Mtdry1zRrnB80CMjAKLbZSrR3og9zWldJmc1ikyilR1yUKVMUvu0zHqHSEEaRyDC fjdF58agxlSCeH/MQ9JTNhUKui7RANaib/oIDEMkIzT13Bnj2jvtVhCUcSoWT/DYgHIP VxOCfe0QaKZQcWfNXecsUkbCdth2ZbMzQNH0rylRF+bCNPaQW8L0ajH4BVDEqRtU0w5F c14g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SEIW7YRrgEve1EnXf1IOLow6tqVRtOQkIRjRHaqNPcY=; b=IBJ/XfDVlpbxbaH12tQUc/RmbFAaN0UtdF0CBA5PhZEBHndBr8gbjL8//gj2zCPzoA ZQvBo5vQY5KpqJkg1OUwuJEsryNme9suxCwF0ZdJmdhYXjCMfZfaAcZ8B6vAIHAxItTQ Ssv/McI9dk08XPZQBxnRUlG2Lm9Q5eDZ5kHaK4CjQ4iBf+c0H9zOyvtCdCp/6TZjlcmy 0sl98Pp3UQqYwsVo+fU4JgSONLRWvgMiYxwFz1VAZdhfna1+t8st3H/JeCL4Q28LW/N9 jQbtvjYA9UcydU905mKGlq4/YGWZ7ix+Xsn22UVHagVwWAj1W4ayA1FuFBLC628B+5IR Iohw== X-Gm-Message-State: AOAM533WYRHd6U7uLz06FF1p/6mk+l4yFbt/12xkdk4v1NqQ34+BroHd 1J/OqLl+NdTa53lohk5mNY6+zA== X-Google-Smtp-Source: ABdhPJxGFVc++ge9jYRM0IOsARHmNmfpAjBwRDg0lHq5RSa5Kwr9qpXa3HUJM8x2HSDkE1/lF0Yxow== X-Received: by 2002:adf:f2cb:: with SMTP id d11mr286204wrp.286.1644855009772; Mon, 14 Feb 2022 08:10:09 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:09 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Jeya R , Srinivas Kandagatla Subject: [PATCH v4 02/12] misc: fastrpc: add support for FASTRPC_IOCTL_MEM_MAP/UNMAP Date: Mon, 14 Feb 2022 16:09:52 +0000 Message-Id: <20220214161002.6831-3-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jeya R Add support for IOCTL requests to map and unmap on DSP based on map flags. Signed-off-by: Jeya R Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 154 ++++++++++++++++++++++++++++++++++++ include/uapi/misc/fastrpc.h | 51 ++++++++++++ 2 files changed, 205 insertions(+) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 7e1c66591716..e3253daba0f9 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -72,6 +72,8 @@ #define FASTRPC_RMID_INIT_CREATE 6 #define FASTRPC_RMID_INIT_CREATE_ATTR 7 #define FASTRPC_RMID_INIT_CREATE_STATIC 8 +#define FASTRPC_RMID_INIT_MEM_MAP 10 +#define FASTRPC_RMID_INIT_MEM_UNMAP 11 =20 /* Protection Domain(PD) ids */ #define AUDIO_PD (0) /* also GUEST_OS PD? */ @@ -108,12 +110,29 @@ struct fastrpc_mmap_req_msg { s32 num; }; =20 +struct fastrpc_mem_map_req_msg { + s32 pgid; + s32 fd; + s32 offset; + u32 flags; + u64 vaddrin; + s32 num; + s32 data_len; +}; + struct fastrpc_munmap_req_msg { s32 pgid; u64 vaddr; u64 size; }; =20 +struct fastrpc_mem_unmap_req_msg { + s32 pgid; + s32 fd; + u64 vaddrin; + u64 len; +}; + struct fastrpc_msg { int pid; /* process group id */ int tid; /* thread id */ @@ -170,6 +189,7 @@ struct fastrpc_map { u64 size; void *va; u64 len; + u64 raddr; struct kref refcount; }; =20 @@ -1493,6 +1513,134 @@ static int fastrpc_req_mmap(struct fastrpc_user *fl= , char __user *argp) return err; } =20 +static int fastrpc_req_mem_unmap_impl(struct fastrpc_user *fl, struct fast= rpc_mem_unmap *req) +{ + struct fastrpc_invoke_args args[1] =3D { [0] =3D { 0 } }; + struct fastrpc_map *map =3D NULL, *m; + struct fastrpc_mem_unmap_req_msg req_msg =3D { 0 }; + int err =3D 0; + u32 sc; + struct device *dev =3D fl->sctx->dev; + + spin_lock(&fl->lock); + list_for_each_entry_safe(map, m, &fl->maps, node) { + if ((req->fd < 0 || map->fd =3D=3D req->fd) && (map->raddr =3D=3D req->v= addr)) + break; + map =3D NULL; + } + + spin_unlock(&fl->lock); + + if (!map) { + dev_err(dev, "map not in list\n"); + return -EINVAL; + } + + req_msg.pgid =3D fl->tgid; + req_msg.len =3D map->len; + req_msg.vaddrin =3D map->raddr; + req_msg.fd =3D map->fd; + + args[0].ptr =3D (u64) (uintptr_t) &req_msg; + args[0].length =3D sizeof(req_msg); + + sc =3D FASTRPC_SCALARS(FASTRPC_RMID_INIT_MEM_UNMAP, 1, 0); + err =3D fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, + &args[0]); + fastrpc_map_put(map); + if (err) + dev_err(dev, "unmmap\tpt fd =3D %d, 0x%09llx error\n", map->fd, map->ra= ddr); + + return err; +} + +static int fastrpc_req_mem_unmap(struct fastrpc_user *fl, char __user *arg= p) +{ + struct fastrpc_mem_unmap req; + + if (copy_from_user(&req, argp, sizeof(req))) + return -EFAULT; + + return fastrpc_req_mem_unmap_impl(fl, &req); +} + +static int fastrpc_req_mem_map(struct fastrpc_user *fl, char __user *argp) +{ + struct fastrpc_invoke_args args[4] =3D { [0 ... 3] =3D { 0 } }; + struct fastrpc_mem_map_req_msg req_msg =3D { 0 }; + struct fastrpc_mmap_rsp_msg rsp_msg =3D { 0 }; + struct fastrpc_mem_unmap req_unmap =3D { 0 }; + struct fastrpc_phy_page pages =3D { 0 }; + struct fastrpc_mem_map req; + struct device *dev =3D fl->sctx->dev; + struct fastrpc_map *map =3D NULL; + int err; + u32 sc; + + if (copy_from_user(&req, argp, sizeof(req))) + return -EFAULT; + + /* create SMMU mapping */ + err =3D fastrpc_map_create(fl, req.fd, req.length, &map); + if (err) { + dev_err(dev, "failed to map buffer, fd =3D %d\n", req.fd); + return err; + } + + req_msg.pgid =3D fl->tgid; + req_msg.fd =3D req.fd; + req_msg.offset =3D req.offset; + req_msg.vaddrin =3D req.vaddrin; + map->va =3D (void *) (uintptr_t) req.vaddrin; + req_msg.flags =3D req.flags; + req_msg.num =3D sizeof(pages); + req_msg.data_len =3D 0; + + args[0].ptr =3D (u64) (uintptr_t) &req_msg; + args[0].length =3D sizeof(req_msg); + + pages.addr =3D map->phys; + pages.size =3D map->size; + + args[1].ptr =3D (u64) (uintptr_t) &pages; + args[1].length =3D sizeof(pages); + + args[2].ptr =3D (u64) (uintptr_t) &pages; + args[2].length =3D 0; + + args[3].ptr =3D (u64) (uintptr_t) &rsp_msg; + args[3].length =3D sizeof(rsp_msg); + + sc =3D FASTRPC_SCALARS(FASTRPC_RMID_INIT_MEM_MAP, 3, 1); + err =3D fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, &args[= 0]); + if (err) { + dev_err(dev, "mem mmap error, fd %d, vaddr %llx, size %lld\n", + req.fd, req.vaddrin, map->size); + goto err_invoke; + } + + /* update the buffer to be able to deallocate the memory on the DSP */ + map->raddr =3D rsp_msg.vaddr; + + /* let the client know the address to use */ + req.vaddrout =3D rsp_msg.vaddr; + + if (copy_to_user((void __user *)argp, &req, sizeof(req))) { + /* unmap the memory and release the buffer */ + req_unmap.vaddr =3D (uintptr_t) rsp_msg.vaddr; + req_unmap.length =3D map->size; + fastrpc_req_mem_unmap_impl(fl, &req_unmap); + return -EFAULT; + } + + return 0; + +err_invoke: + fastrpc_map_put(map); + + return err; +} + static long fastrpc_device_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -1522,6 +1670,12 @@ static long fastrpc_device_ioctl(struct file *file, = unsigned int cmd, case FASTRPC_IOCTL_MUNMAP: err =3D fastrpc_req_munmap(fl, argp); break; + case FASTRPC_IOCTL_MEM_MAP: + err =3D fastrpc_req_mem_map(fl, argp); + break; + case FASTRPC_IOCTL_MEM_UNMAP: + err =3D fastrpc_req_mem_unmap(fl, argp); + break; default: err =3D -ENOTTY; break; diff --git a/include/uapi/misc/fastrpc.h b/include/uapi/misc/fastrpc.h index 0a89f95463f6..d248eeb20e67 100644 --- a/include/uapi/misc/fastrpc.h +++ b/include/uapi/misc/fastrpc.h @@ -13,6 +13,37 @@ #define FASTRPC_IOCTL_MMAP _IOWR('R', 6, struct fastrpc_req_mmap) #define FASTRPC_IOCTL_MUNMAP _IOWR('R', 7, struct fastrpc_req_munmap) #define FASTRPC_IOCTL_INIT_ATTACH_SNS _IO('R', 8) +#define FASTRPC_IOCTL_MEM_MAP _IOWR('R', 10, struct fastrpc_mem_map) +#define FASTRPC_IOCTL_MEM_UNMAP _IOWR('R', 11, struct fastrpc_mem_unmap) + +/** + * enum fastrpc_map_flags - control flags for mapping memory on DSP user p= rocess + * @FASTRPC_MAP_STATIC: Map memory pages with RW- permission and CACHE WRI= TEBACK. + * The driver is responsible for cache maintenance when passed + * the buffer to FastRPC calls. Same virtual address will be + * assigned for subsequent FastRPC calls. + * @FASTRPC_MAP_RESERVED: Reserved + * @FASTRPC_MAP_FD: Map memory pages with RW- permission and CACHE WRITEBA= CK. + * Mapping tagged with a file descriptor. User is responsible for + * CPU and DSP cache maintenance for the buffer. Get virtual address + * of buffer on DSP using HAP_mmap_get() and HAP_mmap_put() APIs. + * @FASTRPC_MAP_FD_DELAYED: Mapping delayed until user call HAP_mmap() and= HAP_munmap() + * functions on DSP. It is useful to map a buffer with cache modes + * other than default modes. User is responsible for CPU and DSP + * cache maintenance for the buffer. + * @FASTRPC_MAP_FD_NOMAP: This flag is used to skip CPU mapping, + * otherwise behaves similar to FASTRPC_MAP_FD_DELAYED flag. + * @FASTRPC_MAP_MAX: max count for flags + * + */ +enum fastrpc_map_flags { + FASTRPC_MAP_STATIC =3D 0, + FASTRPC_MAP_RESERVED, + FASTRPC_MAP_FD =3D 2, + FASTRPC_MAP_FD_DELAYED, + FASTRPC_MAP_FD_NOMAP =3D 16, + FASTRPC_MAP_MAX, +}; =20 struct fastrpc_invoke_args { __u64 ptr; @@ -49,9 +80,29 @@ struct fastrpc_req_mmap { __u64 vaddrout; /* dsp virtual address */ }; =20 +struct fastrpc_mem_map { + __s32 version; + __s32 fd; /* fd */ + __s32 offset; /* buffer offset */ + __u32 flags; /* flags defined in enum fastrpc_map_flags */ + __u64 vaddrin; /* buffer virtual address */ + __u64 length; /* buffer length */ + __u64 vaddrout; /* [out] remote virtual address */ + __s32 attrs; /* buffer attributes used for SMMU mapping */ + __s32 reserved[4]; +}; + struct fastrpc_req_munmap { __u64 vaddrout; /* address to unmap */ __u64 size; /* size */ }; =20 +struct fastrpc_mem_unmap { + __s32 vesion; + __s32 fd; /* fd */ + __u64 vaddr; /* remote process (dsp) virtual address */ + __u64 length; /* buffer size */ + __s32 reserved[5]; +}; + #endif /* __QCOM_FASTRPC_H__ */ --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DC021C433FE for ; Mon, 14 Feb 2022 16:10:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356197AbiBNQK2 (ORCPT ); Mon, 14 Feb 2022 11:10:28 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356159AbiBNQKW (ORCPT ); Mon, 14 Feb 2022 11:10:22 -0500 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 53DD560A9B for ; Mon, 14 Feb 2022 08:10:12 -0800 (PST) Received: by mail-wr1-x432.google.com with SMTP id o24so25023524wro.3 for ; Mon, 14 Feb 2022 08:10:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=x9uRKtqCvCxuePfYK0JAx8QeSBxwo9Y+7tq8m7yx3w0=; b=WlvCopevW8b5o/72zfeOhvEXYQ8rB+v5AzHGOpdqFflewuoDHhb29my/5AhgSyQCqk i5R3HjMlwDwhaYbR1USnLuYHZCtDQlv8Yq3T/MgoLSg81GOu33i/ALbHZkJkLnA3Od6h XeRB6kUdTAhP/D4f1lYRrEwjV2NCgS/QuuLRr99dKP8qCxdaNI2S6IW2WB1BzC2HGP2B aM+iPnRuHyJPW23QEd3/n7Zt1/ISKusWbvSnmjbn/v6Hkdb7fd43LjBHXiNTCyiej8TI nhDlEeWfn8BifSRv5hpZPGCncCMvUEEnIJPWIV9AYken23zBh6wcn/4hXq81Y3B2bJGw SxoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x9uRKtqCvCxuePfYK0JAx8QeSBxwo9Y+7tq8m7yx3w0=; b=RKbDbpx6q8VHsq4wstConW95D91DtvVEl8axz5ffXlI33JmA8JtED7e6rLLxGN+fpk W4DTpZhGwCQoEYyLYI9a2BnWCVoMsJRR6Kab7mcKSRnheJvSEo2Q2yRQvDmE0q28e1ht rzI/X98IRRPjJT9afrpVnlFcsCEP4H23sx9tPy7/1YNt+epHz/kThTY2/b0Pdp19TKUz XUGGdND0SqpoDiI6wJM/E1ku3vtXdpBCirrRTlBBLXgmu8VNSaA2SWEQZcErIGA2eM9P 5ZKp+59PnwuBjoW0kJB4iRbHdpItPrdbzB+ESKPxopO/WdJLzJOn5n6484sVNyVF6kaH T/ig== X-Gm-Message-State: AOAM532ztdCJehnUSSKhBAUOL44VpEMzY4LNDYRSgm7Bbalfphtq0fDC sz34xKgrLio7xAxZT52pa3wnNg== X-Google-Smtp-Source: ABdhPJzV6UXmlK51RlmkwjmvZg1JdPBiVJub4IcAUfCRgceQL+C/VWFByLWMgo28GVrtc0aVjMvKkA== X-Received: by 2002:adf:ff82:: with SMTP id j2mr281369wrr.242.1644855010903; Mon, 14 Feb 2022 08:10:10 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:10 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Jeya R , Srinivas Kandagatla Subject: [PATCH v4 03/12] misc: fastrpc: Add support to get DSP capabilities Date: Mon, 14 Feb 2022 16:09:53 +0000 Message-Id: <20220214161002.6831-4-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jeya R Add support to get DSP capabilities. The capability information is cached on driver. Signed-off-by: Jeya R Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 112 ++++++++++++++++++++++++++++++++++++ include/uapi/misc/fastrpc.h | 8 +++ 2 files changed, 120 insertions(+) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index e3253daba0f9..528ae5777586 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -31,10 +31,15 @@ #define FASTRPC_PHYS(p) ((p) & 0xffffffff) #define FASTRPC_CTX_MAX (256) #define FASTRPC_INIT_HANDLE 1 +#define FASTRPC_DSP_UTILITIES_HANDLE 2 #define FASTRPC_CTXID_MASK (0xFF0) #define INIT_FILELEN_MAX (2 * 1024 * 1024) #define FASTRPC_DEVICE_NAME "fastrpc" #define ADSP_MMAP_ADD_PAGES 0x1000 +#define DSP_UNSUPPORTED_API (0x80000414) +/* MAX NUMBER of DSP ATTRIBUTES SUPPORTED */ +#define FASTRPC_MAX_DSP_ATTRIBUTES (256) +#define FASTRPC_MAX_DSP_ATTRIBUTES_LEN (sizeof(u32) * FASTRPC_MAX_DSP_ATTR= IBUTES) =20 /* Retrives number of input buffers from the scalars parameter */ #define REMOTE_SCALARS_INBUFS(sc) (((sc) >> 16) & 0x0ff) @@ -233,6 +238,9 @@ struct fastrpc_channel_ctx { struct idr ctx_idr; struct list_head users; struct kref refcount; + /* Flag if dsp attributes are cached */ + bool valid_attributes; + u32 dsp_attributes[FASTRPC_MAX_DSP_ATTRIBUTES]; struct fastrpc_device *fdevice; }; =20 @@ -1371,6 +1379,107 @@ static int fastrpc_invoke(struct fastrpc_user *fl, = char __user *argp) return err; } =20 +static int fastrpc_get_info_from_dsp(struct fastrpc_user *fl, uint32_t *ds= p_attr_buf, + uint32_t dsp_attr_buf_len) +{ + struct fastrpc_invoke_args args[2] =3D { 0 }; + + /* Capability filled in userspace */ + dsp_attr_buf[0] =3D 0; + + args[0].ptr =3D (u64)(uintptr_t)&dsp_attr_buf_len; + args[0].length =3D sizeof(dsp_attr_buf_len); + args[0].fd =3D -1; + args[1].ptr =3D (u64)(uintptr_t)&dsp_attr_buf[1]; + args[1].length =3D dsp_attr_buf_len; + args[1].fd =3D -1; + fl->pd =3D 1; + + return fastrpc_internal_invoke(fl, true, FASTRPC_DSP_UTILITIES_HANDLE, + FASTRPC_SCALARS(0, 1, 1), args); +} + +static int fastrpc_get_info_from_kernel(struct fastrpc_ioctl_capability *c= ap, + struct fastrpc_user *fl) +{ + struct fastrpc_channel_ctx *cctx =3D fl->cctx; + uint32_t attribute_id =3D cap->attribute_id; + uint32_t *dsp_attributes; + unsigned long flags; + uint32_t domain =3D cap->domain; + int err; + + spin_lock_irqsave(&cctx->lock, flags); + /* check if we already have queried dsp for attributes */ + if (cctx->valid_attributes) { + spin_unlock_irqrestore(&cctx->lock, flags); + goto done; + } + spin_unlock_irqrestore(&cctx->lock, flags); + + dsp_attributes =3D kzalloc(FASTRPC_MAX_DSP_ATTRIBUTES_LEN, GFP_KERNEL); + if (!dsp_attributes) + return -ENOMEM; + + err =3D fastrpc_get_info_from_dsp(fl, dsp_attributes, FASTRPC_MAX_DSP_ATT= RIBUTES_LEN); + if (err =3D=3D DSP_UNSUPPORTED_API) { + dev_info(&cctx->rpdev->dev, + "Warning: DSP capabilities not supported on domain: %d\n", domain); + kfree(dsp_attributes); + return -EOPNOTSUPP; + } else if (err) { + dev_err(&cctx->rpdev->dev, "Error: dsp information is incorrect err: %d\= n", err); + kfree(dsp_attributes); + return err; + } + + spin_lock_irqsave(&cctx->lock, flags); + memcpy(cctx->dsp_attributes, dsp_attributes, FASTRPC_MAX_DSP_ATTRIBUTES_L= EN); + cctx->valid_attributes =3D true; + spin_unlock_irqrestore(&cctx->lock, flags); + kfree(dsp_attributes); +done: + cap->capability =3D cctx->dsp_attributes[attribute_id]; + return 0; +} + +static int fastrpc_get_dsp_info(struct fastrpc_user *fl, char __user *argp) +{ + struct fastrpc_ioctl_capability cap =3D {0}; + int err =3D 0; + + if (copy_from_user(&cap, argp, sizeof(cap))) + return -EFAULT; + + cap.capability =3D 0; + if (cap.domain >=3D FASTRPC_DEV_MAX) { + dev_err(&fl->cctx->rpdev->dev, "Error: Invalid domain id:%d, err:%d\n", + cap.domain, err); + return -ECHRNG; + } + + /* Fastrpc Capablities does not support modem domain */ + if (cap.domain =3D=3D MDSP_DOMAIN_ID) { + dev_err(&fl->cctx->rpdev->dev, "Error: modem not supported %d\n", err); + return -ECHRNG; + } + + if (cap.attribute_id >=3D FASTRPC_MAX_DSP_ATTRIBUTES) { + dev_err(&fl->cctx->rpdev->dev, "Error: invalid attribute: %d, err: %d\n", + cap.attribute_id, err); + return -EOVERFLOW; + } + + err =3D fastrpc_get_info_from_kernel(&cap, fl); + if (err) + return err; + + if (copy_to_user(argp, &cap.capability, sizeof(cap.capability))) + return -EFAULT; + + return 0; +} + static int fastrpc_req_munmap_impl(struct fastrpc_user *fl, struct fastrpc_req_munmap *req) { @@ -1676,6 +1785,9 @@ static long fastrpc_device_ioctl(struct file *file, u= nsigned int cmd, case FASTRPC_IOCTL_MEM_UNMAP: err =3D fastrpc_req_mem_unmap(fl, argp); break; + case FASTRPC_IOCTL_GET_DSP_INFO: + err =3D fastrpc_get_dsp_info(fl, argp); + break; default: err =3D -ENOTTY; break; diff --git a/include/uapi/misc/fastrpc.h b/include/uapi/misc/fastrpc.h index d248eeb20e67..7cc9d342078a 100644 --- a/include/uapi/misc/fastrpc.h +++ b/include/uapi/misc/fastrpc.h @@ -15,6 +15,7 @@ #define FASTRPC_IOCTL_INIT_ATTACH_SNS _IO('R', 8) #define FASTRPC_IOCTL_MEM_MAP _IOWR('R', 10, struct fastrpc_mem_map) #define FASTRPC_IOCTL_MEM_UNMAP _IOWR('R', 11, struct fastrpc_mem_unmap) +#define FASTRPC_IOCTL_GET_DSP_INFO _IOWR('R', 13, struct fastrpc_ioctl_cap= ability) =20 /** * enum fastrpc_map_flags - control flags for mapping memory on DSP user p= rocess @@ -105,4 +106,11 @@ struct fastrpc_mem_unmap { __s32 reserved[5]; }; =20 +struct fastrpc_ioctl_capability { + __u32 domain; + __u32 attribute_id; + __u32 capability; /* dsp capability */ + __u32 reserved[4]; +}; + #endif /* __QCOM_FASTRPC_H__ */ --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8BDAFC433F5 for ; Mon, 14 Feb 2022 16:10:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356202AbiBNQKm (ORCPT ); Mon, 14 Feb 2022 11:10:42 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53734 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356162AbiBNQKX (ORCPT ); Mon, 14 Feb 2022 11:10:23 -0500 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 822F360AB8 for ; Mon, 14 Feb 2022 08:10:13 -0800 (PST) Received: by mail-wr1-x42a.google.com with SMTP id v12so27730147wrv.2 for ; Mon, 14 Feb 2022 08:10:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bjIBqjzSOeDzcjHYyKEgBA6yLH4mKujvrbK8vjp/JEs=; b=v8ikxGgzEw4r/f6wRkB1LLs/I7iNUSt9c9k64kCa3IWq9HaQHmN6SxlH8iBu3Y2rVZ 2ycld9cIN//uQ0s4cUl0X1Qxc5NShYKsqH7d9kzotM5fi7yWq0uF4cAaFO5J200Hl/u1 Eu1Gn8Qdu66K4VobyEMGdwyh7cDZyaCDJ1WhiN/Av3J5Y/TbWvpEU3ibuSWMxbn5ikAq QRlbtzmbvEvtgTDBwxt3nowBdJWYXoj3eOwW9WkpyA/Lwj/4REC9fYNewC61Z12OKDLF xTbKH6ogC6PLmS/Fu+Chg+XITABDwPc4UuOus4IImJVUtJZOJiY+hHfmLsnaYQ5sZwcu hhAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bjIBqjzSOeDzcjHYyKEgBA6yLH4mKujvrbK8vjp/JEs=; b=6jhtmFitl+nnnqJ6BKWZVwhTHs2TMLyuzgxlIQjo7MDe/s1P4ELtxLlPZByDXmM9UU b7aj0eiMGbu/nh/edmeYl+eefgPzygH+nUuzaRu5qc6VjBsbEsCNdiz5XrhDLY9W66SG SCQVO4CM/Q7FxVjEkfsQ5WQ2LLC5nx7He3NgkttCjZU8/2wC92RgcmvXisv1+qqBNTBg s5Adc695T+hVl0aVVPqFONFSgmMzVAnOEMtz7UammgJEEBw/dHAgPt/62ZUUSETO5Rd0 VmQlQ+wDKaWvqGcuRNP0K5XL3fx5W1X/4MbMUUIh/8d05Edp6Hf2+BbP5EEQY2IcCvax pUmA== X-Gm-Message-State: AOAM531LliBrsRVmYUPMdbLnPJtHX2h9HALhm3Y2MeTba0LUe6uC/zEd R4dKVs0Ik5Nn7k7oRqE4fleuzA== X-Google-Smtp-Source: ABdhPJxJvrJJtxqGvtKldDSZFRcJhJ/YhAJfLEYlTjVsw7/v6Qj2TqDIsz9TIpCBT5g7MPRLdiCDzg== X-Received: by 2002:a05:6000:1847:: with SMTP id c7mr273113wri.103.1644855012086; Mon, 14 Feb 2022 08:10:12 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:11 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Jeya R , Srinivas Kandagatla , Rob Herring Subject: [PATCH v4 04/12] dt-bindings: misc: add property to support non-secure DSP Date: Mon, 14 Feb 2022 16:09:54 +0000 Message-Id: <20220214161002.6831-5-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jeya R Add property to set DSP domain as non-secure. ADSP/MDSP/SDSP are by default secured, where as CDSP can be either be secured/unsecured. non-secured Compute DSP would allow users to load unsigned process and run hexagon instructions, but limiting access to secured hardware within the DSP. Based on this flag device nodes for secured and unsecured are created. Signed-off-by: Jeya R Signed-off-by: Srinivas Kandagatla Acked-by: Rob Herring --- Documentation/devicetree/bindings/misc/qcom,fastrpc.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/qcom,fastrpc.txt b/Docu= mentation/devicetree/bindings/misc/qcom,fastrpc.txt index 2a1827ab50d2..f9a01e2b4c96 100644 --- a/Documentation/devicetree/bindings/misc/qcom,fastrpc.txt +++ b/Documentation/devicetree/bindings/misc/qcom,fastrpc.txt @@ -17,6 +17,11 @@ other tasks. Definition: should specify the dsp domain name this fastrpc corresponds to. must be one of this: "adsp", "mdsp", "sdsp", "cdsp" =20 +- qcom,non-secure-domain: + Usage: required + Value type: + Definition: Property to specify that dsp domain is non-secure. + - #address-cells Usage: required Value type: --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41873C433F5 for ; Mon, 14 Feb 2022 16:10:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356187AbiBNQKj (ORCPT ); Mon, 14 Feb 2022 11:10:39 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356169AbiBNQKX (ORCPT ); Mon, 14 Feb 2022 11:10:23 -0500 Received: from mail-wr1-x434.google.com (mail-wr1-x434.google.com [IPv6:2a00:1450:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C03CC60ABE for ; Mon, 14 Feb 2022 08:10:14 -0800 (PST) Received: by mail-wr1-x434.google.com with SMTP id u1so13931949wrg.11 for ; Mon, 14 Feb 2022 08:10:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b/uKzniHb9UB6MYZAJLuo4z7YZEOuojp10KqgKZuEAA=; b=qdt0JjkIS5Au+XCm2PNkkj4pu2ouPIrhx3OvBdF9QpFcoEr0MoQ6rN5+iZarwCB2k0 bBXXvgh2RuQ+9eM2aRWhX4C4ylqiaQYrP5DsP8HjKKD4KicSZSWnOo4lqntP6+C25ZtI FdbDbNfZ1t+Z/Kj7QNoBxvdbAQoU3dukDdBbnV51ap+V+VAeRWy7aMloAkIGj8r1OqkH s89B4FJUOR8BLqH0B0BsVgmKg2oKBeuMlEBYlbVdj9XlrynDcT1x6wOdCkkQbIu/FkhO R1Zl8t69i3eLMCM1+FNWvO9owdDRSchX/I/x886RgOC8xlYZyH8TohUqaNIlWm7m2DK7 NKnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b/uKzniHb9UB6MYZAJLuo4z7YZEOuojp10KqgKZuEAA=; b=LB7uYRVigg0AtD/N8IO93G2mEb7kItRRh0SI+Xdp5SW5EuULOou4qLF/6Cv3+1Cuid YjXblt2UNY4SIKVpRRWkC9KErxJ++eUIy6aJp4+jOEmkZ4beh4uaLXLgWjFWn3JjCYr8 v+ll04QtLry2PG6XhwfbTxvmAJsLS3wuHHRnkihzXVjyiYnRPwnRYegS2AMZO2k+92pq t3AhsenvxTChsy4Sph81OkN8rGQVdfYJNMK5eBMKQ4TWgDb5N0/QZ45uotZ6TLfZKII2 Tr2zszZ69oHWVldI7Aquy3s3zbR+7n28mhZicsrrfOLJo6gP7x4N+V0J9j3y/SGsT+hv /srA== X-Gm-Message-State: AOAM533JR8Ndw6Fdr4AAzdMegPXbulokitBDzA/IglW/nFDylrX6tdlV p1e+KIoeznXSS3clC85M0KkjGw== X-Google-Smtp-Source: ABdhPJzTl37LXFaFRnBtOkuhJqHbJgq3ph4br9O4D918TmCZs1OyIKcYqr4vD5thysE8BsQxlCWIFw== X-Received: by 2002:a5d:64ec:: with SMTP id g12mr272829wri.143.1644855013363; Mon, 14 Feb 2022 08:10:13 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:12 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH v4 05/12] misc: fastrpc: add secure domain support Date: Mon, 14 Feb 2022 16:09:55 +0000 Message-Id: <20220214161002.6831-6-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" ADSP/MDSP/SDSP are by default secured, which means it can only be loaded with a Signed process. Where as CDSP can be either be secured/unsecured. non-secured Compute DSP would allow users to load unsigned process and run hexagon instructions, but blocking access to secured hardware within the DSP. Where as signed process with secure CDSP would be allowed to access all the dsp resources. This patch adds basic code to create device nodes as per device tree proper= ty. Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 55 +++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 528ae5777586..af8bb4bd0cb3 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -241,12 +241,15 @@ struct fastrpc_channel_ctx { /* Flag if dsp attributes are cached */ bool valid_attributes; u32 dsp_attributes[FASTRPC_MAX_DSP_ATTRIBUTES]; + struct fastrpc_device *secure_fdevice; struct fastrpc_device *fdevice; + bool secure; }; =20 struct fastrpc_device { struct fastrpc_channel_ctx *cctx; struct miscdevice miscdev; + bool secure; }; =20 struct fastrpc_user { @@ -1690,7 +1693,7 @@ static int fastrpc_req_mem_map(struct fastrpc_user *f= l, char __user *argp) return -EFAULT; =20 /* create SMMU mapping */ - err =3D fastrpc_map_create(fl, req.fd, req.length, &map); + err =3D fastrpc_map_create(fl, req.fd, req.length, 0, &map); if (err) { dev_err(dev, "failed to map buffer, fd =3D %d\n", req.fd); return err; @@ -1884,7 +1887,7 @@ static struct platform_driver fastrpc_cb_driver =3D { }; =20 static int fastrpc_device_register(struct device *dev, struct fastrpc_chan= nel_ctx *cctx, - const char *domain) + bool is_secured, const char *domain) { struct fastrpc_device *fdev; int err; @@ -1893,13 +1896,19 @@ static int fastrpc_device_register(struct device *d= ev, struct fastrpc_channel_ct if (!fdev) return -ENOMEM; =20 + fdev->secure =3D is_secured; fdev->cctx =3D cctx; fdev->miscdev.minor =3D MISC_DYNAMIC_MINOR; fdev->miscdev.fops =3D &fastrpc_fops; - fdev->miscdev.name =3D devm_kasprintf(dev, GFP_KERNEL, "fastrpc-%s", doma= in); + fdev->miscdev.name =3D devm_kasprintf(dev, GFP_KERNEL, "fastrpc-%s%s", + domain, is_secured ? "-secure" : ""); err =3D misc_register(&fdev->miscdev); - if (!err) - cctx->fdevice =3D fdev; + if (!err) { + if (is_secured) + cctx->secure_fdevice =3D fdev; + else + cctx->fdevice =3D fdev; + } =20 return err; } @@ -1910,6 +1919,7 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *r= pdev) struct fastrpc_channel_ctx *data; int i, err, domain_id =3D -1; const char *domain; + bool secure_dsp; =20 err =3D of_property_read_string(rdev->of_node, "label", &domain); if (err) { @@ -1933,10 +1943,31 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device = *rpdev) if (!data) return -ENOMEM; =20 - err =3D fastrpc_device_register(rdev, data, domains[domain_id]); - if (err) { - kfree(data); - return err; + + secure_dsp =3D !(of_property_read_bool(rdev->of_node, "qcom,non-secure-do= main")); + data->secure =3D secure_dsp; + + switch (domain_id) { + case ADSP_DOMAIN_ID: + case MDSP_DOMAIN_ID: + case SDSP_DOMAIN_ID: + err =3D fastrpc_device_register(rdev, data, secure_dsp, domains[domain_i= d]); + if (err) + goto fdev_error; + break; + case CDSP_DOMAIN_ID: + /* Create both device nodes so that we can allow both Signed and Unsigne= d PD */ + err =3D fastrpc_device_register(rdev, data, true, domains[domain_id]); + if (err) + goto fdev_error; + + err =3D fastrpc_device_register(rdev, data, false, domains[domain_id]); + if (err) + goto fdev_error; + break; + default: + err =3D -EINVAL; + goto fdev_error; } =20 kref_init(&data->refcount); @@ -1950,6 +1981,9 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *r= pdev) data->rpdev =3D rpdev; =20 return of_platform_populate(rdev->of_node, NULL, NULL, rdev); +fdev_error: + kfree(data); + return err; } =20 static void fastrpc_notify_users(struct fastrpc_user *user) @@ -1976,6 +2010,9 @@ static void fastrpc_rpmsg_remove(struct rpmsg_device = *rpdev) if (cctx->fdevice) misc_deregister(&cctx->fdevice->miscdev); =20 + if (cctx->secure_fdevice) + misc_deregister(&cctx->secure_fdevice->miscdev); + of_platform_depopulate(&rpdev->dev); =20 cctx->rpdev =3D NULL; --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D68B9C433EF for ; Mon, 14 Feb 2022 16:10:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356228AbiBNQKw (ORCPT ); Mon, 14 Feb 2022 11:10:52 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356178AbiBNQKZ (ORCPT ); Mon, 14 Feb 2022 11:10:25 -0500 Received: from mail-wr1-x42b.google.com (mail-wr1-x42b.google.com [IPv6:2a00:1450:4864:20::42b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 599C960A9B for ; Mon, 14 Feb 2022 08:10:16 -0800 (PST) Received: by mail-wr1-x42b.google.com with SMTP id o24so25023911wro.3 for ; Mon, 14 Feb 2022 08:10:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DztJO97aqInKy8RoGrM0GgJtSrEI063H7In9hCcYS4s=; b=flRkqFamPhmYMaud+csSjyhpRtWVTtzd/maWjPMBX1M7UrcTP3IOExesNmbK531ck/ SpqziqteVXZ2HqMHs1yVRyykcwcyzurQH3Qsdpv729NYYMqgOJQCk74qTpneXdbaFnYf 4uZ/pgGjHbC87Qq7jLmv0PFKiStFvj7StmHoSiqOjVbt60ae9PY2w1XU429468OW+UmJ B7cqwxEjw9cBs+8PZ9YImTEDMbWn0OaEaGwfAnnaTMVMh/9UWLfUiDMIPK9EjHd81JQI Ii+WET1zWkBJGQ386+yFt96vAg45EDH07hJFpXHPEVsRdctC2b4PP9KdBFOQSnzbkiVt uCxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DztJO97aqInKy8RoGrM0GgJtSrEI063H7In9hCcYS4s=; b=xw7XySciRX236CirhKkQ2dGMlqwLGWxf1QapllL7wkeGmZXXdagFSAglSdhq1EvX6i 7+dS06VsPlH8u71DGB0u/neYVQGNjKmgW8XxMEE4R6X/uiYKuSwzHeR3bdUaZmaQGmUO BjsC495O7dR67Ls0/V6DqH0zR/T8fV8eJl5F9zZFRs/MFI/aAmf7C1upXzuHVWTjbUh0 DTDYAjgZkP8SgAKPd3EB7j8Y/Eutdp7ALm2iTa3s3EnUzL3fVV1aaXg6sqFcQ39dTJJc oRPqm88T3xCquJPjN5O2LQfOdPww4w1M0z0oOVcTi/1eNys+kCOsZs9ZOGZZkgnyJgLV plgg== X-Gm-Message-State: AOAM530HdH1KI3XCjfbCV+hhqtn4PRfwvA/FrAI/xCNyhM/0PJZtNFtY z0VdE+ph+e7gGSO7qdPYXAAoRA== X-Google-Smtp-Source: ABdhPJzubkBt7KoUK7d67Yx5Ymj6KZ2kx2SuQIBLIGpvkWH1Qdp6TBXYAsov4LOb3rpkHaVtrebGKg== X-Received: by 2002:adf:e0c3:: with SMTP id m3mr279545wri.216.1644855014909; Mon, 14 Feb 2022 08:10:14 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:14 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Jeya R , Srinivas Kandagatla Subject: [PATCH v4 06/12] misc: fastrpc: check before loading process to the DSP Date: Mon, 14 Feb 2022 16:09:56 +0000 Message-Id: <20220214161002.6831-7-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jeya R Reject session if DSP domain is secure, device node is non-secure and signed PD is requested. Secure device node can access DSP without any restriction. Unsigned PD offload is only allowed for the DSP domain that can support unsigned offloading. Signed-off-by: Jeya R Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 33 +++++++++++++++++++++++++++++++++ include/uapi/misc/fastrpc.h | 17 +++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index af8bb4bd0cb3..5329d69ecd38 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -244,6 +244,7 @@ struct fastrpc_channel_ctx { struct fastrpc_device *secure_fdevice; struct fastrpc_device *fdevice; bool secure; + bool unsigned_support; }; =20 struct fastrpc_device { @@ -264,6 +265,7 @@ struct fastrpc_user { =20 int tgid; int pd; + bool is_secure_dev; /* Lock for lists */ spinlock_t lock; /* lock for allocations */ @@ -1052,6 +1054,24 @@ static int fastrpc_internal_invoke(struct fastrpc_us= er *fl, u32 kernel, return err; } =20 +static bool is_session_rejected(struct fastrpc_user *fl, bool unsigned_pd_= request) +{ + /* Check if the device node is non-secure and channel is secure*/ + if (!fl->is_secure_dev && fl->cctx->secure) { + /* + * Allow untrusted applications to offload only to Unsigned PD when + * channel is configured as secure and block untrusted apps on channel + * that does not support unsigned PD offload + */ + if (!fl->cctx->unsigned_support || !unsigned_pd_request) { + dev_err(&fl->cctx->rpdev->dev, "Error: Untrusted application trying to = offload to signed PD"); + return true; + } + } + + return false; +} + static int fastrpc_init_create_process(struct fastrpc_user *fl, char __user *argp) { @@ -1071,6 +1091,7 @@ static int fastrpc_init_create_process(struct fastrpc= _user *fl, u32 siglen; } inbuf; u32 sc; + bool unsigned_module =3D false; =20 args =3D kcalloc(FASTRPC_CREATE_PROCESS_NARGS, sizeof(*args), GFP_KERNEL); if (!args) @@ -1081,6 +1102,14 @@ static int fastrpc_init_create_process(struct fastrp= c_user *fl, goto err; } =20 + if (init.attrs & FASTRPC_MODE_UNSIGNED_MODULE) + unsigned_module =3D true; + + if (is_session_rejected(fl, unsigned_module)) { + err =3D -ECONNREFUSED; + goto err; + } + if (init.filelen > INIT_FILELEN_MAX) { err =3D -EINVAL; goto err; @@ -1280,6 +1309,7 @@ static int fastrpc_device_open(struct inode *inode, s= truct file *filp) INIT_LIST_HEAD(&fl->user); fl->tgid =3D current->tgid; fl->cctx =3D cctx; + fl->is_secure_dev =3D fdevice->secure; =20 fl->sctx =3D fastrpc_session_alloc(cctx); if (!fl->sctx) { @@ -1951,11 +1981,14 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device = *rpdev) case ADSP_DOMAIN_ID: case MDSP_DOMAIN_ID: case SDSP_DOMAIN_ID: + /* Unsigned PD offloading is only supported on CDSP*/ + data->unsigned_support =3D false; err =3D fastrpc_device_register(rdev, data, secure_dsp, domains[domain_i= d]); if (err) goto fdev_error; break; case CDSP_DOMAIN_ID: + data->unsigned_support =3D true; /* Create both device nodes so that we can allow both Signed and Unsigne= d PD */ err =3D fastrpc_device_register(rdev, data, true, domains[domain_id]); if (err) diff --git a/include/uapi/misc/fastrpc.h b/include/uapi/misc/fastrpc.h index 7cc9d342078a..f39edac20305 100644 --- a/include/uapi/misc/fastrpc.h +++ b/include/uapi/misc/fastrpc.h @@ -46,6 +46,23 @@ enum fastrpc_map_flags { FASTRPC_MAP_MAX, }; =20 +enum fastrpc_proc_attr { + /* Macro for Debug attr */ + FASTRPC_MODE_DEBUG =3D (1 << 0), + /* Macro for Ptrace */ + FASTRPC_MODE_PTRACE =3D (1 << 1), + /* Macro for CRC Check */ + FASTRPC_MODE_CRC =3D (1 << 2), + /* Macro for Unsigned PD */ + FASTRPC_MODE_UNSIGNED_MODULE =3D (1 << 3), + /* Macro for Adaptive QoS */ + FASTRPC_MODE_ADAPTIVE_QOS =3D (1 << 4), + /* Macro for System Process */ + FASTRPC_MODE_SYSTEM_PROCESS =3D (1 << 5), + /* Macro for Prvileged Process */ + FASTRPC_MODE_PRIVILEGED =3D (1 << 6), +}; + struct fastrpc_invoke_args { __u64 ptr; __u64 length; --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 72C83C433F5 for ; Mon, 14 Feb 2022 16:10:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356240AbiBNQLA (ORCPT ); Mon, 14 Feb 2022 11:11:00 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356190AbiBNQK0 (ORCPT ); Mon, 14 Feb 2022 11:10:26 -0500 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D7D160D86 for ; Mon, 14 Feb 2022 08:10:17 -0800 (PST) Received: by mail-wr1-x429.google.com with SMTP id h6so27663683wrb.9 for ; Mon, 14 Feb 2022 08:10:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JY40me+cvEI+ZEwVsx9mxL0PQSUpWscJw7u6fHkuhDs=; b=AaWb3EXnFJJwL2tB8qsT5Esv4Am6bmqjQpmSxSu04umlOcmywi90ZilbwSqTqJDmQN OaTcel2iWBLo9lsuucGMqPy5SacvBr3kDQtKS4GyNZ1qlBBvMgz9MlWuZD9fv3WtpOwh /CdjMG+tEmtiy5bieQw2B9pVQ9Q4KtVVkbb96KA1iVdw0IaNfwdr0H10vcXxFeSx+32/ b9B1fuiLbtLSVnyBfjoxvygzRnOyMlzs/rqx/N0ame2He2o7YgPbM23/YhhDSmsERznQ a7Mcm1E7j2+a8W2vK1d17djZNJli023KOx6uNFaebv3iFVikpUF0kM8dVI4xkrFIZBpa YIpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JY40me+cvEI+ZEwVsx9mxL0PQSUpWscJw7u6fHkuhDs=; b=oGOGYEE4mdyJ0QTGOEoU8zwSLagW/js0SED0bw6yqxt79zEq2o/sSCptC2XnTNKD6g zlMS0Q947X0l7afArwve1e6MAJhVZaofJMt7OzKZFF80VWsKedghUADJ1U8W0cLa3VZp 13TThTYUIQhvqTREQeVt4uyrL6OsEcMudbLzfjyB05FFSwXoTHRtj0exp/bl3hq2WcmL VCquRzS2UQhIMJ1LBr9aSeUr2UhhSd+5W71fe4UEPB61re5HTzatKPEf6jPbqAPemKIn 5B4vGQbUtfYSXA7j3pSnyGjb+hHSEw8GboGzPn0ACST4MDm1nwdqT2LXzg9kbhrh9W9N CYMQ== X-Gm-Message-State: AOAM530hyLGOmf0amK8ezPZM99AQUg+hasOq9Rkizq2CvjG97lg3r51Z dOLQ8athLz2yqWDp3S2UFnTzxQ== X-Google-Smtp-Source: ABdhPJwe/E4mNaJBfa58EgO8WJ6izbNMYSP3r5UvZf9qn9blb5yzAxRjpNNufTXONkF8KQvFBS9CDQ== X-Received: by 2002:a5d:4dcc:: with SMTP id f12mr277291wru.598.1644855016240; Mon, 14 Feb 2022 08:10:16 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:15 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Vamsi Krishna Gattupalli , Srinivas Kandagatla , Rob Herring Subject: [PATCH v4 07/12] dt-bindings: misc: add fastrpc domain vmid property Date: Mon, 14 Feb 2022 16:09:57 +0000 Message-Id: <20220214161002.6831-8-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Vamsi Krishna Gattupalli Add fastrpc domain virtual machine IDs property. This property is used to setup memory protection for remote processor. Signed-off-by: Vamsi Krishna Gattupalli Signed-off-by: Srinivas Kandagatla Acked-by: Rob Herring --- Documentation/devicetree/bindings/misc/qcom,fastrpc.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/misc/qcom,fastrpc.txt b/Docu= mentation/devicetree/bindings/misc/qcom,fastrpc.txt index f9a01e2b4c96..5ec124b138a6 100644 --- a/Documentation/devicetree/bindings/misc/qcom,fastrpc.txt +++ b/Documentation/devicetree/bindings/misc/qcom,fastrpc.txt @@ -22,6 +22,11 @@ other tasks. Value type: Definition: Property to specify that dsp domain is non-secure. =20 +- qcom,vmids: + Usage: optional + Value type: + Definition: Virtual machine IDs for remote processor. + - #address-cells Usage: required Value type: --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE35BC433EF for ; Mon, 14 Feb 2022 16:10:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356285AbiBNQLD (ORCPT ); Mon, 14 Feb 2022 11:11:03 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356161AbiBNQK2 (ORCPT ); Mon, 14 Feb 2022 11:10:28 -0500 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43C4360AA7 for ; Mon, 14 Feb 2022 08:10:19 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id e3so27770740wra.0 for ; Mon, 14 Feb 2022 08:10:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9s/z+n4KaWgaeVcMwcxi+7rViKwYhtyikW3FoYPGfSA=; b=uUOmDYB6td1KbzRksk9ZevF3lw4x0Tss16WQRRN4ySyXeNkN3ePvfUXCbPgwMgAtSX DZQUHEfAenAjpRRTldgEnyAAfllPcn01ebJoQoJeJwHQQVtC2vfjzM4zu/viPjPt55hk p8NUvhQAerwFYlM0tDQRal3OH/wGxvuELHY6wstPhz3nvZ6Ag8EYOnkMujTrhtVQIkrY HGRIlpnxUHDlcaK4/wPZp02aMVZWegl9nKXAkBkGniQZdSVAnzFaqT1rBExhBG6NXx6i 9nssIrSgg0O7hlvChfMRCnF6VI+IIGK3mqBMs8CapkEs4xb3MIjnCRaD4IWdghuugD3L otcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9s/z+n4KaWgaeVcMwcxi+7rViKwYhtyikW3FoYPGfSA=; b=Q/A0J0HOTzz428GWbOkNRE5CcbvrBF3EU5r30BcyAVJZsKP7aU2qUvmuEmvwTl8DVu uPEjD7j3onBPLF9Cl3CbCnum+XOnY6Zd9TUxfW/tQLSrLxRiiJkLR24jy7+Jo1hrng/4 LrCktyIQZTcTaM7ZvsU2E9nEY0o9fyx1IRms0ii4uIJ7+kwA86kX+cAacsGOdQ/HRMzG uh6BoQmVvt/i4dcBEz6YWiWf2rF8hg6D/duNaa7aK+YR/qUqXaDZsH2DAgItNKtejloN hTyDAIwHMIRjnBFcYQZNsGvZ7O3+uWswH+mn+O9uIEQ8DPLbQu7TSJMjAWhQhjqYTfgt sqDQ== X-Gm-Message-State: AOAM5317U/UNtOdyCM4VSDtk/4OFeXP5in3sLFTxjXAcUgJ+2f+BbVwS mtJbVWGkYIqEwBVn83otV02L4w== X-Google-Smtp-Source: ABdhPJwGLpofrDLBscQigRPET/R+Ijt+AIrNzYJp/vUQEWhSY29nKc4lMGJH04Bv9emQomZVTL1CZQ== X-Received: by 2002:a05:6000:1c16:: with SMTP id ba22mr289607wrb.470.1644855017798; Mon, 14 Feb 2022 08:10:17 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:17 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Vamsi Krishna Gattupalli , Srinivas Kandagatla Subject: [PATCH v4 08/12] misc: fastrpc: Add support to secure memory map Date: Mon, 14 Feb 2022 16:09:58 +0000 Message-Id: <20220214161002.6831-9-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Vamsi Krishna Gattupalli This patch adds support to secure memory allocations for DSP. It repurposes the reserved field in struct fastrpc_invoke_args to add attributes to invoke request, for example to setup a secure memory map for dsp. Secure memory is assigned to DSP Virtual Machine IDs using Qualcomm SCM calls. Signed-off-by: Vamsi Krishna Gattupalli Signed-off-by: Srinivas Kandagatla --- drivers/misc/Kconfig | 1 + drivers/misc/fastrpc.c | 65 ++++++++++++++++++++++++++++++++----- include/uapi/misc/fastrpc.h | 5 ++- 3 files changed, 61 insertions(+), 10 deletions(-) diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index 0f5a49fc7c9e..974edd7ce40f 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -259,6 +259,7 @@ config QCOM_FASTRPC depends on ARCH_QCOM || COMPILE_TEST depends on RPMSG select DMA_SHARED_BUFFER + select QCOM_SCM help Provides a communication mechanism that allows for clients to make remote method invocations across processor boundary to diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 5329d69ecd38..eb1e6d111c77 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -17,6 +17,7 @@ #include #include #include +#include #include =20 #define ADSP_DOMAIN_ID (0) @@ -25,6 +26,7 @@ #define CDSP_DOMAIN_ID (3) #define FASTRPC_DEV_MAX 4 /* adsp, mdsp, slpi, cdsp*/ #define FASTRPC_MAX_SESSIONS 13 /*12 compute, 1 cpz*/ +#define FASTRPC_MAX_VMIDS 16 #define FASTRPC_ALIGN 128 #define FASTRPC_MAX_FDLIST 16 #define FASTRPC_MAX_CRCLIST 64 @@ -195,6 +197,7 @@ struct fastrpc_map { void *va; u64 len; u64 raddr; + u32 attr; struct kref refcount; }; =20 @@ -232,6 +235,9 @@ struct fastrpc_session_ctx { struct fastrpc_channel_ctx { int domain_id; int sesscount; + int vmcount; + u32 perms; + struct qcom_scm_vmperm vmperms[FASTRPC_MAX_VMIDS]; struct rpmsg_device *rpdev; struct fastrpc_session_ctx session[FASTRPC_MAX_SESSIONS]; spinlock_t lock; @@ -279,6 +285,20 @@ static void fastrpc_free_map(struct kref *ref) map =3D container_of(ref, struct fastrpc_map, refcount); =20 if (map->table) { + if (map->attr & FASTRPC_ATTR_SECUREMAP) { + struct qcom_scm_vmperm perm; + int err =3D 0; + + perm.vmid =3D QCOM_SCM_VMID_HLOS; + perm.perm =3D QCOM_SCM_PERM_RWX; + err =3D qcom_scm_assign_mem(map->phys, map->size, + &(map->fl->cctx->vmperms[0].vmid), &perm, 1); + if (err) { + dev_err(map->fl->sctx->dev, "Failed to assign memory phys 0x%llx size = 0x%llx err %d", + map->phys, map->size, err); + return; + } + } dma_buf_unmap_attachment(map->attach, map->table, DMA_BIDIRECTIONAL); dma_buf_detach(map->buf, map->attach); @@ -655,7 +675,7 @@ static const struct dma_buf_ops fastrpc_dma_buf_ops =3D= { }; =20 static int fastrpc_map_create(struct fastrpc_user *fl, int fd, - u64 len, struct fastrpc_map **ppmap) + u64 len, u32 attr, struct fastrpc_map **ppmap) { struct fastrpc_session_ctx *sess =3D fl->sctx; struct fastrpc_map *map =3D NULL; @@ -697,6 +717,22 @@ static int fastrpc_map_create(struct fastrpc_user *fl,= int fd, map->len =3D len; kref_init(&map->refcount); =20 + if (attr & FASTRPC_ATTR_SECUREMAP) { + /* + * If subsystem VMIDs are defined in DTSI, then do + * hyp_assign from HLOS to those VM(s) + */ + unsigned int perms =3D BIT(QCOM_SCM_VMID_HLOS); + + map->attr =3D attr; + err =3D qcom_scm_assign_mem(map->phys, (u64)map->size, &perms, + fl->cctx->vmperms, fl->cctx->vmcount); + if (err) { + dev_err(sess->dev, "Failed to assign memory with phys 0x%llx size 0x%ll= x err %d", + map->phys, map->size, err); + goto map_err; + } + } spin_lock(&fl->lock); list_add_tail(&map->node, &fl->maps); spin_unlock(&fl->lock); @@ -781,16 +817,13 @@ static int fastrpc_create_maps(struct fastrpc_invoke_= ctx *ctx) int i, err; =20 for (i =3D 0; i < ctx->nscalars; ++i) { - /* Make sure reserved field is set to 0 */ - if (ctx->args[i].reserved) - return -EINVAL; =20 if (ctx->args[i].fd =3D=3D 0 || ctx->args[i].fd =3D=3D -1 || ctx->args[i].length =3D=3D 0) continue; =20 err =3D fastrpc_map_create(ctx->fl, ctx->args[i].fd, - ctx->args[i].length, &ctx->maps[i]); + ctx->args[i].length, ctx->args[i].attr, &ctx->maps[i]); if (err) { dev_err(dev, "Error Creating map %d\n", err); return -EINVAL; @@ -1124,7 +1157,7 @@ static int fastrpc_init_create_process(struct fastrpc= _user *fl, fl->pd =3D USER_PD; =20 if (init.filelen && init.filefd) { - err =3D fastrpc_map_create(fl, init.filefd, init.filelen, &map); + err =3D fastrpc_map_create(fl, init.filefd, init.filelen, 0, &map); if (err) goto err; } @@ -1233,7 +1266,6 @@ static int fastrpc_release_current_dsp_process(struct= fastrpc_user *fl) args[0].ptr =3D (u64)(uintptr_t) &tgid; args[0].length =3D sizeof(tgid); args[0].fd =3D -1; - args[0].reserved =3D 0; sc =3D FASTRPC_SCALARS(FASTRPC_RMID_INIT_RELEASE, 1, 0); =20 return fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, @@ -1374,7 +1406,6 @@ static int fastrpc_init_attach(struct fastrpc_user *f= l, int pd) args[0].ptr =3D (u64)(uintptr_t) &tgid; args[0].length =3D sizeof(tgid); args[0].fd =3D -1; - args[0].reserved =3D 0; sc =3D FASTRPC_SCALARS(FASTRPC_RMID_INIT_ATTACH, 1, 0); fl->pd =3D pd; =20 @@ -1947,9 +1978,10 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device *= rpdev) { struct device *rdev =3D &rpdev->dev; struct fastrpc_channel_ctx *data; - int i, err, domain_id =3D -1; + int i, err, domain_id =3D -1, vmcount; const char *domain; bool secure_dsp; + unsigned int vmids[FASTRPC_MAX_VMIDS]; =20 err =3D of_property_read_string(rdev->of_node, "label", &domain); if (err) { @@ -1969,10 +2001,25 @@ static int fastrpc_rpmsg_probe(struct rpmsg_device = *rpdev) return -EINVAL; } =20 + vmcount =3D of_property_read_variable_u32_array(rdev->of_node, + "qcom,vmids", &vmids[0], 0, FASTRPC_MAX_VMIDS); + if (vmcount < 0) + vmcount =3D 0; + else if (!qcom_scm_is_available()) + return -EPROBE_DEFER; + data =3D kzalloc(sizeof(*data), GFP_KERNEL); if (!data) return -ENOMEM; =20 + if (vmcount) { + data->vmcount =3D vmcount; + data->perms =3D BIT(QCOM_SCM_VMID_HLOS); + for (i =3D 0; i < data->vmcount; i++) { + data->vmperms[i].vmid =3D vmids[i]; + data->vmperms[i].perm =3D QCOM_SCM_PERM_RWX; + } + } =20 secure_dsp =3D !(of_property_read_bool(rdev->of_node, "qcom,non-secure-do= main")); data->secure =3D secure_dsp; diff --git a/include/uapi/misc/fastrpc.h b/include/uapi/misc/fastrpc.h index f39edac20305..5e29f2cfa42d 100644 --- a/include/uapi/misc/fastrpc.h +++ b/include/uapi/misc/fastrpc.h @@ -63,11 +63,14 @@ enum fastrpc_proc_attr { FASTRPC_MODE_PRIVILEGED =3D (1 << 6), }; =20 +/* Fastrpc attribute for memory protection of buffers */ +#define FASTRPC_ATTR_SECUREMAP (1) + struct fastrpc_invoke_args { __u64 ptr; __u64 length; __s32 fd; - __u32 reserved; + __u32 attr; }; =20 struct fastrpc_invoke { --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0A6DBC433EF for ; Mon, 14 Feb 2022 16:11:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356218AbiBNQLG (ORCPT ); Mon, 14 Feb 2022 11:11:06 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53876 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356199AbiBNQK2 (ORCPT ); Mon, 14 Feb 2022 11:10:28 -0500 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 99FED60AB3 for ; Mon, 14 Feb 2022 08:10:20 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id w11so27684649wra.4 for ; Mon, 14 Feb 2022 08:10:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IUtpmLCf9yTc9kWokK2MlmVKVquFj/Legtc727MewIE=; b=btySNnlz0WTv3SxDvb6en4QwwHjfz27GoTaiu9YtS3uxm9ZHGIOM9AR+J8PnRBTTox 0Qz5ldjUG7ILquLzkZJQAphl3v2jYP4R5Tnx4Bv3UWkMqnOgPJ/KXyGEmMXKADNA286G V0VYFnm3TM5Pz69zuVM443jJDh92pTsv1l35xhIf3ibXHmI8QtDcYkQwHRLcuw1x1XsI V484M0NSsH+wwYJo71DDd1KdEFG0JawGAINeYhgVtenlJTt+mHQDDgPz/wc9i3iZcVlz X9BZZzFvr0gx1pUAhMNXRlwLElg2OiC1Ocirge7zw0cVh1iouKR2naDEzIGNh1iCG05F mmdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IUtpmLCf9yTc9kWokK2MlmVKVquFj/Legtc727MewIE=; b=0LmM2JReGU0j1FtgyzralyWe+JT8/Tal9OUWf81Fns9Zk7QLHAi9PbwtHXxLpVT5um HCFhxMwSfBkMN6TN6rxwUeGDMHFSISOeRr1BmCYZ8/24LieViX1bCgCs5WBpeN6EZmpd PAoff9J7wx6zGDE/YcMFGEt6YyeaZg5PqHaHLjDFfN6ur4gZlwQalCNx8Tb8LRq6uGis AgxvZLMeFc+rQn3+I9x29cMRo7npewllBueyVrvrPsy/YhunLHIt9HBPrG8f52nO0cfj dRtwL8pv1L6SVzxOhCQOo3CuG4kmSGNv1hRzzN2uGYcNzWYFmvWlKYRYIDv7LE0gf42H pxPQ== X-Gm-Message-State: AOAM530tzgWMtrxcoRKZOUON646DanTvULJ0OXhaBXR4DGbe9iNTaccR k9PPzfFCWlsNdVoe+0M0VngLMQ== X-Google-Smtp-Source: ABdhPJxD9AKOFD2a5c5WIs6al1TF5dEEfngUAFPQo51nQmlCFG0MXUIfA3JITED7CRvF8qx3PLNGhQ== X-Received: by 2002:a5d:5850:: with SMTP id i16mr297819wrf.64.1644855019003; Mon, 14 Feb 2022 08:10:19 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:18 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Vamsi Krishna Gattupalli , Srinivas Kandagatla Subject: [PATCH v4 09/12] misc: fastrpc: Add helper function to get list and page Date: Mon, 14 Feb 2022 16:09:59 +0000 Message-Id: <20220214161002.6831-10-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Vamsi Krishna Gattupalli Add helper functions to get invoke buffer and page start pointers. Signed-off-by: Vamsi Krishna Gattupalli Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index eb1e6d111c77..1cec85e8eaa1 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -833,6 +833,16 @@ static int fastrpc_create_maps(struct fastrpc_invoke_c= tx *ctx) return 0; } =20 +static struct fastrpc_invoke_buf *fastrpc_invoke_buf_start(union fastrpc_r= emote_arg *pra, int len) +{ + return (struct fastrpc_invoke_buf *)(&pra[len]); +} + +static struct fastrpc_phy_page *fastrpc_phy_page_start(struct fastrpc_invo= ke_buf *buf, int len) +{ + return (struct fastrpc_phy_page *)(&buf[len]); +} + static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) { struct device *dev =3D ctx->fl->sctx->dev; @@ -860,9 +870,8 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_= invoke_ctx *ctx) return err; =20 rpra =3D ctx->buf->virt; - list =3D ctx->buf->virt + ctx->nscalars * sizeof(*rpra); - pages =3D ctx->buf->virt + ctx->nscalars * (sizeof(*list) + - sizeof(*rpra)); + list =3D fastrpc_invoke_buf_start(rpra, ctx->nscalars); + pages =3D fastrpc_phy_page_start(list, ctx->nscalars); args =3D (uintptr_t)ctx->buf->virt + metalen; rlen =3D pkt_size - metalen; ctx->rpra =3D rpra; --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98B6FC433EF for ; Mon, 14 Feb 2022 16:11:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238630AbiBNQLL (ORCPT ); Mon, 14 Feb 2022 11:11:11 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53902 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356204AbiBNQK3 (ORCPT ); Mon, 14 Feb 2022 11:10:29 -0500 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B205460AB9 for ; Mon, 14 Feb 2022 08:10:21 -0800 (PST) Received: by mail-wr1-x42a.google.com with SMTP id u1so13932585wrg.11 for ; Mon, 14 Feb 2022 08:10:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=M82hp5dMIuVJWpsA3lI9MajB5cFJCHZXKFYo8aoIZPc=; b=QOkRwYBVwyu9l/gZ/H5snUJmSmCWo0z7XHye6aQ05FOTFKCBkJCHH58uIAlFJaE4Xw N8MXYCnIg8cRHBSQjNE/N0XvXZEg8jOL1k+ebC/jU2tVejys3zghu0JQBIUMcCMqbgoF cJpyy7gcNrWgKndMKwNr46UmdwAUJ8jfyPnnj8i4ORX2DP9Fp8CHBVVHmXxBcTE3fXvx q988fhHMfVQ8mM8B8z7ekCD+Sb6yfC5e5FFRpanBWLhBNZ6OJ16K6peN2Fipj+lgx8ZU ShdW2LnQRUl5yLGXB+gI7Gc4JekFSt7zbupBgPLQIRyN5clHCxuxIp10OuJODNmb3PP/ F1Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=M82hp5dMIuVJWpsA3lI9MajB5cFJCHZXKFYo8aoIZPc=; b=v0RfntbK1tGxJyemQFcpuKUdBETxDKqdrGfQukEnSXMT3ifBzN3gepQCxwx071Bgdu Bs3aSAF4KRyHXBI9OZkqx5ZQCX7DEDRCLxocF1baM0CdmlY7CcIJOHO9+QvwW0Nth16z mLbLYTIKrbBdee4oyJsAXqtTzLkx4C8AEmotlnZ2yOAZcAQ8V5ms18PDZGV3RdAWGWbs HUEPdbVh4JT/qdCc0uPJNRgvqxv599jZibvKzCgDdcZhet9CYfEvCRvMcUlHafQg4JKV KGfR+wAj8oLKOOVoNvJFujtNUhB5E3aHIto34dnyDGbyvGcXAt4dCBQimMUCo0f5mFY1 mn1g== X-Gm-Message-State: AOAM530Bzz92NuF5QkMlVN49xPwe6LyrZmL3Sb7ALaY6au2jeb4vCw6Y LHEFoJcjpO77NZDNBjR5zP3g1g== X-Google-Smtp-Source: ABdhPJzHJ1jdDAasQpYs0LV9TlB3ejc3g9ifEHzXBXVgT1lxV6Hlxm4GG71aJwuwJlRINhkW3wRCqg== X-Received: by 2002:adf:e708:: with SMTP id c8mr253233wrm.653.1644855020189; Mon, 14 Feb 2022 08:10:20 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:19 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Vamsi Krishna Gattupalli , Srinivas Kandagatla Subject: [PATCH v4 10/12] misc: fastrpc: Add fdlist implementation Date: Mon, 14 Feb 2022 16:10:00 +0000 Message-Id: <20220214161002.6831-11-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Vamsi Krishna Gattupalli Add fdlist implementation to support dma handles. fdlist is populated by DSP if any map is no longer used and it is freed during put_args. Signed-off-by: Vamsi Krishna Gattupalli Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 1cec85e8eaa1..5015b4e7ec09 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -320,7 +320,8 @@ static void fastrpc_map_get(struct fastrpc_map *map) kref_get(&map->refcount); } =20 -static int fastrpc_map_find(struct fastrpc_user *fl, int fd, + +static int fastrpc_map_lookup(struct fastrpc_user *fl, int fd, struct fastrpc_map **ppmap) { struct fastrpc_map *map =3D NULL; @@ -328,7 +329,6 @@ static int fastrpc_map_find(struct fastrpc_user *fl, in= t fd, mutex_lock(&fl->mutex); list_for_each_entry(map, &fl->maps, node) { if (map->fd =3D=3D fd) { - fastrpc_map_get(map); *ppmap =3D map; mutex_unlock(&fl->mutex); return 0; @@ -339,6 +339,17 @@ static int fastrpc_map_find(struct fastrpc_user *fl, i= nt fd, return -ENOENT; } =20 +static int fastrpc_map_find(struct fastrpc_user *fl, int fd, + struct fastrpc_map **ppmap) +{ + int ret =3D fastrpc_map_lookup(fl, fd, ppmap); + + if (!ret) + fastrpc_map_get(*ppmap); + + return ret; +} + static void fastrpc_buf_free(struct fastrpc_buf *buf) { dma_free_coherent(buf->dev, buf->size, buf->virt, @@ -411,7 +422,7 @@ static void fastrpc_context_free(struct kref *ref) ctx =3D container_of(ref, struct fastrpc_invoke_ctx, refcount); cctx =3D ctx->cctx; =20 - for (i =3D 0; i < ctx->nscalars; i++) + for (i =3D 0; i < ctx->nbufs; i++) fastrpc_map_put(ctx->maps[i]); =20 if (ctx->buf) @@ -969,9 +980,19 @@ static int fastrpc_put_args(struct fastrpc_invoke_ctx = *ctx, u32 kernel) { struct fastrpc_remote_arg *rpra =3D ctx->rpra; - int i, inbufs; + struct fastrpc_user *fl =3D ctx->fl; + struct fastrpc_map *mmap =3D NULL; + struct fastrpc_invoke_buf *list; + struct fastrpc_phy_page *pages; + u64 *fdlist; + int i, inbufs, outbufs, handles; =20 inbufs =3D REMOTE_SCALARS_INBUFS(ctx->sc); + outbufs =3D REMOTE_SCALARS_OUTBUFS(ctx->sc); + handles =3D REMOTE_SCALARS_INHANDLES(ctx->sc) + REMOTE_SCALARS_OUTHANDLES= (ctx->sc); + list =3D fastrpc_invoke_buf_start(rpra, ctx->nscalars); + pages =3D fastrpc_phy_page_start(list, ctx->nscalars); + fdlist =3D (uint64_t *)(pages + inbufs + outbufs + handles); =20 for (i =3D inbufs; i < ctx->nbufs; ++i) { if (!ctx->maps[i]) { @@ -988,6 +1009,13 @@ static int fastrpc_put_args(struct fastrpc_invoke_ctx= *ctx, } } =20 + for (i =3D 0; i < FASTRPC_MAX_FDLIST; i++) { + if (!fdlist[i]) + break; + if (!fastrpc_map_lookup(fl, (int)fdlist[i], &mmap)) + fastrpc_map_put(mmap); + } + return 0; } =20 --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F135CC433EF for ; Mon, 14 Feb 2022 16:11:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356301AbiBNQLJ (ORCPT ); Mon, 14 Feb 2022 11:11:09 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:54028 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356181AbiBNQKh (ORCPT ); Mon, 14 Feb 2022 11:10:37 -0500 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA69560D90 for ; Mon, 14 Feb 2022 08:10:22 -0800 (PST) Received: by mail-wr1-x42c.google.com with SMTP id o24so25024449wro.3 for ; Mon, 14 Feb 2022 08:10:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9Umt8mADdTzTAerDjq8HFB3usyBYQbeaKKGd2pCtpBM=; b=MNEmXPLm3MmB4Alzm6tcgkQHCmWZsodALgDTx87ArlT3mHPyHzQ+W5diMgmWLoNeZM OGF34ahi4RPlhz1RsnErExVdgB1G1FlvSlLWhUKNd6M1xQWlepP4Z2+xubL6qIXP0eDv G2ELl3s5d3PbzuG89MC9h+gapPycrSo/yu+SW+oFt7QWi967U3+6NJOJtyja5KnPvbTB FkX44YDq3BpBNrfVIQsDKWwMwbPgpsVTuMK8rvAw4VxxdY35E08Jc0/wZJna4+KKMpYS 3eXaHfAa4DAjPsDUEdr+n7CiL+hn+KSFtjW/pch+CUI5G8C6Q4IzXO6nsqk+nv9pyRBR 8gZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9Umt8mADdTzTAerDjq8HFB3usyBYQbeaKKGd2pCtpBM=; b=B/Ysvg6+uflWCquHsXEfJ+mys8SgAI1f9fmemIb6oiZW9PsA6ubjZo8mI5GgEBobfj q7TNwncSjX2U0n3oUkCyRFLlOje4/zLgkRVR1myQJWxXFvxsNgRvr22tjvLcMhem7Ffr DkOlqVdXx51+MH+79nbbVdylmOus81kjVYTIZz6hqJxsEHYQy+gpgwZ08wkwvMiKA3WL EXIHmmJgeu8onCpsvtvpKhmfx3ifq4kzdELROZ8rMfBsiFAGkMVUbXUh468GghFdxyww oGUFjByOLWrSa09i55emw6YR+oqp0wt3ZjCodmua7Q7YS3yKJWE9/YlNoOG9XkmqApAA Yj7w== X-Gm-Message-State: AOAM532H7t9JLd2YKKlFTegmC/p6T49CYqd3squmR7at/U4bvP9paybd FHsC2dzykLFLfi4Yy3nlE2As2A== X-Google-Smtp-Source: ABdhPJyXBCJuYo8GvxLKdZTLa9HJIqd9ZCs4n19vkKWllC0oHrPY1pNYPuUYwSzGrtUkYT5oRhuAew== X-Received: by 2002:adf:ed8e:: with SMTP id c14mr271622wro.688.1644855021386; Mon, 14 Feb 2022 08:10:21 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:20 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Vamsi Krishna Gattupalli , Srinivas Kandagatla Subject: [PATCH v4 11/12] misc: fastrpc: Add dma handle implementation Date: Mon, 14 Feb 2022 16:10:01 +0000 Message-Id: <20220214161002.6831-12-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Vamsi Krishna Gattupalli The remote arguments carry both remote buffers and dma handles. Add proper dma handle instructions to make it compatible with DSP implementation. Signed-off-by: Vamsi Krishna Gattupalli Signed-off-by: Srinivas Kandagatla --- drivers/misc/fastrpc.c | 52 +++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 5015b4e7ec09..ad9148d8644f 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -101,9 +101,20 @@ struct fastrpc_invoke_buf { u32 pgidx; /* index to start of contiguous region */ }; =20 -struct fastrpc_remote_arg { - u64 pv; - u64 len; +struct fastrpc_remote_dmahandle { + s32 fd; /* dma handle fd */ + u32 offset; /* dma handle offset */ + u32 len; /* dma handle length */ +}; + +struct fastrpc_remote_buf { + u64 pv; /* buffer pointer */ + u64 len; /* length of buffer */ +}; + +union fastrpc_remote_arg { + struct fastrpc_remote_buf buf; + struct fastrpc_remote_dmahandle dma; }; =20 struct fastrpc_mmap_rsp_msg { @@ -217,7 +228,7 @@ struct fastrpc_invoke_ctx { struct work_struct put_work; struct fastrpc_msg msg; struct fastrpc_user *fl; - struct fastrpc_remote_arg *rpra; + union fastrpc_remote_arg *rpra; struct fastrpc_map **maps; struct fastrpc_buf *buf; struct fastrpc_invoke_args *args; @@ -767,7 +778,7 @@ static int fastrpc_map_create(struct fastrpc_user *fl, = int fd, * >>>>>> START of METADATA <<<<<<<<< * +---------------------------------+ * | Arguments | - * | type:(struct fastrpc_remote_arg)| + * | type:(union fastrpc_remote_arg)| * | (0 - N) | * +---------------------------------+ * | Invoke Buffer list | @@ -792,7 +803,7 @@ static int fastrpc_get_meta_size(struct fastrpc_invoke_= ctx *ctx) { int size =3D 0; =20 - size =3D (sizeof(struct fastrpc_remote_arg) + + size =3D (sizeof(struct fastrpc_remote_buf) + sizeof(struct fastrpc_invoke_buf) + sizeof(struct fastrpc_phy_page)) * ctx->nscalars + sizeof(u64) * FASTRPC_MAX_FDLIST + @@ -857,7 +868,7 @@ static struct fastrpc_phy_page *fastrpc_phy_page_start(= struct fastrpc_invoke_buf static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx) { struct device *dev =3D ctx->fl->sctx->dev; - struct fastrpc_remote_arg *rpra; + union fastrpc_remote_arg *rpra; struct fastrpc_invoke_buf *list; struct fastrpc_phy_page *pages; int inbufs, i, oix, err =3D 0; @@ -893,8 +904,8 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_= invoke_ctx *ctx) i =3D ctx->olaps[oix].raix; len =3D ctx->args[i].length; =20 - rpra[i].pv =3D 0; - rpra[i].len =3D len; + rpra[i].buf.pv =3D 0; + rpra[i].buf.len =3D len; list[i].num =3D len ? 1 : 0; list[i].pgidx =3D i; =20 @@ -904,7 +915,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_= invoke_ctx *ctx) if (ctx->maps[i]) { struct vm_area_struct *vma =3D NULL; =20 - rpra[i].pv =3D (u64) ctx->args[i].ptr; + rpra[i].buf.pv =3D (u64) ctx->args[i].ptr; pages[i].addr =3D ctx->maps[i]->phys; =20 mmap_read_lock(current->mm); @@ -931,7 +942,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_= invoke_ctx *ctx) if (rlen < mlen) goto bail; =20 - rpra[i].pv =3D args - ctx->olaps[oix].offset; + rpra[i].buf.pv =3D args - ctx->olaps[oix].offset; pages[i].addr =3D ctx->buf->phys - ctx->olaps[oix].offset + (pkt_size - rlen); @@ -945,7 +956,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_= invoke_ctx *ctx) } =20 if (i < inbufs && !ctx->maps[i]) { - void *dst =3D (void *)(uintptr_t)rpra[i].pv; + void *dst =3D (void *)(uintptr_t)rpra[i].buf.pv; void *src =3D (void *)(uintptr_t)ctx->args[i].ptr; =20 if (!kernel) { @@ -961,12 +972,15 @@ static int fastrpc_get_args(u32 kernel, struct fastrp= c_invoke_ctx *ctx) } =20 for (i =3D ctx->nbufs; i < ctx->nscalars; ++i) { - rpra[i].pv =3D (u64) ctx->args[i].ptr; - rpra[i].len =3D ctx->args[i].length; list[i].num =3D ctx->args[i].length ? 1 : 0; list[i].pgidx =3D i; - pages[i].addr =3D ctx->maps[i]->phys; - pages[i].size =3D ctx->maps[i]->size; + if (ctx->maps[i]) { + pages[i].addr =3D ctx->maps[i]->phys; + pages[i].size =3D ctx->maps[i]->size; + } + rpra[i].dma.fd =3D ctx->args[i].fd; + rpra[i].dma.len =3D ctx->args[i].length; + rpra[i].dma.offset =3D (u64) ctx->args[i].ptr; } =20 bail: @@ -979,7 +993,7 @@ static int fastrpc_get_args(u32 kernel, struct fastrpc_= invoke_ctx *ctx) static int fastrpc_put_args(struct fastrpc_invoke_ctx *ctx, u32 kernel) { - struct fastrpc_remote_arg *rpra =3D ctx->rpra; + union fastrpc_remote_arg *rpra =3D ctx->rpra; struct fastrpc_user *fl =3D ctx->fl; struct fastrpc_map *mmap =3D NULL; struct fastrpc_invoke_buf *list; @@ -996,9 +1010,9 @@ static int fastrpc_put_args(struct fastrpc_invoke_ctx = *ctx, =20 for (i =3D inbufs; i < ctx->nbufs; ++i) { if (!ctx->maps[i]) { - void *src =3D (void *)(uintptr_t)rpra[i].pv; + void *src =3D (void *)(uintptr_t)rpra[i].buf.pv; void *dst =3D (void *)(uintptr_t)ctx->args[i].ptr; - u64 len =3D rpra[i].len; + u64 len =3D rpra[i].buf.len; =20 if (!kernel) { if (copy_to_user((void __user *)dst, src, len)) --=20 2.21.0 From nobody Mon Jun 29 07:31:04 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 82D88C433EF for ; Mon, 14 Feb 2022 16:11:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1356334AbiBNQLp (ORCPT ); Mon, 14 Feb 2022 11:11:45 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:53740 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356188AbiBNQKj (ORCPT ); Mon, 14 Feb 2022 11:10:39 -0500 Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 006D060D99 for ; Mon, 14 Feb 2022 08:10:23 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id e3so27771143wra.0 for ; Mon, 14 Feb 2022 08:10:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BnDmn/bGiXHzA/HR2vbnCnaA9xu9dPUN92kb7gNI0E8=; b=fhjDpQtldi51DoRrxcjQ4QySV3xYa4dsWTGNWasn8tE0fuqrmf4455PekHoGnbh8RA WeYNa1sLTEAXVDjHPs6FCcCGMW/ddc+XtlyOxsiergq5Sj365kJaJPXOFIR+K1HFhiZw LpH/Y64V3JSBZOBKnClGh1LEqEaPNrR4mNuuVV2sKkYH/k+H1Ju6IMkKiVDL33FpVBzs kI1sHKCRfns2dKeyKs0M4qOYbE0yP1cqZsyH4CByyUBLh+IFYXVDHc2Ho8MerthnhOZ+ uzPIG68U6Bgd+YTs7aISfXUtIKfE5d10L7Xh0AvUPnvZR5Qx66cj5RJ1eddpzIzC4dvh MZDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BnDmn/bGiXHzA/HR2vbnCnaA9xu9dPUN92kb7gNI0E8=; b=a3DJMf6FWUW26+Rxg0h6sMP+1qy3dPlbsSoEv6diasxwTk8aPHeFDQALXZsyrioHpM PUbDMfVSZ8HU+mm7Va4dobosGsCauqv9bpU4Z7YnmibcPgWM0JzD7GB1VAOe2HkbHyNr AX0p8/QRASIJtEg2puPzMDmo5CmUgOkUVz0qHsSZIR0m3oiplDNz4JASuyETliSNCA+i hvuyrIDykY8inO+Wh9bO+m4GBa1Ip3mfRgkpjkazDSdyhDyjpjUV2hznnWq34qQ69lIh NY4AQKEvosZalpllQolVWFYhg6W+YBfASSqmQx1ebhn1Y3fBtNmj4YUfLSW/cvX7hQBw 2vBA== X-Gm-Message-State: AOAM533CwVBvdPa30b70P68OPDyb8HnVJ84pJyYa4EnOxyP0X8eRpg0g z4vO+xtp1rRgZjSCRPF95TnuEQ== X-Google-Smtp-Source: ABdhPJyvVNBAhdJFt9bEImTAf3pCwZ2mTB73doCzcfrhpO5RxC/wz5x0irX8twik5gNfsvHgH4rVdw== X-Received: by 2002:a05:6000:1847:: with SMTP id c7mr273776wri.103.1644855022517; Mon, 14 Feb 2022 08:10:22 -0800 (PST) Received: from srini-hackbox.lan (cpc90716-aztw32-2-0-cust825.18-1.cable.virginm.net. [86.26.103.58]) by smtp.gmail.com with ESMTPSA id k28sm13677022wms.23.2022.02.14.08.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 08:10:22 -0800 (PST) From: Srinivas Kandagatla To: robh+dt@kernel.org, gregkh@linuxfoundation.org Cc: devicetree@vger.kernel.org, ekangupt@qti.qualcomm.com, bkumar@qti.qualcomm.com, linux-kernel@vger.kernel.org, srini@kernel.org, bjorn.andersson@linaro.org, linux-arm-msm@vger.kernel.org, Jeya R , Srinivas Kandagatla Subject: [PATCH v4 12/12] arm64: dts: qcom: add non-secure domain property to fastrpc nodes Date: Mon, 14 Feb 2022 16:10:02 +0000 Message-Id: <20220214161002.6831-13-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> References: <20220214161002.6831-1-srinivas.kandagatla@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jeya R FastRPC DSP domain would be set as secure if non-secure dsp property is not added to the fastrpc DT node. Add this property to DT files of msm8916, sdm845, sm8150, sm8250 and sm8350 so that nothing is broken after secure domain patchset. This patch is purely for backward compatibility reasons. Signed-off-by: Jeya R Signed-off-by: Srinivas Kandagatla --- arch/arm64/boot/dts/qcom/msm8916.dtsi | 1 + arch/arm64/boot/dts/qcom/sdm845.dtsi | 2 ++ arch/arm64/boot/dts/qcom/sm8150.dtsi | 3 +++ arch/arm64/boot/dts/qcom/sm8250.dtsi | 3 +++ arch/arm64/boot/dts/qcom/sm8350.dtsi | 3 +++ 5 files changed, 12 insertions(+) diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qc= om/msm8916.dtsi index 41897eb3736a..a1543012c4fa 100644 --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi @@ -1370,6 +1370,7 @@ compatible =3D "qcom,fastrpc"; qcom,smd-channels =3D "fastrpcsmd-apps-dsp"; label =3D "adsp"; + qcom,non-secure-domain; =20 #address-cells =3D <1>; #size-cells =3D <0>; diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qco= m/sdm845.dtsi index cfdeaa81f1bb..c9d613063966 100644 --- a/arch/arm64/boot/dts/qcom/sdm845.dtsi +++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi @@ -838,6 +838,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "adsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -888,6 +889,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "cdsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 diff --git a/arch/arm64/boot/dts/qcom/sm8150.dtsi b/arch/arm64/boot/dts/qco= m/sm8150.dtsi index 9255982adb69..637c6a6d4054 100644 --- a/arch/arm64/boot/dts/qcom/sm8150.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8150.dtsi @@ -1755,6 +1755,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "sdsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -2997,6 +2998,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "cdsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -3442,6 +3444,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "adsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 diff --git a/arch/arm64/boot/dts/qcom/sm8250.dtsi b/arch/arm64/boot/dts/qco= m/sm8250.dtsi index c97ea638f6aa..3be4e630c2fe 100644 --- a/arch/arm64/boot/dts/qcom/sm8250.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8250.dtsi @@ -2594,6 +2594,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "sdsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -2659,6 +2660,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "cdsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -4429,6 +4431,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "adsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 diff --git a/arch/arm64/boot/dts/qcom/sm8350.dtsi b/arch/arm64/boot/dts/qco= m/sm8350.dtsi index 53b39e718fb6..a9a11c747a3a 100644 --- a/arch/arm64/boot/dts/qcom/sm8350.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8350.dtsi @@ -1996,6 +1996,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "sdsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -2065,6 +2066,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "cdsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 @@ -2367,6 +2369,7 @@ compatible =3D "qcom,fastrpc"; qcom,glink-channels =3D "fastrpcglink-apps-dsp"; label =3D "adsp"; + qcom,non-secure-domain; #address-cells =3D <1>; #size-cells =3D <0>; =20 --=20 2.21.0