• Home
  • Raw
  • Download

Lines Matching refs:smp

104 static void update_smp_state(struct mdp5_smp *smp,
108 struct mdp5_kms *get_kms(struct mdp5_smp *smp) in get_kms() argument
110 struct msm_drm_private *priv = smp->dev->dev_private; in get_kms()
134 return mdp5_cfg->smp.clients[pipe] + plane; in pipe2client()
138 static int smp_request_block(struct mdp5_smp *smp, in smp_request_block() argument
141 struct mdp5_kms *mdp5_kms = get_kms(smp); in smp_request_block()
142 struct mdp5_client_smp_state *ps = &smp->client_state[cid]; in smp_request_block()
143 int i, ret, avail, cur_nblks, cnt = smp->blk_cnt; in smp_request_block()
147 reserved = smp->reserved[cid]; in smp_request_block()
149 spin_lock_irqsave(&smp->state_lock, flags); in smp_request_block()
156 avail = cnt - bitmap_weight(smp->state, cnt); in smp_request_block()
168 int blk = find_first_zero_bit(smp->state, cnt); in smp_request_block()
170 set_bit(blk, smp->state); in smp_request_block()
182 clear_bit(blk, smp->state); in smp_request_block()
187 spin_unlock_irqrestore(&smp->state_lock, flags); in smp_request_block()
191 static void set_fifo_thresholds(struct mdp5_smp *smp, in set_fifo_thresholds() argument
194 struct mdp5_kms *mdp5_kms = get_kms(smp); in set_fifo_thresholds()
195 u32 smp_entries_per_blk = smp->blk_size / (128 / BITS_PER_BYTE); in set_fifo_thresholds()
212 int mdp5_smp_request(struct mdp5_smp *smp, enum mdp5_pipe pipe, in mdp5_smp_request() argument
215 struct mdp5_kms *mdp5_kms = get_kms(smp); in mdp5_smp_request()
248 n = DIV_ROUND_UP(fetch_stride * nlines, smp->blk_size); in mdp5_smp_request()
255 ret = smp_request_block(smp, pipe2client(pipe, i), n); in mdp5_smp_request()
265 set_fifo_thresholds(smp, pipe, nblks); in mdp5_smp_request()
271 void mdp5_smp_release(struct mdp5_smp *smp, enum mdp5_pipe pipe) in mdp5_smp_release() argument
275 int cnt = smp->blk_cnt; in mdp5_smp_release()
280 struct mdp5_client_smp_state *ps = &smp->client_state[cid]; in mdp5_smp_release()
282 spin_lock_irqsave(&smp->state_lock, flags); in mdp5_smp_release()
286 update_smp_state(smp, CID_UNUSED, &assigned); in mdp5_smp_release()
289 bitmap_andnot(smp->state, smp->state, ps->pending, cnt); in mdp5_smp_release()
290 bitmap_andnot(smp->state, smp->state, assigned, cnt); in mdp5_smp_release()
297 spin_unlock_irqrestore(&smp->state_lock, flags); in mdp5_smp_release()
300 set_fifo_thresholds(smp, pipe, 0); in mdp5_smp_release()
303 static void update_smp_state(struct mdp5_smp *smp, in update_smp_state() argument
306 struct mdp5_kms *mdp5_kms = get_kms(smp); in update_smp_state()
307 int cnt = smp->blk_cnt; in update_smp_state()
337 void mdp5_smp_configure(struct mdp5_smp *smp, enum mdp5_pipe pipe) in mdp5_smp_configure() argument
339 int cnt = smp->blk_cnt; in mdp5_smp_configure()
345 struct mdp5_client_smp_state *ps = &smp->client_state[cid]; in mdp5_smp_configure()
356 update_smp_state(smp, cid, &assigned); in mdp5_smp_configure()
361 void mdp5_smp_commit(struct mdp5_smp *smp, enum mdp5_pipe pipe) in mdp5_smp_commit() argument
363 int cnt = smp->blk_cnt; in mdp5_smp_commit()
369 struct mdp5_client_smp_state *ps = &smp->client_state[cid]; in mdp5_smp_commit()
379 spin_lock_irqsave(&smp->state_lock, flags); in mdp5_smp_commit()
381 bitmap_andnot(smp->state, smp->state, released, cnt); in mdp5_smp_commit()
382 spin_unlock_irqrestore(&smp->state_lock, flags); in mdp5_smp_commit()
384 update_smp_state(smp, CID_UNUSED, &released); in mdp5_smp_commit()
391 void mdp5_smp_destroy(struct mdp5_smp *smp) in mdp5_smp_destroy() argument
393 kfree(smp); in mdp5_smp_destroy()
398 struct mdp5_smp *smp = NULL; in mdp5_smp_init() local
401 smp = kzalloc(sizeof(*smp), GFP_KERNEL); in mdp5_smp_init()
402 if (unlikely(!smp)) { in mdp5_smp_init()
407 smp->dev = dev; in mdp5_smp_init()
408 smp->blk_cnt = cfg->mmb_count; in mdp5_smp_init()
409 smp->blk_size = cfg->mmb_size; in mdp5_smp_init()
412 bitmap_copy(smp->state, cfg->reserved_state, smp->blk_cnt); in mdp5_smp_init()
413 memcpy(smp->reserved, cfg->reserved, sizeof(smp->reserved)); in mdp5_smp_init()
414 spin_lock_init(&smp->state_lock); in mdp5_smp_init()
416 return smp; in mdp5_smp_init()
418 if (smp) in mdp5_smp_init()
419 mdp5_smp_destroy(smp); in mdp5_smp_init()