From nobody Tue Apr 7 23:42:29 2026 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (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 471383B5852 for ; Wed, 11 Mar 2026 09:50:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773222604; cv=none; b=CGZUfEITG0m2JuonLa1IE+ziTOLFcaFv1ZWEc5L35XX4X24DNIpQBl2XjqGz8Tfzcf252Zqw4o7QbUIDajCdpmXxi6LCYjJM3vxkKAYUjcQVRwJ7zsZHY4fPAFXP9tNktav18kO8eOZzP3clSe0dL+7uoHT4ztE7mRzx9E9AzkI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773222604; c=relaxed/simple; bh=4pQgi2Z3oYVv09c19L/ahzU+DTz3ubvyJPz6+N7R/tI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XsdOyBDYCteB/qkoV8HzNY26Paj22rU4dO0KhCFbLrWPlarklr5fGzQRIxhdg4+kFZrK7gq5cLRJKE0kNuluTY7pPdcSEPYMQBj82CYqXDOXAYR00nvsV7Ze93zZXHNo3cMGL15JVjIsLZgpDtYEVCGfFlYViMrXqonosofdiis= 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=KP7rREHy; arc=none smtp.client-ip=209.85.210.177 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="KP7rREHy" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-82980945556so2703916b3a.0 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=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=jtkXXLPioyWW3Nha1qMzs0mPGG4eok73ub81lNtbqSo=; b=KP7rREHyzUInbuZnL1bzFM4hjKf0UImt26xM411pHXJKZlZuOQsaaavtGvdBK9rGpD qwWt2+TNSWyPSH7X+2L4cBW2BWqMoJuCuCsXK70koa5i9YphmyATEAA6qRHqfjs7pCK7 OzMQ7Fqey9oU71A3IszNX0Bqhhk+t5XFonvEU= 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=De3B+guwEYklzoxAYAZBwGMzZ1j7qPCyEAa1e4l5UQ+8p3G8n+wguA5uDxQUeyMIRI TYsILie8mw0BcZy1/xTIs44fSPiuayvggAV3a3vZFM7oQsepawVh5HrFN+H5CRpv1Kk1 QkeM59nII3tgPfPtuvHipX23I1dOSpfaqfbGx2gc/akZjgG6HdJ77zAnN1Nzu7Hz2x5A CCOTIK/kYs7IG4pe9ZbpZf5wtFAfCtdibYnlYblDKSPyN1EdwxvZoI+8TyAxRoMRXHi2 eJoQ/pRcGGs+nwXsMZc0Muzc7sCXSWBB7U8xwmo0mRVDBmOETwODE85iIumMypmIxX28 3nPA== X-Forwarded-Encrypted: i=1; AJvYcCXC7nfzlg8FFXh3pKdMspKSsEmNerAv3gCdC9QdbVAkIpd9cVyCvIShGaJ2f5GikqSXOi9VodTZt0bP4/c=@vger.kernel.org X-Gm-Message-State: AOJu0YwMZYorgTGMgIErWAWkIKanbqZ6Gy4f4+gKNoeoLABrYhs/wGbp cIvMD8QhqcM/fL7Fzr6AMi4MVJCGduNAUjh6NbTCKcNj9gi+nDxjPF+6yU2VD+Fedw== X-Gm-Gg: ATEYQzy6fBUOw2LjGlkEWHBi81kxJrmFa9XKsmFbMeY8lCh26goJR6PPz/rx6QJPow6 +TZ5iSoSxH1lEb7WXWcMgx3gacXjpJ7139eDrVFkFr0gVWMXf4y5J9NfeQW54PfrSRHnYdpd/5m f51SFoDGA7+3NsY+R7jWRa3HtrUYzSb4eWauX/p+fjKa8FSx1t1/k1eIIMXooBM7TL/8BqB9NvA hGCJ9LwUqF8TZ+m8Os5dI7sYYlY+cD8aeUK2wNbGe2+q0xHX//HmHHi9msxrYKBpqCi17tztpsB bZ7fP7AncUR3kHQ1+wfT2tuk3H2tHA1b03Hd47OarAeo108oUnRi+F60XNcqhHu3s405qWtbW5N Xw37L14q95kPJu2tfeX4pkk/9VgxdXKSpzckqobBXqkbCTx+hFA3eL8guxOqYc52o2XotjsKw+s y1f3CKQsHiLOO48zvT4lY7kYzBt56jTnGR3NnvdAYdV3hSy6SphIPITSTUmqWCwMcXYRe6Jb1MU Dfv70Gv 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> 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" 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 Reviewed-by: AngeloGioacchino Del Regno --- 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; =20 if (dma_obj->map_noncoherent) { - dma_obj->vaddr =3D dma_alloc_noncoherent(drm->dev, size, + dma_obj->vaddr =3D dma_alloc_noncoherent(drm_dev_dma_dev(drm), + size, &dma_obj->dma_addr, DMA_TO_DEVICE, GFP_KERNEL | __GFP_NOWARN); } else { - dma_obj->vaddr =3D dma_alloc_wc(drm->dev, size, + dma_obj->vaddr =3D 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); } =20 drm_gem_object_release(gem_obj); @@ -432,7 +435,7 @@ 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(obj->dev->dev, sgt, dma_obj->vaddr, + ret =3D 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_o= bj, struct vm_area_struct * if (dma_obj->map_noncoherent) { vma->vm_page_prot =3D vm_get_page_prot(vma->vm_flags); =20 - ret =3D dma_mmap_pages(dma_obj->base.dev->dev, + ret =3D 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 =3D dma_mmap_wc(dma_obj->base.dev->dev, vma, dma_obj->vaddr, - dma_obj->dma_addr, + 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); } if (ret) --=20 2.53.0.473.g4a7958ca14-goog