Lines Matching refs:layer
45 atmel_hlcdc_layer_fb_flip_release_queue(struct atmel_hlcdc_layer *layer, in atmel_hlcdc_layer_fb_flip_release_queue() argument
53 for (i = 0; i < layer->max_planes; i++) { in atmel_hlcdc_layer_fb_flip_release_queue()
61 drm_flip_work_queue_task(&layer->gc, flip->task); in atmel_hlcdc_layer_fb_flip_release_queue()
62 drm_flip_work_commit(&layer->gc, layer->wq); in atmel_hlcdc_layer_fb_flip_release_queue()
65 static void atmel_hlcdc_layer_update_reset(struct atmel_hlcdc_layer *layer, in atmel_hlcdc_layer_update_reset() argument
68 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_reset()
75 bitmap_clear(slot->updated_configs, 0, layer->desc->nconfigs); in atmel_hlcdc_layer_update_reset()
77 sizeof(*slot->configs) * layer->desc->nconfigs); in atmel_hlcdc_layer_update_reset()
80 atmel_hlcdc_layer_fb_flip_release_queue(layer, slot->fb_flip); in atmel_hlcdc_layer_update_reset()
85 static void atmel_hlcdc_layer_update_apply(struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_update_apply() argument
87 struct atmel_hlcdc_layer_dma_channel *dma = &layer->dma; in atmel_hlcdc_layer_update_apply()
88 const struct atmel_hlcdc_layer_desc *desc = layer->desc; in atmel_hlcdc_layer_update_apply()
89 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_apply()
90 struct regmap *regmap = layer->hlcdc->regmap; in atmel_hlcdc_layer_update_apply()
103 for_each_set_bit(cfg, slot->updated_configs, layer->desc->nconfigs) { in atmel_hlcdc_layer_update_apply()
106 ATMEL_HLCDC_LAYER_CFG(layer, cfg), in atmel_hlcdc_layer_update_apply()
158 for (i = fb_flip->ngems; i < layer->max_planes; i++) { in atmel_hlcdc_layer_update_apply()
172 atmel_hlcdc_layer_update_reset(layer, upd->pending); in atmel_hlcdc_layer_update_apply()
177 void atmel_hlcdc_layer_irq(struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_irq() argument
179 struct atmel_hlcdc_layer_dma_channel *dma = &layer->dma; in atmel_hlcdc_layer_irq()
180 const struct atmel_hlcdc_layer_desc *desc = layer->desc; in atmel_hlcdc_layer_irq()
181 struct regmap *regmap = layer->hlcdc->regmap; in atmel_hlcdc_layer_irq()
197 spin_lock_irqsave(&layer->lock, flags); in atmel_hlcdc_layer_irq()
202 spin_unlock_irqrestore(&layer->lock, flags); in atmel_hlcdc_layer_irq()
265 atmel_hlcdc_layer_fb_flip_release_queue(layer, dma->cur); in atmel_hlcdc_layer_irq()
271 atmel_hlcdc_layer_fb_flip_release_queue(layer, dma->cur); in atmel_hlcdc_layer_irq()
280 atmel_hlcdc_layer_fb_flip_release_queue(layer, in atmel_hlcdc_layer_irq()
284 atmel_hlcdc_layer_fb_flip_release_queue(layer, in atmel_hlcdc_layer_irq()
292 atmel_hlcdc_layer_update_apply(layer); in atmel_hlcdc_layer_irq()
298 spin_unlock_irqrestore(&layer->lock, flags); in atmel_hlcdc_layer_irq()
301 void atmel_hlcdc_layer_disable(struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_disable() argument
303 struct atmel_hlcdc_layer_dma_channel *dma = &layer->dma; in atmel_hlcdc_layer_disable()
304 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_disable()
305 struct regmap *regmap = layer->hlcdc->regmap; in atmel_hlcdc_layer_disable()
306 const struct atmel_hlcdc_layer_desc *desc = layer->desc; in atmel_hlcdc_layer_disable()
310 spin_lock_irqsave(&layer->lock, flags); in atmel_hlcdc_layer_disable()
322 atmel_hlcdc_layer_fb_flip_release_queue(layer, dma->cur); in atmel_hlcdc_layer_disable()
327 atmel_hlcdc_layer_fb_flip_release_queue(layer, dma->queue); in atmel_hlcdc_layer_disable()
337 atmel_hlcdc_layer_update_reset(layer, upd->pending); in atmel_hlcdc_layer_disable()
343 spin_unlock_irqrestore(&layer->lock, flags); in atmel_hlcdc_layer_disable()
346 int atmel_hlcdc_layer_update_start(struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_update_start() argument
348 struct atmel_hlcdc_layer_dma_channel *dma = &layer->dma; in atmel_hlcdc_layer_update_start()
349 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_start()
350 struct regmap *regmap = layer->hlcdc->regmap; in atmel_hlcdc_layer_update_start()
366 spin_lock_irqsave(&layer->lock, flags); in atmel_hlcdc_layer_update_start()
372 for (i = 0; i < layer->max_planes * 4; i++) { in atmel_hlcdc_layer_update_start()
377 if (j == layer->max_planes) in atmel_hlcdc_layer_update_start()
382 if (j < layer->max_planes) { in atmel_hlcdc_layer_update_start()
387 if (j < layer->max_planes) { in atmel_hlcdc_layer_update_start()
388 spin_unlock_irqrestore(&layer->lock, flags); in atmel_hlcdc_layer_update_start()
398 layer->desc->nconfigs * sizeof(u32)); in atmel_hlcdc_layer_update_start()
401 DIV_ROUND_UP(layer->desc->nconfigs, in atmel_hlcdc_layer_update_start()
414 layer->desc->regs_offset + in atmel_hlcdc_layer_update_start()
415 ATMEL_HLCDC_LAYER_CFG(layer, 0), in atmel_hlcdc_layer_update_start()
417 layer->desc->nconfigs); in atmel_hlcdc_layer_update_start()
420 spin_unlock_irqrestore(&layer->lock, flags); in atmel_hlcdc_layer_update_start()
425 void atmel_hlcdc_layer_update_rollback(struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_update_rollback() argument
427 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_rollback()
429 atmel_hlcdc_layer_update_reset(layer, upd->next); in atmel_hlcdc_layer_update_rollback()
433 void atmel_hlcdc_layer_update_set_fb(struct atmel_hlcdc_layer *layer, in atmel_hlcdc_layer_update_set_fb() argument
437 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_set_fb()
451 if (nplanes > layer->max_planes) in atmel_hlcdc_layer_update_set_fb()
477 void atmel_hlcdc_layer_update_cfg(struct atmel_hlcdc_layer *layer, int cfg, in atmel_hlcdc_layer_update_cfg() argument
480 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_cfg()
486 if (cfg >= layer->desc->nconfigs) in atmel_hlcdc_layer_update_cfg()
495 void atmel_hlcdc_layer_update_commit(struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_update_commit() argument
497 struct atmel_hlcdc_layer_dma_channel *dma = &layer->dma; in atmel_hlcdc_layer_update_commit()
498 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_commit()
507 spin_lock_irqsave(&layer->lock, flags); in atmel_hlcdc_layer_update_commit()
513 atmel_hlcdc_layer_update_reset(layer, upd->pending); in atmel_hlcdc_layer_update_commit()
519 atmel_hlcdc_layer_update_apply(layer); in atmel_hlcdc_layer_update_commit()
521 spin_unlock_irqrestore(&layer->lock, flags); in atmel_hlcdc_layer_update_commit()
528 struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_dma_init() argument
530 struct atmel_hlcdc_layer_dma_channel *dma = &layer->dma; in atmel_hlcdc_layer_dma_init()
535 layer->max_planes * 4 * in atmel_hlcdc_layer_dma_init()
541 for (i = 0; i < layer->max_planes * 4; i++) { in atmel_hlcdc_layer_dma_init()
551 struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_dma_cleanup() argument
553 struct atmel_hlcdc_layer_dma_channel *dma = &layer->dma; in atmel_hlcdc_layer_dma_cleanup()
556 for (i = 0; i < layer->max_planes * 4; i++) { in atmel_hlcdc_layer_dma_cleanup()
562 dma_free_coherent(dev->dev, layer->max_planes * 4 * in atmel_hlcdc_layer_dma_cleanup()
568 struct atmel_hlcdc_layer *layer, in atmel_hlcdc_layer_update_init() argument
571 struct atmel_hlcdc_layer_update *upd = &layer->update; in atmel_hlcdc_layer_update_init()
601 struct atmel_hlcdc_layer *layer, in atmel_hlcdc_layer_init() argument
610 layer->hlcdc = dc->hlcdc; in atmel_hlcdc_layer_init()
611 layer->wq = dc->wq; in atmel_hlcdc_layer_init()
612 layer->desc = desc; in atmel_hlcdc_layer_init()
619 if (nplanes > layer->max_planes) in atmel_hlcdc_layer_init()
620 layer->max_planes = nplanes; in atmel_hlcdc_layer_init()
623 spin_lock_init(&layer->lock); in atmel_hlcdc_layer_init()
624 drm_flip_work_init(&layer->gc, desc->name, in atmel_hlcdc_layer_init()
626 ret = atmel_hlcdc_layer_dma_init(dev, layer); in atmel_hlcdc_layer_init()
630 ret = atmel_hlcdc_layer_update_init(dev, layer, desc); in atmel_hlcdc_layer_init()
641 for (i = 0; i < layer->max_planes; i++) in atmel_hlcdc_layer_init()
654 struct atmel_hlcdc_layer *layer) in atmel_hlcdc_layer_cleanup() argument
656 const struct atmel_hlcdc_layer_desc *desc = layer->desc; in atmel_hlcdc_layer_cleanup()
657 struct regmap *regmap = layer->hlcdc->regmap; in atmel_hlcdc_layer_cleanup()
664 atmel_hlcdc_layer_dma_cleanup(dev, layer); in atmel_hlcdc_layer_cleanup()
665 drm_flip_work_cleanup(&layer->gc); in atmel_hlcdc_layer_cleanup()