dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
To: intel-gfx@lists.freedesktop.org
Cc: Alex Deucher <alexander.deucher@amd.com>,
	Daniel Vetter <daniel.vetter@ffwll.ch>,
	Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>,
	dri-devel@lists.freedesktop.org, Ben Skeggs <bskeggs@redhat.com>
Subject: [PATCH v2 6/9] drm/dp: Add DP MST helpers to atomically find and release vcpi slots
Date: Tue, 24 Jan 2017 15:49:34 -0800	[thread overview]
Message-ID: <1485301777-3465-7-git-send-email-dhinakaran.pandiyan@intel.com> (raw)
In-Reply-To: <1485301777-3465-1-git-send-email-dhinakaran.pandiyan@intel.com>

drm_dp_atomic_find_vcpi_slots() should be called from ->atomic_check() to
check there are sufficient vcpi slots for a mode and to add that to the
state. This should be followed by a call to drm_dp_mst_allocate_vcpi()
in ->atomic_commit() to initialize a struct vcpi for the port.

drm_dp_atomic_release_vcpi_slots() should be called from
->atomic_check() to release a port's vcpi slot allocation from the
state.

Drivers that do not make use of this atomic helper are expected to call
drm_dp_find_vcpi_slots() instead before calling
drm_dp_mst_allocate_vcpi().

Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
---
 drivers/gpu/drm/drm_dp_mst_topology.c | 43 +++++++++++++++++++++++++++++++++++
 include/drm/drm_dp_mst_helper.h       |  4 ++++
 2 files changed, 47 insertions(+)

