diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 143 | 
1 files changed, 0 insertions, 143 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index e32ae906d797..adc813cde8e2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -45,98 +45,6 @@ void amdgpu_virt_init_setting(struct amdgpu_device *adev)  	adev->pg_flags = 0;  } -uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) -{ -	signed long r, cnt = 0; -	unsigned long flags; -	uint32_t seq; -	struct amdgpu_kiq *kiq = &adev->gfx.kiq; -	struct amdgpu_ring *ring = &kiq->ring; - -	BUG_ON(!ring->funcs->emit_rreg); - -	spin_lock_irqsave(&kiq->ring_lock, flags); -	amdgpu_ring_alloc(ring, 32); -	amdgpu_ring_emit_rreg(ring, reg); -	amdgpu_fence_emit_polling(ring, &seq); -	amdgpu_ring_commit(ring); -	spin_unlock_irqrestore(&kiq->ring_lock, flags); - -	r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); - -	/* don't wait anymore for gpu reset case because this way may -	 * block gpu_recover() routine forever, e.g. this virt_kiq_rreg -	 * is triggered in TTM and ttm_bo_lock_delayed_workqueue() will -	 * never return if we keep waiting in virt_kiq_rreg, which cause -	 * gpu_recover() hang there. -	 * -	 * also don't wait anymore for IRQ context -	 * */ -	if (r < 1 && (adev->in_gpu_reset || in_interrupt())) -		goto failed_kiq_read; - -	might_sleep(); -	while (r < 1 && cnt++ < MAX_KIQ_REG_TRY) { -		msleep(MAX_KIQ_REG_BAILOUT_INTERVAL); -		r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); -	} - -	if (cnt > MAX_KIQ_REG_TRY) -		goto failed_kiq_read; - -	return adev->wb.wb[adev->virt.reg_val_offs]; - -failed_kiq_read: -	pr_err("failed to read reg:%x\n", reg); -	return ~0; -} - -void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) -{ -	signed long r, cnt = 0; -	unsigned long flags; -	uint32_t seq; -	struct amdgpu_kiq *kiq = &adev->gfx.kiq; -	struct amdgpu_ring *ring = &kiq->ring; - -	BUG_ON(!ring->funcs->emit_wreg); - -	spin_lock_irqsave(&kiq->ring_lock, flags); -	amdgpu_ring_alloc(ring, 32); -	amdgpu_ring_emit_wreg(ring, reg, v); -	amdgpu_fence_emit_polling(ring, &seq); -	amdgpu_ring_commit(ring); -	spin_unlock_irqrestore(&kiq->ring_lock, flags); - -	r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); - -	/* don't wait anymore for gpu reset case because this way may -	 * block gpu_recover() routine forever, e.g. this virt_kiq_rreg -	 * is triggered in TTM and ttm_bo_lock_delayed_workqueue() will -	 * never return if we keep waiting in virt_kiq_rreg, which cause -	 * gpu_recover() hang there. -	 * -	 * also don't wait anymore for IRQ context -	 * */ -	if (r < 1 && (adev->in_gpu_reset || in_interrupt())) -		goto failed_kiq_write; - -	might_sleep(); -	while (r < 1 && cnt++ < MAX_KIQ_REG_TRY) { - -		msleep(MAX_KIQ_REG_BAILOUT_INTERVAL); -		r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); -	} - -	if (cnt > MAX_KIQ_REG_TRY) -		goto failed_kiq_write; - -	return; - -failed_kiq_write: -	pr_err("failed to write reg:%x\n", reg); -} -  void amdgpu_virt_kiq_reg_write_reg_wait(struct amdgpu_device *adev,  					uint32_t reg0, uint32_t reg1,  					uint32_t ref, uint32_t mask) @@ -379,54 +287,3 @@ void amdgpu_virt_init_data_exchange(struct amdgpu_device *adev)  		}  	}  } - -static uint32_t parse_clk(char *buf, bool min) -{ -        char *ptr = buf; -        uint32_t clk = 0; - -        do { -                ptr = strchr(ptr, ':'); -                if (!ptr) -                        break; -                ptr+=2; -		if (kstrtou32(ptr, 10, &clk)) -			return 0; -        } while (!min); - -        return clk * 100; -} - -uint32_t amdgpu_virt_get_sclk(struct amdgpu_device *adev, bool lowest) -{ -	char *buf = NULL; -	uint32_t clk = 0; - -	buf = kzalloc(PAGE_SIZE, GFP_KERNEL); -	if (!buf) -		return -ENOMEM; - -	adev->virt.ops->get_pp_clk(adev, PP_SCLK, buf); -	clk = parse_clk(buf, lowest); - -	kfree(buf); - -	return clk; -} - -uint32_t amdgpu_virt_get_mclk(struct amdgpu_device *adev, bool lowest) -{ -	char *buf = NULL; -	uint32_t clk = 0; - -	buf = kzalloc(PAGE_SIZE, GFP_KERNEL); -	if (!buf) -		return -ENOMEM; - -	adev->virt.ops->get_pp_clk(adev, PP_MCLK, buf); -	clk = parse_clk(buf, lowest); - -	kfree(buf); - -	return clk; -} | 
