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 207741049524 for ; Wed, 11 Mar 2026 09:50:05 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 65EA310E1AD; Wed, 11 Mar 2026 09:50:04 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="QPUc5H6c"; dkim-atps=neutral Received: from mail-pf1-f179.google.com (mail-pf1-f179.google.com [209.85.210.179]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B3B110E1AD for ; Wed, 11 Mar 2026 09:50:03 +0000 (UTC) Received: by mail-pf1-f179.google.com with SMTP id d2e1a72fcca58-829759ca646so3868781b3a.2 for ; Wed, 11 Mar 2026 02:50:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773222603; x=1773827403; 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=jtkXXLPioyWW3Nha1qMzs0mPGG4eok73ub81lNtbqSo=; b=QPUc5H6cfsi8900EdPCv0TA3r5ou8Kv/EftjiYJRQCD1AYCpR1RhVAqJyyzPNkJ1O6 odWiGwja9JpoWVHNQ4tsZOJ/mvQaBgz4A0cjUa6ivsM/YijZIyYsuxgP20Viby3DM9nD B6JfJwZdcNmhYmdydGw0okoDDfE+vCXNQqATQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773222603; x=1773827403; 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=jtkXXLPioyWW3Nha1qMzs0mPGG4eok73ub81lNtbqSo=; b=ePG8Ohntge1pAodP3xXd6K+Z3+GP+YozysUGlB9xjGi72z1gX4qBkY9rOmxFWq/Fz6 +HH2KwYpU86phxaxWUOcf4F7lAZeOmW3phWXOaSBYyj06ejs6E7Ms8645k3RPiS8bE9r O4e0RiBpKWKzom4QYe2aYA6Alv0mCwpEYRATwq9BUGnuWGe0W2/WtIcTfUV1YraW3dPa 8qv7jOnazscOAz3yD7Y0Tz9qQ0BK583mHMVtubvC7PPcF+Q2D1syTeFMAQ+QSCTEYc6f vk25KQr8e4P31JXLRr8GjboZck7xGdf6Jn0cWwRQfVkFkLt3TlJht+8XQhZZ+dJjABdA +r8Q== X-Forwarded-Encrypted: i=1; AJvYcCWdG74QL/ddacHxYNzBmdd7kY2Elal4rg4J1u18Ewj6tuduDVr8Ha6XeNHsJ5f1LI/7piOEAmm8TFI=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzGTT0R86eM4+CEgqkseTySyDzQuYnD4EUJzo7ZDXPUue29QN7U 9rKZXXTQ7mdrRJcec31wVu6hOCtIDjtuD3++CCoB7uhk3tf2vthIGLkRkZDnM6WbUA== X-Gm-Gg: ATEYQzzNUrUilI/hZe5watGTPWZ6iiO0QgaxYP1F8XYXt6ejeUxX01cNS4a/n87KKl1 RiI0Qh3UblqHi+Tr2KMjmuxki1JpbDSpoAkt5n9nuIWfyAUoyjWqh6IDt0MEdz/Qei3cmomLJjb /T2UUCwmx7HyQm5b3S7+IM8AEnuV/pMJuJ6dRy27mPCB+SQd/qNKqkF35UjtSrXRk/eoIqO0CDW 6PB3AkUsmTMEGEWYWnrw5Uw3jq/G1lo8BYW9fEZr8LXurEEbdbSuM3KOO63TLKDwaK+tkTxlQYu abQc52GAI5F5Yn63T/8wlhcjWpZozG3Q4rMxrgVoEX5V5kplKPtSTY2L8mel91Hx19IHuih3/nR gA5fGawfH28L3NmUw0EBb30LDGSmJbzU66OfWGmWg25u7kqhV04K4LeQ53aNeRHWShTzcBlsNHl zKq+OkOr3wnaAAvYKhqrMHTKq2RbdYfwPEbmDfgbUqfGeBd3kY3OqZ6U23OkFI6FUWcqnDRzRKU YER/eDd X-Received: by 2002:a05:6a00:3006:b0:81f:9b0a:812a with SMTP id d2e1a72fcca58-829f70af1ebmr1872729b3a.14.1773222602308; Wed, 11 Mar 2026 02:50:02 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:805b:14e9:f783:bcae]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-829f6e22f85sm1887598b3a.27.2026.03.11.02.49.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Mar 2026 02:50:00 -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 Holland , David Airlie , 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 v2 2/4] drm/gem-dma: Support dedicated DMA device for allocation and mapping Date: Wed, 11 Mar 2026 17:49:26 +0800 Message-ID: <20260311094929.3393338-3-wenst@chromium.org> X-Mailer: git-send-email 2.53.0.473.g4a7958ca14-goog In-Reply-To: <20260311094929.3393338-1-wenst@chromium.org> References: <20260311094929.3393338-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. Reviewed-by: Thomas Zimmermann 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