These patches are applicable to kernels starting from 5.10.146. Should be applied to p10 std-def, p9 un-def, c9f2 std-def. Revertions are already requested from upstream and may arrive in 5.10.150 or later. Refer to https://gitlab.freedesktop.org/drm/amd/-/issues/2216#note_1600173 [PATCH 1/2] Revert "drm/amdgpu: move nbio sdma_doorbell_range() into [PATCH 2/2] Revert "drm/amdgpu: make sure to init common IP before
From: Nikolai Kostrigin <nickel@altlinux.org> This reverts commit 9f55f36f749a7608eeef57d7d72991a9bd557341. Fix amdgpu regression for kernel 5.10. Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2216 Signed-off-by: Nikolai Kostrigin <nickel@altlinux.org> --- drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 5 ----- drivers/gpu/drm/amd/amdgpu/soc15.c | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c index a1a8e026b9fa6..1f2e2460e121e 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c @@ -1475,11 +1475,6 @@ static int sdma_v4_0_start(struct amdgpu_device *adev) WREG32_SDMA(i, mmSDMA0_CNTL, temp); if (!amdgpu_sriov_vf(adev)) { - 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); - /* unhalt engine */ temp = RREG32_SDMA(i, mmSDMA0_F32_CNTL); temp = REG_SET_FIELD(temp, SDMA0_F32_CNTL, HALT, 0); diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c index abd649285a22d..7212b9900e0ab 100644 --- a/drivers/gpu/drm/amd/amdgpu/soc15.c +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c @@ -1332,6 +1332,25 @@ static int soc15_common_sw_fini(void *handle) return 0; } +static void soc15_doorbell_range_init(struct amdgpu_device *adev) +{ + int i; + struct amdgpu_ring *ring; + + /* sdma/ih doorbell range are programed by hypervisor */ + if (!amdgpu_sriov_vf(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, + adev->irq.ih.doorbell_index); + } +} + static int soc15_common_hw_init(void *handle) { struct amdgpu_device *adev = (struct amdgpu_device *)handle; @@ -1351,6 +1370,12 @@ static int soc15_common_hw_init(void *handle) /* enable the doorbell aperture */ soc15_enable_doorbell_aperture(adev, true); + /* HW doorbell routing policy: doorbell writing not + * in SDMA/IH/MM/ACV range will be routed to CP. So + * we need to init SDMA/IH/MM/ACV doorbell range prior + * to CP ip block init and ring test. + */ + soc15_doorbell_range_init(adev); return 0; } -- 2.33.4
From: Nikolai Kostrigin <nickel@altlinux.org> This reverts commit 7b0db849ea030a70b8fb9c9afec67c81f955482e. Fix amdgpu regression for kernel 5.10. Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2216 Signed-off-by: Nikolai Kostrigin <nickel@altlinux.org> --- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 881045e600af2..bde0496d2f153 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -2179,16 +2179,8 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev) } adev->ip_blocks[i].status.sw = true; - if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON) { - /* need to do common hw init early so everything is set up for gmc */ - r = adev->ip_blocks[i].version->funcs->hw_init((void *)adev); - if (r) { - DRM_ERROR("hw_init %d failed %d\n", i, r); - goto init_failed; - } - adev->ip_blocks[i].status.hw = true; - } else if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { - /* need to do gmc hw init early so we can allocate gpu mem */ + /* need to do gmc hw init early so we can allocate gpu mem */ + if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { /* Try to reserve bad pages early */ if (amdgpu_sriov_vf(adev)) amdgpu_virt_exchange_data(adev); @@ -2770,8 +2762,8 @@ static int amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device *adev) int i, r; static enum amd_ip_block_type ip_order[] = { - AMD_IP_BLOCK_TYPE_COMMON, AMD_IP_BLOCK_TYPE_GMC, + AMD_IP_BLOCK_TYPE_COMMON, AMD_IP_BLOCK_TYPE_PSP, AMD_IP_BLOCK_TYPE_IH, }; -- 2.33.4
On Fri, Oct 21, 2022 at 12:48:23PM +0300, nickel@altlinux.org wrote: > These patches are applicable to kernels starting from 5.10.146. > > Should be applied to p10 std-def, p9 un-def, c9f2 std-def. > Revertions are already requested from upstream and may arrive in 5.10.150 or later. > Refer to https://gitlab.freedesktop.org/drm/amd/-/issues/2216#note_1600173 Николай, спасибо за ключевое ужастике в решении этой проблемы! > [PATCH 1/2] Revert "drm/amdgpu: move nbio sdma_doorbell_range() into > [PATCH 2/2] Revert "drm/amdgpu: make sure to init common IP before Видимо, список все таки такой: [PATCH 2/2] Revert "drm/amdgpu: make sure to init common IP before gmc" [PATCH 1/2] Revert "drm/amdgpu: move nbio sdma_doorbell_range() into sdma code for vega" И да один из них есть в очереди в 5.10.150, а другого нет: $ git l v5.10.149..stable-rc/queue/5.10 | grep amdgpu > 7c48c9b9cffe 2022-10-17 Revert "drm/amdgpu: use dirty framebuffer helper" (Shuah Khan) > 2785681ad0f5 2022-10-17 Revert "drm/amdgpu: move nbio sdma_doorbell_range() into sdma code for vega" (Shuah Khan) > 023ec97f57d6 2022-09-20 drm/amdgpu: fix initial connector audio value (hongao) Thanks, > > _______________________________________________ > devel-kernel mailing list > devel-kernel@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/devel-kernel