aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1923-drm-amdgpu-Skip-setting-some-regs-under-Vega10-VF.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1923-drm-amdgpu-Skip-setting-some-regs-under-Vega10-VF.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1923-drm-amdgpu-Skip-setting-some-regs-under-Vega10-VF.patch178
1 files changed, 178 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1923-drm-amdgpu-Skip-setting-some-regs-under-Vega10-VF.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1923-drm-amdgpu-Skip-setting-some-regs-under-Vega10-VF.patch
new file mode 100644
index 00000000..796123fa
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1923-drm-amdgpu-Skip-setting-some-regs-under-Vega10-VF.patch
@@ -0,0 +1,178 @@
+From ef982bfb1ebf9c6317647207dded5ddf081b5caa Mon Sep 17 00:00:00 2001
+From: Trigger Huang <Trigger.Huang@amd.com>
+Date: Mon, 4 Mar 2019 12:30:58 +0800
+Subject: [PATCH 1923/2940] drm/amdgpu: Skip setting some regs under Vega10 VF
+
+For Vega10 SR-IOV VF, skip setting some regs due to:
+1, host will program them
+2, avoid VF register programming violations
+
+Signed-off-by: Trigger Huang <Trigger.Huang@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@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 382c8d3c82da..2a19dd24b82c 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+@@ -308,12 +308,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 0dd8fac10515..69c8de9f8b58 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+@@ -1093,6 +1093,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 95cffc8fddb4..a91a7a29a8cb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+@@ -106,6 +106,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;
+@@ -151,6 +154,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);
+@@ -197,6 +203,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,
+@@ -333,11 +342,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);
++ }
+ }
+
+ /**
+@@ -349,6 +360,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 c139e8db8d95..9daaa12fdb3e 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+@@ -210,12 +210,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 43b64d2237cf..1f7a56e01ff9 100644
+--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
++++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
+@@ -1023,11 +1023,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.17.1
+