[V2,08/11] drm/amdgpu/vi: add support virtualization

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

Details

Message ID 1484042450-22987-9-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.
Call VI virtualization functions if device is Vf.

Signed-off-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/vi.c | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
index dc0d4fa..34aa603 100644
--- a/drivers/gpu/drm/amd/amdgpu/vi.c
+++ b/drivers/gpu/drm/amd/amdgpu/vi.c
@@ -77,6 +77,7 @@ 
 #include "amdgpu_dm.h"
 #include "amdgpu_powerplay.h"
 #include "dce_virtual.h"
+#include "mxgpu_vi.h"
 
 /*
  * Indirect registers accessor
@@ -273,6 +274,12 @@  static void vi_init_golden_registers(struct amdgpu_device *adev)
 	/* Some of the registers might be dependent on GRBM_GFX_INDEX */
 	mutex_lock(&adev->grbm_idx_mutex);
 
+	if (amdgpu_sriov_vf(adev)) {
+		xgpu_vi_init_golden_registers(adev);
+		mutex_unlock(&adev->grbm_idx_mutex);
+		return;
+	}
+
 	switch (adev->asic_type) {
 	case CHIP_TOPAZ:
 		amdgpu_program_register_sequence(adev,
@@ -892,8 +899,10 @@  static int vi_common_early_init(void *handle)
 		(amdgpu_ip_block_mask & (1 << AMD_IP_BLOCK_TYPE_SMC)))
 		smc_enabled = true;
 
-	if (amdgpu_sriov_vf(adev))
+	if (amdgpu_sriov_vf(adev)) {
 		amdgpu_virt_init_setting(adev);
+		xgpu_vi_mailbox_set_irq_funcs(adev);
+	}
 
 	adev->rev_id = vi_get_rev_id(adev);
 	adev->external_rev_id = 0xFF;
@@ -1059,8 +1068,23 @@  static int vi_common_early_init(void *handle)
 	return 0;
 }
 
+static int vi_common_late_init(void *handle)
+{
+	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+	if (amdgpu_sriov_vf(adev))
+		xgpu_vi_mailbox_get_irq(adev);
+
+	return 0;
+}
+
 static int vi_common_sw_init(void *handle)
 {
+	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+	if (amdgpu_sriov_vf(adev))
+		xgpu_vi_mailbox_add_irq_id(adev);
+
 	return 0;
 }
 
@@ -1092,6 +1116,9 @@  static int vi_common_hw_fini(void *handle)
 	/* enable the doorbell aperture */
 	vi_enable_doorbell_aperture(adev, false);
 
+	if (amdgpu_sriov_vf(adev))
+		xgpu_vi_mailbox_put_irq(adev);
+
 	return 0;
 }
 
