From mboxrd@z Thu Jan 1 00:00:00 1970 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 85608EEC2A7 for ; Mon, 23 Feb 2026 22:39:53 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id ED40210E03D; Mon, 23 Feb 2026 22:39:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="kqvDym6x"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="iPvbiYfw"; dkim-atps=neutral Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5B53E10E03D for ; Mon, 23 Feb 2026 22:39:51 +0000 (UTC) Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61NI3RUI536337 for ; Mon, 23 Feb 2026 22:39:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=qcppdkim1; bh=nUK32uPvxI2Vc2NAUq76VwMY c+Ah6Xyt+D23oW/zCfs=; b=kqvDym6xN5iYKhCrRoJnOe6QhUMEQmbDb5Q7Jt7G Nvp9xvYWF6ojiRHfKtEW3cbRLt/YsX0zowxZRSJBZnv1nqbeZuspdihEvi00mnu6 Z9QkZNNmd/hUGeNWgthr0Qeahc7w9POljWOVqi5QDdmfcKREpryPqTyMqV6ifblK 1BAE9zpA+zD8PNCTFr/vHaYa3QDy370T0uMnoLyMASd+AO0WM5X76QYcdJ9S2BM+ U83C5vsR7m15pFs3KYJBntr/YxlhlApsKfA3KcniUk5kU/NfeAgQVCXCfWW/cfxw E9GfEazeVJ6kB4F1KY+H18iAQJ6Cj7nBeVSqTj6WjTzGRA== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cgn7ta43y-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Feb 2026 22:39:50 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8c70d16d5a9so4033448585a.3 for ; Mon, 23 Feb 2026 14:39:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1771886390; x=1772491190; darn=lists.freedesktop.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=nUK32uPvxI2Vc2NAUq76VwMYc+Ah6Xyt+D23oW/zCfs=; b=iPvbiYfwevYGTV03pLL/dzNO7SejJeen4TrSqcD7DVoJ6xAVn0nCXCEwmojcoV70BI CC4Qs7HOsHrDjR/as74Or7zadI0mWHGV+M0PFjPxkDKqsINk6ZsOzwp6EA+lHbGaUXrz 9yaGZAGNvLcj75cRjPi3t5Bw+VnvYUN94MOgFA7Qh3ccVJAIkEIU83bGYHakkT3DaIDS ZzKPadWduvMgUF62nvvRMnpIsCJViBXCz+8/hWkkXiQlw5lmTYwSTg0LgTmk+v159Pf/ IVYWvhphL0h+VdVA69etBC3BBoQ8FVV0u97HUpDDqtxDAR+9OwHuMefHlAqSIb2k9PRL tADw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771886390; x=1772491190; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nUK32uPvxI2Vc2NAUq76VwMYc+Ah6Xyt+D23oW/zCfs=; b=wvEh+wV76OAXBJhrSSkJeh1jOs7XO3lhXH9aawKA8wlxHJJoe7RgerFL1owFofOgfI pQlFT95O70CQDI3qcXQZ0uev4LPEAUjnmPFp6bPmHpJQnL90N6e09iRuVw8NnSGH18+I r3kypllW3RYoVEqHtXNW//5w/RZQhgH3qIQj1k5rbRR7bCpiDaop2DDlr6X0tlViPZHa toAN33j2O+U/CnInu5BSZ4WWKJ7+vEEWbgzAiYhftecRtpI9YAz8WSEc4nAH0CHTiP8T +L2S1nM040KSOpPP5Su+gj9fXKuu5ZoJ0GioPoEWyw83oUJrPWoGeujfI0dhhv3ULbxd /9ZQ== X-Forwarded-Encrypted: i=1; AJvYcCXuaj5X0uVCPerjec4BU/o9JWnq7S+HO/fvJXus7UagHtCLx/J1t5HW6Yf/9dQ2GxfoX09ExA4F+fA=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzIeQUv2NVWSDyYx6cvZBbxfAQMMEyg7MSXd5dv2+fnSzec+0l5 2A+5kyVwFGx33nTC9i/cbTuupqWdpDO+ZSGZrF+6ERwkjbifKKymH4rBqZSyH2nbrjI6oWOr8eL DtHuiwq9j+VGTxPw/AxNELrAwccpGenzFTVZA1PZjBAowCXq7RXO/SxLCvER4ikcLFYkr9G8= X-Gm-Gg: AZuq6aIds/gwpP4ArFiNjE+3h/8eLfkl6RnGyqpnxa3mXiWumquM+4K9qZ+RBk8RRhd wC7Dhyfib2kpmFmy3iGP+ehdAcgUG95/EVijObi6RUNxG7Gsskoai/C1JSeJo48hBJ3lbrlD0fc oadVLJtb2Lb6r1mYE26wKDE9DbrwH7u7uwOp1jhqoB/iGS8tc2daQzZ4DW3FicKuxqRh/aayFXy dVRXrsSSHWdfxGt6TZmnocJIcHLIB1tiHmLJeR2CQMysj0rxKTaeDPd9j7O9PwuFqW4mcGUhaRT EoWVLuGon5JxfxJwKtqEh18XteC13579Mn6zCVVwZ4GNZci4Lg1m7hE+y343nyPOcquB9yKeRql fgJPRISegzHDZtePI/q2IKB8R+37vweCT2P1fWuuyKak3713FVn35dcMGlWLAEpVwNfKDzouIzO uKP77SuVDk+svX065Od9QIrPn4Vv2h24F0xfM= X-Received: by 2002:a05:620a:319a:b0:8cb:4c79:b44f with SMTP id af79cd13be357-8cb8ca72048mr1249893185a.51.1771886389538; Mon, 23 Feb 2026 14:39:49 -0800 (PST) X-Received: by 2002:a05:620a:319a:b0:8cb:4c79:b44f with SMTP id af79cd13be357-8cb8ca72048mr1249890085a.51.1771886389013; Mon, 23 Feb 2026 14:39:49 -0800 (PST) Received: from umbar.lan (2001-14ba-a073-af00-264b-feff-fe8b-be8a.rev.dnainternet.fi. [2001:14ba:a073:af00:264b:feff:fe8b:be8a]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a0eeb13873sm1823833e87.22.2026.02.23.14.39.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Feb 2026 14:39:47 -0800 (PST) Date: Tue, 24 Feb 2026 00:39:45 +0200 From: Dmitry Baryshkov To: Ekansh Gupta Cc: Oded Gabbay , Jonathan Corbet , Shuah Khan , Joerg Roedel , Will Deacon , Robin Murphy , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Sumit Semwal , Christian =?utf-8?B?S8O2bmln?= , dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, iommu@lists.linux.dev, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org, Srinivas Kandagatla , Bharath Kumar , Chenna Kesava Raju Subject: Re: [PATCH RFC 11/18] accel/qda: Add GEM_CREATE and GEM_MMAP_OFFSET IOCTLs Message-ID: References: <20260224-qda-firstpost-v1-0-fe46a9c1a046@oss.qualcomm.com> <20260224-qda-firstpost-v1-11-fe46a9c1a046@oss.qualcomm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260224-qda-firstpost-v1-11-fe46a9c1a046@oss.qualcomm.com> X-Authority-Analysis: v=2.4 cv=c5OmgB9l c=1 sm=1 tr=0 ts=699cd736 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=HzLeVaNsDn8A:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yx91gb_oNiZeI1HMLzn7:22 a=EUspDBNiAAAA:8 a=03G4QXms81HB9-bpn8QA:9 a=CjuIK1q_8ugA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-GUID: ZBzW8qBz-577Lrqq54gqOyzfo3ZJ2UYt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjIzMDE5NyBTYWx0ZWRfX0VNP5sE2zi/b wdAxycHTnV6kpACNDTyc2A0DV6UZDkToGVX4Ut7IpMVkGKfGVHEQI07//ylGrKvI2HrqsdSbOgz E3zG72rA3SQnlvruhkHJcCMtUu1rccdQavSGyOG2sxpbK0QY7veAFg5MZWFSr30jISAIVmP/xUw C8RJ8VhSLRglY5FjVpXE/c9LCv2o2pW4phEX8HeGX+A03RraNLq8GGno+Sz8y42OiPgtAzkWDDT ZLwTWkwiFCD9A2h+cXPhjgaQnvXdAkSXJ31zGQ2WQhmVPp/j/m8NWBUcaHAUXi0eZapZrU/CEJq Ka+RwUuRYHEuLeuICP+qHkH0TV4MTB94YZPYwSwjsW7EZqn2L+KGXXOf8pb+I8L+Isn+Kb54ly1 jTzi0yBjxeXxf+8hQEzOBxfqZZWVLPSuh1eyhtTI7YjDhsa62lKJY4+wYQjhFOK1NKedIsrehM3 1niGvEk9LCEEPa9hGuw== X-Proofpoint-ORIG-GUID: ZBzW8qBz-577Lrqq54gqOyzfo3ZJ2UYt X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-23_05,2026-02-23_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 malwarescore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 bulkscore=0 spamscore=0 suspectscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2602230197 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Tue, Feb 24, 2026 at 12:39:05AM +0530, Ekansh Gupta wrote: > Add two GEM-related IOCTLs for the QDA accelerator driver and hook > them into the DRM accel driver. DRM_IOCTL_QDA_GEM_CREATE allocates > a DMA-backed GEM buffer object via qda_gem_create_object() and > returns a GEM handle to userspace, while > DRM_IOCTL_QDA_GEM_MMAP_OFFSET returns a valid mmap offset for a > given GEM handle using drm_gem_create_mmap_offset() and the > vma_node in the GEM object. > > The QDA driver is updated to advertise DRIVER_GEM in its > driver_features, and the new IOCTLs are wired through the QDA > GEM and memory-manager backend. These IOCTLs allow userspace to > allocate buffers and map them into its address space as a first > step toward full compute buffer management and integration with > DSP workloads. > > Signed-off-by: Ekansh Gupta > --- > drivers/accel/qda/qda_drv.c | 5 ++++- > drivers/accel/qda/qda_gem.h | 30 ++++++++++++++++++++++++++++++ > drivers/accel/qda/qda_ioctl.c | 35 +++++++++++++++++++++++++++++++++++ > include/uapi/drm/qda_accel.h | 36 ++++++++++++++++++++++++++++++++++++ > 4 files changed, 105 insertions(+), 1 deletion(-) > > diff --git a/drivers/accel/qda/qda_drv.c b/drivers/accel/qda/qda_drv.c > index 19798359b14e..0dd0e2bb2c0f 100644 > --- a/drivers/accel/qda/qda_drv.c > +++ b/drivers/accel/qda/qda_drv.c > @@ -12,6 +12,7 @@ > #include > > #include "qda_drv.h" > +#include "qda_gem.h" > #include "qda_ioctl.h" > #include "qda_rpmsg.h" > > @@ -154,10 +155,12 @@ DEFINE_DRM_ACCEL_FOPS(qda_accel_fops); > > static const struct drm_ioctl_desc qda_ioctls[] = { > DRM_IOCTL_DEF_DRV(QDA_QUERY, qda_ioctl_query, 0), > + DRM_IOCTL_DEF_DRV(QDA_GEM_CREATE, qda_ioctl_gem_create, 0), > + DRM_IOCTL_DEF_DRV(QDA_GEM_MMAP_OFFSET, qda_ioctl_gem_mmap_offset, 0), > }; > > static struct drm_driver qda_drm_driver = { > - .driver_features = DRIVER_COMPUTE_ACCEL, > + .driver_features = DRIVER_GEM | DRIVER_COMPUTE_ACCEL, > .fops = &qda_accel_fops, > .open = qda_open, > .postclose = qda_postclose, > diff --git a/drivers/accel/qda/qda_gem.h b/drivers/accel/qda/qda_gem.h > index caae9cda5363..cbd5d0a58fa4 100644 > --- a/drivers/accel/qda/qda_gem.h > +++ b/drivers/accel/qda/qda_gem.h > @@ -47,6 +47,36 @@ struct drm_gem_object *qda_gem_create_object(struct drm_device *drm_dev, > void qda_gem_free_object(struct drm_gem_object *gem_obj); > int qda_gem_mmap_obj(struct drm_gem_object *gem_obj, struct vm_area_struct *vma); > > +/* > + * GEM IOCTL handlers > + */ > + > +/** > + * qda_ioctl_gem_create - Create a GEM buffer object > + * @dev: DRM device structure > + * @data: User-space data containing buffer creation parameters > + * @file_priv: DRM file private data > + * > + * This IOCTL handler creates a new GEM buffer object with the specified > + * size and returns a handle to the created buffer. > + * > + * Return: 0 on success, negative error code on failure > + */ > +int qda_ioctl_gem_create(struct drm_device *dev, void *data, struct drm_file *file_priv); > + > +/** > + * qda_ioctl_gem_mmap_offset - Get mmap offset for a GEM buffer object > + * @dev: DRM device structure > + * @data: User-space data containing buffer handle and offset result > + * @file_priv: DRM file private data > + * > + * This IOCTL handler retrieves the mmap offset for a GEM buffer object, > + * which can be used to map the buffer into user-space memory. > + * > + * Return: 0 on success, negative error code on failure > + */ > +int qda_ioctl_gem_mmap_offset(struct drm_device *dev, void *data, struct drm_file *file_priv); > + > /* > * Helper functions for GEM object allocation and cleanup > * These are used internally and by the PRIME import code > diff --git a/drivers/accel/qda/qda_ioctl.c b/drivers/accel/qda/qda_ioctl.c > index 9fa73ec2dfce..ef3c9c691cb7 100644 > --- a/drivers/accel/qda/qda_ioctl.c > +++ b/drivers/accel/qda/qda_ioctl.c > @@ -43,3 +43,38 @@ int qda_ioctl_query(struct drm_device *dev, void *data, struct drm_file *file_pr > > return 0; > } > + > +int qda_ioctl_gem_create(struct drm_device *dev, void *data, struct drm_file *file_priv) > +{ > + struct drm_qda_gem_create *args = data; > + struct drm_gem_object *gem_obj; > + struct qda_drm_priv *drm_priv; > + > + drm_priv = get_drm_priv_from_device(dev); > + if (!drm_priv || !drm_priv->iommu_mgr) > + return -EINVAL; > + > + gem_obj = qda_gem_create_object(dev, drm_priv->iommu_mgr, args->size, file_priv); > + if (IS_ERR(gem_obj)) > + return PTR_ERR(gem_obj); > + > + return qda_gem_create_handle(file_priv, gem_obj, &args->handle); > +} > + > +int qda_ioctl_gem_mmap_offset(struct drm_device *dev, void *data, struct drm_file *file_priv) > +{ > + struct drm_qda_gem_mmap_offset *args = data; > + struct drm_gem_object *gem_obj; > + int ret; > + > + gem_obj = qda_gem_lookup_object(file_priv, args->handle); > + if (IS_ERR(gem_obj)) > + return PTR_ERR(gem_obj); > + > + ret = drm_gem_create_mmap_offset(gem_obj); > + if (ret == 0) > + args->offset = drm_vma_node_offset_addr(&gem_obj->vma_node); > + > + drm_gem_object_put(gem_obj); > + return ret; > +} > diff --git a/include/uapi/drm/qda_accel.h b/include/uapi/drm/qda_accel.h > index 0aad791c4832..ed24a7f5637e 100644 > --- a/include/uapi/drm/qda_accel.h > +++ b/include/uapi/drm/qda_accel.h > @@ -19,6 +19,8 @@ extern "C" { > * They are used with DRM_COMMAND_BASE to create the full IOCTL numbers. > */ > #define DRM_QDA_QUERY 0x00 > +#define DRM_QDA_GEM_CREATE 0x01 > +#define DRM_QDA_GEM_MMAP_OFFSET 0x02 > /* > * QDA IOCTL definitions > * > @@ -27,6 +29,10 @@ extern "C" { > * data structure and direction (read/write) for each IOCTL. > */ > #define DRM_IOCTL_QDA_QUERY DRM_IOR(DRM_COMMAND_BASE + DRM_QDA_QUERY, struct drm_qda_query) > +#define DRM_IOCTL_QDA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_QDA_GEM_CREATE, \ > + struct drm_qda_gem_create) > +#define DRM_IOCTL_QDA_GEM_MMAP_OFFSET DRM_IOWR(DRM_COMMAND_BASE + DRM_QDA_GEM_MMAP_OFFSET, \ > + struct drm_qda_gem_mmap_offset) > > /** > * struct drm_qda_query - Device information query structure > @@ -40,6 +46,36 @@ struct drm_qda_query { > __u8 dsp_name[16]; > }; > > +/** > + * struct drm_qda_gem_create - GEM buffer object creation parameters > + * @size: Size of the GEM object to create in bytes (input) > + * @handle: Allocated GEM handle (output) > + * > + * This structure is used with DRM_IOCTL_QDA_GEM_CREATE to allocate > + * a new GEM buffer object. > + */ > +struct drm_qda_gem_create { > + __u32 handle; > + __u32 pad; > + __u64 size; If you put size before handle, you would not need padding. > +}; > + > +/** > + * struct drm_qda_gem_mmap_offset - GEM object mmap offset query > + * @handle: GEM handle (input) > + * @pad: Padding for 64-bit alignment > + * @offset: mmap offset for the GEM object (output) > + * > + * This structure is used with DRM_IOCTL_QDA_GEM_MMAP_OFFSET to retrieve > + * the mmap offset that can be used with mmap() to map the GEM object into > + * user space. > + */ > +struct drm_qda_gem_mmap_offset { > + __u32 handle; > + __u32 pad; > + __u64 offset; I'm really not a fan of the pad field in the middle of the structure. > +}; > + > #if defined(__cplusplus) > } > #endif > > -- > 2.34.1 > -- With best wishes Dmitry