From nobody Thu Apr 2 23:55:50 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