From nobody Tue Apr 7 02:35:50 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