Lines Matching refs:omap_dmm

42 static struct dmm *omap_dmm;  variable
133 list_add(&engine->idle_node, &omap_dmm->idle_head); in release_engine()
136 atomic_inc(&omap_dmm->engine_counter); in release_engine()
137 wake_up_interruptible(&omap_dmm->engine_queue); in release_engine()
175 ret = wait_event_interruptible(omap_dmm->engine_queue, in dmm_txn_init()
176 atomic_add_unless(&omap_dmm->engine_counter, -1, 0)); in dmm_txn_init()
312 txn = dmm_txn_init(omap_dmm, area->tcm); in fill()
388 list_add(&block->alloc_node, &omap_dmm->alloc_head); in tiler_reserve_2d()
412 list_add(&block->alloc_node, &omap_dmm->alloc_head); in tiler_reserve_1d()
425 dev_err(omap_dmm->dev, "failed to release block\n"); in tiler_release()
542 return omap_dmm->plat_data->cpu_cache_flags; in tiler_get_cpu_cache_flags()
547 return omap_dmm ? true : false; in dmm_is_available()
556 if (omap_dmm) { in omap_dmm_remove()
559 list_for_each_entry_safe(block, _block, &omap_dmm->alloc_head, in omap_dmm_remove()
566 for (i = 0; i < omap_dmm->num_lut; i++) in omap_dmm_remove()
567 if (omap_dmm->tcm && omap_dmm->tcm[i]) in omap_dmm_remove()
568 omap_dmm->tcm[i]->deinit(omap_dmm->tcm[i]); in omap_dmm_remove()
569 kfree(omap_dmm->tcm); in omap_dmm_remove()
571 kfree(omap_dmm->engines); in omap_dmm_remove()
572 if (omap_dmm->refill_va) in omap_dmm_remove()
573 dma_free_writecombine(omap_dmm->dev, in omap_dmm_remove()
574 REFILL_BUFFER_SIZE * omap_dmm->num_engines, in omap_dmm_remove()
575 omap_dmm->refill_va, in omap_dmm_remove()
576 omap_dmm->refill_pa); in omap_dmm_remove()
577 if (omap_dmm->dummy_page) in omap_dmm_remove()
578 __free_page(omap_dmm->dummy_page); in omap_dmm_remove()
580 if (omap_dmm->irq > 0) in omap_dmm_remove()
581 free_irq(omap_dmm->irq, omap_dmm); in omap_dmm_remove()
583 iounmap(omap_dmm->base); in omap_dmm_remove()
584 kfree(omap_dmm); in omap_dmm_remove()
585 omap_dmm = NULL; in omap_dmm_remove()
598 omap_dmm = kzalloc(sizeof(*omap_dmm), GFP_KERNEL); in omap_dmm_probe()
599 if (!omap_dmm) in omap_dmm_probe()
603 INIT_LIST_HEAD(&omap_dmm->alloc_head); in omap_dmm_probe()
604 INIT_LIST_HEAD(&omap_dmm->idle_head); in omap_dmm_probe()
606 init_waitqueue_head(&omap_dmm->engine_queue); in omap_dmm_probe()
617 omap_dmm->plat_data = match->data; in omap_dmm_probe()
627 omap_dmm->base = ioremap(mem->start, SZ_2K); in omap_dmm_probe()
629 if (!omap_dmm->base) { in omap_dmm_probe()
634 omap_dmm->irq = platform_get_irq(dev, 0); in omap_dmm_probe()
635 if (omap_dmm->irq < 0) { in omap_dmm_probe()
640 omap_dmm->dev = &dev->dev; in omap_dmm_probe()
642 hwinfo = readl(omap_dmm->base + DMM_PAT_HWINFO); in omap_dmm_probe()
643 omap_dmm->num_engines = (hwinfo >> 24) & 0x1F; in omap_dmm_probe()
644 omap_dmm->num_lut = (hwinfo >> 16) & 0x1F; in omap_dmm_probe()
645 omap_dmm->container_width = 256; in omap_dmm_probe()
646 omap_dmm->container_height = 128; in omap_dmm_probe()
648 atomic_set(&omap_dmm->engine_counter, omap_dmm->num_engines); in omap_dmm_probe()
651 pat_geom = readl(omap_dmm->base + DMM_PAT_GEOMETRY); in omap_dmm_probe()
652 omap_dmm->lut_width = ((pat_geom >> 16) & 0xF) << 5; in omap_dmm_probe()
653 omap_dmm->lut_height = ((pat_geom >> 24) & 0xF) << 5; in omap_dmm_probe()
657 if (omap_dmm->lut_height != omap_dmm->container_height) in omap_dmm_probe()
658 omap_dmm->num_lut++; in omap_dmm_probe()
661 writel(0x88888888, omap_dmm->base + DMM_PAT_VIEW__0); in omap_dmm_probe()
662 writel(0x88888888, omap_dmm->base + DMM_PAT_VIEW__1); in omap_dmm_probe()
663 writel(0x80808080, omap_dmm->base + DMM_PAT_VIEW_MAP__0); in omap_dmm_probe()
664 writel(0x80000000, omap_dmm->base + DMM_PAT_VIEW_MAP_BASE); in omap_dmm_probe()
665 writel(0x88888888, omap_dmm->base + DMM_TILER_OR__0); in omap_dmm_probe()
666 writel(0x88888888, omap_dmm->base + DMM_TILER_OR__1); in omap_dmm_probe()
668 ret = request_irq(omap_dmm->irq, omap_dmm_irq_handler, IRQF_SHARED, in omap_dmm_probe()
669 "omap_dmm_irq_handler", omap_dmm); in omap_dmm_probe()
673 omap_dmm->irq, ret); in omap_dmm_probe()
674 omap_dmm->irq = -1; in omap_dmm_probe()
684 writel(0x7e7e7e7e, omap_dmm->base + DMM_PAT_IRQENABLE_SET); in omap_dmm_probe()
686 omap_dmm->dummy_page = alloc_page(GFP_KERNEL | __GFP_DMA32); in omap_dmm_probe()
687 if (!omap_dmm->dummy_page) { in omap_dmm_probe()
698 omap_dmm->dummy_pa = page_to_phys(omap_dmm->dummy_page); in omap_dmm_probe()
701 omap_dmm->refill_va = dma_alloc_writecombine(&dev->dev, in omap_dmm_probe()
702 REFILL_BUFFER_SIZE * omap_dmm->num_engines, in omap_dmm_probe()
703 &omap_dmm->refill_pa, GFP_KERNEL); in omap_dmm_probe()
704 if (!omap_dmm->refill_va) { in omap_dmm_probe()
710 omap_dmm->engines = kcalloc(omap_dmm->num_engines, in omap_dmm_probe()
712 if (!omap_dmm->engines) { in omap_dmm_probe()
717 for (i = 0; i < omap_dmm->num_engines; i++) { in omap_dmm_probe()
718 omap_dmm->engines[i].id = i; in omap_dmm_probe()
719 omap_dmm->engines[i].dmm = omap_dmm; in omap_dmm_probe()
720 omap_dmm->engines[i].refill_va = omap_dmm->refill_va + in omap_dmm_probe()
722 omap_dmm->engines[i].refill_pa = omap_dmm->refill_pa + in omap_dmm_probe()
724 init_completion(&omap_dmm->engines[i].compl); in omap_dmm_probe()
726 list_add(&omap_dmm->engines[i].idle_node, &omap_dmm->idle_head); in omap_dmm_probe()
729 omap_dmm->tcm = kcalloc(omap_dmm->num_lut, sizeof(*omap_dmm->tcm), in omap_dmm_probe()
731 if (!omap_dmm->tcm) { in omap_dmm_probe()
740 for (i = 0; i < omap_dmm->num_lut; i++) { in omap_dmm_probe()
741 omap_dmm->tcm[i] = sita_init(omap_dmm->container_width, in omap_dmm_probe()
742 omap_dmm->container_height, in omap_dmm_probe()
745 if (!omap_dmm->tcm[i]) { in omap_dmm_probe()
751 omap_dmm->tcm[i]->lut_id = i; in omap_dmm_probe()
757 containers[TILFMT_8BIT] = omap_dmm->tcm[0]; in omap_dmm_probe()
758 containers[TILFMT_16BIT] = omap_dmm->tcm[0]; in omap_dmm_probe()
759 containers[TILFMT_32BIT] = omap_dmm->tcm[0]; in omap_dmm_probe()
761 if (omap_dmm->container_height != omap_dmm->lut_height) { in omap_dmm_probe()
765 containers[TILFMT_PAGE] = omap_dmm->tcm[1]; in omap_dmm_probe()
766 omap_dmm->tcm[1]->y_offset = OMAP5_LUT_OFFSET; in omap_dmm_probe()
767 omap_dmm->tcm[1]->lut_id = 0; in omap_dmm_probe()
769 containers[TILFMT_PAGE] = omap_dmm->tcm[0]; in omap_dmm_probe()
774 .p1.x = omap_dmm->container_width - 1, in omap_dmm_probe()
775 .p1.y = omap_dmm->container_height - 1, in omap_dmm_probe()
779 for (i = 0; i < omap_dmm->num_lut; i++) { in omap_dmm_probe()
780 area.tcm = omap_dmm->tcm[i]; in omap_dmm_probe()
782 dev_err(omap_dmm->dev, "refill failed"); in omap_dmm_probe()
785 dev_info(omap_dmm->dev, "initialized all PAT entries\n"); in omap_dmm_probe()
887 if (!omap_dmm) { in tiler_map_show()
892 h_adj = omap_dmm->container_height / ydiv; in tiler_map_show()
893 w_adj = omap_dmm->container_width / xdiv; in tiler_map_show()
901 for (lut_idx = 0; lut_idx < omap_dmm->num_lut; lut_idx++) { in tiler_map_show()
905 for (i = 0; i < omap_dmm->container_height; i++) { in tiler_map_show()
912 list_for_each_entry(block, &omap_dmm->alloc_head, alloc_node) { in tiler_map_show()
913 if (block->area.tcm == omap_dmm->tcm[lut_idx]) { in tiler_map_show()
952 dev_dbg(omap_dmm->dev, "CONTAINER %d DUMP BEGIN\n", in tiler_map_show()
955 dev_dbg(omap_dmm->dev, "%03d:%s\n", i, map[i]); in tiler_map_show()
956 dev_dbg(omap_dmm->dev, "CONTAINER %d DUMP END\n", in tiler_map_show()
975 if (!omap_dmm) in omap_dmm_resume()
980 .p1.x = omap_dmm->container_width - 1, in omap_dmm_resume()
981 .p1.y = omap_dmm->container_height - 1, in omap_dmm_resume()
985 for (i = 0; i < omap_dmm->num_lut; i++) { in omap_dmm_resume()
986 area.tcm = omap_dmm->tcm[i]; in omap_dmm_resume()