From nobody Tue Jun 30 03:38:55 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 B1650C2BA4C for ; Wed, 26 Jan 2022 13:54:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241715AbiAZNya (ORCPT ); Wed, 26 Jan 2022 08:54:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50378 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235064AbiAZNy2 (ORCPT ); Wed, 26 Jan 2022 08:54:28 -0500 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B648EC06161C for ; Wed, 26 Jan 2022 05:54:27 -0800 (PST) Received: by mail-wr1-x430.google.com with SMTP id h21so8379969wrb.8 for ; Wed, 26 Jan 2022 05:54:27 -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=+o1EYrbz9tbcgwTH7lcJ3cHrRAzNh8NMyrOZAAp4l10=; b=tRXAd/j13i+dXARq2MRwK3EMKZk8klntInyjmxhB3XtbOgW99xqG2GgwS46dQPdl4Z eNGy2x71L6xH7BpuvQxL0Ka4NXQxzpxfpyIPklYHhZtxndDj+CBHOD74t7PMQzYz+pv+ KqHzqxQF6bPunY1srpJbB+s7prfkMFI6dxYRNkuJnZws56xZd3VWPoTssALXR/CeqvvQ xY7bVY+FBFIJxmnDNNUPgKwmh8myUfF2cFM+XvbZeYAVQ25WLH2n0NNB0umFzFGp0smc YU13GZfjCgUeqUHUTDDPpzwVpbQLqgrtu279W82TwxQeghw+UCUDcqaAq8f6QtkmDHd/ lyuQ== 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=+o1EYrbz9tbcgwTH7lcJ3cHrRAzNh8NMyrOZAAp4l10=; b=xkdgCCwHq16O0YFP+YRo6TzAhwv67UCQ1ZE/HHm11De9RAuBuXIuHru2oU36K7Qz22 RvkoyfHe23qSRfgd9Ag446Eoc7E+IJuVRc+iBLsuT6cJrfpSmJ1eR51UQ1ZLY97zNFft uSKbexJYMsdVrkrXvT/fbgRxX+0LlDJJSo3V2qDrDXrZnRouXnaSGeCPTYMZX9shqr0C IJncH49NSGI33BYQd5YStNKOp2F5iamYl0vZkTbs+OheKu7HV0DUqhbn1fH/RVzKeQD2 bmw6PPtgH091DgbUvJ+w6S5F5NPtKL/ccdETQi4bmZM4+4lDkRN7O2HuYyLdTF6obame NkeQ== X-Gm-Message-State: AOAM533BI23RbYPt1Ghjm9WLelvE4X4cK29Fk19VYky3GAIJ8P7lfBZT U8B6A8QvCcRLGcW/0hoaMXaJlQ== X-Google-Smtp-Source: ABdhPJyT8lccT5fDH9Ddgssxd9Vk5ZVxmpZnc5ZYpXa+2hWrGwHZgsZl3MCFPr4864YSx4GA57T4fw== X-Received: by 2002:a5d:6682:: with SMTP id l2mr22930974wru.409.1643205266280; Wed, 26 Jan 2022 05:54:26 -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 n15sm3356593wmr.26.2022.01.26.05.54.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:25 -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 v3 01/12] misc: fastrpc: separate fastrpc device from channel context Date: Wed, 26 Jan 2022 13:52:53 +0000 Message-Id: <20220126135304.16340-2-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 Reported-by: Dan Carpenter Reported-by: kernel test robot --- drivers/misc/fastrpc.c | 48 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 4ccbf43e6bfa..00cf0dbb6084 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 =3D NULL; + struct fastrpc_device *fdevice =3D NULL; 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,29 @@ 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) + kfree(fdev); + else + cctx->fdevice =3D fdev; + + return err; +} + static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev) { struct device *rdev =3D &rpdev->dev; @@ -1637,11 +1669,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 +1709,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 Tue Jun 30 03:38:55 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 A92BBC636C9 for ; Wed, 26 Jan 2022 13:54:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241714AbiAZNyb (ORCPT ); Wed, 26 Jan 2022 08:54:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241711AbiAZNya (ORCPT ); Wed, 26 Jan 2022 08:54:30 -0500 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1CCBFC06173B for ; Wed, 26 Jan 2022 05:54:29 -0800 (PST) Received: by mail-wr1-x42f.google.com with SMTP id u15so25948266wrt.3 for ; Wed, 26 Jan 2022 05:54:29 -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=2nHbX811lMqCMZbOayjjOG8Q/MWBZlI4FzSsfMzFNz4=; b=dE6toEKyUpNhNx2GMJajrpP4sFJ2uzAsadxvUXDsVzcFnQcy6AOVvcCLyMdrlm2pIs he+9Pz56wlteeJHPaR4Mrzy/aCV96Wid9v+YXICKrvk4qUSOfB6Jh6rG9/3q/lHmHdrx EpLgbqlIVpU8OdcoSi5tzTGek3S0Q3Z7dDkT8VybWvmXYOM+i7lwQifGxT/aI5OziQJA zp5QirX7PPeyR8VsmfHnoh0IAP4XRWWxLjsqcOIA/hMil9qLK1VtCUG9cZXBkpTxBZQF pHurfy/cRU4HYi0SfnoCVg5HuwgCjCi9prqgSmPp+Jaumd8YdmVCoP5Vjn89YiHndvG9 lS+A== 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=2nHbX811lMqCMZbOayjjOG8Q/MWBZlI4FzSsfMzFNz4=; b=i4ZyYkzK4O1ZLFriPIC9Xnr2qdY3sasdxC5bdnP9MX383UzY0PYdSNP23LvonHgeJh eas8qLephZwevA+stJ4wWhE64jdVjoeScHsCjWDFHyozWl4cLhOttjrVp5/EOHT+CUPP XX0b1Xdf1BC7Grci8qOkMN6QJ/AX3qvZwJbYr9hz5VF8VanWT1VaCXtv+FZGnH25sZQx /qk693PkGEjSbvJA3SKzk/9IVgMBBYapTQzT8IgdmGRVqWWjAE+wg2mA5kaTs4dKLVGn AMCM7q653JrQofQ99Ia+iNR6A8A5/Jx8MAjXVrvmLXW+nVpfQ8/26tyXHsOVplbOfxPE mIwA== X-Gm-Message-State: AOAM532IeAMWNLqKQizrETmk9QotcAdYlet9yRzjN1YTscnZE8Ea1bQT iaj73r2JZxyHb46zMxvUSWDAsw== X-Google-Smtp-Source: ABdhPJzZZRXAfWMD6uuwEqMmbB9kx1qNb+w12mQxFH/gVjNAsjsbCeN5N+mSwK+oOHRHfWYbhPM+MQ== X-Received: by 2002:adf:cd8f:: with SMTP id q15mr23280729wrj.118.1643205267623; Wed, 26 Jan 2022 05:54:27 -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 n15sm3356593wmr.26.2022.01.26.05.54.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:27 -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 v3 02/12] misc: fastrpc: add support for FASTRPC_IOCTL_MEM_MAP/UNMAP Date: Wed, 26 Jan 2022 13:52:54 +0000 Message-Id: <20220126135304.16340-3-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 | 155 ++++++++++++++++++++++++++++++++++++ include/uapi/misc/fastrpc.h | 51 ++++++++++++ 2 files changed, 206 insertions(+) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 00cf0dbb6084..a840b8dabf0e 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,135 @@ 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) &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 *) 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) &req_msg; + args[0].length =3D sizeof(req_msg); + + pages.addr =3D map->phys; + pages.size =3D map->size; + + args[1].ptr =3D (u64) &pages; + args[1].length =3D sizeof(pages); + + args[2].ptr =3D (u64) &pages; + args[2].length =3D 0; + + args[3].ptr =3D (u64) &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: + if (map) + fastrpc_map_put(map); + + return err; +} + static long fastrpc_device_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -1522,6 +1671,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 Tue Jun 30 03:38:55 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 07EE4C63684 for ; Wed, 26 Jan 2022 13:54:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241741AbiAZNyc (ORCPT ); Wed, 26 Jan 2022 08:54:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50408 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241716AbiAZNya (ORCPT ); Wed, 26 Jan 2022 08:54:30 -0500 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3932CC061747 for ; Wed, 26 Jan 2022 05:54:30 -0800 (PST) Received: by mail-wm1-x32d.google.com with SMTP id c190-20020a1c9ac7000000b0035081bc722dso4124336wme.5 for ; Wed, 26 Jan 2022 05:54:30 -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=xCYXvajSPn9motpDNNaOC8f2agY2/ynvhbQJNwf12vc=; b=gNq/nBXOBz4Cj9jFVtqfipAeTJ9VWaxPpGJ7hhmyLoDjwo54DMuDgkO1smcDcxqmTG +s3ILxzWuYFnhQv/iLS1itrAdZEfetYyLxYDNM9zjP/wVLlJgqvNs29ULba2jhqh/l+M fE9Ro+phV/ds1ianxWTn4ZugyrYOuXslH3m2oGlCIe30ubOp2OU4wzs359L4LwGzGaF1 frQ1BN2RY43K4nv7a2YhySThX6jUyFLh46EJxNajeY5uTKUJn7AFmcXCZWMUEjbPramH Wh5UZLzu0MH1q7l+mKHcjvQZyT5BpsQpTBdEgTbwLOTdyMrfihHPviXbHljtwmUJuhQi A/zA== 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=xCYXvajSPn9motpDNNaOC8f2agY2/ynvhbQJNwf12vc=; b=mcbug4YBoirVDjSxtSUtItqYeMnX08L1Q471VmolH52+QHS2CH6FvV2BVxpCcPkJsw cNmeC4U6pxFXu+0WXkkwQoeo54U6y8VljX/9Trkqrv/xa1JzPKpUlU2SGFt/zCtTyx6+ 7ETSAMlVfY4a710KH9Klfo0hcs5TFJ7h/VpLTx6OL7U0N3zN23g44hVWjySBS3P02XnN 5Xk9mnk/lFRMw4jYA7JPxNJgpDCuxlJdPw6TFKMxr5IaiCU3dKihNXrGMVRbgneB/+o0 iZ9XPiJijvjhGOxjP8T9G94mV/WT5oRAwjBnvKTW3LmDoxoZ5dRWWCcDGyF5m7fk6I+R Qp1w== X-Gm-Message-State: AOAM530MJKQHYSMAPrxjcFB+D6T9vmv62rpZAGz6NPHqOJNyJH0aRsVR PeA/y+8R5dIoUpP6H4kUbTm29w== X-Google-Smtp-Source: ABdhPJxuURiygMhaMWKcGSq8WFNpulIgKKlsIOquUzgZhkD1MwBiuquvxU9nrdubxuJXzyvxINSniQ== X-Received: by 2002:a05:600c:34c6:: with SMTP id d6mr7497064wmq.86.1643205268831; Wed, 26 Jan 2022 05:54:28 -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 n15sm3356593wmr.26.2022.01.26.05.54.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:28 -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 v3 03/12] misc: fastrpc: Add support to get DSP capabilities Date: Wed, 26 Jan 2022 13:52:55 +0000 Message-Id: <20220126135304.16340-4-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 | 105 ++++++++++++++++++++++++++++++++++++ include/uapi/misc/fastrpc.h | 8 +++ 2 files changed, 113 insertions(+) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index a840b8dabf0e..d5fafbe3c709 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -31,10 +31,14 @@ #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) =20 /* Retrives number of input buffers from the scalars parameter */ #define REMOTE_SCALARS_INBUFS(sc) (((sc) >> 16) & 0x0ff) @@ -233,6 +237,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 +1378,101 @@ 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 * sizeof(uint32_t); + 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[FASTRPC_MAX_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); + + err =3D fastrpc_get_info_from_dsp(fl, &dsp_attributes[0], FASTRPC_MAX_DSP= _ATTRIBUTES); + if (err =3D=3D DSP_UNSUPPORTED_API) { + dev_info(&cctx->rpdev->dev, + "Warning: DSP capabilities not supported on domain: %d\n", domain); + return -EOPNOTSUPP; + } else if (err) { + dev_err(&cctx->rpdev->dev, "Error: dsp information is incorrect err: %d\= n", err); + return err; + } + + spin_lock_irqsave(&cctx->lock, flags); + memcpy(cctx->dsp_attributes, dsp_attributes, sizeof(u32) * FASTRPC_MAX_DS= P_ATTRIBUTES); + cctx->valid_attributes =3D true; + spin_unlock_irqrestore(&cctx->lock, flags); +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) { @@ -1677,6 +1779,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 Tue Jun 30 03:38:55 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 BE6D7C3526D for ; Wed, 26 Jan 2022 13:54:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241763AbiAZNyf (ORCPT ); Wed, 26 Jan 2022 08:54:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50416 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241727AbiAZNyb (ORCPT ); Wed, 26 Jan 2022 08:54:31 -0500 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B667C061747 for ; Wed, 26 Jan 2022 05:54:31 -0800 (PST) Received: by mail-wr1-x42f.google.com with SMTP id a13so25931579wrh.9 for ; Wed, 26 Jan 2022 05:54:31 -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=Z5AnMORgB0aa+xiAll7F0CRVY0oWDotsOZG4NUiDGN0=; b=NdW3yfIwrbjsYzOF1RonPMYJ0WpfZTFxuHuQxBM/dVV9Ezhl2+SeHHs6yoaIX8C0hy kaQzfRS4Cv/aIaxNI13XhtW+QBB12IbukOsEnmkeAILaSCT+8EzmnizAqSds4mKCYHbP QO9wRoQLxzIm0ZJkiWxg3aLbG2X7H7aqyR0eJSsbMjffMUG+vLkJgD5BkUowRQrp2Biy 0nPMLYA5BTxmvVEZopjPMurq6WrIzYtc5zReiZB0wfE98dXUMNiuzVZZm73TgjmK8jP8 B0DrAxSf/jAXaA/H7Z1fJZB/3bBRK0AwHucn0uREPTaW/9fn+pf3wmBqCuYvlA/4j+H+ rKeQ== 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=Z5AnMORgB0aa+xiAll7F0CRVY0oWDotsOZG4NUiDGN0=; b=QckhjZOwHWk1GTfTC6rXJASgpX+QqKPxWkMCJJd1cAal1NQw9DN+iQVep3ZcSdCXab 9x/p5fxv7G7BMzYvKtdpC7d3YYXBwuy4+mx5uid+h6xcoF/p96fy6Cput11rH8u9YCnJ jaFHgJAWl3HqROx0KDZj3UyRknpTvUfD6++Vd730sxAuHLq6lmlK86toKUYHfpvVXyOB JTmo67PWNe3orWzFMwZ15SQtMGdB7TH7VyVCp2ANjj9tNrEW80SF6B1GRUes32SinhaG tXLzdgxkrAysFs7Mmi4+ZpnYGQ5xSKghGNQt13bRuQSnnxceI8CkjHhxjLccTEK6FLgj xQnw== X-Gm-Message-State: AOAM531n0sAB6CE4QDVTbNycfM6aEGnNhWSZXmWGkbHfdRtJp22I89bQ 6Y+yXX74dV9r+VBt3X1cZyz6Eg== X-Google-Smtp-Source: ABdhPJymzELD6H/RrVSkXF0UApF80RbqrMriC5qEG36lxHjhh0tFfDjthzRNG7rS5Tlrp0AgnnLy4w== X-Received: by 2002:a5d:6c68:: with SMTP id r8mr11040893wrz.406.1643205270062; Wed, 26 Jan 2022 05:54:30 -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 n15sm3356593wmr.26.2022.01.26.05.54.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:29 -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 v3 04/12] dt-bindings: misc: add property to support non-secure DSP Date: Wed, 26 Jan 2022 13:52:56 +0000 Message-Id: <20220126135304.16340-5-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 --- 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 Tue Jun 30 03:38:55 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 90405C28CF5 for ; Wed, 26 Jan 2022 13:54:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241793AbiAZNyh (ORCPT ); Wed, 26 Jan 2022 08:54:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241742AbiAZNyd (ORCPT ); Wed, 26 Jan 2022 08:54:33 -0500 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81A26C06174E for ; Wed, 26 Jan 2022 05:54:32 -0800 (PST) Received: by mail-wr1-x42e.google.com with SMTP id e8so24124344wrc.0 for ; Wed, 26 Jan 2022 05:54:32 -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=j5DHw++5tAvddKPWEbwkZrPCz25+eyIcBMQLIaqDR8M=; b=QK2qVWjRWqo4582sMfMyTFMmXQAeowdYiAtWbCvyrrJ1qanCjHUYEHiu4tc2OCFmDp pwh6MUZIH4MYMlBJSSG5EXdjOhIGzKcYyhVUr2hAs8OMpdXJ0HtNEq1vD4zpyB+RUbhS HDADZ4VDqvd5PbHOWd9/wZj7+H3sNomRXTUTuO2UOzDjCUrOQ4jTAZ4kj+SOuzkneFZY 1uLnfuYjP4IMbdaQtqDHbHNGHNtaAdnRSt3RxkVFTa2acrrzDbB2rbMaq69BDskKd/bz eKmJv0GvUUQekLp9G6ppcHqoBEDv7GcQEYNhnZ5uOJS8G6TQny1YPK7fe0vTlHkfC39q /Zgg== 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=j5DHw++5tAvddKPWEbwkZrPCz25+eyIcBMQLIaqDR8M=; b=Tsf5U5ngaIhCDBC2VdMChis+oBOcZBWGxGmxiuHEycmDGoaflNGsVFVQqfUyKCQgX/ dkrOhqH+mss0+C/EyJMNQCEqDTHs5U7L09JPLwhEKtTQE/JCiaFtWpqYVw9M4Z6w3faw u7mp9VrKZGWhTzyPlJwEI55AE4Z8Wo1DeChsbYMmaV+vyAwYVGhuPuQ8+u/9GqH15ZNo /aNgEmbGdLV+JoNV+M5nCHOnNy5t3kRStK23UdmK9PXJ+yYU+HArzeILeyCv2lU14Mem 0xUexJvpFRMCytZfXfh0LvOBnMtFurdmDMaZ+ji7k10Qhee6gbX0ZRyDhkgZQ+5MWYYI h0rg== X-Gm-Message-State: AOAM5311gZrOQfNyzSn6nKtxgIhUb92RyFn6UdiM2yDbPE5xOPH9N/PP gjqT3UT1KeW7ImHjPpMZWvJTnA== X-Google-Smtp-Source: ABdhPJzfSxA2l/rkEBSRpeFoNTwKJgB6mIseDCE+80R4gA9/cEAhWvL+LUgMyWex/xS4dHjA5PF4kw== X-Received: by 2002:a5d:6a4f:: with SMTP id t15mr23339777wrw.392.1643205271153; Wed, 26 Jan 2022 05:54:31 -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 n15sm3356593wmr.26.2022.01.26.05.54.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:30 -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 v3 05/12] misc: fastrpc: add secure domain support Date: Wed, 26 Jan 2022 13:52:57 +0000 Message-Id: <20220126135304.16340-6-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 | 57 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index d5fafbe3c709..9eadbcf451ef 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -240,12 +240,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 { @@ -1683,7 +1686,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; @@ -1878,7 +1881,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; @@ -1887,15 +1890,21 @@ 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) + if (err) { kfree(fdev); - else - cctx->fdevice =3D fdev; + } else { + if (is_secured) + cctx->secure_fdevice =3D fdev; + else + cctx->fdevice =3D fdev; + } =20 return err; } @@ -1906,6 +1915,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) { @@ -1929,10 +1939,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); @@ -1946,6 +1977,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) @@ -1972,6 +2006,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 Tue Jun 30 03:38:55 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 9DC3BC63684 for ; Wed, 26 Jan 2022 13:54:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241857AbiAZNyq (ORCPT ); Wed, 26 Jan 2022 08:54:46 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50458 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241738AbiAZNyf (ORCPT ); Wed, 26 Jan 2022 08:54:35 -0500 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3EA9C06175B for ; Wed, 26 Jan 2022 05:54:33 -0800 (PST) Received: by mail-wr1-x42e.google.com with SMTP id c23so10250955wrb.5 for ; Wed, 26 Jan 2022 05:54:33 -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=zs0E5gUaoruQJ3cvVtoptNZo64os9iwjHdiVALNxOr4=; b=wKtTYdgoKS4YdUkgnSSv/91lyaiD39hzcOjJGllpmzOWgF6COeYRWEUOkKTfcoR3Vx E7ZIbKOh3J9XX+ny0VMmWyglPdecWqV1XFzsRya/HPdPw3LN2QFIYpRHxBzxWBJnmx7w d6mEo49zL/h+xBYKWCKed8IftTWCYzwMfknijh37/JydP28QOB1W38nPr7AP1BJHwT9s yxT4MFB125P0RnsbC1zxg0s0FA8igzNVUyLHjx0548bUVmlSH8NVb+W5kDLSsGLog3Z/ sqBeavfiJunAiA3YaLyxnCBGHx7EVL0o5973cWe3f+M68y9GU721NvwClgArts+69v7K LKMw== 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=zs0E5gUaoruQJ3cvVtoptNZo64os9iwjHdiVALNxOr4=; b=03vPZ4gI50zzJOzI+veHYSB7p37ZOZismYmIkUNtfdaXNIS6CyZ5ZE6aXUwf+Ue+mv KnuY5paXG32ZcSycrYVPKUvAnFqo4zh5JuPfRoaVu66wcpdSUZFDplnabwbh5/Mtmuzn 4+Kaul6aaANjqlX31fA5ijw3JnHd8RoeKx5Y5NoDd8TsjkBKqEDDFKwO+8kiksytT9SZ 1SPg6VMD/Z7RpXjTC4drkw8rj+2c3q8/x+HJseZhX3eoNeKCP5GiOxXUZvByRve0bg7O Yzwj9FPa04igTxLuoxtFX6aKOC1eDGWY51dqZbFRzWwEz91vi6twvaj/yHI/mizwcSxn EIKQ== X-Gm-Message-State: AOAM532Mv8b9Jt1mdSCwreMMZVlB7iD7Efn6NBn7fhfTVRq0/GeoNlaz 1Mqu9/tW61vm1IAD5g8/+16Q4A== X-Google-Smtp-Source: ABdhPJxKg62TfJnWibTrVuqUbQxrbH2rHYfToqzIo0ek+w8ZseYSjA78Je9MQAq/fy/AaXlM+fRKDg== X-Received: by 2002:a5d:6d09:: with SMTP id e9mr11621086wrq.37.1643205272298; Wed, 26 Jan 2022 05:54:32 -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 n15sm3356593wmr.26.2022.01.26.05.54.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:31 -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 v3 06/12] misc: fastrpc: check before loading process to the DSP Date: Wed, 26 Jan 2022 13:52:58 +0000 Message-Id: <20220126135304.16340-7-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 9eadbcf451ef..8e780e2d5d9d 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -243,6 +243,7 @@ struct fastrpc_channel_ctx { struct fastrpc_device *secure_fdevice; struct fastrpc_device *fdevice; bool secure; + bool unsigned_support; }; =20 struct fastrpc_device { @@ -263,6 +264,7 @@ struct fastrpc_user { =20 int tgid; int pd; + bool is_secure_dev; /* Lock for lists */ spinlock_t lock; /* lock for allocations */ @@ -1051,6 +1053,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) { @@ -1070,6 +1090,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) @@ -1080,6 +1101,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; @@ -1279,6 +1308,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) { @@ -1947,11 +1977,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 Tue Jun 30 03:38:55 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 1B39EC3526D for ; Wed, 26 Jan 2022 13:54:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241842AbiAZNyo (ORCPT ); Wed, 26 Jan 2022 08:54:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50442 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241742AbiAZNyi (ORCPT ); Wed, 26 Jan 2022 08:54:38 -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 D6F39C061763 for ; Wed, 26 Jan 2022 05:54:34 -0800 (PST) Received: by mail-wr1-x42d.google.com with SMTP id e8so24124515wrc.0 for ; Wed, 26 Jan 2022 05:54:34 -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=JfDyyJdxrbqCuKZtcO0xhwTtHfbFdU/XHTzhH3bg3zs=; b=xQ+OwaQZsqUBm0KarXrQSNH61NcMrHSaNfTONVTcpJ1ZKeWbLsDHvthnPvx7u5/S68 TBUNeQCVzi68Q7kBoUaAT74KnoonFPxC4SnsTJpfi562O7/smaiLz2kZXrk5BNF84XCx 24yqBdFIkAaQI+zNxBZgpYkGS6W5LsU9UqqIVUODII0/fEYln+ULQ1dD1EQ8MPs7f8ll rYiDlYc4OncyxMAZxOzMBQhQwMsgRh6KuDPiTxJo1cX1kSKwm0U/4P/bHcKKyiS5rmuw F83y6/Xqv4sV2hUHDLnOWqokNnQqFA1Pa0h26n/Onfyad8lIvkVgtogIScmzqLClDugk rQ1w== 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=JfDyyJdxrbqCuKZtcO0xhwTtHfbFdU/XHTzhH3bg3zs=; b=OiIJv7Owg8MpaGtDhM0XrBPIl8U3hkDn470URt4q519HpELD1Gb2LtCnP0Wr6B1YZk W7+ionxNYeujPflyZJaMaRvFYKdao3b5OnSrmbWQQw7AH38YNxAu6oP3hOEr+/OYEK8e YhKUmk+LT6iWCQsZCcQJ1LJ7mB71AKcPlL8j07GbYiLdZQqy6FGgP7Ooe6Y/lp3W69lF wQ0uN03+13kl0kH0F3bzmfytPX/pLhCGemyw/z53r18kuO0ZZswl9ODs5fuJ4t947NHS TiwCFeTtWGulwM8VKkmbKAEfd01NVQwtLQz1ganrw6KvL5PGNotEAbYJGCdT/GSdn+UM Zbog== X-Gm-Message-State: AOAM533ZOhRDyfvhmoXsHF9BrBSY+RarE+mGtZ+Ze1SKcgb/sgY3GKAY wOnMGEFsJRbIGfe5B1SSpJIPpg== X-Google-Smtp-Source: ABdhPJxvUhx7LmYCVI86xbDzz7SI24ZYz1alBUACSqV3LEZJ2hFzVn4IT1IT85TbpInHLFk6ovP3pQ== X-Received: by 2002:adf:9cd2:: with SMTP id h18mr12774785wre.483.1643205273450; Wed, 26 Jan 2022 05:54:33 -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 n15sm3356593wmr.26.2022.01.26.05.54.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:32 -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 v3 07/12] dt-bindings: misc: add fastrpc domain vmid property Date: Wed, 26 Jan 2022 13:52:59 +0000 Message-Id: <20220126135304.16340-8-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 --- 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 Tue Jun 30 03:38:55 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 C68F1C6369B for ; Wed, 26 Jan 2022 13:54:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241727AbiAZNyz (ORCPT ); Wed, 26 Jan 2022 08:54:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241751AbiAZNyj (ORCPT ); Wed, 26 Jan 2022 08:54:39 -0500 Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 107B0C06161C for ; Wed, 26 Jan 2022 05:54:36 -0800 (PST) Received: by mail-wr1-x430.google.com with SMTP id h21so8380693wrb.8 for ; Wed, 26 Jan 2022 05:54:35 -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=gJKSsAudCW68wjBcYmZkvSQLNXWe4kcfjmLMXs7MAJs=; b=n5LCe9S0O2aMl5iGp+938ABzdGFiNe5O++WgkYnc0QabXJQtECb78QWn+JXKiL69u8 iG1RvIxZehD4+3EjqZ3Y+3HTXLvxxb6I00AeFmsTq1gU4qO8dbdFkC/CUldRKjeW67Qb NMkE+wsLeNwrv4R9clzgwX/LwaPhsOwVQNuTCmYlOBn3dyBn3LRzE2/S/y04oU35PREB FqQfqLn/BLeiXOEpQET20mxpYEHZO4NHN1Yh5ZSwl43JiZO2STEeJhj9wMQMc5ap/659 TzCP3gXkf/heF4LOw3wh0YrXg/li4mfK2svDRHyw50Ur0gwUgMYXlLi4+8Fj21WcDN/l lx3A== 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=gJKSsAudCW68wjBcYmZkvSQLNXWe4kcfjmLMXs7MAJs=; b=IWMirVp20sjl5FJmNxJwRDXpTlOfUgWVRo7f1Gi0wMbRMwX+HRjGELcgjoPucN97Bl Sd1n4+ls/G3nAUN9Ik/NKiPqTyPnphTcnfpkFmQbkchMf9M2Y2EPdLP39+QO5Uqn3aDe vkjOP4QlhytF3Fp8EkMSpTc6K1PpZ2VdLDDxOcwo+W/9Wg9aije9miCNOnG0XKsXSzhh dFWayo4F8KI68f7vbphzbuw13G6Wh8QyQju05JmXjYVNaqE6j0R3LkDdL/bWSJKlWexq n8vHsKfaGMo+40AE1LSUlBxDMAz6KnIQVOjU4oF7d8SGJKCnCnZh7krB+KZgqCfrwZY3 lHug== X-Gm-Message-State: AOAM532xUwaPbsuCdj6okTsJmexbNGN+/4FZq8ENaj37PnmS+31yPmHK lSPKEa4zxg0gru05ghJ74EDtHHQpQjpqbw== X-Google-Smtp-Source: ABdhPJy0gbhkanA/nbVs20EytxbtdtXUIJFn7tAbb+200yZNQwNPUlvam3ouo3kk+bqjI5u2zXZ+Lg== X-Received: by 2002:adf:efcd:: with SMTP id i13mr22951487wrp.343.1643205274661; Wed, 26 Jan 2022 05:54:34 -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 n15sm3356593wmr.26.2022.01.26.05.54.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:34 -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 v3 08/12] misc: fastrpc: Add support to secure memory map Date: Wed, 26 Jan 2022 13:53:00 +0000 Message-Id: <20220126135304.16340-9-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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/fastrpc.c | 65 ++++++++++++++++++++++++++++++++----- include/uapi/misc/fastrpc.h | 5 ++- 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/drivers/misc/fastrpc.c b/drivers/misc/fastrpc.c index 8e780e2d5d9d..0090085bfbb9 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 @@ -194,6 +196,7 @@ struct fastrpc_map { void *va; u64 len; u64 raddr; + u32 attr; struct kref refcount; }; =20 @@ -231,6 +234,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; @@ -278,6 +284,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); @@ -654,7 +674,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; @@ -696,6 +716,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); @@ -780,16 +816,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; @@ -1123,7 +1156,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; } @@ -1232,7 +1265,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, @@ -1373,7 +1405,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 @@ -1943,9 +1974,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) { @@ -1965,10 +1997,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 Tue Jun 30 03:38:55 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 10492C636CF for ; Wed, 26 Jan 2022 13:54:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241777AbiAZNy5 (ORCPT ); Wed, 26 Jan 2022 08:54:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241799AbiAZNyj (ORCPT ); Wed, 26 Jan 2022 08:54:39 -0500 Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 182BEC06176C for ; Wed, 26 Jan 2022 05:54:37 -0800 (PST) Received: by mail-wr1-x42e.google.com with SMTP id a13so25932071wrh.9 for ; Wed, 26 Jan 2022 05:54:37 -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=2AlQcw7YPURwldrVvaukxQ8r98RMSZ2mTDIQmeR0c3A=; b=lnZD/BpopUIRmH3UKIpN23OznB/ErRjRYyLier/ToBusCVxCIKm9OgE6eCqa9RGcj3 QTVgMlJJqDUZOZ0z5/7lmXIRJc4CsmBDoCzeQZuEei3t7kMrNZoTzRaIp1MfqBwPOayE MTLXq+8cL2pgMRM6EUnQqH61OfzuGiYDGwL3tTtHtKbK7TGjiymmZCJWWQsk/2PXdvNa TBVU/Vd82TuEAGHYFcUi1KuIQRTjLCxRazJbpCxzYa9ZoaDEIlCd0fuQf5AZSu9rQFxt 67ynmfHA8n2kpduCidgzFnnZ04Kh+f9f7zLt1P2d9LfmyFekcz2RhTBPiUGbaa5DpMeF gu7Q== 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=2AlQcw7YPURwldrVvaukxQ8r98RMSZ2mTDIQmeR0c3A=; b=BfMU8O7SEuY7Wn4eYmoq6H6RAn3ZTgJEFvgQ22qi/EYA2koovE5OJ196qKIgShY5Ik uns45sRi0LQubYY0aD2tLUGV6c76WyOHj2s6aiIvThnEumuWBluKDTzT/ob1UcQLetxV 83BRsrNZ/7jm9SYzWz8rZTHrt1xR6Ukyy5Ntl+Zl4oucXzrYW3oPNea7Gtf2YtfVZwQr dFTd6E0hFtN+1v1OOwtD8x785orNwx00J04ukw3UU7gblrOwJtZzEx0aY0TeridmoqCJ eDeH2lWkpW9GbCa4VVV0G60V5sqZlmSjrwzeS/9lkDHtXWHjBTAl8ho2dEk4BgRfjpHJ bfNA== X-Gm-Message-State: AOAM531NDy0OoUo4ZdG+RjNGbmHBxiIJuaWQRauvHAQLJzA9UrD+j2fi Xc90rUZ3EDxJOkEd3CrRpBWh0U8MXVGWyg== X-Google-Smtp-Source: ABdhPJyQgkm80ehmV8uqjA9Quoi8Qp5GVpOGXVMVhLM5u/DiASoStA26HaXwTZdSFj/nwB5Zpsa9EA== X-Received: by 2002:a05:6000:156b:: with SMTP id 11mr10489924wrz.223.1643205275748; Wed, 26 Jan 2022 05:54:35 -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 n15sm3356593wmr.26.2022.01.26.05.54.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:35 -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 v3 09/12] misc: fastrpc: Add helper function to get list and page Date: Wed, 26 Jan 2022 13:53:01 +0000 Message-Id: <20220126135304.16340-10-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 0090085bfbb9..1c1815bed2c2 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -832,6 +832,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; @@ -859,9 +869,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 Tue Jun 30 03:38:55 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 96B4AC2BA4C for ; Wed, 26 Jan 2022 13:55:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241868AbiAZNzD (ORCPT ); Wed, 26 Jan 2022 08:55:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50502 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241810AbiAZNyk (ORCPT ); Wed, 26 Jan 2022 08:54:40 -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 771F8C061770 for ; Wed, 26 Jan 2022 05:54:38 -0800 (PST) Received: by mail-wr1-x434.google.com with SMTP id e2so10537400wra.2 for ; Wed, 26 Jan 2022 05:54:38 -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=BKsf6dGO619i7ojy2wbleRyI3TRP+wgyPNagaXmtvTU=; b=c7yiZrG4/TyIvSNHYNZnb10q3lmZMebSVvAJlr3i5scF1Hj/EfHqt/z/P5a4ROFfKD X/HgALPBPiHcpqCGJO/MOhRCv+Pu6OyK1llbwcHnJHvHvgjLdP77TacG714tWZNxz4ox KEUsg396RWk1eZ+xniAh2m4X2ctOJb/cFnJ1HZ6HmJcz+8IMJrWfeydYDfoM8KYuy3aV y9VXFq0SDfmhdClORdVj6TNW/8YiUyTBR8XD5VTfyerOBtTWBoM0wPmfOju4u/nNWCY8 jth/Ripzl5I52L6jb9Kh8aAVS+xJ5PIGg9AstgepmSP7RH8aI9TXJHqFxNEVqyeW5l5r w+lw== 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=BKsf6dGO619i7ojy2wbleRyI3TRP+wgyPNagaXmtvTU=; b=IrsFJu89RofdHzeKvg2HTbRbK602dmcjHLt/YAprY4kxhJyVcSSNg2RyafsviBQNhr czMbFbV97toxbanB3AFlFFAfODl+Y1tXwsOBO5VA/RlBCgVm89ekkB4wg0OxSchWfcD0 HuVzddWqPsVUNihkAZrqqLJQnSW10wPLgVq055VGmUaKnzrxUQRsA42BTgKStZn5mxEI pT6NjJCO+N5qSK0dDdQbj2sbaBXjzHu2GxYUNNFVaqZE9w954mkEs+qK3BeMlQdVPIt5 M/sVCHYfnqgER/dRlh9amc5iGtvV93KqzsY50a+9KvrIj6N+vBb5VuIFgeRP0lOnGPrK jHCg== X-Gm-Message-State: AOAM530AYdWe/zSujyx+HaC7FqumqzmnBGixiZ95mNydUt40baLCQGPO +tsBPmwTvB7BGio3Prm5l6OdReknbxMUiQ== X-Google-Smtp-Source: ABdhPJzeRGH+zsgttK1iV0aSGOWXWhbvvWfYyqpBupgxLD/fRvNMwITNpQYK76Ot2fpf1trlYB0Vnw== X-Received: by 2002:adf:f7cd:: with SMTP id a13mr7502095wrq.517.1643205277045; Wed, 26 Jan 2022 05:54:37 -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 n15sm3356593wmr.26.2022.01.26.05.54.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:36 -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 v3 10/12] misc: fastrpc: Add fdlist implementation Date: Wed, 26 Jan 2022 13:53:02 +0000 Message-Id: <20220126135304.16340-11-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 1c1815bed2c2..6052a9cb9e2c 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -319,7 +319,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; @@ -327,7 +328,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; @@ -338,6 +338,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, @@ -410,7 +421,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) @@ -968,9 +979,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]) { @@ -987,6 +1008,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 Tue Jun 30 03:38:55 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 220BDC63697 for ; Wed, 26 Jan 2022 13:55:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241849AbiAZNzB (ORCPT ); Wed, 26 Jan 2022 08:55:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241734AbiAZNyk (ORCPT ); Wed, 26 Jan 2022 08:54:40 -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 8A55BC061759 for ; Wed, 26 Jan 2022 05:54:39 -0800 (PST) Received: by mail-wr1-x433.google.com with SMTP id c23so10251466wrb.5 for ; Wed, 26 Jan 2022 05:54:39 -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=WiXyCfzx1/PxAADkZ89dPGp+bj7MoZkCRUrA9uccdQg=; b=jHhnKjNsPFzZO3rYA2Aat5q+VtxegiMsAaAq28uxHXaRUTBoeFijZa7ktj8cU7Mttf 1MAnvOBAbL4xpbvFqYK8xC8DebFuKfKEtrXOG9d648lUeP2WP4x1fmQl648lLEbMLPlI 5ftOgr/k/+BKPAk5Y+PRiI3GewznMpis4fhlqAMxaX7LQxl98G9jxw/iX4YKY0e7IxFM 1ixXZET+upkKm7OBcJa3gcKOgQMPNn84Lb+qykYy+oborzfd3g9M5o86VnhAmL55lcF0 tE6JfJ6RnADLKR0CzNWAPYAGSHvZvSNmEp6qt/Em0rvCNniLJ1qi5x49RQY45QHX8Aaw BZyw== 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=WiXyCfzx1/PxAADkZ89dPGp+bj7MoZkCRUrA9uccdQg=; b=13zg259o1OUj4/Gndgr4+IU4naB1Ub+kKrhPNuOKheT8T43kFhydmP8bJ5D1EZd0+t aBkQYAnTwUwXTz6Mwa6SiRjk5luAbjLigtp3gPClsghKxXad+uvKC5DToMShMaGtzS/u i4ueaZWN92XbH5G8U69KUQdoQ25s4yuOoSVmuRrR6CiQE4cevJXHUBvhihgZr+1Y2eS0 8NAUb2tIf1FVugExuPqibWpRuV0QyxZhfn9hWsl95YkgAjdS8yP8QlNU+JqU4yOBfe6J NB6T3M8g5F5iKvRmKTfHfLki9dAlv0M7Oo9cbFNTfy7GfNNepF7c4/8EQw3fwk0Cfi9w /k5A== X-Gm-Message-State: AOAM533/V4UnNLk367adb9mBFHIBlF/MxCjlB2W7r8bFc5MS2vz6ZgWt aXFJzodaHfdH5Jm2uizvYyD5fg== X-Google-Smtp-Source: ABdhPJyFC1EVf4ldevQ+b8/qXFk6SWSXEaoSZVE8eBaCf6cJqFZEGpQ5SdB88HZsUlsoL5SnWYOPFA== X-Received: by 2002:a5d:4c87:: with SMTP id z7mr22378536wrs.185.1643205278185; Wed, 26 Jan 2022 05:54:38 -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 n15sm3356593wmr.26.2022.01.26.05.54.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:37 -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 v3 11/12] misc: fastrpc: Add dma handle implementation Date: Wed, 26 Jan 2022 13:53:03 +0000 Message-Id: <20220126135304.16340-12-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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 6052a9cb9e2c..56ec7170b698 100644 --- a/drivers/misc/fastrpc.c +++ b/drivers/misc/fastrpc.c @@ -100,9 +100,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 { @@ -216,7 +227,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; @@ -766,7 +777,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 | @@ -791,7 +802,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 + @@ -856,7 +867,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; @@ -892,8 +903,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 @@ -903,7 +914,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); @@ -930,7 +941,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); @@ -944,7 +955,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) { @@ -960,12 +971,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: @@ -978,7 +992,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; @@ -995,9 +1009,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 Tue Jun 30 03:38:55 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 6555FC63684 for ; Wed, 26 Jan 2022 13:55:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241814AbiAZNy7 (ORCPT ); Wed, 26 Jan 2022 08:54:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241821AbiAZNyl (ORCPT ); Wed, 26 Jan 2022 08:54:41 -0500 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E5CE1C06175F for ; Wed, 26 Jan 2022 05:54:40 -0800 (PST) Received: by mail-wm1-x32b.google.com with SMTP id n8so27733767wmk.3 for ; Wed, 26 Jan 2022 05:54:40 -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=RiTu8S4Ln7+O0WBUqkkUsl7/Y8RGgsnBr2QEGirlJGd5zv/J2sKYcCOIKi43UG0OIv huxteankWCJT7bWllcRYrm7tlbM+644kIo9Gl2UfI3aj4ihrfuygcZnp8WYhX41Y6OK1 q69MJ9QVDRNA1v1eaGcQfOJrX9hqUKCjqwJFyr5W6b6ZaBUlhRweBkfU8XTq4AnE0AYx 2+qbazic7fNyaLMuzM4COM9Y7imeMx1cMQTmjHHno7X0fvDgpgtnWsSLQY8sTjjP9vif 6JVJ+tA9loPtnaHRAZ+8UnJ/uLRT1rzYOsQMCyr7eXO0Llk0BTRW171515gVHCvaE+vk xSBQ== 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=QapaI5smvEo+xMyPldlCP2roJDHyaJ7/SN62WjkCpVGiJCZCQ5ZKkpSXk9SsdHGEle GGVydREYcgXJo3PdtBb2qq2ySY5i4bfgowWPlgRaj6XSeQuNXGlcFa4oPhixMhRvhsJa lMx00p49y83Dc6pdCt+zcvuQ+9ZirVti4p5CmLUajYxbL7awpOAE/LFWAU6WgjfvI+zf zbQ81y72CAn9KhLWp2D74Sbve5K7kgATjDmIrdEe2uWUdq4baepBINbhQiYFHpmmHRWz Y+AJMG+Mzdr1yxAygQ0pEMHU9Vdkgtd2LM9vIok9y/f5ZqiJAYiHQ9wMpa8bycOwhGFz pRoA== X-Gm-Message-State: AOAM533t7yYeaHrS7506ce4UlG0pYLnUwvOftZelWPWG3D5h5C2a2qZY y2VP3Ny9Pl6LJOVfJ2B8pSz1LQ== X-Google-Smtp-Source: ABdhPJyel63/sPQgccttrP2TI12+cJQazZbJYZemZWsjq8GWdGcvGhyZNBoQMvKbAPIMSpCJumUbPw== X-Received: by 2002:a7b:c401:: with SMTP id k1mr7506568wmi.67.1643205279377; Wed, 26 Jan 2022 05:54:39 -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 n15sm3356593wmr.26.2022.01.26.05.54.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Jan 2022 05:54:38 -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 v3 12/12] arm64: dts: qcom: add non-secure domain property to fastrpc nodes Date: Wed, 26 Jan 2022 13:53:04 +0000 Message-Id: <20220126135304.16340-13-srinivas.kandagatla@linaro.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20220126135304.16340-1-srinivas.kandagatla@linaro.org> References: <20220126135304.16340-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