From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DAF7BFCC9AD for ; Tue, 10 Mar 2026 03:20:46 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3915D10E62E; Tue, 10 Mar 2026 03:20:46 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="c2YfzE4K"; dkim-atps=neutral Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id ED9E510E62D for ; Tue, 10 Mar 2026 03:20:44 +0000 (UTC) Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-3590042fa8eso7794755a91.1 for ; Mon, 09 Mar 2026 20:20:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773112844; x=1773717644; darn=lists.freedesktop.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=9DNho1J2CisM3xAD9Y1bBejtF+SOOT6CZm5ayFQyPks=; b=c2YfzE4KXx8ZFcLyid0d1N/NnEgGaUBZGFzD8Lwy+MVM7ujtC6qLrrhZc2PCnYoEZu M0phMVqC7C/GWUHcoKTh0+k1fXp9e60Hm5f+075fZVx4LFF6IUD+DFijHdphJWBs/kJU aNkOepeFPrkR9scYbDJampaCa1T2/okrwP04Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773112844; x=1773717644; 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=9DNho1J2CisM3xAD9Y1bBejtF+SOOT6CZm5ayFQyPks=; b=iY0+P8z1V+e6OQ+/TCGS4e2AMGwRa3DODjqiMAKTpWPkiQahABRCkK/1hKfyhGkz36 jdgL7+yQBKlnFiL6pR+afRVTYjp1DEAZgIHWalvir+mxxxt0eChR4lYICF6jcqrTB2M7 girvv++vSNgqNbX2K1TweFhiHfUlYsXl/298Rcxro/VdCK08iPJuj2tHdA9ttR/pWZL8 aAYTDlDrAnXxFs5SRV8SjfpMKZzkmFBsJsWTO4oHV+HCdg9AHV693mUi33abs6FCl9kL WPow9ZY2+fFIvpTXqJTnKwleSrJ5GPz3gTYZrMY+iFJJ+A7hWGH6Jqh8Jm5ZggO3DKWb 7Y5Q== X-Forwarded-Encrypted: i=1; AJvYcCWGig3uuYVUr4dpAMA9V46jJtXLm2Lsh2Q0uUUwqo64KOmhZVxW8MxMOBAjRCPW6GhR0BcjRQk3SY0=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyXtL6UKhlXgo/1kflRpTzQAk87oOY4NwWlnHXNKHDd2vUZsTZh KX37bDtkaPVTXVMxAWzo99xdfyvO8UhwA/F4ciGz0thd0uwtQeoqm1tF0D/so07lbg== X-Gm-Gg: ATEYQzzdANKnkTfJObgWL+Az+hFv5R88zhIesSyiYsy1f17efUX3jSmK3H3+pCNRGK6 5cKweYudVED5jNExIstwnBWqyd/fLRnMKGSMeH7w9ZKx25dsHYeEZ/r/QBnrZLM7aFrPgE0qTL2 sxmTU8tDdUyjjhcbPoy2/MQH2oIJu4ieVGno7N5UbObZ1CNurqX4saKqH5eyfVSF4oHApJMVvVq 53WCBl45h+wNvKfYNvxpDjRtq5yzeFC69Iy1k22AeFrMmJYqXblEDYUcxdC0zL3ynbOdL+a3ZAY clAhFJWxfiJi5aW62KfUrMWrCPSkmHRGBZR6PlyRXT0CQl4ZOflCLOlwgzGIp5mvqpQISgWBuP2 E7z5iPagQaBd1ZXPUrrPZJq3qepsc+uIr5/E+E8XruWrNqnchouwlDKNGZbYRynewYcbPoErpCz JN01jZa3Cy1jENQX7PwDY6FJF24DlLJxCsOzdZtbhXmQNirqxxv50V7JgGI7+PH+6HSPG1u9qy/ 0tQemox X-Received: by 2002:a17:90b:5252:b0:359:9bad:13d9 with SMTP id 98e67ed59e1d1-359be29eea6mr12192211a91.15.1773112844479; Mon, 09 Mar 2026 20:20:44 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:ee38:e01e:e888:6900]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-359f06f79absm1154608a91.6.2026.03.09.20.20.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 20:20:44 -0700 (PDT) From: Chen-Yu Tsai To: Matthias Brugger , AngeloGioacchino Del Regno , Chun-Kuang Hu , Philipp Zabel , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Chen-Yu Tsai , Jernej Skrabec , Samuel@freedesktop.org, "Holland , Simona Vetter Cc: Chen-Yu Tsai , linux-sunxi@lists.linux.dev, Paul Kocialkowski , linux-mediatek@lists.infradead.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/4] drm/gem-dma: Support dedicated DMA device for allocation and mapping Date: Tue, 10 Mar 2026 11:20:05 +0800 Message-ID: <20260310032012.2542334-3-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog In-Reply-To: <20260310032012.2542334-1-wenst@chromium.org> References: <20260310032012.2542334-1-wenst@chromium.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Support for a dedicated DMA device for prime imports was added in commit 143ec8d3f939 ("drm/prime: Support dedicated DMA device for dma-buf imports"). This allowed the DRM driver to provide a dedicated DMA device when its own underlying device was not capable of DMA, for example when it is a USB device (the original target) or a virtual device. The latter case is common on embedded SoCs, on which the display pipeline is composed of various fixed function blocks, and the DRM device is simply a made-up device, an address space managing the routing between the blocks, or whichever block the implementor thought made sense at the time. The point is that the chosen device is often not the actual device doing the DMA. Various drivers have used workarounds or reimplemented the GEM DMA helpers to get the DMA addresses and IOMMUs to work correctly. Add support for the dedicated DMA device to the GEM DMA helpers. No existing driver currently uses the GEM DMA helpers and calls drm_dev_set_dma_dev() to set a dedicated DMA device, so no existing users should be affected. Signed-off-by: Chen-Yu Tsai --- drivers/gpu/drm/drm_gem_dma_helper.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/drm_gem_dma_helper.c b/drivers/gpu/drm/drm_gem_dma_helper.c index ecb9746f4da8..70f83e464476 100644 --- a/drivers/gpu/drm/drm_gem_dma_helper.c +++ b/drivers/gpu/drm/drm_gem_dma_helper.c @@ -146,12 +146,13 @@ struct drm_gem_dma_object *drm_gem_dma_create(struct drm_device *drm, return dma_obj; if (dma_obj->map_noncoherent) { - dma_obj->vaddr = dma_alloc_noncoherent(drm->dev, size, + dma_obj->vaddr = dma_alloc_noncoherent(drm_dev_dma_dev(drm), + size, &dma_obj->dma_addr, DMA_TO_DEVICE, GFP_KERNEL | __GFP_NOWARN); } else { - dma_obj->vaddr = dma_alloc_wc(drm->dev, size, + dma_obj->vaddr = dma_alloc_wc(drm_dev_dma_dev(drm), size, &dma_obj->dma_addr, GFP_KERNEL | __GFP_NOWARN); } @@ -236,12 +237,14 @@ void drm_gem_dma_free(struct drm_gem_dma_object *dma_obj) drm_prime_gem_destroy(gem_obj, dma_obj->sgt); } else if (dma_obj->vaddr) { if (dma_obj->map_noncoherent) - dma_free_noncoherent(gem_obj->dev->dev, dma_obj->base.size, + dma_free_noncoherent(drm_dev_dma_dev(gem_obj->dev), + dma_obj->base.size, dma_obj->vaddr, dma_obj->dma_addr, DMA_TO_DEVICE); else - dma_free_wc(gem_obj->dev->dev, dma_obj->base.size, - dma_obj->vaddr, dma_obj->dma_addr); + dma_free_wc(drm_dev_dma_dev(gem_obj->dev), + dma_obj->base.size, dma_obj->vaddr, + dma_obj->dma_addr); } drm_gem_object_release(gem_obj); @@ -432,7 +435,7 @@ struct sg_table *drm_gem_dma_get_sg_table(struct drm_gem_dma_object *dma_obj) if (!sgt) return ERR_PTR(-ENOMEM); - ret = dma_get_sgtable(obj->dev->dev, sgt, dma_obj->vaddr, + ret = dma_get_sgtable(drm_dev_dma_dev(obj->dev), sgt, dma_obj->vaddr, dma_obj->dma_addr, obj->size); if (ret < 0) goto out; @@ -539,12 +542,12 @@ int drm_gem_dma_mmap(struct drm_gem_dma_object *dma_obj, struct vm_area_struct * if (dma_obj->map_noncoherent) { vma->vm_page_prot = vm_get_page_prot(vma->vm_flags); - ret = dma_mmap_pages(dma_obj->base.dev->dev, + ret = dma_mmap_pages(drm_dev_dma_dev(dma_obj->base.dev), vma, vma->vm_end - vma->vm_start, virt_to_page(dma_obj->vaddr)); } else { - ret = dma_mmap_wc(dma_obj->base.dev->dev, vma, dma_obj->vaddr, - dma_obj->dma_addr, + ret = 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); } if (ret) -- 2.53.0.473.g4a7958ca14-goog