Lines Matching refs:adev

41 int amdgpu_gfx_scratch_get(struct amdgpu_device *adev, uint32_t *reg)  in amdgpu_gfx_scratch_get()  argument
45 i = ffs(adev->gfx.scratch.free_mask); in amdgpu_gfx_scratch_get()
46 if (i != 0 && i <= adev->gfx.scratch.num_reg) { in amdgpu_gfx_scratch_get()
48 adev->gfx.scratch.free_mask &= ~(1u << i); in amdgpu_gfx_scratch_get()
49 *reg = adev->gfx.scratch.reg_base + i; in amdgpu_gfx_scratch_get()
63 void amdgpu_gfx_scratch_free(struct amdgpu_device *adev, uint32_t reg) in amdgpu_gfx_scratch_free() argument
65 adev->gfx.scratch.free_mask |= 1u << (reg - adev->gfx.scratch.reg_base); in amdgpu_gfx_scratch_free()
112 static bool amdgpu_gfx_is_multipipe_capable(struct amdgpu_device *adev) in amdgpu_gfx_is_multipipe_capable() argument
122 if (adev->asic_type == CHIP_POLARIS11) in amdgpu_gfx_is_multipipe_capable()
125 return adev->gfx.mec.num_mec > 1; in amdgpu_gfx_is_multipipe_capable()
128 void amdgpu_gfx_compute_queue_acquire(struct amdgpu_device *adev) in amdgpu_gfx_compute_queue_acquire() argument
131 bool multipipe_policy = amdgpu_gfx_is_multipipe_capable(adev); in amdgpu_gfx_compute_queue_acquire()
135 queue = i % adev->gfx.mec.num_queue_per_pipe; in amdgpu_gfx_compute_queue_acquire()
136 pipe = (i / adev->gfx.mec.num_queue_per_pipe) in amdgpu_gfx_compute_queue_acquire()
137 % adev->gfx.mec.num_pipe_per_mec; in amdgpu_gfx_compute_queue_acquire()
138 mec = (i / adev->gfx.mec.num_queue_per_pipe) in amdgpu_gfx_compute_queue_acquire()
139 / adev->gfx.mec.num_pipe_per_mec; in amdgpu_gfx_compute_queue_acquire()
142 if (mec >= adev->gfx.mec.num_mec) in amdgpu_gfx_compute_queue_acquire()
148 set_bit(i, adev->gfx.mec.queue_bitmap); in amdgpu_gfx_compute_queue_acquire()
152 set_bit(i, adev->gfx.mec.queue_bitmap); in amdgpu_gfx_compute_queue_acquire()
157 adev->gfx.num_compute_rings = in amdgpu_gfx_compute_queue_acquire()
158 bitmap_weight(adev->gfx.mec.queue_bitmap, AMDGPU_MAX_COMPUTE_QUEUES); in amdgpu_gfx_compute_queue_acquire()
162 if (WARN_ON(adev->gfx.num_compute_rings > AMDGPU_MAX_COMPUTE_RINGS)) in amdgpu_gfx_compute_queue_acquire()
163 adev->gfx.num_compute_rings = AMDGPU_MAX_COMPUTE_RINGS; in amdgpu_gfx_compute_queue_acquire()
166 static int amdgpu_gfx_kiq_acquire(struct amdgpu_device *adev, in amdgpu_gfx_kiq_acquire() argument
172 queue_bit = adev->gfx.mec.num_mec in amdgpu_gfx_kiq_acquire()
173 * adev->gfx.mec.num_pipe_per_mec in amdgpu_gfx_kiq_acquire()
174 * adev->gfx.mec.num_queue_per_pipe; in amdgpu_gfx_kiq_acquire()
177 if (test_bit(queue_bit, adev->gfx.mec.queue_bitmap)) in amdgpu_gfx_kiq_acquire()
180 amdgpu_gfx_bit_to_queue(adev, queue_bit, &mec, &pipe, &queue); in amdgpu_gfx_kiq_acquire()
197 dev_err(adev->dev, "Failed to find a queue for KIQ\n"); in amdgpu_gfx_kiq_acquire()
201 int amdgpu_gfx_kiq_init_ring(struct amdgpu_device *adev, in amdgpu_gfx_kiq_init_ring() argument
205 struct amdgpu_kiq *kiq = &adev->gfx.kiq; in amdgpu_gfx_kiq_init_ring()
210 r = amdgpu_device_wb_get(adev, &adev->virt.reg_val_offs); in amdgpu_gfx_kiq_init_ring()
214 ring->adev = NULL; in amdgpu_gfx_kiq_init_ring()
219 r = amdgpu_gfx_kiq_acquire(adev, ring); in amdgpu_gfx_kiq_init_ring()
225 r = amdgpu_ring_init(adev, ring, 1024, in amdgpu_gfx_kiq_init_ring()
228 dev_warn(adev->dev, "(%d) failed to init kiq ring\n", r); in amdgpu_gfx_kiq_init_ring()
236 amdgpu_device_wb_free(ring->adev, ring->adev->virt.reg_val_offs); in amdgpu_gfx_kiq_free_ring()
240 void amdgpu_gfx_kiq_fini(struct amdgpu_device *adev) in amdgpu_gfx_kiq_fini() argument
242 struct amdgpu_kiq *kiq = &adev->gfx.kiq; in amdgpu_gfx_kiq_fini()
247 int amdgpu_gfx_kiq_init(struct amdgpu_device *adev, in amdgpu_gfx_kiq_init() argument
252 struct amdgpu_kiq *kiq = &adev->gfx.kiq; in amdgpu_gfx_kiq_init()
254 r = amdgpu_bo_create_kernel(adev, hpd_size, PAGE_SIZE, in amdgpu_gfx_kiq_init()
258 dev_warn(adev->dev, "failed to create KIQ bo (%d).\n", r); in amdgpu_gfx_kiq_init()
266 dev_warn(adev->dev, "(%d) reserve kiq eop bo failed\n", r); in amdgpu_gfx_kiq_init()
274 int amdgpu_gfx_compute_mqd_sw_init(struct amdgpu_device *adev, in amdgpu_gfx_compute_mqd_sw_init() argument
281 ring = &adev->gfx.kiq.ring; in amdgpu_gfx_compute_mqd_sw_init()
288 r = amdgpu_bo_create_kernel(adev, mqd_size, PAGE_SIZE, in amdgpu_gfx_compute_mqd_sw_init()
292 dev_warn(adev->dev, "failed to create ring mqd ob (%d)", r); in amdgpu_gfx_compute_mqd_sw_init()
297 adev->gfx.mec.mqd_backup[AMDGPU_MAX_COMPUTE_RINGS] = kmalloc(mqd_size, GFP_KERNEL); in amdgpu_gfx_compute_mqd_sw_init()
298 if (!adev->gfx.mec.mqd_backup[AMDGPU_MAX_COMPUTE_RINGS]) in amdgpu_gfx_compute_mqd_sw_init()
299 dev_warn(adev->dev, "no memory to create MQD backup for ring %s\n", ring->name); in amdgpu_gfx_compute_mqd_sw_init()
303 for (i = 0; i < adev->gfx.num_compute_rings; i++) { in amdgpu_gfx_compute_mqd_sw_init()
304 ring = &adev->gfx.compute_ring[i]; in amdgpu_gfx_compute_mqd_sw_init()
306 r = amdgpu_bo_create_kernel(adev, mqd_size, PAGE_SIZE, in amdgpu_gfx_compute_mqd_sw_init()
310 dev_warn(adev->dev, "failed to create ring mqd ob (%d)", r); in amdgpu_gfx_compute_mqd_sw_init()
315 adev->gfx.mec.mqd_backup[i] = kmalloc(mqd_size, GFP_KERNEL); in amdgpu_gfx_compute_mqd_sw_init()
316 if (!adev->gfx.mec.mqd_backup[i]) in amdgpu_gfx_compute_mqd_sw_init()
317 dev_warn(adev->dev, "no memory to create MQD backup for ring %s\n", ring->name); in amdgpu_gfx_compute_mqd_sw_init()
324 void amdgpu_gfx_compute_mqd_sw_fini(struct amdgpu_device *adev) in amdgpu_gfx_compute_mqd_sw_fini() argument
329 for (i = 0; i < adev->gfx.num_compute_rings; i++) { in amdgpu_gfx_compute_mqd_sw_fini()
330 ring = &adev->gfx.compute_ring[i]; in amdgpu_gfx_compute_mqd_sw_fini()
331 kfree(adev->gfx.mec.mqd_backup[i]); in amdgpu_gfx_compute_mqd_sw_fini()
337 ring = &adev->gfx.kiq.ring; in amdgpu_gfx_compute_mqd_sw_fini()
338 kfree(adev->gfx.mec.mqd_backup[AMDGPU_MAX_COMPUTE_RINGS]); in amdgpu_gfx_compute_mqd_sw_fini()