[V2,07/11] drm/amdgpu: request/release full gpu access if device is vf

Submitted by Yu, Xiangliang on Jan. 10, 2017, 10 a.m.

Details

Message ID 1484042450-22987-8-git-send-email-Xiangliang.Yu@amd.com
State New
Headers show
Series "Add support AMD GPU virtualization soultion" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Yu, Xiangliang Jan. 10, 2017, 10 a.m.
For gpu vf device, first need to request full gpu access before
accessing gpu registers, and release full gpu access after the
access is done.

Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 +++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    | 6 ++++++
 2 files changed, 15 insertions(+)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 9a2fd3e..03d28a1 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1330,6 +1330,12 @@  static int amdgpu_early_init(struct amdgpu_device *adev)
 		return -EINVAL;
 	}
 
+	if (amdgpu_sriov_vf(adev)) {
+		r = amdgpu_virt_request_full_gpu(adev, true);
+		if (r)
+			return r;
+	}
+
 	for (i = 0; i < adev->num_ip_blocks; i++) {
 		if ((amdgpu_ip_block_mask & (1 << i)) == 0) {
 			DRM_ERROR("disabled ip block: %d\n", i);
@@ -1523,6 +1529,9 @@  static int amdgpu_fini(struct amdgpu_device *adev)
 		adev->ip_blocks[i].status.late_initialized = false;
 	}
 
+	if (amdgpu_sriov_vf(adev))
+		amdgpu_virt_release_full_gpu(adev, false);
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 47bc8e1..eb228c7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -60,6 +60,9 @@  int amdgpu_driver_unload_kms(struct drm_device *dev)
 	if (adev->rmmio == NULL)
 		goto done_free;
 
+	if (amdgpu_sriov_vf(adev))
+		amdgpu_virt_request_full_gpu(adev, false);
+
 	if (amdgpu_device_is_px(dev)) {
 		pm_runtime_get_sync(dev->dev);
 		pm_runtime_forbid(dev->dev);
@@ -139,6 +142,9 @@  int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags)
 		pm_runtime_put_autosuspend(dev->dev);
 	}
 
+	if (amdgpu_sriov_vf(adev))
+		amdgpu_virt_release_full_gpu(adev, true);
+
 out:
 	if (r) {
 		/* balance pm_runtime_get_sync in amdgpu_driver_unload_kms */

Comments

> -----Original Message-----

> From: amd-gfx [mailto:amd-gfx-bounces@lists.freedesktop.org] On Behalf

> Of Xiangliang Yu

> Sent: Tuesday, January 10, 2017 5:01 AM

> To: amd-gfx@lists.freedesktop.org

> Cc: Yu, Xiangliang

> Subject: [V2 07/11] drm/amdgpu: request/release full gpu access if device is

> vf

> 

> For gpu vf device, first need to request full gpu access before

> accessing gpu registers, and release full gpu access after the

> access is done.

> 

> Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com>


Reviewed-by: Alex Deucher <alexander.deucher@amd.com>


> ---

>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 9 +++++++++

>  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    | 6 ++++++

>  2 files changed, 15 insertions(+)

> 

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

> index 9a2fd3e..03d28a1 100644

> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

> @@ -1330,6 +1330,12 @@ static int amdgpu_early_init(struct

> amdgpu_device *adev)

>  		return -EINVAL;

>  	}

> 

> +	if (amdgpu_sriov_vf(adev)) {

> +		r = amdgpu_virt_request_full_gpu(adev, true);

> +		if (r)

> +			return r;

> +	}

> +

>  	for (i = 0; i < adev->num_ip_blocks; i++) {

>  		if ((amdgpu_ip_block_mask & (1 << i)) == 0) {

>  			DRM_ERROR("disabled ip block: %d\n", i);

> @@ -1523,6 +1529,9 @@ static int amdgpu_fini(struct amdgpu_device

> *adev)

>  		adev->ip_blocks[i].status.late_initialized = false;

>  	}

> 

> +	if (amdgpu_sriov_vf(adev))

> +		amdgpu_virt_release_full_gpu(adev, false);

> +

>  	return 0;

>  }

> 

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

> index 47bc8e1..eb228c7 100644

> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

> @@ -60,6 +60,9 @@ int amdgpu_driver_unload_kms(struct drm_device

> *dev)

>  	if (adev->rmmio == NULL)

>  		goto done_free;

> 

> +	if (amdgpu_sriov_vf(adev))

> +		amdgpu_virt_request_full_gpu(adev, false);

> +

>  	if (amdgpu_device_is_px(dev)) {

>  		pm_runtime_get_sync(dev->dev);

>  		pm_runtime_forbid(dev->dev);

> @@ -139,6 +142,9 @@ int amdgpu_driver_load_kms(struct drm_device

> *dev, unsigned long flags)

>  		pm_runtime_put_autosuspend(dev->dev);

>  	}

> 

> +	if (amdgpu_sriov_vf(adev))

> +		amdgpu_virt_release_full_gpu(adev, true);

> +

>  out:

>  	if (r) {

>  		/* balance pm_runtime_get_sync in

> amdgpu_driver_unload_kms */

> --

> 2.7.4

> 

> _______________________________________________

> amd-gfx mailing list

> amd-gfx@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/amd-gfx