Lines Matching full:rm
34 int dpu_rm_destroy(struct dpu_rm *rm) in dpu_rm_destroy() argument
38 for (i = 0; i < ARRAY_SIZE(rm->pingpong_blks); i++) { in dpu_rm_destroy()
41 if (rm->pingpong_blks[i]) { in dpu_rm_destroy()
42 hw = to_dpu_hw_pingpong(rm->pingpong_blks[i]); in dpu_rm_destroy()
46 for (i = 0; i < ARRAY_SIZE(rm->merge_3d_blks); i++) { in dpu_rm_destroy()
49 if (rm->merge_3d_blks[i]) { in dpu_rm_destroy()
50 hw = to_dpu_hw_merge_3d(rm->merge_3d_blks[i]); in dpu_rm_destroy()
54 for (i = 0; i < ARRAY_SIZE(rm->mixer_blks); i++) { in dpu_rm_destroy()
57 if (rm->mixer_blks[i]) { in dpu_rm_destroy()
58 hw = to_dpu_hw_mixer(rm->mixer_blks[i]); in dpu_rm_destroy()
62 for (i = 0; i < ARRAY_SIZE(rm->ctl_blks); i++) { in dpu_rm_destroy()
65 if (rm->ctl_blks[i]) { in dpu_rm_destroy()
66 hw = to_dpu_hw_ctl(rm->ctl_blks[i]); in dpu_rm_destroy()
70 for (i = 0; i < ARRAY_SIZE(rm->intf_blks); i++) { in dpu_rm_destroy()
73 if (rm->intf_blks[i]) { in dpu_rm_destroy()
74 hw = to_dpu_hw_intf(rm->intf_blks[i]); in dpu_rm_destroy()
82 int dpu_rm_init(struct dpu_rm *rm, in dpu_rm_init() argument
88 if (!rm || !cat || !mmio) { in dpu_rm_init()
94 memset(rm, 0, sizeof(*rm)); in dpu_rm_init()
116 rm->mixer_blks[lm->id - LM_0] = &hw->base; in dpu_rm_init()
118 if (!rm->lm_max_width) { in dpu_rm_init()
119 rm->lm_max_width = lm->sblk->maxwidth; in dpu_rm_init()
120 } else if (rm->lm_max_width != lm->sblk->maxwidth) { in dpu_rm_init()
126 if (rm->lm_max_width > lm->sblk->maxwidth) in dpu_rm_init()
127 rm->lm_max_width = lm->sblk->maxwidth; in dpu_rm_init()
146 rm->merge_3d_blks[merge_3d->id - MERGE_3D_0] = &hw->base; in dpu_rm_init()
165 hw->merge_3d = to_dpu_hw_merge_3d(rm->merge_3d_blks[pp->merge_3d - MERGE_3D_0]); in dpu_rm_init()
166 rm->pingpong_blks[pp->id - PINGPONG_0] = &hw->base; in dpu_rm_init()
187 rm->intf_blks[intf->id - INTF_0] = &hw->base; in dpu_rm_init()
204 rm->ctl_blks[ctl->id - CTL_0] = &hw->base; in dpu_rm_init()
221 rm->dspp_blks[dspp->id - DSPP_0] = &hw->base; in dpu_rm_init()
227 dpu_rm_destroy(rm); in dpu_rm_init()
239 * @rm: dpu resource manager handle
240 * @primary_idx: index of primary mixer in rm->mixer_blks[]
241 * @peer_idx: index of other mixer in rm->mixer_blks[]
242 * Return: true if rm->mixer_blks[peer_idx] is a peer of
243 * rm->mixer_blks[primary_idx]
245 static bool _dpu_rm_check_lm_peer(struct dpu_rm *rm, int primary_idx, in _dpu_rm_check_lm_peer() argument
251 prim_lm_cfg = to_dpu_hw_mixer(rm->mixer_blks[primary_idx])->cap; in _dpu_rm_check_lm_peer()
252 peer_cfg = to_dpu_hw_mixer(rm->mixer_blks[peer_idx])->cap; in _dpu_rm_check_lm_peer()
266 * @rm: dpu resource manager handle
269 * @lm_idx: index of proposed layer mixer in rm->mixer_blks[], function checks
273 * mixer in rm->pingpong_blks[].
275 * mixer in rm->dspp_blks[].
276 * @reqs: input parameter, rm requirements for HW blocks needed in the
280 static bool _dpu_rm_check_lm_and_get_connected_blks(struct dpu_rm *rm, in _dpu_rm_check_lm_and_get_connected_blks() argument
294 lm_cfg = to_dpu_hw_mixer(rm->mixer_blks[lm_idx])->cap; in _dpu_rm_check_lm_and_get_connected_blks()
296 if (idx < 0 || idx >= ARRAY_SIZE(rm->pingpong_blks)) { in _dpu_rm_check_lm_and_get_connected_blks()
312 if (idx < 0 || idx >= ARRAY_SIZE(rm->dspp_blks)) { in _dpu_rm_check_lm_and_get_connected_blks()
327 static int _dpu_rm_reserve_lms(struct dpu_rm *rm, in _dpu_rm_reserve_lms() argument
344 for (i = 0; i < ARRAY_SIZE(rm->mixer_blks) && in _dpu_rm_reserve_lms()
346 if (!rm->mixer_blks[i]) in _dpu_rm_reserve_lms()
352 if (!_dpu_rm_check_lm_and_get_connected_blks(rm, global_state, in _dpu_rm_reserve_lms()
361 for (j = i + 1; j < ARRAY_SIZE(rm->mixer_blks) && in _dpu_rm_reserve_lms()
363 if (!rm->mixer_blks[j]) in _dpu_rm_reserve_lms()
366 if (!_dpu_rm_check_lm_peer(rm, i, j)) { in _dpu_rm_reserve_lms()
372 if (!_dpu_rm_check_lm_and_get_connected_blks(rm, in _dpu_rm_reserve_lms()
403 struct dpu_rm *rm, in _dpu_rm_reserve_ctls() argument
417 for (j = 0; j < ARRAY_SIZE(rm->ctl_blks); j++) { in _dpu_rm_reserve_ctls()
422 if (!rm->ctl_blks[j]) in _dpu_rm_reserve_ctls()
427 ctl = to_dpu_hw_ctl(rm->ctl_blks[j]); in _dpu_rm_reserve_ctls()
456 struct dpu_rm *rm, in _dpu_rm_reserve_intf() argument
463 if (idx < 0 || idx >= ARRAY_SIZE(rm->intf_blks)) { in _dpu_rm_reserve_intf()
468 if (!rm->intf_blks[idx]) { in _dpu_rm_reserve_intf()
483 struct dpu_rm *rm, in _dpu_rm_reserve_intf_related_hw() argument
495 ret = _dpu_rm_reserve_intf(rm, global_state, enc_id, id); in _dpu_rm_reserve_intf_related_hw()
504 struct dpu_rm *rm, in _dpu_rm_make_reservation() argument
511 ret = _dpu_rm_reserve_lms(rm, global_state, enc->base.id, reqs); in _dpu_rm_make_reservation()
517 ret = _dpu_rm_reserve_ctls(rm, global_state, enc->base.id, in _dpu_rm_make_reservation()
524 ret = _dpu_rm_reserve_intf_related_hw(rm, global_state, enc->base.id, in _dpu_rm_make_reservation()
573 struct dpu_rm *rm, in dpu_rm_reserve() argument
600 ret = _dpu_rm_make_reservation(rm, global_state, enc, &reqs); in dpu_rm_reserve()
609 int dpu_rm_get_assigned_resources(struct dpu_rm *rm, in dpu_rm_get_assigned_resources() argument
619 hw_blks = rm->pingpong_blks; in dpu_rm_get_assigned_resources()
621 max_blks = ARRAY_SIZE(rm->pingpong_blks); in dpu_rm_get_assigned_resources()
624 hw_blks = rm->mixer_blks; in dpu_rm_get_assigned_resources()
626 max_blks = ARRAY_SIZE(rm->mixer_blks); in dpu_rm_get_assigned_resources()
629 hw_blks = rm->ctl_blks; in dpu_rm_get_assigned_resources()
631 max_blks = ARRAY_SIZE(rm->ctl_blks); in dpu_rm_get_assigned_resources()
634 hw_blks = rm->intf_blks; in dpu_rm_get_assigned_resources()
636 max_blks = ARRAY_SIZE(rm->intf_blks); in dpu_rm_get_assigned_resources()
639 hw_blks = rm->dspp_blks; in dpu_rm_get_assigned_resources()
641 max_blks = ARRAY_SIZE(rm->dspp_blks); in dpu_rm_get_assigned_resources()
644 DPU_ERROR("blk type %d not managed by rm\n", type); in dpu_rm_get_assigned_resources()