> -----Original Message----- > From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf > Of Xiangliang Yu > Sent: Tuesday, January 10, 2017 5:01 AM > To: amd-gfx at 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 at amd.com> Reviewed-by: Alex Deucher <alexander.deucher at 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 at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx