Lines Matching refs:ih
41 int amdgpu_ih_ring_init(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih, in amdgpu_ih_ring_init() argument
50 ih->ring_size = ring_size; in amdgpu_ih_ring_init()
51 ih->ptr_mask = ih->ring_size - 1; in amdgpu_ih_ring_init()
52 ih->rptr = 0; in amdgpu_ih_ring_init()
53 ih->use_bus_addr = use_bus_addr; in amdgpu_ih_ring_init()
58 if (ih->ring) in amdgpu_ih_ring_init()
64 ih->ring = dma_alloc_coherent(adev->dev, ih->ring_size + 8, in amdgpu_ih_ring_init()
66 if (ih->ring == NULL) in amdgpu_ih_ring_init()
69 ih->gpu_addr = dma_addr; in amdgpu_ih_ring_init()
70 ih->wptr_addr = dma_addr + ih->ring_size; in amdgpu_ih_ring_init()
71 ih->wptr_cpu = &ih->ring[ih->ring_size / 4]; in amdgpu_ih_ring_init()
72 ih->rptr_addr = dma_addr + ih->ring_size + 4; in amdgpu_ih_ring_init()
73 ih->rptr_cpu = &ih->ring[(ih->ring_size / 4) + 1]; in amdgpu_ih_ring_init()
87 r = amdgpu_bo_create_kernel(adev, ih->ring_size, PAGE_SIZE, in amdgpu_ih_ring_init()
89 &ih->ring_obj, &ih->gpu_addr, in amdgpu_ih_ring_init()
90 (void **)&ih->ring); in amdgpu_ih_ring_init()
97 ih->wptr_addr = adev->wb.gpu_addr + wptr_offs * 4; in amdgpu_ih_ring_init()
98 ih->wptr_cpu = &adev->wb.wb[wptr_offs]; in amdgpu_ih_ring_init()
99 ih->rptr_addr = adev->wb.gpu_addr + rptr_offs * 4; in amdgpu_ih_ring_init()
100 ih->rptr_cpu = &adev->wb.wb[rptr_offs]; in amdgpu_ih_ring_init()
114 void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih) in amdgpu_ih_ring_fini() argument
116 if (ih->use_bus_addr) { in amdgpu_ih_ring_fini()
117 if (!ih->ring) in amdgpu_ih_ring_fini()
123 dma_free_coherent(adev->dev, ih->ring_size + 8, in amdgpu_ih_ring_fini()
124 (void *)ih->ring, ih->gpu_addr); in amdgpu_ih_ring_fini()
125 ih->ring = NULL; in amdgpu_ih_ring_fini()
127 amdgpu_bo_free_kernel(&ih->ring_obj, &ih->gpu_addr, in amdgpu_ih_ring_fini()
128 (void **)&ih->ring); in amdgpu_ih_ring_fini()
129 amdgpu_device_wb_free(adev, (ih->wptr_addr - ih->gpu_addr) / 4); in amdgpu_ih_ring_fini()
130 amdgpu_device_wb_free(adev, (ih->rptr_addr - ih->gpu_addr) / 4); in amdgpu_ih_ring_fini()
143 int amdgpu_ih_process(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih) in amdgpu_ih_process() argument
148 if (!ih->enabled || adev->shutdown) in amdgpu_ih_process()
151 wptr = amdgpu_ih_get_wptr(adev, ih); in amdgpu_ih_process()
155 if (atomic_xchg(&ih->lock, 1)) in amdgpu_ih_process()
158 DRM_DEBUG("%s: rptr %d, wptr %d\n", __func__, ih->rptr, wptr); in amdgpu_ih_process()
163 while (ih->rptr != wptr && --count) { in amdgpu_ih_process()
164 amdgpu_irq_dispatch(adev, ih); in amdgpu_ih_process()
165 ih->rptr &= ih->ptr_mask; in amdgpu_ih_process()
168 amdgpu_ih_set_rptr(adev, ih); in amdgpu_ih_process()
169 atomic_set(&ih->lock, 0); in amdgpu_ih_process()
172 wptr = amdgpu_ih_get_wptr(adev, ih); in amdgpu_ih_process()
173 if (wptr != ih->rptr) in amdgpu_ih_process()