diff --git a/drivers/gpu/drm/drm_dp_mst_topology.c b/drivers/gpu/drm/drm_dp_mst_topology.c
index 247286b..abebb42 100644
--- a/drivers/gpu/drm/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/drm_dp_mst_topology.c
@@ -2500,6 +2500,49 @@ static int drm_dp_init_vcpi(struct drm_dp_mst_topology_mgr *mgr,
 }
 
 /**
+ * drm_dp_atomic_release_vcpi_slots() - Release allocated vcpi slots
+ * @topology_state: MST topology state
+ * @port: port to release the vcpi slots for
+ */
+int drm_dp_atomic_release_vcpi_slots(struct drm_dp_mst_topology_state *topology_state,
+				     struct drm_dp_mst_port *port)
+{
+	int alloc = drm_dp_mst_get_vcpi_slots(topology_state->mgr, port);
+
+	topology_state->avail_slots += alloc;
+	DRM_DEBUG_KMS("vcpi slots released=%d, avail=%d\n",
+			alloc, topology_state->avail_slots);
+	return alloc;
+}
+EXPORT_SYMBOL(drm_dp_atomic_release_vcpi_slots);
+
+/**
+ * drm_dp_atomic_find_vcpi_slots() - Find and add vcpi slots to the state
+ * @topology_state: MST topology state
+ * @port: port to find vcpi slots for
+ * @pbn: bandwidth required for the mode in PBN
+ */
+int drm_dp_atomic_find_vcpi_slots(struct drm_dp_mst_topology_state *topology_state,
+				  struct drm_dp_mst_port *port, int pbn)
+{
+	int num_slots, curr_alloc;
+	struct drm_dp_mst_topology_mgr *mgr = topology_state->mgr;
+
+	num_slots = DIV_ROUND_UP(pbn, mgr->pbn_div);
+	curr_alloc = drm_dp_mst_get_vcpi_slots(mgr, port);
+	DRM_DEBUG_KMS("vcpi slots req=%d, curr=%d, avail=%d\n",
+			num_slots, curr_alloc, topology_state->avail_slots);
+
+	if (num_slots - curr_alloc > topology_state->avail_slots)
+		return -ENOSPC;
+
+	topology_state->avail_slots -= (num_slots - curr_alloc);
+	DRM_DEBUG_KMS("vcpi slots avail=%d", topology_state->avail_slots);
+	return num_slots;
+}
+EXPORT_SYMBOL(drm_dp_atomic_find_vcpi_slots);
+
+/**
  * drm_dp_mst_allocate_vcpi() - Allocate a virtual channel
  * @mgr: manager for this port
  * @port: port to allocate a virtual channel for.
diff --git a/include/drm/drm_dp_mst_helper.h b/include/drm/drm_dp_mst_helper.h
index 8cbdbfa..4d61269 100644
--- a/include/drm/drm_dp_mst_helper.h
+++ b/include/drm/drm_dp_mst_helper.h
@@ -615,5 +615,9 @@ void drm_dp_mst_topology_mgr_suspend(struct drm_dp_mst_topology_mgr *mgr);
 int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr);
 struct drm_dp_mst_topology_state *drm_atomic_get_mst_topology_state(struct drm_atomic_state *state,
 								    struct drm_dp_mst_topology_mgr *mgr);
+int drm_dp_atomic_find_vcpi_slots(struct drm_dp_mst_topology_state *topology_state,
+				  struct drm_dp_mst_port *port, int pbn);
+int drm_dp_atomic_release_vcpi_slots(struct drm_dp_mst_topology_state *topology_state,
+				     struct drm_dp_mst_port *port);
 
 #endif
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2017-01-24 23:49 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-24 23:49 [PATCH v2 0/9] Adding private objects to atomic state Dhinakaran Pandiyan
2017-01-24 23:49 ` [PATCH v2 1/9] drm/dp: Store drm_device in MST topology manager Dhinakaran Pandiyan
2017-01-25  0:30   ` [Intel-gfx] " Dave Airlie
2017-01-24 23:49 ` [PATCH v2 2/9] drm/dp: Kill unused MST vcpi slot availability tracking Dhinakaran Pandiyan
2017-01-25  5:43   ` Daniel Vetter
2017-01-25 20:36     ` Pandiyan, Dhinakaran
2017-01-24 23:49 ` [PATCH v2 3/9] drm/dp: Split drm_dp_mst_allocate_vcpi Dhinakaran Pandiyan
2017-01-25  0:31   ` Dave Airlie
2017-01-25 20:34     ` Pandiyan, Dhinakaran
2017-01-24 23:49 ` [PATCH v2 4/9] drm: Add driver private objects to atomic state Dhinakaran Pandiyan
2017-01-25  5:59   ` Daniel Vetter
2017-01-25 20:47     ` Pandiyan, Dhinakaran
2017-01-26  8:38       ` [Intel-gfx] " Daniel Vetter
2017-01-25 21:33     ` Harry Wentland
2017-01-26  8:40       ` Daniel Vetter
2017-01-24 23:49 ` [PATCH v2 5/9] drm/dp: Introduce MST topology state Dhinakaran Pandiyan
2017-01-25  6:05   ` Daniel Vetter
2017-01-24 23:49 ` Dhinakaran Pandiyan [this message]
2017-01-24 23:49 ` [PATCH v2 7/9] drm: Connector helper function to release atomic state Dhinakaran Pandiyan
2017-01-25  6:18   ` Daniel Vetter
2017-01-25 21:01     ` Pandiyan, Dhinakaran
2017-01-31  0:14     ` Pandiyan, Dhinakaran
2017-01-24 23:49 ` [PATCH v2 8/9] drm/dp: Release DP MST shared link bandwidth Dhinakaran Pandiyan
2017-01-25  6:16   ` Daniel Vetter
2017-01-25 20:53     ` Pandiyan, Dhinakaran
2017-01-26  8:41       ` [Intel-gfx] " Daniel Vetter
2017-01-24 23:49 ` [PATCH v2 9/9] drm/dp: Track MST " Dhinakaran Pandiyan
2017-01-25  6:15   ` Daniel Vetter
2017-01-25 21:00     ` Pandiyan, Dhinakaran
2017-01-26  8:42       ` [Intel-gfx] " Daniel Vetter

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=1485301777-3465-7-git-send-email-dhinakaran.pandiyan@intel.com \
    --to=dhinakaran.pandiyan@intel.com \
    --cc=alexander.deucher@amd.com \
    --cc=bskeggs@redhat.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    /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