[PATCH 4/4] drm/amdgpu:determine if vPost is needed indeed

Deucher, Alexander Alexander.Deucher at amd.com
Wed Sep 14 15:29:38 UTC 2016


> -----Original Message-----
> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf
> Of Monk Liu
> Sent: Wednesday, September 14, 2016 7:48 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Liu, Monk
> Subject: [PATCH 4/4] drm/amdgpu:determine if vPost is needed indeed
> 
> Change-Id: Ic4bb5cb748180d60a672f9e160f1f3308397029b
> Signed-off-by: Monk Liu <Monk.Liu at amd.com>

For the series:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>


> 
> Conflicts:
> 	drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 38
> ++++++++++++++++++++++++++----
>  1 file changed, 34 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index f8dd802..1839079 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -652,6 +652,37 @@ bool amdgpu_card_posted(struct amdgpu_device
> *adev)
> 
>  }
> 
> +static bool amdgpu_vpost_needed(struct amdgpu_device *adev)
> +{
> +	if (amdgpu_sriov_vf(adev))
> +		return false;
> +
> +	if (amdgpu_passthrough(adev)) {
> +		/* for FIJI: In whole GPU pass-through virtualization case
> +		 * old smc fw won't clear some registers (e.g. MEM_SIZE,
> BIOS_SCRATCH)
> +		 * so amdgpu_card_posted return false and driver will
> incorrectly skip vPost.
> +		 * but if we force vPost do in pass-through case, the driver
> reload will hang.
> +		 * so we'll skip vPost if smc version is above 00160e00 for FIJI.
> +		 */
> +		 if (adev->asic_type == CHIP_FIJI && adev->pm.fw_version
> >= 0x160e00)
> +			return false;
> +
> +		 /* we assume vPost is neede for all other cases */
> +		 return true;
> +	} else {
> +		/* in bare-metal case, amdgpu_card_posted return false
> +		 * after system reboot/boot, and return true if driver
> +		 * reloaded.
> +		 * we shouldn't do vPost after driver reload otherwise GPU
> +		 * could hang.
> +		 */
> +		if (amdgpu_card_posted(adev))
> +			return false;
> +	}
> +
> +	return true;
> +}
> +
>  /**
>   * amdgpu_dummy_page_init - init dummy page used by the driver
>   *
> @@ -1679,14 +1710,13 @@ int amdgpu_device_init(struct amdgpu_device
> *adev,
>  		amdgpu_asic_detect_sriov_bios(adev);
> 
>  	/* Post card if necessary */
> -	if (!amdgpu_sriov_vf(adev) &&
> -		(!amdgpu_card_posted(adev) ||
> amdgpu_passthrough(adev))) {
> +	if (amdgpu_vpost_needed(adev)) {
>  		if (!adev->bios) {
> -			dev_err(adev->dev, "Card not posted and no BIOS -
> ignoring\n");
> +			dev_err(adev->dev, "no vBIOS found\n");
>  			r = -EINVAL;
>  			goto failed;
>  		}
> -		DRM_INFO("GPU not posted. posting now...\n");
> +		DRM_INFO("GPU posting now...\n");
>  		r = amdgpu_atom_asic_init(adev-
> >mode_info.atom_context);
>  		if (r) {
>  			dev_err(adev->dev, "gpu post error!\n");
> --
> 1.9.1
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list