Lines Matching full:pb
49 static void host1x_pushbuffer_destroy(struct push_buffer *pb) in host1x_pushbuffer_destroy() argument
51 struct host1x_cdma *cdma = pb_to_cdma(pb); in host1x_pushbuffer_destroy()
54 if (!pb->mapped) in host1x_pushbuffer_destroy()
58 iommu_unmap(host1x->domain, pb->dma, pb->alloc_size); in host1x_pushbuffer_destroy()
59 free_iova(&host1x->iova, iova_pfn(&host1x->iova, pb->dma)); in host1x_pushbuffer_destroy()
62 dma_free_wc(host1x->dev, pb->alloc_size, pb->mapped, pb->phys); in host1x_pushbuffer_destroy()
64 pb->mapped = NULL; in host1x_pushbuffer_destroy()
65 pb->phys = 0; in host1x_pushbuffer_destroy()
71 static int host1x_pushbuffer_init(struct push_buffer *pb) in host1x_pushbuffer_init() argument
73 struct host1x_cdma *cdma = pb_to_cdma(pb); in host1x_pushbuffer_init()
79 pb->mapped = NULL; in host1x_pushbuffer_init()
80 pb->phys = 0; in host1x_pushbuffer_init()
81 pb->size = HOST1X_PUSHBUFFER_SLOTS * 8; in host1x_pushbuffer_init()
83 size = pb->size + 4; in host1x_pushbuffer_init()
86 pb->fence = pb->size - 8; in host1x_pushbuffer_init()
87 pb->pos = 0; in host1x_pushbuffer_init()
94 pb->mapped = dma_alloc_wc(host1x->dev, size, &pb->phys, in host1x_pushbuffer_init()
96 if (!pb->mapped) in host1x_pushbuffer_init()
107 pb->dma = iova_dma_addr(&host1x->iova, alloc); in host1x_pushbuffer_init()
108 err = iommu_map(host1x->domain, pb->dma, pb->phys, size, in host1x_pushbuffer_init()
113 pb->mapped = dma_alloc_wc(host1x->dev, size, &pb->phys, in host1x_pushbuffer_init()
115 if (!pb->mapped) in host1x_pushbuffer_init()
118 pb->dma = pb->phys; in host1x_pushbuffer_init()
121 pb->alloc_size = size; in host1x_pushbuffer_init()
123 host1x_hw_pushbuffer_init(host1x, pb); in host1x_pushbuffer_init()
130 dma_free_wc(host1x->dev, size, pb->mapped, pb->phys); in host1x_pushbuffer_init()
139 static void host1x_pushbuffer_push(struct push_buffer *pb, u32 op1, u32 op2) in host1x_pushbuffer_push() argument
141 u32 *p = (u32 *)((void *)pb->mapped + pb->pos); in host1x_pushbuffer_push()
143 WARN_ON(pb->pos == pb->fence); in host1x_pushbuffer_push()
146 pb->pos = (pb->pos + 8) & (pb->size - 1); in host1x_pushbuffer_push()
153 static void host1x_pushbuffer_pop(struct push_buffer *pb, unsigned int slots) in host1x_pushbuffer_pop() argument
156 pb->fence = (pb->fence + slots * 8) & (pb->size - 1); in host1x_pushbuffer_pop()
162 static u32 host1x_pushbuffer_space(struct push_buffer *pb) in host1x_pushbuffer_space() argument
164 return ((pb->fence - pb->pos) & (pb->size - 1)) / 8; in host1x_pushbuffer_space()
179 struct push_buffer *pb = &cdma->push_buffer; in host1x_cdma_wait_locked() local
188 space = host1x_pushbuffer_space(pb); in host1x_cdma_wait_locked()
299 struct push_buffer *pb = &cdma->push_buffer; in update_cdma_locked() local
301 host1x_pushbuffer_pop(pb, job->num_slots); in update_cdma_locked()
360 * started in the PB, so we can start the refetch from there (with the in host1x_cdma_update_sync_queue()
361 * modified NOP-ed PB slots). This lets things appear to have completed in host1x_cdma_update_sync_queue()
439 struct push_buffer *pb = &cdma->push_buffer; in host1x_cdma_deinit() local
447 host1x_pushbuffer_destroy(pb); in host1x_cdma_deinit()
494 struct push_buffer *pb = &cdma->push_buffer; in host1x_cdma_push() local
509 host1x_pushbuffer_push(pb, op1, op2); in host1x_cdma_push()