[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); > -- Cheers, Lyude Paul (she/her) Software Engineer at Red Hat