dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding@gmail.com>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: linux-tegra@vger.kernel.org, Dmitry Osipenko <digetx@gmail.com>,
	dri-devel@lists.freedesktop.org,
	Mikko Perttunen <mperttunen@nvidia.com>
Subject: [PATCH v8 08/14] drm/tegra: Allocate per-engine channel in core code
Date: Fri,  9 Jul 2021 21:31:40 +0200	[thread overview]
Message-ID: <20210709193146.2859516-9-thierry.reding@gmail.com> (raw)
In-Reply-To: <20210709193146.2859516-1-thierry.reding@gmail.com>

From: Mikko Perttunen <mperttunen@nvidia.com>

To avoid code duplication, allocate the per-engine shared channel in
the core code instead. This is the usual channel that all jobs are
submitted to when MLOCKing is not in use. Once MLOCKs are implemented
on Host1x side, we can also update this to avoid allocating a shared
channel when MLOCKs are enabled.

Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 drivers/gpu/drm/tegra/drm.c | 11 +++++++++++
 drivers/gpu/drm/tegra/drm.h |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c
index 87954e69ab6c..cddee6425461 100644
--- a/drivers/gpu/drm/tegra/drm.c
+++ b/drivers/gpu/drm/tegra/drm.c
@@ -870,6 +870,14 @@ static const struct drm_driver tegra_drm_driver = {
 int tegra_drm_register_client(struct tegra_drm *tegra,
 			      struct tegra_drm_client *client)
 {
+	/*
+	 * When MLOCKs are implemented, change to allocate a shared channel
+	 * only when MLOCKs are disabled.
+	 */
+	client->shared_channel = host1x_channel_request(&client->base);
+	if (!client->shared_channel)
+		return -EBUSY;
+
 	mutex_lock(&tegra->clients_lock);
 	list_add_tail(&client->list, &tegra->clients);
 	client->drm = tegra;
@@ -886,6 +894,9 @@ int tegra_drm_unregister_client(struct tegra_drm *tegra,
 	client->drm = NULL;
 	mutex_unlock(&tegra->clients_lock);
 
+	if (client->shared_channel)
+		host1x_channel_put(client->shared_channel);
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h
index 0cb868065348..536861017d24 100644
--- a/drivers/gpu/drm/tegra/drm.h
+++ b/drivers/gpu/drm/tegra/drm.h
@@ -91,7 +91,9 @@ struct tegra_drm_client {
 	struct host1x_client base;
 	struct list_head list;
 	struct tegra_drm *drm;
+	struct host1x_channel *shared_channel;
 
+	/* Set by driver */
 	unsigned int version;
 	const struct tegra_drm_client_ops *ops;
 };
-- 
2.32.0


  parent reply	other threads:[~2021-07-09 19:29 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-09 19:31 [PATCH v8 00/14] drm/tegra: Introduce a modern UABI Thierry Reding
2021-07-09 19:31 ` [PATCH v8 01/14] gpu: host1x: Add DMA fence implementation Thierry Reding
2021-07-15 15:26   ` Dmitry Osipenko
2021-07-09 19:31 ` [PATCH v8 02/14] gpu: host1x: Add no-recovery mode Thierry Reding
2021-07-09 19:31 ` [PATCH v8 03/14] gpu: host1x: Add job release callback Thierry Reding
2021-07-09 19:31 ` [PATCH v8 04/14] gpu: host1x: Add support for syncpoint waits in CDMA pushbuffer Thierry Reding
2021-07-09 19:31 ` [PATCH v8 05/14] drm/tegra: Extract tegra_gem_lookup Thierry Reding
2021-07-09 19:31 ` [PATCH v8 06/14] drm/tegra: Add new UAPI to header Thierry Reding
2021-07-09 19:31 ` [PATCH v8 07/14] drm/tegra: Boot VIC during runtime PM resume Thierry Reding
2021-07-09 19:31 ` Thierry Reding [this message]
2021-07-09 19:31 ` [PATCH v8 09/14] drm/tegra: Implement new UAPI Thierry Reding
2021-07-15 15:27   ` Dmitry Osipenko
2021-07-09 19:31 ` [PATCH v8 10/14] drm/tegra: Implement syncpoint management UAPI Thierry Reding
2021-07-09 19:31 ` [PATCH v8 11/14] drm/tegra: Implement syncpoint wait UAPI Thierry Reding
2021-07-09 19:31 ` [PATCH v8 12/14] drm/tegra: Implement job submission part of new UAPI Thierry Reding
2021-07-09 19:31 ` [PATCH v8 13/14] drm/tegra: Add job firewall Thierry Reding
2021-07-09 19:31 ` [PATCH v8 14/14] drm/tegra: Bump driver version Thierry Reding
2021-07-09 21:16 ` [PATCH v8 00/14] drm/tegra: Introduce a modern UABI Dmitry Osipenko
2021-07-14  8:30   ` Thierry Reding
2021-07-14 14:50     ` Dmitry Osipenko
2021-07-14 15:26       ` Mikko Perttunen
2021-07-15 13:53         ` Dmitry Osipenko
2021-07-30 15:26 ` Dmitry Osipenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210709193146.2859516-9-thierry.reding@gmail.com \
    --to=thierry.reding@gmail.com \
    --cc=digetx@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mperttunen@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox