Re: [PATCH] drm: Update MST First Link Slot Information Based on Encoding Format

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I understand the mst_state argument its just that most of the mst functions are using mst_mgr/port structs and there is no easy way to extract the mst_state using mgr/port in these places (drm_dp_update_payload_part1, drm_dp_mst_allocate_vcpi, drm_dp_init_vcpi etc) where we need the slot info.

So either we need to keep a copy of the slots in the mgr because that's what most of the code is using right now or pass around the atomic state to get the mgr->state mapping. (I don't have much experience with the mst code so maybe I am missing some key detail here?)


Thanks,

Bhawan


On 2021-10-15 4:41 p.m., Lyude Paul wrote:
[more snip]

On Fri, 2021-10-15 at 15:43 -0400, Bhawanpreet Lakha wrote:
Thanks for the response,

That function is per port so not sure how that will work. Also we only
need to check this inside drm_dp_mst_atomic_check_vcpi_alloc_limit(),
which doesn't have a state.

We could add the slots(or some DP version indicator) inside the
drm_connector, and add a parameter to
drm_dp_mst_atomic_check_vcpi_alloc_limit(int slots)? and call it with
this info via drm_dp_mst_atomic_check() and then update the mgr->slot in
commit.
TBH - I think we can actually just get away with having all of this info in
drm_dp_mst_topology_state


Bhawan

                  ret = drm_dp_mst_atomic_check_mstb_bw_limit(mgr-
mst_primary,
                                                              mst_state);
                  mutex_unlock(&mgr->lock);
@@ -5527,11 +5543,16 @@ int drm_dp_mst_topology_mgr_init(struct
drm_dp_mst_topology_mgr *mgr,
          if (!mgr->proposed_vcpis)
                  return -ENOMEM;
          set_bit(0, &mgr->payload_mask);
+       mgr->total_avail_slots = 63;
+       mgr->start_slot = 1;
         mst_state = kzalloc(sizeof(*mst_state), GFP_KERNEL);
          if (mst_state == NULL)
                  return -ENOMEM;
+       mst_state->total_avail_slots = 63;
+       mst_state->start_slot = 1;
+
          mst_state->mgr = mgr;
          INIT_LIST_HEAD(&mst_state->vcpis);
diff --git a/include/drm/drm_dp_mst_helper.h
b/include/drm/drm_dp_mst_helper.h
index ddb9231d0309..f8152dfb34ed 100644
--- a/include/drm/drm_dp_mst_helper.h
+++ b/include/drm/drm_dp_mst_helper.h
@@ -554,6 +554,8 @@ struct drm_dp_mst_topology_state {
          struct drm_private_state base;
          struct list_head vcpis;
          struct drm_dp_mst_topology_mgr *mgr;
+       u8 total_avail_slots;
+       u8 start_slot;
   };
  #define to_dp_mst_topology_mgr(x) container_of(x, struct
drm_dp_mst_topology_mgr, base)
@@ -661,6 +663,16 @@ struct drm_dp_mst_topology_mgr {
           */
          int pbn_div;
+       /**
+        * @total_avail_slots: 63 for 8b/10b, 64 for 128/132b
+        */
+       u8 total_avail_slots;
+
+       /**
+        * @start_slot: 1 for 8b/10b, 0 for 128/132b
+        */
+       u8 start_slot;
+
          /**
           * @funcs: Atomic helper callbacks
           */
@@ -806,6 +818,7 @@ int drm_dp_mst_get_vcpi_slots(struct
drm_dp_mst_topology_mgr *mgr, struct drm_dp
  void drm_dp_mst_reset_vcpi_slots(struct drm_dp_mst_topology_mgr *mgr,
struct drm_dp_mst_port *port);
+void drm_dp_mst_update_coding_cap(struct drm_dp_mst_topology_state
*mst_state, uint8_t link_coding_cap);
  void drm_dp_mst_deallocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
                                  struct drm_dp_mst_port *port);



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux