From nobody Tue Apr 7 01:03:24 2026 Received: from mail-pl1-f180.google.com (mail-pl1-f180.google.com [209.85.214.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0F3333CE8A for ; Tue, 17 Mar 2026 06:41:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729685; cv=none; b=imbwt1GGEk/hq94ncQCWZGEHOBhUMxczOCoN3TNilWiFxYw9S+gYwrvVtjOMz/0jZg5H+n57GINtZCkaBLLgZA3XT2VVvQrkhnODQRZlVWPkXD0+ot1JItLZ60WNafLuLzuMsZ3CaQvX6ixCLoV7YMbZ5NIR43LnG+fiQ4aCEow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729685; c=relaxed/simple; bh=D/gw1r2j34lv0Obpyc96PLFrVbcbQ9vRoATGRk+3awY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BN/AtG6Ps8u2hofh8TbKJ4Sy2kOR94d1w04kqcsuxEH/NpvrrbX/BtoiGfg6WxKaXtkEXosZ1nCijLLKyU0uNP0+PCK91VNEHNtYNIZZWm9G6395/mJB5yxGPAg6hH0aOk4gm4MIPhUjclxNFm8Plj1m2Wz9RL18puJr5HO/E8g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=nO4lbfqP; arc=none smtp.client-ip=209.85.214.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="nO4lbfqP" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2b05761bec1so1813595ad.1 for ; Mon, 16 Mar 2026 23:41:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773729682; x=1774334482; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=m1Qal9owEWmx10nMbdaip52xdARaCO/YU8MURG1lRk8=; b=nO4lbfqP6hZ92SvnN+A1LFUZ0xRYkXhSdDwIOuHS63bisYhcO4cAsUPRcMJQiThquX 9OGf6QRw03cLcQlvAsqK6/6tJbF3gMwRsRl7gsHGojXgpYBL4OTlNtMPH6hJ9ABbao8X 4o4Un6DVKXpKqp/uzO/WlRPn7Ve/yXBoAGKxQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773729682; x=1774334482; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=m1Qal9owEWmx10nMbdaip52xdARaCO/YU8MURG1lRk8=; b=Scr+zcFaYVVIp08zqlucmb5COxMfIYrooz7EwNGomdUWIIvPAIhFKLq4b8x0yoWFZ+ jnyesLCLjS1vSW6Dy01EZt9AqrLOHWU5EaTahayP7yH1disE1xH59MdgI4FS8NIWVrK5 FqRJsjX3RjV5PEz2rJcesRsl94H4OwoTxN8Y/7H2PpPqbBZcYf0cUAOwzHR1bqFRhGlk Ffh3FQpolHEM186Qssd6qtctTKJZ6VYcyZN9iKMF3Mofir8AwHvPBVqSInsdAPjzHN9A WJXB71GmbdR+wWvygHb6h/ViWB+iFDK/55TfMMqVAJxDg4bvqphLUu4tLMtWB9s4cm4x QXSg== X-Forwarded-Encrypted: i=1; AJvYcCUSRvvKJIXVy1g8QhonShx+ZwTwCpuZ+wUzxQDdGRCLFEhaW/bQNYGgd2tf8kktoBCuK2KAo9k52ZCRjCQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzDqJopr3KQ1V98my4IsduqFViOqfB6tnM79vDx0Z87p3ded1XS e6CfwgNGOBSeS+DQwcLLTrncbEbL8Zm6XLfRu9vof7AuUjlCMuP06okw42K4lY7t7w== X-Gm-Gg: ATEYQzyFAwVuU1782apI9OGWCs2JvHChD+ZLp5jxoY7amtGzMat/QrcWYie0skOZ0a6 7alXu2gjsw39bgjGBQ4exAWXiLlffH9qj9nigdnBKut4jn1RoDnInU9p5RHZSDThVaYubAULXFH 5ABLmovBVgHlRdIR+QmF+V9pYmIkQVibSFfDnczqdMQdaZ3H4VUkJ623tWpY4n4cXDXoyaOLi2F G6EefIur5FPM4w1jEY89vTRskiFZGroIl4STVl2ExqpDM2tgAidojjXOJiNyhpfE0UtVZ6NFsnw 0EdeZcc3t9Dd+8To3sBjtrn2IgmAc4uYCLtnoJ/W24UqG/w7djNiP2YeN4awSi0bhZqQ9P3ALPu cz5c61Joi3OEle8hKYqQSnzcMWHb8y2c9zeOTvJMRSw3e0IQmMV1ESllFgCGWnA7b4/79lLbNub oTMLPjax0UucWaxgc8GIFJCISYZ4xb8ovVqw+UgSY5VksQrNuJ1x71f/GRsQzauvAUNfZRpm9pL DuOhG1g X-Received: by 2002:a17:903:2411:b0:2ae:cd2c:8f30 with SMTP id d9443c01a7336-2b06357ec34mr19215525ad.1.1773729682153; Mon, 16 Mar 2026 23:41:22 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:a064:c65d:a199:5cb6]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2aece605231sm124269425ad.27.2026.03.16.23.41.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 23:41:21 -0700 (PDT) From: Chen-Yu Tsai To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Rob Herring , Laurent Pinchart , Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, asahi@lists.linux.dev Subject: [PATCH v2 1/4] drm/rcar-du: Use drm_gem_dma_get_sg_table() helper to get scatter gather table Date: Tue, 17 Mar 2026 14:40:43 +0800 Message-ID: <20260317064049.696795-2-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-goog In-Reply-To: <20260317064049.696795-1-wenst@chromium.org> References: <20260317064049.696795-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The rcar-du driver is directly calling dma_get_sgtable() on a drm_gem_dma_object. Not passing the dma_attrs field in may cause problems when DMA_ATTR_NO_KERNEL_MAPPING is added to the GEM DMA helpers gain support later. Instead, use the drm_gem_dma_get_sg_table() helper to get the scatter gather table. Signed-off-by: Chen-Yu Tsai --- Changes since v1: - new patch Not sure if we should add a helper like drm_fb_dma_get_gem_addr(). This seems to be the only driver that is using a scatter gather table to pass DMA addresses. --- drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c b/drivers/gpu/dr= m/renesas/rcar-du/rcar_du_vsp.c index 94c22d2db197..6a62608ee3a9 100644 --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c @@ -291,10 +291,16 @@ int rcar_du_vsp_map_fb(struct rcar_du_vsp *vsp, struc= t drm_framebuffer *fb, dst =3D sg_next(dst); } } else { - ret =3D dma_get_sgtable(rcdu->dev, sgt, gem->vaddr, - gem->dma_addr, gem->base.size); - if (ret) + struct sg_table *ret_sgt; + + ret_sgt =3D drm_gem_dma_get_sg_table(gem); + if (IS_ERR(ret_sgt)) { + ret =3D PTR_ERR(ret_sgt); goto fail; + } + + memcpy(sgt, ret_sgt, sizeof(*sgt)); + kfree(ret_sgt); } =20 ret =3D vsp1_du_map_sg(vsp->vsp, sgt); --=20 2.53.0.851.ga537e3e6e9-goog From nobody Tue Apr 7 01:03:24 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8FBA433F369 for ; Tue, 17 Mar 2026 06:41:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729686; cv=none; b=LWhk9ZNBW+rOtuO55yzLebvgt73oQEmh1hfARNum8AiVV+pUiOi3L4z5gR0zQgY8EzNG63d4q8KNG1y7+WOQKdNZNYIrxXczuqGS9UBlvMShO8WxNzGtlvPz0HuZFC5lcsKC+GSD45BhQpKb/47ZUv9YH55rzb3jXKIgMS4KEV8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729686; c=relaxed/simple; bh=K5zbRFeXpdZLY5xv8AuAeuYSYs9BVhm6Sj6nRcTzF6g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R8v9ShTpRnaY4lCfyURl8Nal8IPPXD6x75Cqir7tyAUq9qJOLs71akl3/P1qRy1yH8PwDmb88u+/cKccW0i1MP4b01CGDbPjQ0G46sUs4zR0P+E5ifV4begrvHBzMpjfCsQrncRnElE1tkeTnkEXYOQHCn0QSjlDMcIkJC85aoc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=fD93E9VG; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="fD93E9VG" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2addb31945aso41339655ad.1 for ; Mon, 16 Mar 2026 23:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773729685; x=1774334485; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nvknyLemjW45Ap19tt73jCMr/JsVlCyt3yofdVpnnZw=; b=fD93E9VGIkmEaUOXkI631npiW66afm8dE4N6f3b1gfsyXfea9TfLac8MpfkiElBpg0 dDh5YXrgYn9JfOiaQYIpJLNEtljpABf5WQBRGIvcbbeqZhC9w0aiPFtFXACiHyOeocL5 NvnhzMlx/RC37V4/FOwVtRyDk3yt6cc5Wb0N4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773729685; x=1774334485; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=nvknyLemjW45Ap19tt73jCMr/JsVlCyt3yofdVpnnZw=; b=bO+Bp2eGdAUu/FisKcz+kTn8o8020knO/C+Gvt93AZqSwAP1xaIFB5I/Eu81nJx2Wp lKMuKT3X2FYjRazRxuRTfGLVoNTo318rG7nFgmMw3msEhXPasAKFsQC9kQDWNhfeIuba pbvMY9qz/PVYqKqkerHthjtVdniRiDseqVXLuMI4hl01ejLt7kYQBKIhD66bfrlIwYxq j7VR7LScMG6YFhS9pi4vRzgVvE6bR1LCitWayLZ6d+ZgvbF0CiE5UuvgO5tMLYL4kyJg wRAGCobR8XyH5d3/gPC5nQ1rBcBnH4qThZXQhQWTqjusVDf+2sOZG0Ljo8eEsRxg9PGJ z8BQ== X-Forwarded-Encrypted: i=1; AJvYcCUONk39avpTvJXinXAlWO0nSkQTaXk8j+sVzqOjE3hTrA26OfgNVxvrNK5NfLrO+PffxXHOwJn98YLNxSs=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7/2d5kRKHmZzzkXQi40ve/JPduh4k9KNZqxMUr+5ndmLXUQCM HdVzRqLnz/Bc/nu3wg71lD2U/qIbQkVCSni3nw0cUo0KUcRv0JB6GHVnuCm+0Awsxw== X-Gm-Gg: ATEYQzxdKhW0ObMSD029OWSRFC1RrkTqfEic78Q4UV4Hrqm3uK5yMVCoYrHp84mCy1O YPUmJHDuiMZjzs1higYZQlDij4pyDN2iqgkIzGQ4TXtdGby8VXFHjluZHrDyPyorMHep2Ap9COf 0h7i0MsDoMfwE9tEdv1bBYX8lh65uplBb3h+n2yQ06EKnZPHOjUPOsbOjei75TaX+5knpIVaeqO 5grNbgcz3uQcCik+6zbrLnpKUMTVjpMIQf9cphkb6nYwdNRt+ODfF4wWP/gTaSB3pRxfOcKtUKr oLrVPyDKOeqUaYsXZw6gnIsxP2CEwMXMw/G2gg6qwyrwo77IpgqB0zNaPKp6Tz7m6EyXaE/2pWw uodR4BrBtAYdYxbhUYWaouJuw/nhG+Y/4+D/5ALEMmSYMwuYqk/6ERZw6aXlHcg/H8qpMKT8WC9 QBlom2mX+zbJQ3HOX5e58NSzRF8fxV4C4lrSFk3WX2TQu38BKdE2CCYKMG06uJs2W0WyzP1RF1g AJS7iz9 X-Received: by 2002:a17:903:2a90:b0:2ae:5628:a18a with SMTP id d9443c01a7336-2aeca940e72mr180774555ad.2.1773729684962; Mon, 16 Mar 2026 23:41:24 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:a064:c65d:a199:5cb6]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2aece605231sm124269425ad.27.2026.03.16.23.41.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 23:41:24 -0700 (PDT) From: Chen-Yu Tsai To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Rob Herring , Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, asahi@lists.linux.dev, Chen-Yu Tsai Subject: [PATCH v2 2/4] drm: Introduce DRM_MODE_DUMB_KERNEL_MAP flag Date: Tue, 17 Mar 2026 14:40:44 +0800 Message-ID: <20260317064049.696795-3-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-goog In-Reply-To: <20260317064049.696795-1-wenst@chromium.org> References: <20260317064049.696795-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Rob Herring Introduce a new flag, DRM_MODE_DUMB_KERNEL_MAP, for struct drm_mode_create_dumb. This flag is for internal kernel use to indicate if dumb buffer allocation needs a kernel mapping. This is needed only for CMA where creating a kernel mapping or not has to be decided at allocation time because creating a mapping on demand (with vmap()) is not guaranteed to work. Several drivers are using CMA, but not the CMA helpers because they distinguish between kernel and userspace allocations to create a kernel mapping or not. Update the callers of drm_mode_dumb_create() to set drm_mode_dumb_create.flags to appropriate defaults. Currently, flags can be set to anything by userspace, but is unused within the kernel. Let's force flags to zero (no kernel mapping) for userspace callers by default. For in kernel clients, set DRM_MODE_DUMB_KERNEL_MAP by default. Drivers can override this as needed. Signed-off-by: Rob Herring [wenst@chromium.org: Emit warning if args->flags is not zero] Signed-off-by: Chen-Yu Tsai --- Changes since v1: - Emit warning if args->flags is not zero --- drivers/gpu/drm/drm_client.c | 1 + drivers/gpu/drm/drm_dumb_buffers.c | 4 ++++ include/uapi/drm/drm_mode.h | 2 ++ 3 files changed, 7 insertions(+) diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c index 46c465bce98c..1a57e7eadc0f 100644 --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -404,6 +404,7 @@ drm_client_buffer_create_dumb(struct drm_client_dev *cl= ient, u32 width, u32 heig dumb_args.width =3D width; dumb_args.height =3D height; dumb_args.bpp =3D drm_format_info_bpp(info, 0); + dumb_args.flags =3D DRM_MODE_DUMB_KERNEL_MAP; ret =3D drm_mode_create_dumb(dev, &dumb_args, client->file); if (ret) return ERR_PTR(ret); diff --git a/drivers/gpu/drm/drm_dumb_buffers.c b/drivers/gpu/drm/drm_dumb_= buffers.c index e2b62e5fb891..ccdcc401d4dc 100644 --- a/drivers/gpu/drm/drm_dumb_buffers.c +++ b/drivers/gpu/drm/drm_dumb_buffers.c @@ -233,6 +233,10 @@ int drm_mode_create_dumb_ioctl(struct drm_device *dev, struct drm_mode_create_dumb *args =3D data; int err; =20 + if (args->flags) + drm_warn(dev, "drm_mode_create_dumb.flags is not zero.\n"); + args->flags =3D 0; + err =3D drm_mode_create_dumb(dev, args, file_priv); if (err) { args->handle =3D 0; diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h index 3693d82b5279..7d5f50e4af70 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h @@ -1272,6 +1272,8 @@ struct drm_mode_create_dumb { __u64 size; }; =20 +#define DRM_MODE_DUMB_KERNEL_MAP (1<<0) /* For internal kernel use */ + /* set up for mmap of a dumb scanout buffer */ struct drm_mode_map_dumb { /** Handle for the object being mapped. */ --=20 2.53.0.851.ga537e3e6e9-goog From nobody Tue Apr 7 01:03:24 2026 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 92AB633F5BE for ; Tue, 17 Mar 2026 06:41:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729689; cv=none; b=KH4/SYkbeZ7ULDKUmEc6U8dLyRIp42ByhPVLZIwHiQQX2j7sT9Q8cS/JMD7fqAtI8DWrXkUaQuBni3KsFvXL6psXyrFXRv8XtCvIg/jtwuXyEuDtc8LtXIJr5Ufmo/G0bwbtYIMGu7XF+ZMwgwNvciYY81q2CvIceGSXlndk77U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729689; c=relaxed/simple; bh=MBgJA1Xwf/X1DLoh3ax7tabp8ViIY1hzcXxBmKVvQqo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z/Rv5+piNsdrzNbCSyGgPCUCJT65Es8+hg7zJGFe7s/vuMmeyIBrILWpuasZMZ9970rIjbguocQ5p8QrO8/Z5dXgAORNq+QAKL6kbSINVNtqd4m39+gOjDa9go/6CoTis9WYwWNiIuIPxOBOyZ1VAx57oqvg/NVQjIDEKu6qVvU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=KRFiksuO; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="KRFiksuO" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2aaf59c4f7cso25999315ad.1 for ; Mon, 16 Mar 2026 23:41:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773729688; x=1774334488; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=beYKL+KpJYqTN09SlrzQ/IJhFB/kZtPqCQ/2b0LTAW0=; b=KRFiksuOG8Ho/yWQ6cADG6yNgyN8u6GDx7WIeuRi0npFvXy8R6Ej+wiEpYLsGN5gAb wccRi8hxTQx+BuBv37yEmapr/BmewxrWp7Sz+aKKjJrQLpGh/z7IUT6fvq6qKdVsvvah LvYZfpVvIFF940R9GFHmZM0tWKJlQLNpPuBqc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773729688; x=1774334488; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=beYKL+KpJYqTN09SlrzQ/IJhFB/kZtPqCQ/2b0LTAW0=; b=GCtq0D1DTZAr9p6CJ7CJaogqD6qkR9zMlic558F8OibnLnuq2cwyMXgKkT7xUHV6n0 IBPwOn4pHeRDJM/0lUl04oSHCeU+gAEHBEnd54WtEVYIoSFqDlJL2MQIvSbcZ/5zEBYs BKqU2pKreA1M4ttbWsAriitwm+bw4X45y7JaqQSKWMkWCedaaK8w+1sbk+nODCz9e9AU LWQI39kdecSvNr3ivL6WzZ6E1pKb/Z+gnlzn+/+xHTB8TymqBmRo/Ca/8qv5wVIB5Kma 4rCafkNET2zJRx1albbp00vGLn4QiwwJblFDqyegibcmEwe8eHYuIRP8PFOb6DR+ST80 t8ig== X-Forwarded-Encrypted: i=1; AJvYcCVGE5Jgv5HfnI9BmB+8po0sRYjIACiRpKl7qz/RLB2no7pRT9RHDG5VJR6C7cSQ0UU7iU+nxm/ZppFTgxQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyGYPOkmrobPyvSReGz1Jm14OGYrAVe1YxYXs9K3xfLLp8QiUb4 31Cb1yY0hgFshGCjAx6h5SCMFcAXReIg5gmBRUeVkrH4Y4gSh6VdyuGSk3+wHFBdMA== X-Gm-Gg: ATEYQzx18gwSNvPyp/1YwfjJuJorK8YVu7GKMtvbKnXUSs4SPC9qLU6dxdU2iMJOXLz AkoZqeaSKO1b2rkJ8Oi1qZ+4n2Ck/ZSaWHWCgndp3Ml8qMn9ge6pKgEWnIH0Ia38EtUbeZC1G3J LfiZfGjuRIbMe/YnccJx14Z9w3CHgAVw9SiLul5Cy4FRUEV8Mk9D0tEoxvz0SLb00MeIzMIpTtn O2n8RTvgu9D7cFzGPVxpGiElo14lBWj85e/VpBqpY5cqI9UGuyqLI6HzgZ8acEud24/rtB2LDqx VqYdniklFwOO/jP388dXyQywjpR3XMvZDXgct9pfDjaDZKSGN/8E6sob6ZMP5wngysnvw02Ots5 fuiULm5SWbu9JFz2g141H8j/6PS3eZC74s772VRR5z0U/rZ1VHTPEBlNIzSN78KLj1Ln9RtZukc /KJrHQ0vCIJO7XpY11GLJ4o9BqIJ667TyaV+wR52UcDdkSVxmnXoFluf5ODZkczYKBXrtcR/og4 cnMITOI X-Received: by 2002:a17:903:37d0:b0:2b0:4a57:e498 with SMTP id d9443c01a7336-2b04a57e8demr100300115ad.15.1773729688017; Mon, 16 Mar 2026 23:41:28 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:a064:c65d:a199:5cb6]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2aece605231sm124269425ad.27.2026.03.16.23.41.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 23:41:27 -0700 (PDT) From: Chen-Yu Tsai To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Rob Herring , Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, asahi@lists.linux.dev, Chen-Yu Tsai Subject: [PATCH v2 3/4] drm/gem-dma: Use the dma_*_attr API variant Date: Tue, 17 Mar 2026 14:40:45 +0800 Message-ID: <20260317064049.696795-4-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-goog In-Reply-To: <20260317064049.696795-1-wenst@chromium.org> References: <20260317064049.696795-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Rob Herring In preparation to allow DRM DMA users to adjust the DMA_ATTR_* flags, convert the DMA helper code to use the dma_*_attr APIs instead of the dma_*_wc variants. Only the DMA_ATTR_WRITE_COMBINE and DMA_ATTR_NO_WARN attributes are set in this commit, so there's no functional change. Also change the dma_free_wc() call in vc4_bo_purge() in the vc4 driver to use dma_free_attrs() to match. vc4_bo is a sub-class of drm_gem_dma_object. Sub-classes of |struct drm_gem_dma_object| can also set additional DMA_ATTR_* flags if they choose so. For example a sub-class could set DMA_ATTR_FORCE_CONTIGUOUS in certain cases. Signed-off-by: Rob Herring [wenst@chromium.org: Rebase onto renamed DMA helpers] [wenst@chromium.org: Make vc4_bo_purge() use matching dma_free_attrs()] [wenst@chromium.org: Expand commit message to mention that sub-classes can set extra DMA_ATTR_* flags] Signed-off-by: Chen-Yu Tsai --- Changes since v1: - Rebased onto renamed DMA helpers - Made vc4_bo_purge() use matching dma_free_attrs() - Expanded commit message to mention that sub-classes can set extra DMA_ATTR_* flags --- drivers/gpu/drm/drm_gem_dma_helper.c | 26 +++++++++++++++----------- drivers/gpu/drm/vc4/vc4_bo.c | 2 +- include/drm/drm_gem_dma_helper.h | 3 +++ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem= _dma_helper.c index 1c00a71ab3c9..9722c9fc86f3 100644 --- a/drivers/gpu/drm/drm_gem_dma_helper.c +++ b/drivers/gpu/drm/drm_gem_dma_helper.c @@ -108,6 +108,7 @@ __drm_gem_dma_create(struct drm_device *drm, size_t siz= e, bool private) goto error; } =20 + dma_obj->dma_attrs |=3D DMA_ATTR_NO_WARN | DMA_ATTR_WRITE_COMBINE; return dma_obj; =20 error: @@ -152,9 +153,10 @@ struct drm_gem_dma_object *drm_gem_dma_create(struct d= rm_device *drm, DMA_TO_DEVICE, GFP_KERNEL | __GFP_NOWARN); } else { - dma_obj->vaddr =3D dma_alloc_wc(drm_dev_dma_dev(drm), size, - &dma_obj->dma_addr, - GFP_KERNEL | __GFP_NOWARN); + dma_obj->vaddr =3D dma_alloc_attrs(drm_dev_dma_dev(drm), size, + &dma_obj->dma_addr, + GFP_KERNEL | __GFP_NOWARN, + dma_obj->dma_attrs); } if (!dma_obj->vaddr) { drm_dbg(drm, "failed to allocate buffer with size %zu\n", @@ -242,9 +244,9 @@ void drm_gem_dma_free(struct drm_gem_dma_object *dma_ob= j) dma_obj->vaddr, dma_obj->dma_addr, DMA_TO_DEVICE); else - dma_free_wc(drm_dev_dma_dev(gem_obj->dev), - dma_obj->base.size, dma_obj->vaddr, - dma_obj->dma_addr); + dma_free_attrs(drm_dev_dma_dev(gem_obj->dev), + dma_obj->base.size, dma_obj->vaddr, + dma_obj->dma_addr, dma_obj->dma_attrs); } =20 drm_gem_object_release(gem_obj); @@ -435,8 +437,9 @@ struct sg_table *drm_gem_dma_get_sg_table(struct drm_ge= m_dma_object *dma_obj) if (!sgt) return ERR_PTR(-ENOMEM); =20 - ret =3D dma_get_sgtable(drm_dev_dma_dev(obj->dev), sgt, dma_obj->vaddr, - dma_obj->dma_addr, obj->size); + ret =3D dma_get_sgtable_attrs(drm_dev_dma_dev(obj->dev), sgt, + dma_obj->vaddr, dma_obj->dma_addr, + obj->size, dma_obj->dma_attrs); if (ret < 0) goto out; =20 @@ -546,9 +549,10 @@ int drm_gem_dma_mmap(struct drm_gem_dma_object *dma_ob= j, struct vm_area_struct * vma, vma->vm_end - vma->vm_start, virt_to_page(dma_obj->vaddr)); } else { - ret =3D dma_mmap_wc(drm_dev_dma_dev(dma_obj->base.dev), vma, - dma_obj->vaddr, dma_obj->dma_addr, - vma->vm_end - vma->vm_start); + ret =3D dma_mmap_attrs(drm_dev_dma_dev(dma_obj->base.dev), vma, + dma_obj->vaddr, dma_obj->dma_addr, + vma->vm_end - vma->vm_start, + dma_obj->dma_attrs); } if (ret) drm_gem_vm_close(vma); diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c index f45ba47b4ba8..981593739a0f 100644 --- a/drivers/gpu/drm/vc4/vc4_bo.c +++ b/drivers/gpu/drm/vc4/vc4_bo.c @@ -304,7 +304,7 @@ static void vc4_bo_purge(struct drm_gem_object *obj) =20 drm_vma_node_unmap(&obj->vma_node, dev->anon_inode->i_mapping); =20 - dma_free_wc(dev->dev, obj->size, bo->base.vaddr, bo->base.dma_addr); + dma_free_attrs(dev->dev, obj->size, bo->base.vaddr, bo->base.dma_addr, bo= ->base.dma_attrs); bo->base.vaddr =3D NULL; bo->madv =3D __VC4_MADV_PURGED; } diff --git a/include/drm/drm_gem_dma_helper.h b/include/drm/drm_gem_dma_hel= per.h index f2678e7ecb98..e815ff121e23 100644 --- a/include/drm/drm_gem_dma_helper.h +++ b/include/drm/drm_gem_dma_helper.h @@ -16,6 +16,8 @@ struct drm_mode_create_dumb; * more than one entry but they are guaranteed to have contiguous * DMA addresses. * @vaddr: kernel virtual address of the backing memory + * @dma_attrs: DMA attributes used when allocating backing memory. + * Only applies to coherent memory. * @map_noncoherent: if true, the GEM object is backed by non-coherent mem= ory */ struct drm_gem_dma_object { @@ -25,6 +27,7 @@ struct drm_gem_dma_object { =20 /* For objects with DMA memory allocated by GEM DMA */ void *vaddr; + unsigned long dma_attrs; =20 bool map_noncoherent; }; --=20 2.53.0.851.ga537e3e6e9-goog From nobody Tue Apr 7 01:03:24 2026 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E095933FE0D for ; Tue, 17 Mar 2026 06:41:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729693; cv=none; b=TMXeRbo4Jj/w6I4hLmZ/P5mAb94g6vh5ebeVC5meXX4NXKiwHMYlM+KIiE9YSORL23biMC1SICwjOpHEapLqxpg/0mwgPoH4uTTxqFaQb2DavxAuZp19C5sgEokHxSIgYD6nrHfIsByJ3a42Qt8z1clF0tDXYSlwrlJ/MzV4T50= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773729693; c=relaxed/simple; bh=93P8QocL6QULHfeE9WND83Chole/3U0ixH53QORnDMY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WiYcWTqrOKk8+09BPyy9J1odmTrLISgPx1GDnmbNvreAYzWY4lY70trtP/9DehNx6ISzS5ucK6/Yc1vNmWnotzUyI7K1IDLpptVTi20R88zBXcMNjULzEVW2BC9aCUgpTc99SbDVaDQ2vqAJ0klwd6exn7nS8ksw2FVmUj9Ske0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=eVirLKzh; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="eVirLKzh" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2aaed195901so25224265ad.0 for ; Mon, 16 Mar 2026 23:41:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773729691; x=1774334491; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1GwlbKCuRkMEJtcMvq6Y2vEjKV9Tt6Itzx4uW6Jnu0w=; b=eVirLKzhZgvGvCBFaZGSDJqbgFiD5hGHGI0NF8czSp5K0A1rc7l6SLbGDijY0T5z+N yCvjatGfeQPvnCECRsyizZqV+M0+KXvpaLcLEfRGVxAk6XlOwEVTDPXaefGrAF/ZZ2nY hcRc0PQzpGeMKiSugCRp8Ak7SJ2I4v2VEYQbk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773729691; x=1774334491; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=1GwlbKCuRkMEJtcMvq6Y2vEjKV9Tt6Itzx4uW6Jnu0w=; b=p3bOScNFIZXWe/WV8gWE03oPIYex3cbE/M2WApDkEb/JnXes8bdf8WDyGCGq6kKCG6 a78RhwEWx2WajoIWyyWlozncwbTDfxnvEREmlSAhuiqLq8RGKpt1hLiYPVXCChKNARrs oeQ5UD+nYxVAne3CXeQbDzlV+vuYA8/arTRGUrB6LEe8NYfdet2YoS3RtgYhlQXMuavx LXQsYtol0YsKDefitN5EtDOcsxpMW1B4FvCqhahIEizMtHcyxLftTBXfgQEdKtawv3lx JzUrVU7Nup34Kybm7D3zNzWA9gitIknTZaVYCSKSl3GlCNw676Wl9xW0gLAHrU1vQr7l ymGQ== X-Forwarded-Encrypted: i=1; AJvYcCVNp88rBm9Ks6qyIO8LOc6+SKi6tt6rjPUH4AOnu4blvTJdKPQSj9MczFWnzkjuSk66t/BiRk/Z7U624vE=@vger.kernel.org X-Gm-Message-State: AOJu0YyckfGmDGX4XDGoNAPdUfSt/6ZL4TyfjtxxNqK5y86BVPoGPSwl d0n2Yb88rcK/3j/zqfrD5cINhjNiyoK5xJJOk8fcWsTN7ulYUDxKa0OQUBBxocw86w== X-Gm-Gg: ATEYQzyI8BuosxuPq9o+lWvhI2yxcop8W7SsRdpOUtaw/Ki50HMNcsoUbSYzp/jlZdK RRL+fVyCNdCS+dfFXTcBBGyQxM6txcrJUK4DlIguUuR5xP9pf+IyeGwYS6mfagxsIVKauap2vmp ktzuH2Ik53dsTg5UPMyO7OmehQjisMS45mwsWWNGkmI8HOZCnsJJspHLg0sizrkKP7o787Z3VOH SM29lgMBa7mDUU2O9lIym9xiAu8pCa6xC1dlQOPieqk2KTHac4gDhbNAPNPSRf5yslLXT7It3c4 goh7JM+VzyAvYDynj7k6Rd/maVbbQbzYjXtMHCXLGVXj45eopBvVjjvEYcq3DxhZ87U5J6HwIAb O9rttOO2Q5P3VdSzh36TAMg7HYSPRY9hVVVlcqrT48/shePIDnHP0eHprOwRJnsiJzFylswNUbb ehQ/2zDitficV/fjfYWN1Ww+8xFj2bVz0zI2L01sA2JWnDaiofNtapYuIQj4Twgt+mSpcR00G8o 9/Jo5A0 X-Received: by 2002:a17:902:ecd2:b0:2b0:5a4c:726a with SMTP id d9443c01a7336-2b05a5bbfdfmr53881605ad.43.1773729691244; Mon, 16 Mar 2026 23:41:31 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:a064:c65d:a199:5cb6]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2aece605231sm124269425ad.27.2026.03.16.23.41.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 23:41:30 -0700 (PDT) From: Chen-Yu Tsai To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Rob Herring , Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, asahi@lists.linux.dev, Chen-Yu Tsai , Sasha Finkelstein , Janne Grunau Subject: [PATCH v2 4/4] drm/gem-dma: Support DRM_MODE_DUMB_KERNEL_MAP flag Date: Tue, 17 Mar 2026 14:40:46 +0800 Message-ID: <20260317064049.696795-5-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.851.ga537e3e6e9-goog In-Reply-To: <20260317064049.696795-1-wenst@chromium.org> References: <20260317064049.696795-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Rob Herring Add support in DMA helpers to handle callers specifying DRM_MODE_DUMB_KERNEL_MAP flag. Existing behavior is maintained with this change. drm_gem_dma_dumb_create() always creates a kernel mapping as before. drm_gem_dma_dumb_create_internal() lets the caller set the flags as desired. Most drivers that use drm_gem_dma_dumb_create_internal() are already using the internal client interface via drm_client_setup*() and DRM_FBDEV_DMA_DRIVER_OPS, and do not have other direct kernel accesses to the buffer memory internally. Therefore, there is no need to add the DRM_MODE_DUMB_KERNEL_MAP flag for them. The only outlier is the adp driver. The DRM_MODE_DUMB_KERNEL_MAP flag is added to its dumb_create() function, adp_drm_gem_dumb_create(). Signed-off-by: Rob Herring [wenst@chromium.org: Rebase onto renamed GEM DMA helpers] [wenst@chromium.org: show "vaddr=3D(no mapping)" in drm_gem_dma_print_info(= )] [wenst@chromium.org: Drop DRM_MODE_DUMB_KERNEL_MAP driver changes] [wenst@chromium.org: Add DRM_MODE_DUMB_KERNEL_MAP to adp_drm_gem_dumb_creat= e()] [wenst@chromium.org: Add flags field to drm_gem_dma_create_with_handle() kerneldoc] Signed-off-by: Chen-Yu Tsai --- Changes since v1: - Rebased onto renamed GEM DMA helpers - Added check in drm_fb_dma_get_scanout_buffer() and drm_gem_dma_vmap(). - Made drm_gem_dma_print_info() show "vaddr=3D(no mapping)" for objects allocated without kernel mapping - Dropped existing DRM_MODE_DUMB_KERNEL_MAP flag addition in various drivers - Added DRM_MODE_DUMB_KERNEL_MAP flag to adp_drm_gem_dumb_create() - Added flags field kerneldoc for drm_gem_dma_create_with_handle() Cc: Sasha Finkelstein Cc: Janne Grunau Cc: asahi@lists.linux.dev --- drivers/gpu/drm/adp/adp_drv.c | 1 + drivers/gpu/drm/drm_fb_dma_helper.c | 4 ++ drivers/gpu/drm/drm_gem_dma_helper.c | 67 +++++++++++++++++----------- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/adp/adp_drv.c b/drivers/gpu/drm/adp/adp_drv.c index 4554cf75565e..c549b44b3814 100644 --- a/drivers/gpu/drm/adp/adp_drv.c +++ b/drivers/gpu/drm/adp/adp_drv.c @@ -95,6 +95,7 @@ static int adp_drm_gem_dumb_create(struct drm_file *file_= priv, { args->height =3D ALIGN(args->height, 64); args->size =3D args->pitch * args->height; + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; =20 return drm_gem_dma_dumb_create_internal(file_priv, drm, args); } diff --git a/drivers/gpu/drm/drm_fb_dma_helper.c b/drivers/gpu/drm/drm_fb_d= ma_helper.c index fd71969d2fb1..12a44accc48c 100644 --- a/drivers/gpu/drm/drm_fb_dma_helper.c +++ b/drivers/gpu/drm/drm_fb_dma_helper.c @@ -187,6 +187,10 @@ int drm_fb_dma_get_scanout_buffer(struct drm_plane *pl= ane, if (!dma_obj->vaddr) return -ENODEV; =20 + /* Buffer was allocated with NO_KERNEL_MAPPING */ + if (dma_obj->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) + return -ENODEV; + iosys_map_set_vaddr(&sb->map[0], dma_obj->vaddr); sb->format =3D fb->format; sb->height =3D fb->height; diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem= _dma_helper.c index 9722c9fc86f3..281fb563f061 100644 --- a/drivers/gpu/drm/drm_gem_dma_helper.c +++ b/drivers/gpu/drm/drm_gem_dma_helper.c @@ -116,26 +116,8 @@ __drm_gem_dma_create(struct drm_device *drm, size_t si= ze, bool private) return ERR_PTR(ret); } =20 -/** - * drm_gem_dma_create - allocate an object with the given size - * @drm: DRM device - * @size: size of the object to allocate - * - * This function creates a DMA GEM object and allocates memory as backing = store. - * The allocated memory will occupy a contiguous chunk of bus address spac= e. - * - * For devices that are directly connected to the memory bus then the allo= cated - * memory will be physically contiguous. For devices that access through an - * IOMMU, then the allocated memory is not expected to be physically conti= guous - * because having contiguous IOVAs is sufficient to meet a devices DMA - * requirements. - * - * Returns: - * A struct drm_gem_dma_object * on success or an ERR_PTR()-encoded negati= ve - * error code on failure. - */ -struct drm_gem_dma_object *drm_gem_dma_create(struct drm_device *drm, - size_t size) +static struct drm_gem_dma_object * +drm_gem_dma_create_flags(struct drm_device *drm, size_t size, u32 flags) { struct drm_gem_dma_object *dma_obj; int ret; @@ -146,6 +128,9 @@ struct drm_gem_dma_object *drm_gem_dma_create(struct dr= m_device *drm, if (IS_ERR(dma_obj)) return dma_obj; =20 + if (!(flags & DRM_MODE_DUMB_KERNEL_MAP)) + dma_obj->dma_attrs |=3D DMA_ATTR_NO_KERNEL_MAPPING; + if (dma_obj->map_noncoherent) { dma_obj->vaddr =3D dma_alloc_noncoherent(drm_dev_dma_dev(drm), size, @@ -171,6 +156,30 @@ struct drm_gem_dma_object *drm_gem_dma_create(struct d= rm_device *drm, drm_gem_object_put(&dma_obj->base); return ERR_PTR(ret); } + +/** + * drm_gem_dma_create - allocate an object with the given size + * @drm: DRM device + * @size: size of the object to allocate + * + * This function creates a DMA GEM object and allocates memory as backing = store. + * The allocated memory will occupy a contiguous chunk of bus address spac= e. + * + * For devices that are directly connected to the memory bus then the allo= cated + * memory will be physically contiguous. For devices that access through an + * IOMMU, then the allocated memory is not expected to be physically conti= guous + * because having contiguous IOVAs is sufficient to meet a devices DMA + * requirements. + * + * Returns: + * A struct drm_gem_dma_object * on success or an ERR_PTR()-encoded negati= ve + * error code on failure. + */ +struct drm_gem_dma_object *drm_gem_dma_create(struct drm_device *drm, + size_t size) +{ + return drm_gem_dma_create_flags(drm, size, DRM_MODE_DUMB_KERNEL_MAP); +} EXPORT_SYMBOL_GPL(drm_gem_dma_create); =20 /** @@ -179,6 +188,7 @@ EXPORT_SYMBOL_GPL(drm_gem_dma_create); * @file_priv: DRM file-private structure to register the handle for * @drm: DRM device * @size: size of the object to allocate + * @flags: DRM_MODE_DUMB_* flags if any * @handle: return location for the GEM handle * * This function creates a DMA GEM object, allocating a chunk of memory as @@ -194,14 +204,14 @@ EXPORT_SYMBOL_GPL(drm_gem_dma_create); */ static struct drm_gem_dma_object * drm_gem_dma_create_with_handle(struct drm_file *file_priv, - struct drm_device *drm, size_t size, + struct drm_device *drm, size_t size, u32 flags, uint32_t *handle) { struct drm_gem_dma_object *dma_obj; struct drm_gem_object *gem_obj; int ret; =20 - dma_obj =3D drm_gem_dma_create(drm, size); + dma_obj =3D drm_gem_dma_create_flags(drm, size, DRM_MODE_DUMB_KERNEL_MAP); if (IS_ERR(dma_obj)) return dma_obj; =20 @@ -283,7 +293,7 @@ int drm_gem_dma_dumb_create_internal(struct drm_file *f= ile_priv, args->size =3D args->pitch * args->height; =20 dma_obj =3D drm_gem_dma_create_with_handle(file_priv, drm, args->size, - &args->handle); + args->flags, &args->handle); return PTR_ERR_OR_ZERO(dma_obj); } EXPORT_SYMBOL_GPL(drm_gem_dma_dumb_create_internal); @@ -313,12 +323,13 @@ int drm_gem_dma_dumb_create(struct drm_file *file_pri= v, struct drm_gem_dma_object *dma_obj; int ret; =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; ret =3D drm_mode_size_dumb(drm, args, 0, 0); if (ret) return ret; =20 dma_obj =3D drm_gem_dma_create_with_handle(file_priv, drm, args->size, - &args->handle); + args->flags, &args->handle); return PTR_ERR_OR_ZERO(dma_obj); } EXPORT_SYMBOL_GPL(drm_gem_dma_dumb_create); @@ -412,7 +423,10 @@ void drm_gem_dma_print_info(const struct drm_gem_dma_o= bject *dma_obj, struct drm_printer *p, unsigned int indent) { drm_printf_indent(p, indent, "dma_addr=3D%pad\n", &dma_obj->dma_addr); - drm_printf_indent(p, indent, "vaddr=3D%p\n", dma_obj->vaddr); + if (dma_obj->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) + drm_printf_indent(p, indent, "vaddr=3D(no mapping)\n"); + else + drm_printf_indent(p, indent, "vaddr=3D%p\n", dma_obj->vaddr); } EXPORT_SYMBOL(drm_gem_dma_print_info); =20 @@ -511,6 +525,9 @@ EXPORT_SYMBOL_GPL(drm_gem_dma_prime_import_sg_table); int drm_gem_dma_vmap(struct drm_gem_dma_object *dma_obj, struct iosys_map *map) { + if (dma_obj->dma_attrs & DMA_ATTR_NO_KERNEL_MAPPING) + return -ENOMEM; + iosys_map_set_vaddr(map, dma_obj->vaddr); =20 return 0; --=20 2.53.0.851.ga537e3e6e9-goog