diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 34 | 
1 files changed, 27 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c index 35dd6effa9a3..e3738d417245 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c @@ -455,6 +455,9 @@ void amdgpu_amdkfd_get_local_mem_info(struct amdgpu_device *adev,  		else  			mem_info->local_mem_size_private =  					KFD_XCP_MEMORY_SIZE(adev, xcp->id); +	} else if (adev->flags & AMD_IS_APU) { +		mem_info->local_mem_size_public = (ttm_tt_pages_limit() << PAGE_SHIFT); +		mem_info->local_mem_size_private = 0;  	} else {  		mem_info->local_mem_size_public = adev->gmc.visible_vram_size;  		mem_info->local_mem_size_private = adev->gmc.real_vram_size - @@ -747,10 +750,17 @@ bool amdgpu_amdkfd_is_fed(struct amdgpu_device *adev)  	return amdgpu_ras_get_fed_status(adev);  } +void amdgpu_amdkfd_ras_pasid_poison_consumption_handler(struct amdgpu_device *adev, +				enum amdgpu_ras_block block, uint16_t pasid, +				pasid_notify pasid_fn, void *data, uint32_t reset) +{ +	amdgpu_umc_pasid_poison_handler(adev, block, pasid, pasid_fn, data, reset); +} +  void amdgpu_amdkfd_ras_poison_consumption_handler(struct amdgpu_device *adev, -	enum amdgpu_ras_block block, bool reset) +	enum amdgpu_ras_block block, uint32_t reset)  { -	amdgpu_umc_poison_handler(adev, block, reset); +	amdgpu_umc_pasid_poison_handler(adev, block, 0, NULL, NULL, reset);  }  int amdgpu_amdkfd_send_close_event_drain_irq(struct amdgpu_device *adev, @@ -769,12 +779,20 @@ int amdgpu_amdkfd_send_close_event_drain_irq(struct amdgpu_device *adev,  	return 0;  } -bool amdgpu_amdkfd_ras_query_utcl2_poison_status(struct amdgpu_device *adev) +bool amdgpu_amdkfd_ras_query_utcl2_poison_status(struct amdgpu_device *adev, +			int hub_inst, int hub_type)  { -	if (adev->gfx.ras && adev->gfx.ras->query_utcl2_poison_status) -		return adev->gfx.ras->query_utcl2_poison_status(adev); -	else -		return false; +	if (!hub_type) { +		if (adev->gfxhub.funcs->query_utcl2_poison_status) +			return adev->gfxhub.funcs->query_utcl2_poison_status(adev, hub_inst); +		else +			return false; +	} else { +		if (adev->mmhub.funcs->query_utcl2_poison_status) +			return adev->mmhub.funcs->query_utcl2_poison_status(adev, hub_inst); +		else +			return false; +	}  }  int amdgpu_amdkfd_check_and_lock_kfd(struct amdgpu_device *adev) @@ -809,6 +827,8 @@ u64 amdgpu_amdkfd_xcp_memory_size(struct amdgpu_device *adev, int xcp_id)  		}  		do_div(tmp, adev->xcp_mgr->num_xcp_per_mem_partition);  		return ALIGN_DOWN(tmp, PAGE_SIZE); +	} else if (adev->flags & AMD_IS_APU) { +		return (ttm_tt_pages_limit() << PAGE_SHIFT);  	} else {  		return adev->gmc.real_vram_size;  	} |