@@ -1376,7 +1403,7 @@  static int vi_common_set_powergating_state(void *handle,
 static const struct amd_ip_funcs vi_common_ip_funcs = {
 	.name = "vi_common",
 	.early_init = vi_common_early_init,
-	.late_init = NULL,
+	.late_init = vi_common_late_init,
 	.sw_init = vi_common_sw_init,
 	.sw_fini = vi_common_sw_fini,
 	.hw_init = vi_common_hw_init,
@@ -1404,6 +1431,9 @@  int vi_set_ip_blocks(struct amdgpu_device *adev)
 	/* in early init stage, vbios code won't work */
 	vi_detect_hw_virtualization(adev);
 
+	if (amdgpu_sriov_vf(adev))
+		adev->virt.ops = &xgpu_vi_virt_ops;
+
 	switch (adev->asic_type) {
 	case CHIP_TOPAZ:
 		/* topaz has no DCE, UVD, VCE */

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 08/11] drm/amdgpu/vi: add support virtualization

> 

> Call VI virtualization functions if device is Vf.

> 

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


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


> ---

>  drivers/gpu/drm/amd/amdgpu/vi.c | 34

> ++++++++++++++++++++++++++++++++--

>  1 file changed, 32 insertions(+), 2 deletions(-)

> 

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

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

> index dc0d4fa..34aa603 100644

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

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

> @@ -77,6 +77,7 @@

>  #include "amdgpu_dm.h"

>  #include "amdgpu_powerplay.h"

>  #include "dce_virtual.h"

> +#include "mxgpu_vi.h"

> 

>  /*

>   * Indirect registers accessor

> @@ -273,6 +274,12 @@ static void vi_init_golden_registers(struct

> amdgpu_device *adev)

>  	/* Some of the registers might be dependent on GRBM_GFX_INDEX

> */

>  	mutex_lock(&adev->grbm_idx_mutex);

> 

> +	if (amdgpu_sriov_vf(adev)) {

> +		xgpu_vi_init_golden_registers(adev);

> +		mutex_unlock(&adev->grbm_idx_mutex);

> +		return;

> +	}

> +

>  	switch (adev->asic_type) {

>  	case CHIP_TOPAZ:

>  		amdgpu_program_register_sequence(adev,

> @@ -892,8 +899,10 @@ static int vi_common_early_init(void *handle)

>  		(amdgpu_ip_block_mask & (1 <<

> AMD_IP_BLOCK_TYPE_SMC)))

>  		smc_enabled = true;

> 

> -	if (amdgpu_sriov_vf(adev))

> +	if (amdgpu_sriov_vf(adev)) {

>  		amdgpu_virt_init_setting(adev);

> +		xgpu_vi_mailbox_set_irq_funcs(adev);

> +	}

> 

>  	adev->rev_id = vi_get_rev_id(adev);

>  	adev->external_rev_id = 0xFF;

> @@ -1059,8 +1068,23 @@ static int vi_common_early_init(void *handle)

>  	return 0;

>  }

> 

> +static int vi_common_late_init(void *handle)

> +{

> +	struct amdgpu_device *adev = (struct amdgpu_device *)handle;

> +

> +	if (amdgpu_sriov_vf(adev))

> +		xgpu_vi_mailbox_get_irq(adev);

> +

> +	return 0;

> +}

> +

>  static int vi_common_sw_init(void *handle)

>  {

> +	struct amdgpu_device *adev = (struct amdgpu_device *)handle;

> +

> +	if (amdgpu_sriov_vf(adev))

> +		xgpu_vi_mailbox_add_irq_id(adev);

> +

>  	return 0;

>  }

> 

> @@ -1092,6 +1116,9 @@ static int vi_common_hw_fini(void *handle)

>  	/* enable the doorbell aperture */

>  	vi_enable_doorbell_aperture(adev, false);

> 

> +	if (amdgpu_sriov_vf(adev))

> +		xgpu_vi_mailbox_put_irq(adev);

> +

>  	return 0;

>  }

> 

> @@ -1376,7 +1403,7 @@ static int vi_common_set_powergating_state(void

> *handle,

>  static const struct amd_ip_funcs vi_common_ip_funcs = {

>  	.name = "vi_common",

>  	.early_init = vi_common_early_init,

> -	.late_init = NULL,

> +	.late_init = vi_common_late_init,

>  	.sw_init = vi_common_sw_init,

>  	.sw_fini = vi_common_sw_fini,

>  	.hw_init = vi_common_hw_init,

> @@ -1404,6 +1431,9 @@ int vi_set_ip_blocks(struct amdgpu_device *adev)

>  	/* in early init stage, vbios code won't work */

>  	vi_detect_hw_virtualization(adev);

> 

> +	if (amdgpu_sriov_vf(adev))

> +		adev->virt.ops = &xgpu_vi_virt_ops;

> +

>  	switch (adev->asic_type) {

>  	case CHIP_TOPAZ:

>  		/* topaz has no DCE, UVD, VCE */

> --

> 2.7.4

> 

> _______________________________________________

> amd-gfx mailing list

> amd-gfx@lists.freedesktop.org

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