[PATCH 7/9] drm/amdgpu: Skip setting some regs under Vega10 VF

Alex Deucher alexdeucher at gmail.com
Thu May 9 05:47:14 UTC 2019


On Tue, May 7, 2019 at 10:46 PM Trigger Huang <Trigger.Huang at amd.com> wrote:
>
> For Vega10 SR-IOV VF, skip setting some regs due to:
> 1, host will program thme

Typo: thme -> them

With that fixed:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> 2, avoid VF register programming violations
>
> Change-Id: Id43e7fca7775035be47696c67a74ad418403036b
> Signed-off-by: Trigger Huang <Trigger.Huang at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c   | 14 ++++++++------
>  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c   |  3 +++
>  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 25 ++++++++++++++++++++-----
>  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c  | 14 ++++++++------
>  drivers/gpu/drm/amd/amdgpu/soc15.c      | 16 +++++++++++-----
>  5 files changed, 50 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index ef4272d..6b203c9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -307,12 +307,14 @@ static void gfx_v9_0_init_golden_registers(struct amdgpu_device *adev)
>  {
>         switch (adev->asic_type) {
>         case CHIP_VEGA10:
> -               soc15_program_register_sequence(adev,
> -                                                golden_settings_gc_9_0,
> -                                                ARRAY_SIZE(golden_settings_gc_9_0));
> -               soc15_program_register_sequence(adev,
> -                                                golden_settings_gc_9_0_vg10,
> -                                                ARRAY_SIZE(golden_settings_gc_9_0_vg10));
> +               if (!amdgpu_virt_support_skip_setting(adev)) {
> +                       soc15_program_register_sequence(adev,
> +                                                        golden_settings_gc_9_0,
> +                                                        ARRAY_SIZE(golden_settings_gc_9_0));
> +                       soc15_program_register_sequence(adev,
> +                                                        golden_settings_gc_9_0_vg10,
> +                                                        ARRAY_SIZE(golden_settings_gc_9_0_vg10));
> +               }
>                 break;
>         case CHIP_VEGA12:
>                 soc15_program_register_sequence(adev,
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> index 727e26a..b41574e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
> @@ -1087,6 +1087,9 @@ static void gmc_v9_0_init_golden_registers(struct amdgpu_device *adev)
>
>         switch (adev->asic_type) {
>         case CHIP_VEGA10:
> +               if (amdgpu_virt_support_skip_setting(adev))
> +                       break;
> +               /* fall through */
>         case CHIP_VEGA20:
>                 soc15_program_register_sequence(adev,
>                                                 golden_settings_mmhub_1_0_0,
> diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> index 1741056..8054131 100644
> --- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
> @@ -111,6 +111,9 @@ static void mmhub_v1_0_init_system_aperture_regs(struct amdgpu_device *adev)
>                 WREG32_SOC15(MMHUB, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR,
>                              max(adev->gmc.fb_end, adev->gmc.agp_end) >> 18);
>
> +       if (amdgpu_virt_support_skip_setting(adev))
> +               return;
> +
>         /* Set default page address. */
>         value = adev->vram_scratch.gpu_addr - adev->gmc.vram_start +
>                 adev->vm_manager.vram_base_offset;
> @@ -156,6 +159,9 @@ static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
>  {
>         uint32_t tmp;
>
> +       if (amdgpu_virt_support_skip_setting(adev))
> +               return;
> +
>         /* Setup L2 cache */
>         tmp = RREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL);
>         tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 1);
> @@ -201,6 +207,9 @@ static void mmhub_v1_0_enable_system_domain(struct amdgpu_device *adev)
>
>  static void mmhub_v1_0_disable_identity_aperture(struct amdgpu_device *adev)
>  {
> +       if (amdgpu_virt_support_skip_setting(adev))
> +               return;
> +
>         WREG32_SOC15(MMHUB, 0, mmVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32,
>                      0XFFFFFFFF);
>         WREG32_SOC15(MMHUB, 0, mmVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_HI32,
> @@ -337,11 +346,13 @@ void mmhub_v1_0_gart_disable(struct amdgpu_device *adev)
>                                 0);
>         WREG32_SOC15(MMHUB, 0, mmMC_VM_MX_L1_TLB_CNTL, tmp);
>
> -       /* Setup L2 cache */
> -       tmp = RREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL);
> -       tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 0);
> -       WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL, tmp);
> -       WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL3, 0);
> +       if (!amdgpu_virt_support_skip_setting(adev)) {
> +               /* Setup L2 cache */
> +               tmp = RREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL);
> +               tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 0);
> +               WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL, tmp);
> +               WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL3, 0);
> +       }
>  }
>
>  /**
> @@ -353,6 +364,10 @@ void mmhub_v1_0_gart_disable(struct amdgpu_device *adev)
>  void mmhub_v1_0_set_fault_enable_default(struct amdgpu_device *adev, bool value)
>  {
>         u32 tmp;
> +
> +       if (amdgpu_virt_support_skip_setting(adev))
> +               return;
> +
>         tmp = RREG32_SOC15(MMHUB, 0, mmVM_L2_PROTECTION_FAULT_CNTL);
>         tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL,
>                         RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value);
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> index 8691b62..233b7f4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
> @@ -212,12 +212,14 @@ static void sdma_v4_0_init_golden_registers(struct amdgpu_device *adev)
>  {
>         switch (adev->asic_type) {
>         case CHIP_VEGA10:
> -               soc15_program_register_sequence(adev,
> -                                                golden_settings_sdma_4,
> -                                                ARRAY_SIZE(golden_settings_sdma_4));
> -               soc15_program_register_sequence(adev,
> -                                                golden_settings_sdma_vg10,
> -                                                ARRAY_SIZE(golden_settings_sdma_vg10));
> +               if (!amdgpu_virt_support_skip_setting(adev)) {
> +                       soc15_program_register_sequence(adev,
> +                                                        golden_settings_sdma_4,
> +                                                        ARRAY_SIZE(golden_settings_sdma_4));
> +                       soc15_program_register_sequence(adev,
> +                                                        golden_settings_sdma_vg10,
> +                                                        ARRAY_SIZE(golden_settings_sdma_vg10));
> +               }
>                 break;
>         case CHIP_VEGA12:
>                 soc15_program_register_sequence(adev,
> diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
> index 9150e93..4b7dcaa 100644
> --- a/drivers/gpu/drm/amd/amdgpu/soc15.c
> +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
> @@ -995,11 +995,17 @@ static void soc15_doorbell_range_init(struct amdgpu_device *adev)
>         int i;
>         struct amdgpu_ring *ring;
>
> -       for (i = 0; i < adev->sdma.num_instances; i++) {
> -               ring = &adev->sdma.instance[i].ring;
> -               adev->nbio_funcs->sdma_doorbell_range(adev, i,
> -                       ring->use_doorbell, ring->doorbell_index,
> -                       adev->doorbell_index.sdma_doorbell_range);
> +       /*  Two reasons to skip
> +       *               1, Host driver already programmed them
> +       *               2, To avoid registers program violations in SR-IOV
> +       */
> +       if (!amdgpu_virt_support_skip_setting(adev)) {
> +               for (i = 0; i < adev->sdma.num_instances; i++) {
> +                       ring = &adev->sdma.instance[i].ring;
> +                       adev->nbio_funcs->sdma_doorbell_range(adev, i,
> +                               ring->use_doorbell, ring->doorbell_index,
> +                               adev->doorbell_index.sdma_doorbell_range);
> +               }
>         }
>
>         adev->nbio_funcs->ih_doorbell_range(adev, adev->irq.ih.use_doorbell,
> --
> 2.7.4
>
> _______________________________________________
> 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