Lines Matching refs:group
61 drm_##__level##__type((__tunnel)->group->mgr->dev, \
130 struct drm_dp_tunnel_group *group; member
308 static const char *drm_dp_tunnel_group_name(const struct drm_dp_tunnel_group *group) in drm_dp_tunnel_group_name() argument
310 return group->name; in drm_dp_tunnel_group_name()
316 struct drm_dp_tunnel_group *group = NULL; in lookup_or_alloc_group() local
328 if (!group && !mgr->groups[i].active) in lookup_or_alloc_group()
329 group = &mgr->groups[i]; in lookup_or_alloc_group()
332 if (!group) { in lookup_or_alloc_group()
338 group->drv_group_id = drv_group_id; in lookup_or_alloc_group()
339 group->active = true; in lookup_or_alloc_group()
345 snprintf(group->name, sizeof(group->name), "%d:%d:*", in lookup_or_alloc_group()
349 return group; in lookup_or_alloc_group()
352 static void free_group(struct drm_dp_tunnel_group *group) in free_group() argument
354 struct drm_dp_tunnel_mgr *mgr = group->mgr; in free_group()
356 if (drm_WARN_ON(mgr->dev, !list_empty(&group->tunnels))) in free_group()
359 group->drv_group_id = 0; in free_group()
360 group->available_bw = -1; in free_group()
361 group->active = false; in free_group()
375 struct drm_dp_tunnel_group *group = tunnel->group; in free_tunnel() local
378 if (list_empty(&group->tunnels)) in free_tunnel()
379 free_group(group); in free_tunnel()
393 ref_tracker_alloc(&tunnel->group->mgr->ref_tracker, in track_tunnel_ref()
400 ref_tracker_free(&tunnel->group->mgr->ref_tracker, in untrack_tunnel_ref()
459 struct drm_dp_tunnel_group *group; in add_tunnel_to_group() local
461 group = lookup_or_alloc_group(mgr, drv_group_id); in add_tunnel_to_group()
462 if (!group) in add_tunnel_to_group()
465 tunnel->group = group; in add_tunnel_to_group()
466 list_add(&tunnel->node, &group->tunnels); in add_tunnel_to_group()
637 if (tunnel->group->drv_group_id != new_drv_group_id) { in tunnel_info_changes_are_valid()
640 tunnel_group_drv_id(tunnel->group->drv_group_id), in tunnel_info_changes_are_valid()
641 tunnel_group_id(tunnel->group->drv_group_id), in tunnel_info_changes_are_valid()
693 if (!tunnel_regs_are_valid(tunnel->group->mgr, regs, flags)) in read_and_verify_tunnel_regs()
743 return min(get_max_dprx_bw(tunnel), tunnel->group->available_bw); in get_max_tunnel_bw()
815 if (drm_WARN_ON(tunnel->group->mgr->dev, tunnel->destroyed)) in drm_dp_tunnel_destroy()
838 static int group_allocated_bw(struct drm_dp_tunnel_group *group) in group_allocated_bw() argument
843 for_each_tunnel_in_group(group, tunnel) { in group_allocated_bw()
864 return group_allocated_bw(tunnel->group) + in calc_group_available_bw()
877 if (calc_group_available_bw(tunnel) == tunnel->group->available_bw) in update_group_available_bw()
880 for_each_tunnel_in_group(tunnel->group, tunnel_iter) { in update_group_available_bw()
902 DPTUN_BW_ARG(tunnel->group->available_bw), in update_group_available_bw()
905 changed = tunnel->group->available_bw != group_available_bw; in update_group_available_bw()
907 tunnel->group->available_bw = group_available_bw; in update_group_available_bw()
958 if (!tunnel_group_id(tunnel->group->drv_group_id)) in drm_dp_tunnel_enable_bw_alloc()
983 if (tunnel->group->available_bw == -1) { in drm_dp_tunnel_enable_bw_alloc()
992 DPTUN_BW_ARG(group_allocated_bw(tunnel->group)), in drm_dp_tunnel_enable_bw_alloc()
993 DPTUN_BW_ARG(tunnel->group->available_bw)); in drm_dp_tunnel_enable_bw_alloc()
1075 struct drm_dp_tunnel_mgr *mgr = tunnel->group->mgr; in allocate_tunnel_bw()
1142 DPTUN_BW_ARG(group_allocated_bw(tunnel->group)), in allocate_tunnel_bw()
1143 DPTUN_BW_ARG(tunnel->group->available_bw)); in allocate_tunnel_bw()
1277 DPTUN_BW_ARG(group_allocated_bw(tunnel->group)), in drm_dp_tunnel_update_state()
1278 DPTUN_BW_ARG(tunnel->group->available_bw)); in drm_dp_tunnel_update_state()
1367 return tunnel->group->available_bw; in drm_dp_tunnel_available_bw()
1377 &tunnel->group->base); in drm_dp_tunnel_atomic_get_group_state()
1551 if (to_group(old_group_state->base.obj) == tunnel->group) in drm_dp_tunnel_atomic_get_old_state()
1575 if (to_group(new_group_state->base.obj) == tunnel->group) in drm_dp_tunnel_atomic_get_new_state()
1582 static bool init_group(struct drm_dp_tunnel_mgr *mgr, struct drm_dp_tunnel_group *group) in init_group() argument
1592 group->mgr = mgr; in init_group()
1593 group->available_bw = -1; in init_group()
1594 INIT_LIST_HEAD(&group->tunnels); in init_group()
1596 drm_atomic_private_obj_init(mgr->dev, &group->base, &group_state->base, in init_group()
1602 static void cleanup_group(struct drm_dp_tunnel_group *group) in cleanup_group() argument
1604 drm_atomic_private_obj_fini(&group->base); in cleanup_group()
1710 if (drm_WARN_ON(tunnel->group->mgr->dev, in drm_dp_tunnel_atomic_set_stream_bw()
1802 struct drm_dp_tunnel_group *group = to_group(new_group_state->base.obj); in drm_dp_tunnel_atomic_check_group_bw() local
1828 tun_grp_dbg(group, in drm_dp_tunnel_atomic_check_group_bw()
1830 group_bw > group->available_bw ? "Not enough BW: " : "", in drm_dp_tunnel_atomic_check_group_bw()
1832 DPTUN_BW_ARG(group->available_bw)); in drm_dp_tunnel_atomic_check_group_bw()
1834 if (group_bw > group->available_bw) { in drm_dp_tunnel_atomic_check_group_bw()