From nobody Thu Apr 2 22:18:25 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 B61633932FF for ; Thu, 26 Mar 2026 10:03:05 +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=1774519387; cv=none; b=GMSQ928Ye2o3vAkr9uRbk0zS1Y0lwcYcmcGnbA9FjhgC0aAHjfFaqasTXoakiB8s//LoZxwVBhGW5pYadDsH0Sb+6UIsMUA2Jj36y7vHRyasvk3BRZq7sqHInVnPOLSOpDNtAKtKayHrRZo0dcdJhbR/LT2i2iVA4PW3WJg5Omk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774519387; c=relaxed/simple; bh=khlwCqJWWqEE7JjUGZ+Kcl4CJfkin5pcA2vDk1TVaaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uO7L0+cO0SzTSS2Go4LHppg7tpZpB2HHAEX660vv+sypq/UsrCQNEsC/d4P39BOnzorWXnaeRD76wJC6ia9DYZpXyGNvM4GSbs8ZT/yqZFkgDIZxQOSUF/Gre6ggfoEP1dmYMGLKpeYQGyr1fwYv+IX2orM18w1EKK1cdRIe014= 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=oP54dtmI; 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="oP54dtmI" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2ad21f437eeso4572055ad.0 for ; Thu, 26 Mar 2026 03:03:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774519385; x=1775124185; 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=5/bl8GTjOouTlTXh8s/BuHH3L5XK1eHHd49OQHimj5A=; b=oP54dtmI6w0urMd/txBuinNGLHNkBc4Nhlr3h/5L5XMcD3kTjTjqYJigKn5FsjMTrI uXGW8Vx4Xhx3Dhtr84HxLyGHeQZS2MSGkXrEQGML/7lfnWMeBtLYq7oB50i1N8ELNPP/ 4Yi0d731gHORm5NQ5CdJysqw4NaUQiOS7a+G4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774519385; x=1775124185; 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=5/bl8GTjOouTlTXh8s/BuHH3L5XK1eHHd49OQHimj5A=; b=XCNbpxu5Xu3W+6vlmFPQ9byJO2/BcmblFyutyMVhp7dfWLO6+pWfSdGm7aI2niMLUW uP8rX76UNxWhKhn+kd1SHmkCMKgp5B9PNdUx1t4OzWdXzQclE+1AqS0VYNDAeSl6j0s3 LqjvEzyO3O0JsxpylaLq9rak1uMmk92z5lDmWgqj7eqX+R/Gtca3R7FTYNjWLV03r+St eK0oHjKof9eUYuZRq9QT4BxqzzdegqFTLIQZlBkhNo/KqFj8fQbShJ7Pcyin4JgadKJA 89bj/1IL1c5d7t9kVWYAVLQ2DWfvhl46Sm5vqEYCQceKtmwHk4h/TV9JDBpqkHmSKNmu XkrQ== X-Forwarded-Encrypted: i=1; AJvYcCW+MfJYaSKo9eds2y3z5Ky7xf/+6CtnFKZrY6TkP2ID+ZcChgdnqvj/dVTSrLd+D/2iitwpfzhrgh7Gq80=@vger.kernel.org X-Gm-Message-State: AOJu0YxopEUeTLqf6lVjeX7QSMwSG461VedjZKZ875awjXbKYDchIPuo 7T9qpEWDTxpxRnMkvCFv2JYqnDRr9+bHgn2Ly6ks3x06dUOWnKyx5l2EYf1Kd8Nf3g== X-Gm-Gg: ATEYQzwvA/1YNWbqnASHehZiFzz7mQqaRsxLhhwLWcoEy16lnl43Lbr5eAraSqwTTcQ q3p+p55Ag8w1CMJqMXK+2iF2dfbICgsA5Y1mvYgUSp6tCXFF9EFfufsInbN8qLClNL378QyKB0c +JUavI44jCFnssoGpv8KglMitnHdKnmKoCFzDOcr5n9JzapBhlHMv8yTNmMDBhFnG1OwTljJ0zT 9sRM93E6zdBJpe4OxdMIotzRdMVWn3bHxTfV42Bk+uucTYqMXDDHPV3DUNDbLWCV7/sUgIYaWy6 LmCJ0QaSuQkoFY3ADHKXENbbBKri7rKSy/oIwjqVxzzsEf4nmCT0ayuzMiVScV0nyXk16I4VV9E bsNJ2rbnt5Qjn2toES9pBSRc4Pa9FEY+X3NC6NY14H03Dac5isRuI7to/pWW4aFArH/PL6od0za 7WBTFazNncGBuTpsptLhFHiZzxEb0qx7iRW9IO8icqbS1HG/kckCXJspFM/FdjoGkpBktRCMQMY Qz1URja X-Received: by 2002:a17:903:28e:b0:2b0:b3bd:1de3 with SMTP id d9443c01a7336-2b0c483ad89mr10070645ad.7.1774519385036; Thu, 26 Mar 2026 03:03:05 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:3ed5:7e63:b37c:a7d7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0bc7c2942sm23339435ad.36.2026.03.26.03.03.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 03:03:04 -0700 (PDT) From: Chen-Yu Tsai To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Rob Herring , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Chen-Yu Tsai Subject: [PATCH v3 1/3] drm: Introduce DRM_MODE_DUMB_KERNEL_MAP flag Date: Thu, 26 Mar 2026 18:01:43 +0800 Message-ID: <20260326100248.1171828-2-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog In-Reply-To: <20260326100248.1171828-1-wenst@chromium.org> References: <20260326100248.1171828-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 GEM DMA 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 reimplementing the GEM DMA helpers because they distinguish between kernel and userspace allocations to create a kernel mapping or not. Adding a flag allows migrating these drivers to the helpers while preserving their existing behavior. These include exynos, rockchip, and previously mediatek. 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 (once) if args->flags is not zero] [wenst@chromium.org: Moved flag def. to include/drm/drm_dumb_buffers.h] Signed-off-by: Chen-Yu Tsai --- Changes since v2: - Switched to drm_warn_once() - Moved flag definition from include/uapi/ to include/drm/drm_dumb_buffers.h - Reworded commit message Changes since v1: - Emit warning if args->flags is not zero --- drivers/gpu/drm/drm_client.c | 2 ++ drivers/gpu/drm/drm_dumb_buffers.c | 4 ++++ include/drm/drm_dumb_buffers.h | 3 +++ 3 files changed, 9 insertions(+) diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c index 46c465bce98c..3d3e61823cc1 100644 --- a/drivers/gpu/drm/drm_client.c +++ b/drivers/gpu/drm/drm_client.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -404,6 +405,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..60f4c2d08641 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_once(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/drm/drm_dumb_buffers.h b/include/drm/drm_dumb_buffers.h index 1f3a8236fb3d..4657e44533f4 100644 --- a/include/drm/drm_dumb_buffers.h +++ b/include/drm/drm_dumb_buffers.h @@ -6,6 +6,9 @@ struct drm_device; struct drm_mode_create_dumb; =20 +/* drm_mode_create_dumb flags for internal use */ +#define DRM_MODE_DUMB_KERNEL_MAP (1<<0) + int drm_mode_size_dumb(struct drm_device *dev, struct drm_mode_create_dumb *args, unsigned long hw_pitch_align, --=20 2.53.0.1018.g2bb0e51243-goog From nobody Thu Apr 2 22:18:25 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 BD1873CF686 for ; Thu, 26 Mar 2026 10:03:08 +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=1774519390; cv=none; b=uCnnJuefoJifV0wydRWppO9jmBm2cmWglp584SvefHC6gwpxVMYDcwuZuCJhgvn+YC+0iXwUzKPyS4apNiYvbxeHBwABFvX96WrlTYKX2actd+p88gNCR8kCuNIVr0amAE4i3tvxeVlo8JI/D2RRh9RANgWf5G9LBaGtkoUSL5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774519390; c=relaxed/simple; bh=nwXD/p5oA9ja8XukOvMJ0fVuz0xwnadff21JCR6ZBcA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E/TEuFF3fNt15vAMIbQaEioh1/87bG0gHfEn4mw/h0/BOWrOwdbDTda1OesL7Hb1qG+fDqz/M+CydyyS7atvF2CgDg2SUyh4rsoxCYlxasPCVzQJ8j0ERxUB/GmpeH1TJg87MiUh6pghm4esc2oMp8N+y+dWdD2EizWnGtBwgbo= 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=ie3Rn7Pp; 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="ie3Rn7Pp" Received: by mail-pl1-f180.google.com with SMTP id d9443c01a7336-2b0c30b517aso1612615ad.3 for ; Thu, 26 Mar 2026 03:03:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774519388; x=1775124188; 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=i9KkAzXq0JR8TGkENovBJsntvxWB2injAP7fSinZoPY=; b=ie3Rn7PpFdvc/xX9/IW+Aj0lCb37/J/H2J714UiOSAiKwjq5zGyUrgXY5yLxF17oyi r6AKlKVIXyS3VqVrrxIshLUKIHFRn4kol52I5JTv2HOXYo8nFt3XpAUe5+dGitjloYCX FS7+dMGDOZ7R0fmw8S+X8+prGpSyzfbHEC5sI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774519388; x=1775124188; 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=i9KkAzXq0JR8TGkENovBJsntvxWB2injAP7fSinZoPY=; b=hbhEXOK9eUX1W7/pnnUSOu9BHU12F7kX2oxKq6WAtnfapZFuWMjFRjpKur2ZzFbdyQ B9gqXB+6+w3bcreowKdybu6hz+AvgbQGJ7JrIdABM/bJDK7SpHCFLOTWaxPP6IBb5oOX Tg5Th5eUsdqlP9rs3E6OtSb+Pl27Zu0Z6uUHKDP7kn5J4cJdYNTjv98uEnb2PQb7xglY PBeHrN0cSHLPUf0g4sKzB3eG0cpQm5b/OItZbdDu9DVouEUI86Grl0YMPIMPqj5/h1SY p+KPfoAclWZeFCtiV3FdNYf9NulbRAv1DoOtPKO3/OjFfUSYfpVzJCOFFbXh9JWFX77+ t53w== X-Forwarded-Encrypted: i=1; AJvYcCUzRxIlI1af75Tss116HGXlGm6om9AKHKEFoUPNh8+j13udiX9g3CL26qyvPy5PJiGT0PplupLJ5thJq+0=@vger.kernel.org X-Gm-Message-State: AOJu0YzWWb3KdhCJkiLMF6/rz+hWL2Fx3PLhq1b7wiYl2pz57hYBjE93 ZLy2uB/boD0hfODpxGKKjMMn2fCapBpMj2kjFIZ6oaQuTFTB87pQhPf1LHOWzI73kA== X-Gm-Gg: ATEYQzx26GxAZ00ewOu4lZ2e+1tG+3zD/MFL1Pn5gc8yhTeoSM5eOOYasGG66/XOUKi dHLeGMXUygq8SivBOvedeCjHTfUTDUwsmUQ3EibdWQhEEmAJVEvZaVqlEIc/Q5gyBnoxMMv3NPV p6kHT6aLg8dRLPFVwzt1JEK1pLpa7mpK9hGSfwIzNw7GTFNg60rgFs14M4IJ2kICzUsEoSRMzVP rsd6aHpJOzoTGnmyx41lIW8s/UBADvyGWAAQoCLFNBNnqaMDR1C795U3t/V/Vdo4DcHGPHLCdxj y+eu7/QKChaqBbJUSmNYA5i1p/pGTbrH5hxqXBR7xTVye/js8n2zkq+B1wDyEpF7qYDaBT/s4kH zEEAJa6ayec13eebYYjCXky3vAohAZsHWK8d0TtbAjo6Gh5X6HAZXN7PiCW+/ZTO7pzORQ+gaGT plYiL3Hw73xTDC9zCcgAuorV88HLigwmBV+524knTQ34dlhvWso4i3JwGp2yyBOdtPwCIZiNyXj gpD5V1G X-Received: by 2002:a17:902:cec1:b0:2b0:b290:f2f4 with SMTP id d9443c01a7336-2b0b2910099mr70615975ad.32.1774519387930; Thu, 26 Mar 2026 03:03:07 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:3ed5:7e63:b37c:a7d7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0bc7c2942sm23339435ad.36.2026.03.26.03.03.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 03:03:07 -0700 (PDT) From: Chen-Yu Tsai To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Rob Herring , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Chen-Yu Tsai Subject: [PATCH v3 2/3] drm/gem-dma: Use the dma_*_attr API variant Date: Thu, 26 Mar 2026 18:01:44 +0800 Message-ID: <20260326100248.1171828-3-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog In-Reply-To: <20260326100248.1171828-1-wenst@chromium.org> References: <20260326100248.1171828-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. Update rcar_du_vsp_map_fb() to use dma_get_sgtable_attrs() instead of dma_get_sgtable(). 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: Make rcar_du_vsp_map_fb() use dma_get_sgtable_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 v2: - rcar-du: Change dma_get_sgtable() to dma_get_sgtable_attrs() 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/renesas/rcar-du/rcar_du_vsp.c | 5 ++-- drivers/gpu/drm/vc4/vc4_bo.c | 2 +- include/drm/drm_gem_dma_helper.h | 3 +++ 4 files changed, 22 insertions(+), 14 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/renesas/rcar-du/rcar_du_vsp.c b/drivers/gpu/dr= m/renesas/rcar-du/rcar_du_vsp.c index 94c22d2db197..a4896096e3bc 100644 --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_vsp.c @@ -291,8 +291,9 @@ int rcar_du_vsp_map_fb(struct rcar_du_vsp *vsp, struct = 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); + ret =3D dma_get_sgtable_attrs(rcdu->dev, sgt, gem->vaddr, + gem->dma_addr, gem->base.size + gem->dma_attrs); if (ret) goto fail; } 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.1018.g2bb0e51243-goog From nobody Thu Apr 2 22:18:25 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 1806B3C7DEB for ; Thu, 26 Mar 2026 10:03:14 +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=1774519397; cv=none; b=KZ3Ebmi1q88wMAME1SxbSC3Yxbfa3R+oBdDkENhWb7JuhesqthG1QXpkkG94qoDAk37n2Km+L9vOwyDHlrGjbzB/kXudufh+UsPN8/Jp4qFn54ZKVArjPUciYFspXjAPpqX8Z2iDgIVjhvQCusHKBNHkmL09fcOqpWUu0DhYxPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774519397; c=relaxed/simple; bh=x+4RlPJWe2A7FonZe5J6ZhHMJExZCB2Sf6cwzEM4T7k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QfLJN1Yiv3HMyQCS3lX7v2Qb53ovMAtocBikX4ZKZ9XHIRlWycnyqxqXSA5Vx+BBK5aA/8YjSc15v3hHL5Ai4lFxFvuXOzNJjBzB9cS7J6N4lrZ4ko74rVPlTX+rMnowRANy4YnQVE+O5uOwD0/xzcR5CxvYtW8ZeI2YMRNUOEM= 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=VKsFLsCu; 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="VKsFLsCu" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2a7a9b8ed69so7350695ad.2 for ; Thu, 26 Mar 2026 03:03:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774519394; x=1775124194; 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=Sqa1QRax78p6uiplIT8BF/VoDghK3e5D0/5tQD3aqOM=; b=VKsFLsCuCnxPkPC7McYSiBHDfOeGpQkaxDUyfhOUSfiZYqVUXhfZz9C33r1wQk3KVS Vd34LAV8FO9CDfpU/e+CR28XTyip2j5sS+pY5zyqeMwE0v2JVnTPXYUiznWHRMALCLZS mXht4gTdwiEviJrJu/gwHOQhMg57+LMWLCCJE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774519394; x=1775124194; 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=Sqa1QRax78p6uiplIT8BF/VoDghK3e5D0/5tQD3aqOM=; b=mcD5G4JZ1sHTSkD2ufa71P3PY/zcz8ce0GjAiJUfk8YGQJTuaC8oFPOvXhXJZqXbRy q2PR7e4FA/rrjhkze6yPT2m/W+aB3BhANHULF7rhptzTc6L4MzsT+b/RPnA2tHFMnVS/ Hw/8+qWxXoS8i2KXKuVj6XMnWRJ/n3LYKPdpWWKTPI5wgKyYBU1iJ2CA68Sw9XyvuM97 KSzNEw3UUNAYDayfPtQXqVrMLRvCFG4JwAp5U5kjIh5CRVXLdWBoTOn4pjYGTdF7SZds mcibnV/zdNMsdbYynrzFx0N6Ng4Kcjp1ghy9pkvHv8zkdZOFmp9sghQ9ACvADzvYqyKH Jzjw== X-Forwarded-Encrypted: i=1; AJvYcCUT3+lSyVlvfdLZOOEcNA+TwnzrFE17m/lAWR7CAT1SZ3EOWv5upccwfn4CU8DfME5lk23k/AtBxzOc3no=@vger.kernel.org X-Gm-Message-State: AOJu0Yxmcn+++p5PP4iweUqTirT/mYkpnZEnXUB/rHN2HMOxYuBhHGoB H2u41CPdPkegLITkztdSRKQupfmkPSfiHzSiRO27V0ynV/nacXV7jAZ1cFDUw/54yA== X-Gm-Gg: ATEYQzxvwouhxjIes98AenG4LkFaPC4AsmvNbXtUQ+knkyFUfn6AYZ1rwR+1PFAinTE ixfZ5eEDOS+YLapZQHZmU/avDbeTZ7ak3LKLMKM6wP83Mu+21YItyAdCUoLpUJ05NVBkHEOL4/6 FJiKg7VqWm0hQPpKzJ5KdwI/AqaGQZzLzyvLka9S0LgM6BTLwKmSVf484IyPkxQGo4K3UplULZL zHXrLQtOuv/jTeZNMV/SwwlCpDOiQ4zQ+rLIfUvLZoDiDC+W2yUkW9cHSmX7l2Y88PdgYIzQJc1 e+m0/c9Uy8j5muEsQ2TLHV5UmdjyMrhfq1MYYK+KmBnN61b75zhE5V2Ms7D9ju9jU4GTNeGqb/E 25Vl2HdlTCOwak/g7P3DMexi5Nf+twRT9eb7RKls/h+UeOz46HBMWz888MPccfPcUB+DMgHJ2/o y3JB16ZM1Zgkk4D6i/BGDB+oUGT2UCy8RpdbQT4UJ6ritXTiKXpZjUyKqE1B/4HJxCAYkMrKE1o JC5lNVQ X-Received: by 2002:a17:903:2352:b0:2b0:66bc:2282 with SMTP id d9443c01a7336-2b0b0986e43mr73995145ad.6.1774519394114; Thu, 26 Mar 2026 03:03:14 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:3ed5:7e63:b37c:a7d7]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b0bc7c2942sm23339435ad.36.2026.03.26.03.03.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 03:03:13 -0700 (PDT) From: Chen-Yu Tsai To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter Cc: Rob Herring , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Chen-Yu Tsai , Sasha Finkelstein , Janne Grunau , Liviu Dudau , Paul Kocialkowski , Neil Armstrong , Laurent Pinchart , Tomi Valkeinen , Kieran Bingham , Biju Das , Yannick Fertre , Raphael Gallais-Pou , Philippe Cornu , Jernej Skrabec , Dave Stevenson , =?UTF-8?q?Ma=C3=ADra=20Canal?= , Raspberry Pi Kernel Maintenance , Icenowy Zheng , Laurent Pinchart , Tomi Valkeinen Subject: [PATCH v3 3/3] drm/gem-dma: Support DRM_MODE_DUMB_KERNEL_MAP flag Date: Thu, 26 Mar 2026 18:01:45 +0800 Message-ID: <20260326100248.1171828-4-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.1018.g2bb0e51243-goog In-Reply-To: <20260326100248.1171828-1-wenst@chromium.org> References: <20260326100248.1171828-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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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. drm_gem_dma_dumb_create_internal() users have DRM_MODE_DUMB_KERNEL_MAP added to preserve existing behavior. A dumb buffer allocated from these devices can be shared (exported) to another device. The consuming device may require the kernel mapping to scan out the buffer to its own display. Such devices include DisplayLink and various MIPI DBI based displays. Therefore altering the behavior should be given much consideration. 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: Add DRM_MODE_DUMB_KERNEL_MAP to new drivers] [wenst@chromium.org: Add flags field to drm_gem_dma_create_with_handle() kerneldoc] Signed-off-by: Chen-Yu Tsai --- Changes since v2: - Added back DRM_MODE_DUMB_KERNEL_MAP flag to all drivers calling drm_gem_dma_dumb_create_internal() - Expanded commit message to cover display drivers needing the kernel mapping to do scan out 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: Liviu Dudau Cc: Paul Kocialkowski Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Tomi Valkeinen Cc: Kieran Bingham Cc: Biju Das Cc: Yannick Fertre Cc: Raphael Gallais-Pou Cc: Philippe Cornu Cc: Jernej Skrabec Cc: Maxime Ripard Cc: Dave Stevenson Cc: "Ma=C3=ADra Canal" Cc: Raspberry Pi Kernel Maintenance Cc: Icenowy Zheng Cc: Laurent Pinchart Cc: Tomi Valkeinen --- drivers/gpu/drm/adp/adp_drv.c | 1 + .../gpu/drm/arm/display/komeda/komeda_kms.c | 1 + drivers/gpu/drm/arm/malidp_drv.c | 1 + drivers/gpu/drm/drm_fb_dma_helper.c | 4 ++ drivers/gpu/drm/drm_gem_dma_helper.c | 67 ++++++++++++------- drivers/gpu/drm/logicvc/logicvc_drm.c | 1 + drivers/gpu/drm/meson/meson_drv.c | 1 + drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c | 2 + drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c | 1 + drivers/gpu/drm/stm/drv.c | 3 +- drivers/gpu/drm/sun4i/sun4i_drv.c | 1 + drivers/gpu/drm/vc4/vc4_drv.c | 2 + drivers/gpu/drm/verisilicon/vs_drm.c | 2 + drivers/gpu/drm/xlnx/zynqmp_kms.c | 2 + 14 files changed, 63 insertions(+), 26 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/arm/display/komeda/komeda_kms.c b/drivers/gpu/= drm/arm/display/komeda/komeda_kms.c index 6ed504099188..2c096ebaea33 100644 --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c @@ -29,6 +29,7 @@ static int komeda_gem_dma_dumb_create(struct drm_file *fi= le, struct komeda_dev *mdev =3D dev->dev_private; u32 pitch =3D DIV_ROUND_UP(args->width * args->bpp, 8); =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; args->pitch =3D ALIGN(pitch, mdev->chip.bus_width); =20 return drm_gem_dma_dumb_create_internal(file, dev, args); diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_= drv.c index b765f6c9eea4..5519f48a27c0 100644 --- a/drivers/gpu/drm/arm/malidp_drv.c +++ b/drivers/gpu/drm/arm/malidp_drv.c @@ -464,6 +464,7 @@ static int malidp_dumb_create(struct drm_file *file_pri= v, /* allocate for the worst case scenario, i.e. rotated buffers */ u8 alignment =3D malidp_hw_get_pitch_align(malidp->dev, 1); =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; args->pitch =3D ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), alignment= ); =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; diff --git a/drivers/gpu/drm/logicvc/logicvc_drm.c b/drivers/gpu/drm/logicv= c/logicvc_drm.c index bbebf4fc7f51..595a71163cb5 100644 --- a/drivers/gpu/drm/logicvc/logicvc_drm.c +++ b/drivers/gpu/drm/logicvc/logicvc_drm.c @@ -39,6 +39,7 @@ static int logicvc_drm_gem_dma_dumb_create(struct drm_fil= e *file_priv, { struct logicvc_drm *logicvc =3D logicvc_drm(drm_dev); =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; /* Stride is always fixed to its configuration value. */ args->pitch =3D logicvc->config.row_stride * DIV_ROUND_UP(args->bpp, 8); =20 diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meso= n_drv.c index 49ff9f1f16d3..9fa339d6e273 100644 --- a/drivers/gpu/drm/meson/meson_drv.c +++ b/drivers/gpu/drm/meson/meson_drv.c @@ -83,6 +83,7 @@ static irqreturn_t meson_irq(int irq, void *arg) static int meson_dumb_create(struct drm_file *file, struct drm_device *dev, struct drm_mode_create_dumb *args) { + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; /* * We need 64bytes aligned stride, and PAGE aligned size */ diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c b/drivers/gpu/dr= m/renesas/rcar-du/rcar_du_kms.c index 60e6f43b8ab2..611fe3d4a4d8 100644 --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c @@ -424,6 +424,8 @@ int rcar_du_dumb_create(struct drm_file *file, struct d= rm_device *dev, if (ret) return ret; =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; + return drm_gem_dma_dumb_create_internal(file, dev, args); } =20 diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c b/drivers/gpu/drm= /renesas/rz-du/rzg2l_du_kms.c index 87f171145a23..359f85bd84eb 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c @@ -184,6 +184,7 @@ int rzg2l_du_dumb_create(struct drm_file *file, struct = drm_device *dev, unsigned int min_pitch =3D DIV_ROUND_UP(args->width * args->bpp, 8); unsigned int align =3D 16 * args->bpp / 8; =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; args->pitch =3D roundup(min_pitch, align); =20 return drm_gem_dma_dumb_create_internal(file, dev, args); diff --git a/drivers/gpu/drm/stm/drv.c b/drivers/gpu/drm/stm/drv.c index 56d53ac3082d..a0bc2e215adb 100644 --- a/drivers/gpu/drm/stm/drv.c +++ b/drivers/gpu/drm/stm/drv.c @@ -51,8 +51,9 @@ static int stm_gem_dma_dumb_create(struct drm_file *file, * in order to optimize data transfer, pitch is aligned on * 128 bytes, height is aligned on 4 bytes */ - args->pitch =3D roundup(min_pitch, 128); args->height =3D roundup(args->height, 4); + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; + args->pitch =3D roundup(min_pitch, 128); =20 return drm_gem_dma_dumb_create_internal(file, dev, args); } diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4= i_drv.c index 8a409eee1dca..d3ff53ce2450 100644 --- a/drivers/gpu/drm/sun4i/sun4i_drv.c +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c @@ -36,6 +36,7 @@ static int drm_sun4i_gem_dumb_create(struct drm_file *fil= e_priv, struct drm_device *drm, struct drm_mode_create_dumb *args) { + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; /* The hardware only allows even pitches for YUV buffers. */ args->pitch =3D ALIGN(DIV_ROUND_UP(args->width * args->bpp, 8), 2); =20 diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c index a14ecb769461..7a04cf52f511 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c @@ -87,6 +87,8 @@ static int vc5_dumb_create(struct drm_file *file_priv, if (ret) return ret; =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; + return drm_gem_dma_dumb_create_internal(file_priv, dev, args); } =20 diff --git a/drivers/gpu/drm/verisilicon/vs_drm.c b/drivers/gpu/drm/verisil= icon/vs_drm.c index fd259d53f49f..fe3591244d02 100644 --- a/drivers/gpu/drm/verisilicon/vs_drm.c +++ b/drivers/gpu/drm/verisilicon/vs_drm.c @@ -44,6 +44,8 @@ static int vs_gem_dumb_create(struct drm_file *file_priv, if (ret) return ret; =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; + return drm_gem_dma_dumb_create_internal(file_priv, drm, args); } =20 diff --git a/drivers/gpu/drm/xlnx/zynqmp_kms.c b/drivers/gpu/drm/xlnx/zynqm= p_kms.c index 02f3a7d78cf8..aa3822b3cb08 100644 --- a/drivers/gpu/drm/xlnx/zynqmp_kms.c +++ b/drivers/gpu/drm/xlnx/zynqmp_kms.c @@ -371,6 +371,8 @@ static int zynqmp_dpsub_dumb_create(struct drm_file *fi= le_priv, if (ret) return ret; =20 + args->flags =3D DRM_MODE_DUMB_KERNEL_MAP; + return drm_gem_dma_dumb_create_internal(file_priv, drm, args); } =20 --=20 2.53.0.1018.g2bb0e51243-goog