Lines Matching refs:pb

48 static void host1x_pushbuffer_destroy(struct push_buffer *pb)
50 struct host1x_cdma *cdma = pb_to_cdma(pb);
53 if (!pb->mapped)
57 iommu_unmap(host1x->domain, pb->dma, pb->alloc_size);
58 free_iova(&host1x->iova, iova_pfn(&host1x->iova, pb->dma));
61 dma_free_wc(host1x->dev, pb->alloc_size, pb->mapped, pb->phys);
63 pb->mapped = NULL;
64 pb->phys = 0;
70 static int host1x_pushbuffer_init(struct push_buffer *pb)
72 struct host1x_cdma *cdma = pb_to_cdma(pb);
78 pb->mapped = NULL;
79 pb->phys = 0;
80 pb->size = HOST1X_PUSHBUFFER_SLOTS * 8;
82 size = pb->size + 4;
85 pb->fence = pb->size - 8;
86 pb->pos = 0;
93 pb->mapped = dma_alloc_wc(host1x->dev, size, &pb->phys,
95 if (!pb->mapped)
106 pb->dma = iova_dma_addr(&host1x->iova, alloc);
107 err = iommu_map(host1x->domain, pb->dma, pb->phys, size,
112 pb->mapped = dma_alloc_wc(host1x->dev, size, &pb->phys,
114 if (!pb->mapped)
117 pb->dma = pb->phys;
120 pb->alloc_size = size;
122 host1x_hw_pushbuffer_init(host1x, pb);
129 dma_free_wc(host1x->dev, size, pb->mapped, pb->phys);
138 static void host1x_pushbuffer_push(struct push_buffer *pb, u32 op1, u32 op2)
140 u32 *p = (u32 *)((void *)pb->mapped + pb->pos);
142 WARN_ON(pb->pos == pb->fence);
145 pb->pos += 8;
147 if (pb->pos >= pb->size)
148 pb->pos -= pb->size;
155 static void host1x_pushbuffer_pop(struct push_buffer *pb, unsigned int slots)
158 pb->fence += slots * 8;
160 if (pb->fence >= pb->size)
161 pb->fence -= pb->size;
167 static u32 host1x_pushbuffer_space(struct push_buffer *pb)
169 unsigned int fence = pb->fence;
171 if (pb->fence < pb->pos)
172 fence += pb->size;
174 return (fence - pb->pos) / 8;
189 struct push_buffer *pb = &cdma->push_buffer;
198 space = host1x_pushbuffer_space(pb);
240 struct push_buffer *pb = &cdma->push_buffer;
243 space = host1x_pushbuffer_space(pb);
341 struct push_buffer *pb = &cdma->push_buffer;
343 host1x_pushbuffer_pop(pb, job->num_slots);
531 struct push_buffer *pb = &cdma->push_buffer;
539 host1x_pushbuffer_destroy(pb);
595 struct push_buffer *pb = &cdma->push_buffer;
610 host1x_pushbuffer_push(pb, op1, op2);
627 struct push_buffer *pb = &cdma->push_buffer;
635 if (pb->pos + 16 > pb->size) {
636 extra = (pb->size - pb->pos) / 8;
641 space = host1x_pushbuffer_space(pb);
652 host1x_pushbuffer_push(pb, (0x5 << 28), 0xdead0000);
655 host1x_pushbuffer_push(pb, op1, op2);
656 host1x_pushbuffer_push(pb, op3, op4);