RE: [PATCH] drm/amdgpu: protect RAS sysfs during GPU reset
[AMD Public Use] Reviewed-by: Hawking Zhang Regards, Hawking From: Clements, John Sent: Thursday, March 19, 2020 00:43 To: amd-gfx@lists.freedesktop.org; Zhang, Hawking Subject: [PATCH] drm/amdgpu: protect RAS sysfs during GPU reset [AMD Public Use] Submitting patch for review to protect RAS sysfs access' during a RAS event and to clear the MMHub EDC registers early on in a BACO reset ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
RE: [PATCH] drm/amdgpu/sriov : Don't resume RLCG for SRIOV guest
[AMD Official Use Only - Internal Distribution Only] Reviewed-by: Hawking Zhang Regards, Hawking -Original Message- From: Liu, Shaoyun Sent: Thursday, March 19, 2020 05:30 To: amd-gfx@lists.freedesktop.org; Zhang, Hawking Subject: RE: [PATCH] drm/amdgpu/sriov : Don't resume RLCG for SRIOV guest [AMD Official Use Only - Internal Distribution Only] ping -Original Message- From: Liu, Shaoyun Sent: Tuesday, March 17, 2020 12:55 PM To: amd-gfx@lists.freedesktop.org Cc: Liu, Shaoyun Subject: [PATCH] drm/amdgpu/sriov : Don't resume RLCG for SRIOV guest RLCG is enabled by host driver, no need to enable it in guest for none-PSP load path Change-Id: I2f313743bf3d492f06aaef07224da6eda3878a28 Signed-off-by: shaoyunl --- drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c index d1cdcb4..e134bb2 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c @@ -1940,6 +1940,11 @@ static int gfx_v10_0_rlc_resume(struct amdgpu_device *adev) if (!amdgpu_sriov_vf(adev)) /* enable RLC SRM */ gfx_v10_0_rlc_enable_srm(adev); } else { + if (amdgpu_sriov_vf(adev)) { + gfx_v10_0_init_csb(adev); + return 0; + } + adev->gfx.rlc.funcs->stop(adev); /* disable CG */ -- 2.7.4 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH][next] drm: amd: fix spelling mistake "shoudn't" -> "shouldn't"
On Wed, Mar 18, 2020 at 11:10 PM Alex Deucher wrote: > > On Tue, Mar 17, 2020 at 7:47 AM Colin King wrote: > > > > From: Colin Ian King > > > > There are spelling mistakes in pr_err messages and a comment. Fix these. > > > > Signed-off-by: Colin Ian King > > The relevant code was recently dropped so no longer applies. Sorry. was looking at the wrong branch. Applied. Thanks! Alex > > Thanks! > > Alex > > > --- > > drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 2 +- > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c| 2 +- > > drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c | 2 +- > > 3 files changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > > b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > > index d1cdcb404f7c..4bdf425ca6d8 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > > @@ -246,7 +246,7 @@ static void gfx_v10_rlcg_wreg(struct amdgpu_device > > *adev, u32 offset, u32 v) > > grbm_idx = adev->reg_offset[GC_HWIP][0][mmGRBM_GFX_INDEX_BASE_IDX] > > + mmGRBM_GFX_INDEX; > > > > if (amdgpu_sriov_runtime(adev)) { > > - pr_err("shoudn't call rlcg write register during > > runtime\n"); > > + pr_err("shouldn't call rlcg write register during > > runtime\n"); > > return; > > } > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > index 7bc2486167e7..2dd40f23ce83 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > @@ -747,7 +747,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 > > offset, u32 v) > > grbm_idx = adev->reg_offset[GC_HWIP][0][mmGRBM_GFX_INDEX_BASE_IDX] > > + mmGRBM_GFX_INDEX; > > > > if (amdgpu_sriov_runtime(adev)) { > > - pr_err("shoudn't call rlcg write register during > > runtime\n"); > > + pr_err("shouldn't call rlcg write register during > > runtime\n"); > > return; > > } > > > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > > b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > > index bb77b8890e77..78714f9a8b11 100644 > > --- a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > > @@ -316,7 +316,7 @@ static void kfd_init_apertures_vi(struct > > kfd_process_device *pdd, uint8_t id) > > { > > /* > > * node id couldn't be 0 - the three MSB bits of > > -* aperture shoudn't be 0 > > +* aperture shouldn't be 0 > > */ > > pdd->lds_base = MAKE_LDS_APP_BASE_VI(); > > pdd->lds_limit = MAKE_LDS_APP_LIMIT(pdd->lds_base); > > -- > > 2.25.1 > > > > ___ > > dri-devel mailing list > > dri-de...@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/dri-devel ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH v2] drm/amdgpu: Remove unnecessary variable shadow in gfx_v9_0_rlcg_wreg
On Wed, Mar 18, 2020 at 5:08 PM Nick Desaulniers wrote: > > On Wed, Mar 18, 2020 at 2:05 PM Nathan Chancellor > wrote: > > > > clang warns: > > > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:6: warning: variable 'shadow' > > is used uninitialized whenever 'if' condition is > > false [-Wsometimes-uninitialized] > > if (offset == grbm_cntl || offset == grbm_idx) > > ^ > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:757:6: note: uninitialized use > > occurs here > > if (shadow) { > > ^~ > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:2: note: remove the 'if' if > > its condition is always true > > if (offset == grbm_cntl || offset == grbm_idx) > > ^~ > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:738:13: note: initialize the > > variable 'shadow' to silence this warning > > bool shadow; > >^ > > = 0 > > 1 warning generated. > > > > shadow is only assigned in one condition and used as the condition for > > another if statement; combine the two if statements and remove shadow > > to make the code cleaner and resolve this warning. > > > > Fixes: 2e0cc4d48b91 ("drm/amdgpu: revise RLCG access path") > > Link: https://github.com/ClangBuiltLinux/linux/issues/936 > > Suggested-by: Joe Perches > > Reviewed-by: Nick Desaulniers > > Signed-off-by: Nathan Chancellor Applied. thanks! Alex > > --- > > > > v1 -> v2: > > > > * Remove shadow altogether, as suggested by Joe Perches. > > * Add Nick's Reviewed-by, as I assume it still stands. > > yep, thanks > > > > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 6 +- > > 1 file changed, 1 insertion(+), 5 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > index 7bc2486167e7..496b9edca3c3 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > > @@ -735,7 +735,6 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 > > offset, u32 v) > > static void *spare_int; > > static uint32_t grbm_cntl; > > static uint32_t grbm_idx; > > - bool shadow; > > > > scratch_reg0 = adev->rmmio + > > (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG0_BASE_IDX] + mmSCRATCH_REG0)*4; > > scratch_reg1 = adev->rmmio + > > (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG1_BASE_IDX] + mmSCRATCH_REG1)*4; > > @@ -751,10 +750,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, > > u32 offset, u32 v) > > return; > > } > > > > - if (offset == grbm_cntl || offset == grbm_idx) > > - shadow = true; > > - > > - if (shadow) { > > + if (offset == grbm_cntl || offset == grbm_idx) { > > if (offset == grbm_cntl) > > writel(v, scratch_reg2); > > else if (offset == grbm_idx) > > -- > > 2.26.0.rc1 > > > > > -- > Thanks, > ~Nick Desaulniers > ___ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu/sriov : Don't resume RLCG for SRIOV guest
On Tue, Mar 17, 2020 at 12:55 PM shaoyunl wrote: > > RLCG is enabled by host driver, no need to enable it in guest for none-PSP > load path > > Change-Id: I2f313743bf3d492f06aaef07224da6eda3878a28 > Signed-off-by: shaoyunl Acked-by: Alex Deucher > --- > drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 5 + > 1 file changed, 5 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > index d1cdcb4..e134bb2 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > @@ -1940,6 +1940,11 @@ static int gfx_v10_0_rlc_resume(struct amdgpu_device > *adev) > if (!amdgpu_sriov_vf(adev)) /* enable RLC SRM */ > gfx_v10_0_rlc_enable_srm(adev); > } else { > + if (amdgpu_sriov_vf(adev)) { > + gfx_v10_0_init_csb(adev); > + return 0; > + } > + > adev->gfx.rlc.funcs->stop(adev); > > /* disable CG */ > -- > 2.7.4 > > ___ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH][next] drm: amd: fix spelling mistake "shoudn't" -> "shouldn't"
On Tue, Mar 17, 2020 at 7:47 AM Colin King wrote: > > From: Colin Ian King > > There are spelling mistakes in pr_err messages and a comment. Fix these. > > Signed-off-by: Colin Ian King The relevant code was recently dropped so no longer applies. Thanks! Alex > --- > drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 2 +- > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c| 2 +- > drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c | 2 +- > 3 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > index d1cdcb404f7c..4bdf425ca6d8 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c > @@ -246,7 +246,7 @@ static void gfx_v10_rlcg_wreg(struct amdgpu_device *adev, > u32 offset, u32 v) > grbm_idx = adev->reg_offset[GC_HWIP][0][mmGRBM_GFX_INDEX_BASE_IDX] + > mmGRBM_GFX_INDEX; > > if (amdgpu_sriov_runtime(adev)) { > - pr_err("shoudn't call rlcg write register during runtime\n"); > + pr_err("shouldn't call rlcg write register during runtime\n"); > return; > } > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > index 7bc2486167e7..2dd40f23ce83 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > @@ -747,7 +747,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 > offset, u32 v) > grbm_idx = adev->reg_offset[GC_HWIP][0][mmGRBM_GFX_INDEX_BASE_IDX] + > mmGRBM_GFX_INDEX; > > if (amdgpu_sriov_runtime(adev)) { > - pr_err("shoudn't call rlcg write register during runtime\n"); > + pr_err("shouldn't call rlcg write register during runtime\n"); > return; > } > > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > index bb77b8890e77..78714f9a8b11 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_flat_memory.c > @@ -316,7 +316,7 @@ static void kfd_init_apertures_vi(struct > kfd_process_device *pdd, uint8_t id) > { > /* > * node id couldn't be 0 - the three MSB bits of > -* aperture shoudn't be 0 > +* aperture shouldn't be 0 > */ > pdd->lds_base = MAKE_LDS_APP_BASE_VI(); > pdd->lds_limit = MAKE_LDS_APP_LIMIT(pdd->lds_base); > -- > 2.25.1 > > ___ > dri-devel mailing list > dri-de...@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH v3] PCI: Use ioremap(), not phys_to_virt() for platform ROM
On some EFI systems, the video BIOS is provided by the EFI firmware. The boot stub code stores the physical address of the ROM image in pdev->rom. Currently we attempt to access this pointer using phys_to_virt(), which doesn't work with CONFIG_HIGHMEM. On these systems, attempting to load the radeon module on a x86_32 kernel can result in the following: BUG: unable to handle page fault for address: 3e8ed03c #PF: supervisor read access in kernel mode #PF: error_code(0x) - not-present page *pde = Oops: [#1] PREEMPT SMP CPU: 0 PID: 317 Comm: systemd-udevd Not tainted 5.6.0-rc3-next-20200228 #2 Hardware name: Apple Computer, Inc. MacPro1,1/Mac-F4208DC8, BIOS MP11.88Z.005C.B08.0707021221 07/02/07 EIP: radeon_get_bios+0x5ed/0xe50 [radeon] Code: 00 00 84 c0 0f 85 12 fd ff ff c7 87 64 01 00 00 00 00 00 00 8b 47 08 8b 55 b0 e8 1e 83 e1 d6 85 c0 74 1a 8b 55 c0 85 d2 74 13 <80> 38 55 75 0e 80 78 01 aa 0f 84 a4 03 00 00 8d 74 26 00 68 dc 06 EAX: 3e8ed03c EBX: ECX: 3e8ed03c EDX: 0001 ESI: 0004 EDI: eec04000 EBP: eef3fc60 ESP: eef3fbe0 DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00010206 CR0: 80050033 CR2: 3e8ed03c CR3: 2ec77000 CR4: 06d0 Call Trace: ? register_client+0x34/0xe0 ? register_client+0xab/0xe0 r520_init+0x26/0x240 [radeon] radeon_device_init+0x533/0xa50 [radeon] radeon_driver_load_kms+0x80/0x220 [radeon] drm_dev_register+0xa7/0x180 [drm] radeon_pci_probe+0x10f/0x1a0 [radeon] pci_device_probe+0xd4/0x140 really_probe+0x13d/0x3b0 driver_probe_device+0x56/0xd0 device_driver_attach+0x49/0x50 __driver_attach+0x79/0x130 ? device_driver_attach+0x50/0x50 bus_for_each_dev+0x5b/0xa0 driver_attach+0x19/0x20 ? device_driver_attach+0x50/0x50 bus_add_driver+0x117/0x1d0 ? pci_bus_num_vf+0x20/0x20 driver_register+0x66/0xb0 ? 0xf80f4000 __pci_register_driver+0x3d/0x40 radeon_init+0x82/0x1000 [radeon] do_one_initcall+0x42/0x200 ? kvfree+0x25/0x30 ? __vunmap+0x206/0x230 ? kmem_cache_alloc_trace+0x16f/0x220 ? do_init_module+0x21/0x220 do_init_module+0x50/0x220 load_module+0x1f26/0x2200 sys_init_module+0x12d/0x160 do_fast_syscall_32+0x82/0x250 entry_SYSENTER_32+0xa5/0xf8 Fix the issue by updating all drivers which can access a platform provided ROM. Instead of calling the helper function pci_platform_rom() which uses phys_to_virt(), call ioremap() directly on the pdev->rom. radeon_read_platform_bios() previously directly accessed an __iomem pointer. Avoid this by calling memcpy_fromio() instead of kmemdup(). pci_platform_rom() now has no remaining callers, so remove it. Signed-off-by: Mikel Rychliski --- Tested on a MacPro 1,1 with a Radeon X1900 XT card and 32-bit kernel. Changes in v3: - Inline pci_platform_rom() Changes in v2: - Add iounmap() call in nouveau - Update function comment for pci_platform_rom() - Minor changes to commit messages drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 31 +- .../gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c | 17 ++-- drivers/gpu/drm/radeon/radeon_bios.c | 30 + drivers/pci/rom.c | 17 include/linux/pci.h| 1 - 5 files changed, 52 insertions(+), 44 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c index 50dff69a0f6e..b1172d93c99c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c @@ -192,30 +192,35 @@ static bool amdgpu_read_bios_from_rom(struct amdgpu_device *adev) static bool amdgpu_read_platform_bios(struct amdgpu_device *adev) { - uint8_t __iomem *bios; - size_t size; + phys_addr_t rom = adev->pdev->rom; + size_t romlen = adev->pdev->romlen; + void __iomem *bios; adev->bios = NULL; - bios = pci_platform_rom(adev->pdev, &size); - if (!bios) { + if (!rom || romlen == 0) return false; - } - adev->bios = kzalloc(size, GFP_KERNEL); - if (adev->bios == NULL) + adev->bios = kzalloc(romlen, GFP_KERNEL); + if (!adev->bios) return false; - memcpy_fromio(adev->bios, bios, size); + bios = ioremap(rom, romlen); + if (!bios) + goto free_bios; - if (!check_atom_bios(adev->bios, size)) { - kfree(adev->bios); - return false; - } + memcpy_fromio(adev->bios, bios, romlen); + iounmap(bios); - adev->bios_size = size; + if (!check_atom_bios(adev->bios, romlen)) + goto free_bios; + + adev->bios_size = romlen; return true; +free_bios: + kfree(adev->bios); + return false; } #ifdef CONFIG_ACPI diff --git
[pull] amdgpu 5.6 fixes
Hi Dave, Daniel, Fixes for 5.6. The following changes since commit 16b78f052d0129cd2998305480da6c4e3ac220a8: Merge tag 'topic/mst-bw-check-fixes-for-airlied-2020-03-12-2' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes (2020-03-13 10:38:25 +1000) are available in the Git repository at: git://people.freedesktop.org/~agd5f/linux tags/amd-drm-fixes-5.6-2020-03-18 for you to fetch changes up to a3c33e7a4a116f8715c0ef0e668e6aeff009c762: drm/amdgpu: fix typo for vcn2.5/jpeg2.5 idle check (2020-03-18 18:21:57 -0400) amd-drm-fixes-5.6-2020-03-18: amdgpu: - VCN clockgating fixes - GPR debugfs fix for umr - GPU reset fix - eDP fix for MBP - DCN2.x fix Evan Quan (1): drm/amdgpu: add fbdev suspend/resume on gpu reset James Zhu (3): drm/amdgpu: fix typo for vcn1 idle check drm/amdgpu: fix typo for vcn2/jpeg2 idle check drm/amdgpu: fix typo for vcn2.5/jpeg2.5 idle check Mario Kleiner (1): drm/amd/display: Add link_rate quirk for Apple 15" MBP 2017 Stanley.Yang (1): drm/amd/display: fix typos for dcn20_funcs and dcn21_funcs struct Tom St Denis (1): drm/amd/amdgpu: Fix GPR read from debugfs (v2) drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 6 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c| 4 drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c| 2 +- drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c| 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c | 2 +- drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 11 +++ drivers/gpu/drm/amd/display/dc/dcn20/dcn20_init.c | 1 - drivers/gpu/drm/amd/display/dc/dcn21/dcn21_init.c | 1 - 10 files changed, 23 insertions(+), 10 deletions(-) ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: ensure device private pages have an owner v2
On Mon, Mar 16, 2020 at 08:32:12PM +0100, Christoph Hellwig wrote: > When acting on device private mappings a driver needs to know if the > device (or other entity in case of kvmppc) actually owns this private > mapping. This series adds an owner field and converts the migrate_vma > code over to check it. I looked into doing the same for > hmm_range_fault, but as far as I can tell that code has never been > wired up to actually work for device private memory, so instead of > trying to fix some unused code the second patch just remove the code. > We can add it back once we have a working and fully tested code, and > then should pass the expected owner in the hmm_range structure. > > Changes since v1: > - split out the pgmap->owner addition into a separate patch > - check pgmap->owner is set for device private mappings > - rename the dev_private_owner field in struct migrate_vma to src_owner > - refuse to migrate private pages if src_owner is not set > - keep the non-fault device private handling in hmm_range_fault I'm happy enough to take this, did you have plans for a v3? Thanks, Jason ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH 2/8] drm/amdgpu: create new files for arcturus ih
[AMD Public Use] if we have been using vega10_ih all along for arcturus, presumably the register map is close enough. I'd suggest either adding whatever new stuff you need to vega10_ih.c or navi10_ih.c. No need to add a completely new one for a small change like this. Alex From: amd-gfx on behalf of Felix Kuehling Sent: Wednesday, March 18, 2020 7:33 PM To: Sierra Guiza, Alejandro (Alex) ; amd-gfx@lists.freedesktop.org Subject: Re: [PATCH 2/8] drm/amdgpu: create new files for arcturus ih How much overlap is there between arcturus_ih and nave10_ih? Given that they both use the same register map, could they share the same driver code with only minor differences? If they're almost the same, maybe you could rename navi10_ih.[ch] to osssys_v5_0.[ch] and use it for both navi10 and arcturus. Regards, Felix On 2020-03-18 18:51, Alex Sierra wrote: > [Why] > Arcturus uses osssys v4.2. This shares the same register map as > osssys v5.0. > > [How] > Copy vega10_ih into new arcturus_ih source and header files. > Replace osssys include file with v5.0.0 on arcturus_ih.c source. > > Change-Id: I5215f32f477adb6a30acef6e8add9f8e5bb041ef > Signed-off-by: Alex Sierra > --- > drivers/gpu/drm/amd/amdgpu/arcturus_ih.c | 766 +++ > drivers/gpu/drm/amd/amdgpu/arcturus_ih.h | 30 + > 2 files changed, 796 insertions(+) > create mode 100644 drivers/gpu/drm/amd/amdgpu/arcturus_ih.c > create mode 100644 drivers/gpu/drm/amd/amdgpu/arcturus_ih.h > > diff --git a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c > b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c > new file mode 100644 > index ..21bb5be40921 > --- /dev/null > +++ b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c > @@ -0,0 +1,766 @@ > +/* > + * Copyright 2020 Advanced Micro Devices, Inc. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > + * OTHER DEALINGS IN THE SOFTWARE. > + * > + */ > + > +#include > + > +#include "amdgpu.h" > +#include "amdgpu_ih.h" > +#include "soc15.h" > + > +#include "oss/osssys_5_0_0_offset.h" > +#include "oss/osssys_5_0_0_sh_mask.h" > + > +#include "soc15_common.h" > +#include "arcturus_ih.h" > + > +#define MAX_REARM_RETRY 10 > + > +static void vega10_ih_set_interrupt_funcs(struct amdgpu_device *adev); > + > +/** > + * vega10_ih_enable_interrupts - Enable the interrupt ring buffer > + * > + * @adev: amdgpu_device pointer > + * > + * Enable the interrupt ring buffer (VEGA10). > + */ > +static void vega10_ih_enable_interrupts(struct amdgpu_device *adev) > +{ > + u32 ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL); > + > + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, RB_ENABLE, 1); > + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, ENABLE_INTR, 1); > + if (amdgpu_sriov_vf(adev)) { > + if (psp_reg_program(&adev->psp, PSP_REG_IH_RB_CNTL, > ih_rb_cntl)) { > + DRM_ERROR("PSP program IH_RB_CNTL failed!\n"); > + return; > + } > + } else { > + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL, ih_rb_cntl); > + } > + adev->irq.ih.enabled = true; > + > + if (adev->irq.ih1.ring_size) { > + ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING1); > + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL_RING1, > +RB_ENABLE, 1); > + if (amdgpu_sriov_vf(adev)) { > + if (psp_reg_program(&adev->psp, > PSP_REG_IH_RB_CNTL_RING1, > + ih_rb_cntl)) { > + DRM_ERROR("program IH_RB_CNTL_RING1 failed!\n"); > + return; > + } > + } else { > + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING1, ih_rb_cntl); > + } > + adev->irq.ih1.enabled = true; > + } > + > + if (adev->irq.ih2.ring_size) { > +
[PATCH 1/2] drm/amdgpu: infinite retries fix from UTLC1 RB SDMA
[Why] Previously these registers were set to 0. This was causing an infinite retry on the UTCL1 RB, preventing higher priority RB such as paging RB. [How] Set to one the SDMAx_UTLC1_TIMEOUT registers for all SDMAs on Arcturus. Change-Id: I8a6d9b89ea115fb51ff694493c88b8972d6248a5 Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 11 +-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c index fc664ec6b5fd..94328162b6f3 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c @@ -222,27 +222,35 @@ static const struct soc15_reg_golden golden_settings_sdma_arct[] = SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG, 0x773f, 0x4002), SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA0, 0, mmSDMA0_UTCL1_TIMEOUT, 0x, 0x00010001), SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG, 0x773f, 0x4002), SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA1, 0, mmSDMA1_UTCL1_TIMEOUT, 0x, 0x00010001), SOC15_REG_GOLDEN_VALUE(SDMA2, 0, mmSDMA2_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA2, 0, mmSDMA2_GB_ADDR_CONFIG, 0x773f, 0x4002), SOC15_REG_GOLDEN_VALUE(SDMA2, 0, mmSDMA2_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA2, 0, mmSDMA2_UTCL1_TIMEOUT, 0x, 0x00010001), SOC15_REG_GOLDEN_VALUE(SDMA3, 0, mmSDMA3_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA3, 0, mmSDMA3_GB_ADDR_CONFIG, 0x773f, 0x4002), SOC15_REG_GOLDEN_VALUE(SDMA3, 0, mmSDMA3_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA3, 0, mmSDMA3_UTCL1_TIMEOUT, 0x, 0x00010001), SOC15_REG_GOLDEN_VALUE(SDMA4, 0, mmSDMA4_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA4, 0, mmSDMA4_GB_ADDR_CONFIG, 0x773f, 0x4002), SOC15_REG_GOLDEN_VALUE(SDMA4, 0, mmSDMA4_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA4, 0, mmSDMA4_UTCL1_TIMEOUT, 0x, 0x00010001), SOC15_REG_GOLDEN_VALUE(SDMA5, 0, mmSDMA5_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA5, 0, mmSDMA5_GB_ADDR_CONFIG, 0x773f, 0x4002), SOC15_REG_GOLDEN_VALUE(SDMA5, 0, mmSDMA5_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA5, 0, mmSDMA5_UTCL1_TIMEOUT, 0x, 0x00010001), SOC15_REG_GOLDEN_VALUE(SDMA6, 0, mmSDMA6_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA6, 0, mmSDMA6_GB_ADDR_CONFIG, 0x773f, 0x4002), SOC15_REG_GOLDEN_VALUE(SDMA6, 0, mmSDMA6_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA6, 0, mmSDMA6_UTCL1_TIMEOUT, 0x, 0x00010001), SOC15_REG_GOLDEN_VALUE(SDMA7, 0, mmSDMA7_CHICKEN_BITS, 0xfe931f07, 0x02831f07), SOC15_REG_GOLDEN_VALUE(SDMA7, 0, mmSDMA7_GB_ADDR_CONFIG, 0x773f, 0x4002), - SOC15_REG_GOLDEN_VALUE(SDMA7, 0, mmSDMA7_GB_ADDR_CONFIG_READ, 0x773f, 0x4002) + SOC15_REG_GOLDEN_VALUE(SDMA7, 0, mmSDMA7_GB_ADDR_CONFIG_READ, 0x773f, 0x4002), + SOC15_REG_GOLDEN_VALUE(SDMA7, 0, mmSDMA7_UTCL1_TIMEOUT, 0x, 0x00010001) }; static const struct soc15_reg_golden golden_settings_sdma_4_3[] = { @@ -2011,7 +2019,6 @@ static int sdma_v4_0_process_trap_irq(struct amdgpu_device *adev, struct amdgpu_iv_entry *entry) { uint32_t instance; - DRM_DEBUG("IH: SDMA trap\n"); instance = sdma_v4_0_irq_id_to_seq(entry->client_id); switch (entry->ring_id) { -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 2/2] drm/amdgpu: ih doorbell size of range changed for nbio v7.4
[Why] nbio v7.4 size of ih doorbell range is 64 bit. This requires 2 DWords per register. [How] Change ih doorbell size from 2 to 4. This means two Dwords per ring. Current configuration uses two ih rings. Change-Id: Iae28c22dd6e650f56286bfa0d9e002a8562fa855 Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c index 149d386590df..263dbb1f92ee 100644 --- a/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c +++ b/drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c @@ -185,7 +185,7 @@ static void nbio_v7_4_ih_doorbell_range(struct amdgpu_device *adev, if (use_doorbell) { ih_doorbell_range = REG_SET_FIELD(ih_doorbell_range, BIF_IH_DOORBELL_RANGE, OFFSET, doorbell_index); - ih_doorbell_range = REG_SET_FIELD(ih_doorbell_range, BIF_IH_DOORBELL_RANGE, SIZE, 2); + ih_doorbell_range = REG_SET_FIELD(ih_doorbell_range, BIF_IH_DOORBELL_RANGE, SIZE, 4); } else ih_doorbell_range = REG_SET_FIELD(ih_doorbell_range, BIF_IH_DOORBELL_RANGE, SIZE, 0); -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH 2/8] drm/amdgpu: create new files for arcturus ih
How much overlap is there between arcturus_ih and nave10_ih? Given that they both use the same register map, could they share the same driver code with only minor differences? If they're almost the same, maybe you could rename navi10_ih.[ch] to osssys_v5_0.[ch] and use it for both navi10 and arcturus. Regards, Felix On 2020-03-18 18:51, Alex Sierra wrote: [Why] Arcturus uses osssys v4.2. This shares the same register map as osssys v5.0. [How] Copy vega10_ih into new arcturus_ih source and header files. Replace osssys include file with v5.0.0 on arcturus_ih.c source. Change-Id: I5215f32f477adb6a30acef6e8add9f8e5bb041ef Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/arcturus_ih.c | 766 +++ drivers/gpu/drm/amd/amdgpu/arcturus_ih.h | 30 + 2 files changed, 796 insertions(+) create mode 100644 drivers/gpu/drm/amd/amdgpu/arcturus_ih.c create mode 100644 drivers/gpu/drm/amd/amdgpu/arcturus_ih.h diff --git a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c new file mode 100644 index ..21bb5be40921 --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c @@ -0,0 +1,766 @@ +/* + * Copyright 2020 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include + +#include "amdgpu.h" +#include "amdgpu_ih.h" +#include "soc15.h" + +#include "oss/osssys_5_0_0_offset.h" +#include "oss/osssys_5_0_0_sh_mask.h" + +#include "soc15_common.h" +#include "arcturus_ih.h" + +#define MAX_REARM_RETRY 10 + +static void vega10_ih_set_interrupt_funcs(struct amdgpu_device *adev); + +/** + * vega10_ih_enable_interrupts - Enable the interrupt ring buffer + * + * @adev: amdgpu_device pointer + * + * Enable the interrupt ring buffer (VEGA10). + */ +static void vega10_ih_enable_interrupts(struct amdgpu_device *adev) +{ + u32 ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL); + + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, RB_ENABLE, 1); + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, ENABLE_INTR, 1); + if (amdgpu_sriov_vf(adev)) { + if (psp_reg_program(&adev->psp, PSP_REG_IH_RB_CNTL, ih_rb_cntl)) { + DRM_ERROR("PSP program IH_RB_CNTL failed!\n"); + return; + } + } else { + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL, ih_rb_cntl); + } + adev->irq.ih.enabled = true; + + if (adev->irq.ih1.ring_size) { + ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING1); + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL_RING1, + RB_ENABLE, 1); + if (amdgpu_sriov_vf(adev)) { + if (psp_reg_program(&adev->psp, PSP_REG_IH_RB_CNTL_RING1, + ih_rb_cntl)) { + DRM_ERROR("program IH_RB_CNTL_RING1 failed!\n"); + return; + } + } else { + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING1, ih_rb_cntl); + } + adev->irq.ih1.enabled = true; + } + + if (adev->irq.ih2.ring_size) { + ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING2); + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL_RING2, + RB_ENABLE, 1); + if (amdgpu_sriov_vf(adev)) { + if (psp_reg_program(&adev->psp, PSP_REG_IH_RB_CNTL_RING2, + ih_rb_cntl)) { + DRM_ERROR("program IH_RB_CNTL_RING2 failed!\n"); + return; + } + } else { + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING2, ih_rb_cntl); + } + adev->irq.ih2.enab
Re: [PATCH 6/8] drm/amdgpu: remove Arcturus references from vega10 ih
I believe this should be squashed into Patch #8 or applied after patch #8. Otherwise it creates a broken intermediate state where Arcturus doesn't have any valid IH support. That said, it's probably less critical because it only affects the case of direct (backdoor) firmware loading. Regards, Felix On 2020-03-18 18:51, Alex Sierra wrote: Arcturus has its own ih implementation. There's no need to support this on vega10 ih anymore. Change-Id: I29c843e0b12a458d2915129503c0ad852bcebc48 Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c index 407c6093c2ec..608e8da9b962 100644 --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c @@ -246,9 +246,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL, ih_rb_cntl); } - if ((adev->asic_type == CHIP_ARCTURUS && -adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) || - adev->asic_type == CHIP_RENOIR) { + if (adev->asic_type == CHIP_RENOIR) { ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN); if (adev->irq.ih.use_bus_addr) { ih_chicken = REG_SET_FIELD(ih_chicken, IH_CHICKEN, ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 3/8] drm/amdgpu: remove non Arcturus references from arcturus_ih
Renoir and Vega10 references removed. Both have their implementation under vega10_ih Change-Id: Id12a0228ea75dd7122c5ec264e5b38a00a79b45d Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/arcturus_ih.c | 15 +++ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c index 21bb5be40921..b8cd5c3c8a36 100644 --- a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c @@ -246,9 +246,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL, ih_rb_cntl); } - if ((adev->asic_type == CHIP_ARCTURUS && -adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) || - adev->asic_type == CHIP_RENOIR) { + if (adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) { ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN); if (adev->irq.ih.use_bus_addr) { ih_chicken = REG_SET_FIELD(ih_chicken, IH_CHICKEN, @@ -686,17 +684,10 @@ static void vega10_ih_update_clockgating_state(struct amdgpu_device *adev, if (adev->cg_flags & AMD_CG_SUPPORT_IH_CG) { def = data = RREG32_SOC15(OSSSYS, 0, mmIH_CLK_CTRL); field_val = enable ? 0 : 1; - /** -* Vega10 does not have IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE -* and IH_BUFFER_MEM_CLK_SOFT_OVERRIDE field. -*/ - if (adev->asic_type > CHIP_VEGA10) { - data = REG_SET_FIELD(data, IH_CLK_CTRL, + data = REG_SET_FIELD(data, IH_CLK_CTRL, IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE, field_val); - data = REG_SET_FIELD(data, IH_CLK_CTRL, + data = REG_SET_FIELD(data, IH_CLK_CTRL, IH_BUFFER_MEM_CLK_SOFT_OVERRIDE, field_val); - } - data = REG_SET_FIELD(data, IH_CLK_CTRL, DBUS_MUX_CLK_SOFT_OVERRIDE, field_val); data = REG_SET_FIELD(data, IH_CLK_CTRL, -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 4/8] drm/amdgpu: replace function prefix names
Replace function prefix name from vega10 to arcturus Change-Id: Ic21713f2dda30a0bc28c7b525e20d5f1fcde96dd Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/arcturus_ih.c | 162 +++ drivers/gpu/drm/amd/amdgpu/arcturus_ih.h | 8 +- 2 files changed, 85 insertions(+), 85 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c index b8cd5c3c8a36..b687fcc4c9b6 100644 --- a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c @@ -35,16 +35,16 @@ #define MAX_REARM_RETRY 10 -static void vega10_ih_set_interrupt_funcs(struct amdgpu_device *adev); +static void arcturus_ih_set_interrupt_funcs(struct amdgpu_device *adev); /** - * vega10_ih_enable_interrupts - Enable the interrupt ring buffer + * arcturus_ih_enable_interrupts - Enable the interrupt ring buffer * * @adev: amdgpu_device pointer * - * Enable the interrupt ring buffer (VEGA10). + * Enable the interrupt ring buffer (ARCTURUS). */ -static void vega10_ih_enable_interrupts(struct amdgpu_device *adev) +static void arcturus_ih_enable_interrupts(struct amdgpu_device *adev) { u32 ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL); @@ -94,13 +94,13 @@ static void vega10_ih_enable_interrupts(struct amdgpu_device *adev) } /** - * vega10_ih_disable_interrupts - Disable the interrupt ring buffer + * arcturus_ih_disable_interrupts - Disable the interrupt ring buffer * * @adev: amdgpu_device pointer * - * Disable the interrupt ring buffer (VEGA10). + * Disable the interrupt ring buffer (ARCTURUS). */ -static void vega10_ih_disable_interrupts(struct amdgpu_device *adev) +static void arcturus_ih_disable_interrupts(struct amdgpu_device *adev) { u32 ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL); @@ -163,7 +163,7 @@ static void vega10_ih_disable_interrupts(struct amdgpu_device *adev) } } -static uint32_t vega10_ih_rb_cntl(struct amdgpu_ih_ring *ih, uint32_t ih_rb_cntl) +static uint32_t arcturus_ih_rb_cntl(struct amdgpu_ih_ring *ih, uint32_t ih_rb_cntl) { int rb_bufsz = order_base_2(ih->ring_size / 4); @@ -186,7 +186,7 @@ static uint32_t vega10_ih_rb_cntl(struct amdgpu_ih_ring *ih, uint32_t ih_rb_cntl return ih_rb_cntl; } -static uint32_t vega10_ih_doorbell_rptr(struct amdgpu_ih_ring *ih) +static uint32_t arcturus_ih_doorbell_rptr(struct amdgpu_ih_ring *ih) { u32 ih_doorbell_rtpr = 0; @@ -206,7 +206,7 @@ static uint32_t vega10_ih_doorbell_rptr(struct amdgpu_ih_ring *ih) } /** - * vega10_ih_irq_init - init and enable the interrupt ring + * arcturus_ih_irq_init - init and enable the interrupt ring * * @adev: amdgpu_device pointer * @@ -216,7 +216,7 @@ static uint32_t vega10_ih_doorbell_rptr(struct amdgpu_ih_ring *ih) * Called at device load and reume. * Returns 0 for success, errors for failure. */ -static int vega10_ih_irq_init(struct amdgpu_device *adev) +static int arcturus_ih_irq_init(struct amdgpu_device *adev) { struct amdgpu_ih_ring *ih; u32 ih_rb_cntl, ih_chicken; @@ -224,7 +224,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) u32 tmp; /* disable irqs */ - vega10_ih_disable_interrupts(adev); + arcturus_ih_disable_interrupts(adev); adev->nbio.funcs->ih_control(adev); @@ -234,7 +234,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) WREG32_SOC15(OSSSYS, 0, mmIH_RB_BASE_HI, (ih->gpu_addr >> 40) & 0xff); ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL); - ih_rb_cntl = vega10_ih_rb_cntl(ih, ih_rb_cntl); + ih_rb_cntl = arcturus_ih_rb_cntl(ih, ih_rb_cntl); ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, RPTR_REARM, !!adev->irq.msi_enabled); if (amdgpu_sriov_vf(adev)) { @@ -269,7 +269,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) WREG32_SOC15(OSSSYS, 0, mmIH_RB_RPTR, 0); WREG32_SOC15(OSSSYS, 0, mmIH_DOORBELL_RPTR, -vega10_ih_doorbell_rptr(ih)); +arcturus_ih_doorbell_rptr(ih)); ih = &adev->irq.ih1; if (ih->ring_size) { @@ -278,7 +278,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) (ih->gpu_addr >> 40) & 0xff); ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING1); - ih_rb_cntl = vega10_ih_rb_cntl(ih, ih_rb_cntl); + ih_rb_cntl = arcturus_ih_rb_cntl(ih, ih_rb_cntl); ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, WPTR_OVERFLOW_ENABLE, 0); ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, @@ -298,7 +298,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) WREG32_SOC15(OSSSYS, 0, mmIH_RB_RPTR_RING1, 0); WREG32_SOC15(OSSSYS, 0, mmIH_DOORBELL_RPTR_RING1, -
[PATCH 5/8] drm/amdgpu: reroute VMC and UMD to IH ring 1 for arcturus
[Why] Same reason as commit "reroute VMC and UMD to IH ring 1" for vega10. Due Page faults can easily overwhelm the interrupt handler. So to make sure that we never lose valuable interrupts on the primary ring we re-route page faults to IH ring 1. It also facilitates the recovery page process, since it's already running from a process context. [How] Setting IH_CLIENT_CFG_DATA for VMC and UMD IH clients. Change-Id: I189a6b35c9f5bd55d001fa9672d7d08ba4e8591e Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/arcturus_ih.c | 20 1 file changed, 20 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c index b687fcc4c9b6..73a00e752ead 100644 --- a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c @@ -205,6 +205,24 @@ static uint32_t arcturus_ih_doorbell_rptr(struct amdgpu_ih_ring *ih) return ih_doorbell_rtpr; } +static void arcturus_ih_reroute_ih(struct amdgpu_device *adev) +{ + uint32_t tmp; + + /* Reroute to IH ring 1 for VMC */ + WREG32_SOC15(OSSSYS, 0, mmIH_CLIENT_CFG_INDEX, 0x12); + tmp = RREG32_SOC15(OSSSYS, 0, mmIH_CLIENT_CFG_DATA); + tmp = REG_SET_FIELD(tmp, IH_CLIENT_CFG_DATA, CLIENT_TYPE, 1); + tmp = REG_SET_FIELD(tmp, IH_CLIENT_CFG_DATA, RING_ID, 1); + WREG32_SOC15(OSSSYS, 0, mmIH_CLIENT_CFG_DATA, tmp); + + /* Reroute IH ring 1 for UMC */ + WREG32_SOC15(OSSSYS, 0, mmIH_CLIENT_CFG_INDEX, 0x1B); + tmp = RREG32_SOC15(OSSSYS, 0, mmIH_CLIENT_CFG_DATA); + tmp = REG_SET_FIELD(tmp, IH_CLIENT_CFG_DATA, RING_ID, 1); + WREG32_SOC15(OSSSYS, 0, mmIH_CLIENT_CFG_DATA, tmp); +} + /** * arcturus_ih_irq_init - init and enable the interrupt ring * @@ -246,6 +264,8 @@ static int arcturus_ih_irq_init(struct amdgpu_device *adev) WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL, ih_rb_cntl); } + arcturus_ih_reroute_ih(adev); + if (adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) { ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN); if (adev->irq.ih.use_bus_addr) { -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 8/8] drm/amdgpu: replace ih ip reference for arcturus
[Why] IH implementation for arcturus has been added. This reference has to be replace it for Arcutus ih ip. [How] Replace arcturus ih ip reference. Change-Id: I5a12b329146fa7883586bb10d22077046a977701 Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/soc15.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c index a40499d51c93..c27760713aa8 100644 --- a/drivers/gpu/drm/amd/amdgpu/soc15.c +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c @@ -62,6 +62,7 @@ #include "nbio_v7_0.h" #include "nbio_v7_4.h" #include "vega10_ih.h" +#include "arcturus_ih.h" #include "sdma_v4_0.h" #include "uvd_v7_0.h" #include "vce_v4_0.h" @@ -785,9 +786,9 @@ int soc15_set_ip_blocks(struct amdgpu_device *adev) if (amdgpu_sriov_vf(adev)) { if (likely(adev->firmware.load_type == AMDGPU_FW_LOAD_PSP)) amdgpu_device_ip_block_add(adev, &psp_v11_0_ip_block); - amdgpu_device_ip_block_add(adev, &vega10_ih_ip_block); + amdgpu_device_ip_block_add(adev, &arcturus_ih_ip_block); } else { - amdgpu_device_ip_block_add(adev, &vega10_ih_ip_block); + amdgpu_device_ip_block_add(adev, &arcturus_ih_ip_block); if (likely(adev->firmware.load_type == AMDGPU_FW_LOAD_PSP)) amdgpu_device_ip_block_add(adev, &psp_v11_0_ip_block); } -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 6/8] drm/amdgpu: remove Arcturus references from vega10 ih
Arcturus has its own ih implementation. There's no need to support this on vega10 ih anymore. Change-Id: I29c843e0b12a458d2915129503c0ad852bcebc48 Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/vega10_ih.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c index 407c6093c2ec..608e8da9b962 100644 --- a/drivers/gpu/drm/amd/amdgpu/vega10_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/vega10_ih.c @@ -246,9 +246,7 @@ static int vega10_ih_irq_init(struct amdgpu_device *adev) WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL, ih_rb_cntl); } - if ((adev->asic_type == CHIP_ARCTURUS && -adev->firmware.load_type == AMDGPU_FW_LOAD_DIRECT) || - adev->asic_type == CHIP_RENOIR) { + if (adev->asic_type == CHIP_RENOIR) { ih_chicken = RREG32_SOC15(OSSSYS, 0, mmIH_CHICKEN); if (adev->irq.ih.use_bus_addr) { ih_chicken = REG_SET_FIELD(ih_chicken, IH_CHICKEN, -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 2/8] drm/amdgpu: create new files for arcturus ih
[Why] Arcturus uses osssys v4.2. This shares the same register map as osssys v5.0. [How] Copy vega10_ih into new arcturus_ih source and header files. Replace osssys include file with v5.0.0 on arcturus_ih.c source. Change-Id: I5215f32f477adb6a30acef6e8add9f8e5bb041ef Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/arcturus_ih.c | 766 +++ drivers/gpu/drm/amd/amdgpu/arcturus_ih.h | 30 + 2 files changed, 796 insertions(+) create mode 100644 drivers/gpu/drm/amd/amdgpu/arcturus_ih.c create mode 100644 drivers/gpu/drm/amd/amdgpu/arcturus_ih.h diff --git a/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c new file mode 100644 index ..21bb5be40921 --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/arcturus_ih.c @@ -0,0 +1,766 @@ +/* + * Copyright 2020 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include + +#include "amdgpu.h" +#include "amdgpu_ih.h" +#include "soc15.h" + +#include "oss/osssys_5_0_0_offset.h" +#include "oss/osssys_5_0_0_sh_mask.h" + +#include "soc15_common.h" +#include "arcturus_ih.h" + +#define MAX_REARM_RETRY 10 + +static void vega10_ih_set_interrupt_funcs(struct amdgpu_device *adev); + +/** + * vega10_ih_enable_interrupts - Enable the interrupt ring buffer + * + * @adev: amdgpu_device pointer + * + * Enable the interrupt ring buffer (VEGA10). + */ +static void vega10_ih_enable_interrupts(struct amdgpu_device *adev) +{ + u32 ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL); + + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, RB_ENABLE, 1); + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL, ENABLE_INTR, 1); + if (amdgpu_sriov_vf(adev)) { + if (psp_reg_program(&adev->psp, PSP_REG_IH_RB_CNTL, ih_rb_cntl)) { + DRM_ERROR("PSP program IH_RB_CNTL failed!\n"); + return; + } + } else { + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL, ih_rb_cntl); + } + adev->irq.ih.enabled = true; + + if (adev->irq.ih1.ring_size) { + ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING1); + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL_RING1, + RB_ENABLE, 1); + if (amdgpu_sriov_vf(adev)) { + if (psp_reg_program(&adev->psp, PSP_REG_IH_RB_CNTL_RING1, + ih_rb_cntl)) { + DRM_ERROR("program IH_RB_CNTL_RING1 failed!\n"); + return; + } + } else { + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING1, ih_rb_cntl); + } + adev->irq.ih1.enabled = true; + } + + if (adev->irq.ih2.ring_size) { + ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING2); + ih_rb_cntl = REG_SET_FIELD(ih_rb_cntl, IH_RB_CNTL_RING2, + RB_ENABLE, 1); + if (amdgpu_sriov_vf(adev)) { + if (psp_reg_program(&adev->psp, PSP_REG_IH_RB_CNTL_RING2, + ih_rb_cntl)) { + DRM_ERROR("program IH_RB_CNTL_RING2 failed!\n"); + return; + } + } else { + WREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL_RING2, ih_rb_cntl); + } + adev->irq.ih2.enabled = true; + } +} + +/** + * vega10_ih_disable_interrupts - Disable the interrupt ring buffer + * + * @adev: amdgpu_device pointer + * + * Disable the interrupt ring buffer (VEGA10). + */ +static void vega10_ih_disable_interrupts(struct amdgpu_device *adev) +{ + u32 ih_rb_cntl = RREG32_SOC15(OSSSYS, 0, mmIH_RB_CNTL); + + ih_rb_cntl = REG_SET_FIELD(ih_rb
[PATCH 7/8] drm/amdgpu: add arcturus_ih.o into Makefile
Change-Id: I4701d12bff12052774562e666f95b5978097b5e4 Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/amdgpu/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index c2bbcdd9c875..2da7922c166d 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile @@ -94,7 +94,8 @@ amdgpu-y += \ tonga_ih.o \ cz_ih.o \ vega10_ih.o \ - navi10_ih.o + navi10_ih.o \ + arcturus_ih.o # add PSP block amdgpu-y += \ -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 1/8] drm/amdgpu: add mask bit for IH_CLK_CTRL on oss v5.0
[Why] Mask bit IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE was missing for osssys v5.0. [How] IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE bit mask added for IH_CLK_CTRL register on osssys v5_0_0 mask header file. Change-Id: I71e5ea3a8e5b5077b21906c730bcf30faa678f10 Signed-off-by: Alex Sierra --- drivers/gpu/drm/amd/include/asic_reg/oss/osssys_5_0_0_sh_mask.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/amd/include/asic_reg/oss/osssys_5_0_0_sh_mask.h b/drivers/gpu/drm/amd/include/asic_reg/oss/osssys_5_0_0_sh_mask.h index 05543bde3444..7555ccb667eb 100644 --- a/drivers/gpu/drm/amd/include/asic_reg/oss/osssys_5_0_0_sh_mask.h +++ b/drivers/gpu/drm/amd/include/asic_reg/oss/osssys_5_0_0_sh_mask.h @@ -586,12 +586,14 @@ #define IH_STORM_CLIENT_LIST_CNTL__CLIENT30_IS_STORM_CLIENT_MASK 0x4000L #define IH_STORM_CLIENT_LIST_CNTL__CLIENT31_IS_STORM_CLIENT_MASK 0x8000L //IH_CLK_CTRL +#define IH_CLK_CTRL__IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x19 #define IH_CLK_CTRL__IH_BUFFER_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x1a #define IH_CLK_CTRL__DBUS_MUX_CLK_SOFT_OVERRIDE__SHIFT 0x1b #define IH_CLK_CTRL__OSSSYS_SHARE_CLK_SOFT_OVERRIDE__SHIFT 0x1c #define IH_CLK_CTRL__LIMIT_SMN_CLK_SOFT_OVERRIDE__SHIFT 0x1d #define IH_CLK_CTRL__DYN_CLK_SOFT_OVERRIDE__SHIFT 0x1e #define IH_CLK_CTRL__REG_CLK_SOFT_OVERRIDE__SHIFT 0x1f +#define IH_CLK_CTRL__IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE_MASK 0x0200L #define IH_CLK_CTRL__IH_BUFFER_MEM_CLK_SOFT_OVERRIDE_MASK 0x0400L #define IH_CLK_CTRL__DBUS_MUX_CLK_SOFT_OVERRIDE_MASK 0x0800L #define IH_CLK_CTRL__OSSSYS_SHARE_CLK_SOFT_OVERRIDE_MASK 0x1000L -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
RE: [PATCH] drm/amdgpu/sriov : Don't resume RLCG for SRIOV guest
[AMD Official Use Only - Internal Distribution Only] ping -Original Message- From: Liu, Shaoyun Sent: Tuesday, March 17, 2020 12:55 PM To: amd-gfx@lists.freedesktop.org Cc: Liu, Shaoyun Subject: [PATCH] drm/amdgpu/sriov : Don't resume RLCG for SRIOV guest RLCG is enabled by host driver, no need to enable it in guest for none-PSP load path Change-Id: I2f313743bf3d492f06aaef07224da6eda3878a28 Signed-off-by: shaoyunl --- drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 5 + 1 file changed, 5 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c index d1cdcb4..e134bb2 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c @@ -1940,6 +1940,11 @@ static int gfx_v10_0_rlc_resume(struct amdgpu_device *adev) if (!amdgpu_sriov_vf(adev)) /* enable RLC SRM */ gfx_v10_0_rlc_enable_srm(adev); } else { + if (amdgpu_sriov_vf(adev)) { + gfx_v10_0_init_csb(adev); + return 0; + } + adev->gfx.rlc.funcs->stop(adev); /* disable CG */ -- 2.7.4 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
RE: [PATCH 1/3] drm/amdgpu: fix typo for vcn1 idle check
Series are: Reviewed-by: Leo Liu -Original Message- From: amd-gfx On Behalf Of James Zhu Sent: March 18, 2020 5:15 PM To: amd-gfx@lists.freedesktop.org Cc: Zhu, James Subject: [PATCH 1/3] drm/amdgpu: fix typo for vcn1 idle check fix typo for vcn1 idle check Signed-off-by: James Zhu --- drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index 71f61af..09b0572 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c @@ -1352,7 +1352,7 @@ static int vcn_v1_0_set_clockgating_state(void *handle, if (enable) { /* wait for STATUS to clear */ - if (vcn_v1_0_is_idle(handle)) + if (!vcn_v1_0_is_idle(handle)) return -EBUSY; vcn_v1_0_enable_clock_gating(adev); } else { -- 2.7.4 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=02%7C01%7Cleo.liu%40amd.com%7Cb4671aafc2c84b32912108d7cb816c13%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637201629681247323&sdata=mFHBsrSzQN0dQA8DXBGDEpUTsMh%2BvR7Ncz76RsREPX0%3D&reserved=0 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 2/3] drm/amdgpu: fix typo for vcn2/jpeg2 idle check
fix typo for vcn2/jpeg2 idle check Signed-off-by: James Zhu --- drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c index ff2e6e1..6173951 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c @@ -693,7 +693,7 @@ static int jpeg_v2_0_set_clockgating_state(void *handle, bool enable = (state == AMD_CG_STATE_GATE); if (enable) { - if (jpeg_v2_0_is_idle(handle)) + if (!jpeg_v2_0_is_idle(handle)) return -EBUSY; jpeg_v2_0_enable_clock_gating(adev); } else { diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c index f2745fd..ec8091a 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c @@ -1251,7 +1251,7 @@ static int vcn_v2_0_set_clockgating_state(void *handle, if (enable) { /* wait for STATUS to clear */ - if (vcn_v2_0_is_idle(handle)) + if (!vcn_v2_0_is_idle(handle)) return -EBUSY; vcn_v2_0_enable_clock_gating(adev); } else { -- 2.7.4 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 3/3] drm/amdgpu: fix typo for vcn2.5/jpeg2.5 idle check
fix typo for vcn2.5/jpeg2.5 idle check Signed-off-by: James Zhu --- drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c | 2 +- drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c index c6d046d..c04c207 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c @@ -477,7 +477,7 @@ static int jpeg_v2_5_set_clockgating_state(void *handle, continue; if (enable) { - if (jpeg_v2_5_is_idle(handle)) + if (!jpeg_v2_5_is_idle(handle)) return -EBUSY; jpeg_v2_5_enable_clock_gating(adev, i); } else { diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c index 9b22e2b..c6363f5 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c @@ -1673,7 +1673,7 @@ static int vcn_v2_5_set_clockgating_state(void *handle, return 0; if (enable) { - if (vcn_v2_5_is_idle(handle)) + if (!vcn_v2_5_is_idle(handle)) return -EBUSY; vcn_v2_5_enable_clock_gating(adev); } else { -- 2.7.4 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 1/3] drm/amdgpu: fix typo for vcn1 idle check
fix typo for vcn1 idle check Signed-off-by: James Zhu --- drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index 71f61af..09b0572 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c @@ -1352,7 +1352,7 @@ static int vcn_v1_0_set_clockgating_state(void *handle, if (enable) { /* wait for STATUS to clear */ - if (vcn_v1_0_is_idle(handle)) + if (!vcn_v1_0_is_idle(handle)) return -EBUSY; vcn_v1_0_enable_clock_gating(adev); } else { -- 2.7.4 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu: Initialize shadow to false in gfx_v9_0_rlcg_wreg
On Wed, Mar 18, 2020 at 1:28 PM Joe Perches wrote: > > On Tue, 2020-03-17 at 17:25 -0700, Nathan Chancellor wrote: > > clang warns: > > > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:6: warning: variable 'shadow' > > is used uninitialized whenever 'if' condition is > > false [-Wsometimes-uninitialized] > > if (offset == grbm_cntl || offset == grbm_idx) > > ^ > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:757:6: note: uninitialized use > > occurs here > > if (shadow) { > > ^~ > > Wouldn't it be better to get rid of the shadow variable completely? Yes, much better indeed. Seems it only has one use. > --- > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 6 +- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > index 7bc248..496b9e 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > @@ -735,7 +735,6 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 > offset, u32 v) > static void *spare_int; > static uint32_t grbm_cntl; > static uint32_t grbm_idx; > - bool shadow; > > scratch_reg0 = adev->rmmio + > (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG0_BASE_IDX] + mmSCRATCH_REG0)*4; > scratch_reg1 = adev->rmmio + > (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG1_BASE_IDX] + mmSCRATCH_REG1)*4; > @@ -751,10 +750,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 > offset, u32 v) > return; > } > > - if (offset == grbm_cntl || offset == grbm_idx) > - shadow = true; > - > - if (shadow) { > + if (offset == grbm_cntl || offset == grbm_idx) { > if (offset == grbm_cntl) > writel(v, scratch_reg2); > else if (offset == grbm_idx) > > > -- > You received this message because you are subscribed to the Google Groups > "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clang-built-linux+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clang-built-linux/3a997f4ee640e607a171a19668f5f5484062116c.camel%40perches.com. -- Thanks, ~Nick Desaulniers ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH v2] drm/amdgpu: Remove unnecessary variable shadow in gfx_v9_0_rlcg_wreg
clang warns: drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:6: warning: variable 'shadow' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (offset == grbm_cntl || offset == grbm_idx) ^ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:757:6: note: uninitialized use occurs here if (shadow) { ^~ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:2: note: remove the 'if' if its condition is always true if (offset == grbm_cntl || offset == grbm_idx) ^~ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:738:13: note: initialize the variable 'shadow' to silence this warning bool shadow; ^ = 0 1 warning generated. shadow is only assigned in one condition and used as the condition for another if statement; combine the two if statements and remove shadow to make the code cleaner and resolve this warning. Fixes: 2e0cc4d48b91 ("drm/amdgpu: revise RLCG access path") Link: https://github.com/ClangBuiltLinux/linux/issues/936 Suggested-by: Joe Perches Reviewed-by: Nick Desaulniers Signed-off-by: Nathan Chancellor --- v1 -> v2: * Remove shadow altogether, as suggested by Joe Perches. * Add Nick's Reviewed-by, as I assume it still stands. drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 6 +- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index 7bc2486167e7..496b9edca3c3 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -735,7 +735,6 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 offset, u32 v) static void *spare_int; static uint32_t grbm_cntl; static uint32_t grbm_idx; - bool shadow; scratch_reg0 = adev->rmmio + (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG0_BASE_IDX] + mmSCRATCH_REG0)*4; scratch_reg1 = adev->rmmio + (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG1_BASE_IDX] + mmSCRATCH_REG1)*4; @@ -751,10 +750,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 offset, u32 v) return; } - if (offset == grbm_cntl || offset == grbm_idx) - shadow = true; - - if (shadow) { + if (offset == grbm_cntl || offset == grbm_idx) { if (offset == grbm_cntl) writel(v, scratch_reg2); else if (offset == grbm_idx) -- 2.26.0.rc1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH AUTOSEL 5.4 41/73] drm/amd/display: update soc bb for nv14
From: Martin Leung [ Upstream commit d5349775c1726ce997b8eb4982cd85a01f1c8b42 ] [why] nv14 previously inherited soc bb from generic dcn 2, did not match watermark values according to memory team [how] add nv14 specific soc bb: copy nv2 generic that it was using from before, but changed num channels to 8 Signed-off-by: Martin Leung Reviewed-by: Jun Lei Acked-by: Rodrigo Siqueira Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- .../drm/amd/display/dc/dcn20/dcn20_resource.c | 114 ++ 1 file changed, 114 insertions(+) diff --git a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c index 3b7769a3e67e3..c13dce760098c 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c @@ -269,6 +269,117 @@ struct _vcs_dpi_soc_bounding_box_st dcn2_0_soc = { .use_urgent_burst_bw = 0 }; +struct _vcs_dpi_soc_bounding_box_st dcn2_0_nv14_soc = { + .clock_limits = { + { + .state = 0, + .dcfclk_mhz = 560.0, + .fabricclk_mhz = 560.0, + .dispclk_mhz = 513.0, + .dppclk_mhz = 513.0, + .phyclk_mhz = 540.0, + .socclk_mhz = 560.0, + .dscclk_mhz = 171.0, + .dram_speed_mts = 8960.0, + }, + { + .state = 1, + .dcfclk_mhz = 694.0, + .fabricclk_mhz = 694.0, + .dispclk_mhz = 642.0, + .dppclk_mhz = 642.0, + .phyclk_mhz = 600.0, + .socclk_mhz = 694.0, + .dscclk_mhz = 214.0, + .dram_speed_mts = 11104.0, + }, + { + .state = 2, + .dcfclk_mhz = 875.0, + .fabricclk_mhz = 875.0, + .dispclk_mhz = 734.0, + .dppclk_mhz = 734.0, + .phyclk_mhz = 810.0, + .socclk_mhz = 875.0, + .dscclk_mhz = 245.0, + .dram_speed_mts = 14000.0, + }, + { + .state = 3, + .dcfclk_mhz = 1000.0, + .fabricclk_mhz = 1000.0, + .dispclk_mhz = 1100.0, + .dppclk_mhz = 1100.0, + .phyclk_mhz = 810.0, + .socclk_mhz = 1000.0, + .dscclk_mhz = 367.0, + .dram_speed_mts = 16000.0, + }, + { + .state = 4, + .dcfclk_mhz = 1200.0, + .fabricclk_mhz = 1200.0, + .dispclk_mhz = 1284.0, + .dppclk_mhz = 1284.0, + .phyclk_mhz = 810.0, + .socclk_mhz = 1200.0, + .dscclk_mhz = 428.0, + .dram_speed_mts = 16000.0, + }, + /*Extra state, no dispclk ramping*/ + { + .state = 5, + .dcfclk_mhz = 1200.0, + .fabricclk_mhz = 1200.0, + .dispclk_mhz = 1284.0, + .dppclk_mhz = 1284.0, + .phyclk_mhz = 810.0, + .socclk_mhz = 1200.0, + .dscclk_mhz = 428.0, + .dram_speed_mts = 16000.0, + }, + }, + .num_states = 5, + .sr_exit_time_us = 8.6, + .sr_enter_plus_exit_time_us = 10.9, + .urgent_latency_us = 4.0, + .urgent_latency_pixel_data_only_us = 4.0, + .urgent_latency_pixel_mixed_with_vm_data_us = 4.0, + .urgent_latency_vm_data_only_us = 4.0, + .urgent_out_of_order_return_per_channel_pixel_only_bytes = 4096, + .urgent_out_of_order_return_per_channel_pixel_and_vm_bytes = 4096, + .urgent_out_of_order_return_per_channel_vm_only_bytes = 4096, + .pct_ideal_dram_sdp_bw_after_urgent_pixel_only = 40.0, + .pct_ideal_dram_sdp_bw_after_urgent_pixel_and_vm = 40.0, + .pct_ideal_dram_sdp_bw_after_urgent_
[PATCH AUTOSEL 5.4 42/73] drm/amdgpu: correct ROM_INDEX/DATA offset for VEGA20
From: Hawking Zhang [ Upstream commit f1c2cd3f8fb959123a9beba18c0e8112dcb2e137 ] The ROMC_INDEX/DATA offset was changed to e4/e5 since from smuio_v11 (vega20/arcturus). Signed-off-by: Hawking Zhang Tested-by: Candice Li Reviewed-by: Candice Li Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/amdgpu/soc15.c | 25 +++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c index 80934ca172607..c086262cc181d 100644 --- a/drivers/gpu/drm/amd/amdgpu/soc15.c +++ b/drivers/gpu/drm/amd/amdgpu/soc15.c @@ -84,6 +84,13 @@ #define HDP_MEM_POWER_CTRL__RC_MEM_POWER_CTRL_EN_MASK 0x0001L #define HDP_MEM_POWER_CTRL__RC_MEM_POWER_LS_EN_MASK0x0002L #define mmHDP_MEM_POWER_CTRL_BASE_IDX 0 + +/* for Vega20/arcturus regiter offset change */ +#definemmROM_INDEX_VG200x00e4 +#definemmROM_INDEX_VG20_BASE_IDX 0 +#definemmROM_DATA_VG20 0x00e5 +#definemmROM_DATA_VG20_BASE_IDX0 + /* * Indirect registers accessor */ @@ -304,6 +311,8 @@ static bool soc15_read_bios_from_rom(struct amdgpu_device *adev, { u32 *dw_ptr; u32 i, length_dw; + uint32_t rom_index_offset; + uint32_t rom_data_offset; if (bios == NULL) return false; @@ -316,11 +325,23 @@ static bool soc15_read_bios_from_rom(struct amdgpu_device *adev, dw_ptr = (u32 *)bios; length_dw = ALIGN(length_bytes, 4) / 4; + switch (adev->asic_type) { + case CHIP_VEGA20: + case CHIP_ARCTURUS: + rom_index_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX_VG20); + rom_data_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA_VG20); + break; + default: + rom_index_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX); + rom_data_offset = SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA); + break; + } + /* set rom index to 0 */ - WREG32(SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX), 0); + WREG32(rom_index_offset, 0); /* read out the rom data */ for (i = 0; i < length_dw; i++) - dw_ptr[i] = RREG32(SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA)); + dw_ptr[i] = RREG32(rom_data_offset); return true; } -- 2.20.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu: Initialize shadow to false in gfx_v9_0_rlcg_wreg
On Tue, 2020-03-17 at 17:25 -0700, Nathan Chancellor wrote: > clang warns: > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:6: warning: variable 'shadow' > is used uninitialized whenever 'if' condition is > false [-Wsometimes-uninitialized] > if (offset == grbm_cntl || offset == grbm_idx) > ^ > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:757:6: note: uninitialized use > occurs here > if (shadow) { > ^~ Wouldn't it be better to get rid of the shadow variable completely? --- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 6 +- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index 7bc248..496b9e 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -735,7 +735,6 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 offset, u32 v) static void *spare_int; static uint32_t grbm_cntl; static uint32_t grbm_idx; - bool shadow; scratch_reg0 = adev->rmmio + (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG0_BASE_IDX] + mmSCRATCH_REG0)*4; scratch_reg1 = adev->rmmio + (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG1_BASE_IDX] + mmSCRATCH_REG1)*4; @@ -751,10 +750,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 offset, u32 v) return; } - if (offset == grbm_cntl || offset == grbm_idx) - shadow = true; - - if (shadow) { + if (offset == grbm_cntl || offset == grbm_idx) { if (offset == grbm_cntl) writel(v, scratch_reg2); else if (offset == grbm_idx) ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu: Initialize shadow to false in gfx_v9_0_rlcg_wreg
On Tue, Mar 17, 2020 at 5:25 PM Nathan Chancellor wrote: > > clang warns: > > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:6: warning: variable 'shadow' > is used uninitialized whenever 'if' condition is > false [-Wsometimes-uninitialized] > if (offset == grbm_cntl || offset == grbm_idx) > ^ > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:757:6: note: uninitialized use > occurs here > if (shadow) { > ^~ > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:2: note: remove the 'if' if > its condition is always true > if (offset == grbm_cntl || offset == grbm_idx) > ^~ > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:738:13: note: initialize the > variable 'shadow' to silence this warning > bool shadow; >^ > = 0 > 1 warning generated. > > It is not wrong so initialize shadow to false to ensure shadow is always > used initialized. Yep, thanks for the patch. Reviewed-by: Nick Desaulniers > > Fixes: 2e0cc4d48b91 ("drm/amdgpu: revise RLCG access path") > Link: https://github.com/ClangBuiltLinux/linux/issues/936 > Signed-off-by: Nathan Chancellor > --- > drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > index 7bc2486167e7..affbff76758c 100644 > --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c > @@ -735,7 +735,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 > offset, u32 v) > static void *spare_int; > static uint32_t grbm_cntl; > static uint32_t grbm_idx; > - bool shadow; > + bool shadow = false; > > scratch_reg0 = adev->rmmio + > (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG0_BASE_IDX] + mmSCRATCH_REG0)*4; > scratch_reg1 = adev->rmmio + > (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG1_BASE_IDX] + mmSCRATCH_REG1)*4; > -- > 2.26.0.rc1 > > -- > You received this message because you are subscribed to the Google Groups > "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clang-built-linux+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clang-built-linux/20200318002500.52471-1-natechancellor%40gmail.com. -- Thanks, ~Nick Desaulniers ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH] drm/amdgpu: protect RAS sysfs during GPU reset
[AMD Public Use] Submitting patch for review to protect RAS sysfs access' during a RAS event and to clear the MMHub EDC registers early on in a BACO reset 0001-drm-amdgpu-protect-RAS-sysfs-during-GPU-reset.patch Description: 0001-drm-amdgpu-protect-RAS-sysfs-during-GPU-reset.patch ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH ] amd/powerplay: arcturus baco reset disable all features
[AMD Public Use] Reviewed-by: Alex Deucher From: amd-gfx on behalf of Clements, John Sent: Wednesday, March 18, 2020 10:11 AM To: amd-gfx@lists.freedesktop.org ; Zhang, Hawking Subject: [PATCH ] amd/powerplay: arcturus baco reset disable all features [AMD Official Use Only - Internal Distribution Only] Submitting patch for review to issue smu cmd disable all features upon baco entry sequence in arcturus. This helps resolve issue with I2C controller not being disengaged properly on GPU reset affecting RAS eeprom stability on re-entry ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH ] amd/powerplay: arcturus baco reset disable all features
[AMD Official Use Only - Internal Distribution Only] Submitting patch for review to issue smu cmd disable all features upon baco entry sequence in arcturus. This helps resolve issue with I2C controller not being disengaged properly on GPU reset affecting RAS eeprom stability on re-entry 0001-amd-powerplay-arcturus-baco-reset-disable-all-featur.patch Description: 0001-amd-powerplay-arcturus-baco-reset-disable-all-featur.patch ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: amdgpu kernel oops?
On Tue, Mar 17, 2020 at 6:24 PM Tristan Vroom wrote: > > I don't have a lot of experience reading kernel logs, so I apologize if I > misread something, but it seems like I'm having some trouble with amdgpu in > kernel 5.5.9. > > Here's the gist of the bug. Does this patch fix the issue? https://cgit.freedesktop.org/~agd5f/linux/commit/?h=drm-next&id=6c62ce8073daf27ae3fd03b6929d6cea3887eeb2 Alex > > Thank you for your help. > > Tristan > ___ > amd-gfx mailing list > amd-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/amd-gfx ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH 3/4] mm: simplify device private page handling in hmm_range_fault
On Tue, Mar 17, 2020 at 03:43:47PM -0700, Ralph Campbell wrote: >> Obviously no driver cared for that so far. Once we have test cases >> for that and thus testable code we can add code to fault it in from >> hmm_vma_handle_pte. >> > > I'm OK with the series. I think I would have been less confused if I looked at > patch 4 then 3. I guess I could just merge 3 and 4 if it is too confusing otherwise. ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu: fix and cleanup amdgpu_gem_object_close v2
[AMD Official Use Only - Internal Distribution Only] yes, adding excl fence again as shared one is more reliable From: Christian König Sent: Wednesday, March 18, 2020 4:03:14 PM To: Pan, Xinhui Cc: amd-gfx@lists.freedesktop.org ; Liu, Monk Subject: Re: [PATCH] drm/amdgpu: fix and cleanup amdgpu_gem_object_close v2 The key point is that 10ms should be sufficient that either the move or the update is finished. One alternative which came to my mind would be to add the exclusive fence as shared as well in this case. This way we won't need to block at all. Christian. Am 18.03.20 um 09:00 schrieb Pan, Xinhui: > I wonder if it really fix anything with such small delay. but it should be no > harm anyway. > > Reviewed-by: xinhui pan > >> 2020年3月18日 15:51,Christian König 写道: >> >> Ping? Xinhui can I get an rb for this? >> >> Thanks, >> Christian. >> >> Am 16.03.20 um 14:22 schrieb Christian König: >>> The problem is that we can't add the clear fence to the BO >>> when there is an exclusive fence on it since we can't >>> guarantee the the clear fence will complete after the >>> exclusive one. >>> >>> To fix this refactor the function and wait for any potential >>> exclusive fence with a small timeout before adding the >>> shared clear fence. >>> >>> v2: fix warning >>> >>> Signed-off-by: Christian König >>> --- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 43 +++-- >>> 1 file changed, 26 insertions(+), 17 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >>> index 5bec66e6b1f8..49c91dac35a0 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >>> @@ -161,10 +161,11 @@ void amdgpu_gem_object_close(struct drm_gem_object >>> *obj, >>> struct amdgpu_bo_list_entry vm_pd; >>> struct list_head list, duplicates; >>> + struct dma_fence *fence = NULL; >>> struct ttm_validate_buffer tv; >>> struct ww_acquire_ctx ticket; >>> struct amdgpu_bo_va *bo_va; >>> - int r; >>> + long r; >>> INIT_LIST_HEAD(&list); >>> INIT_LIST_HEAD(&duplicates); >>> @@ -178,28 +179,36 @@ void amdgpu_gem_object_close(struct drm_gem_object >>> *obj, >>> r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates); >>> if (r) { >>> dev_err(adev->dev, "leaking bo va because " >>> - "we fail to reserve bo (%d)\n", r); >>> + "we fail to reserve bo (%ld)\n", r); >>> return; >>> } >>> bo_va = amdgpu_vm_bo_find(vm, bo); >>> - if (bo_va && --bo_va->ref_count == 0) { >>> - amdgpu_vm_bo_rmv(adev, bo_va); >>> + if (!bo_va || --bo_va->ref_count) >>> + goto out_unlock; >>> - if (amdgpu_vm_ready(vm)) { >>> - struct dma_fence *fence = NULL; >>> + amdgpu_vm_bo_rmv(adev, bo_va); >>> + if (!amdgpu_vm_ready(vm)) >>> + goto out_unlock; >>> - r = amdgpu_vm_clear_freed(adev, vm, &fence); >>> - if (unlikely(r)) { >>> - dev_err(adev->dev, "failed to clear page " >>> - "tables on GEM object close (%d)\n", r); >>> - } >>> - if (fence) { >>> - amdgpu_bo_fence(bo, fence, true); >>> - dma_fence_put(fence); >>> - } >>> - } >>> - } >>> + r = amdgpu_vm_clear_freed(adev, vm, &fence); >>> + if (r || !fence) >>> + goto out_unlock; >>> + >>> + r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, false, false, >>> + msecs_to_jiffies(10)); >>> + if (r == 0) >>> + r = -ETIMEDOUT; >>> + if (r) >>> + goto out_unlock; >>> + >>> + amdgpu_bo_fence(bo, fence, true); >>> + dma_fence_put(fence); >>> + >>> +out_unlock: >>> + if (unlikely(r < 0)) >>> + dev_err(adev->dev, "failed to clear page " >>> + "tables on GEM object close (%ld)\n", r); >>> ttm_eu_backoff_reservation(&ticket, &list); >>> } >>> ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH RESEND v2 2/2] PCI: Use ioremap(), not phys_to_virt() for platform ROM
Hi Christoph, Thanks for your comments. I'm also replying here to your comments on the previous series. On Tuesday, March 17, 2020 10:28:35 AM EDT Christoph Hellwig wrote: > Any reason drivers can't just use pci_map_rom insteadἅ which already > does the right thing? Some machines don't expose the video BIOS in the PCI BAR and instead only make it available via EFI boot services calls. So drivers need to be able to use the ROM provided by EFI calls, but only if they can't find a valid one anywhere else. At one point, the EFI provided ROM in pdev->rom *was* exposed via pci_map_rom(). However it had to be split out into a separate function so that drivers could have more control over which sources were preferred. On Tuesday, March 17, 2020 10:29:13 AM EDT Christoph Hellwig wrote: > This and the next patch really need to be folded into the previous > one to avoid regressions (assuming my other suggestion doesn't work > for some reason). Addressed in v2 On Tuesday, March 17, 2020 10:47:31 AM EDT Christoph Hellwig wrote: > What is the value of this helper over just open coding an ioremap > of pdev->rom in the callers? I think the direct access to pdev->rom you suggest makes sense, especially because users of the pci_platform_rom() are exposed to the fact that it just calls ioremap(). I decided against wrapping the iounmap() with a pci_unmap_platform_rom(), but I didn't apply the same consideration to the existing function. How about something like this (with pci_platform_rom() removed)? static bool radeon_read_platform_bios(struct radeon_device *rdev) { phys_addr_t rom = rdev->pdev->rom; size_t romlen = rdev->pdev->romlen; void __iomem *bios; rdev->bios = NULL; if (!rom || romlen == 0) return false; rdev->bios = kzalloc(romlen, GFP_KERNEL); if (!rdev->bios) return false; bios = ioremap(rom, romlen); if (!bios) goto free_bios; memcpy_fromio(rdev->bios, bios, romlen); iounmap(bios); if (rdev->bios[0] != 0x55 || rdev->bios[1] != 0xaa) goto free_bios; return true; free_bios: kfree(rdev->bios); return false; } If this is preferred, I'll send an updated series. I'm assuming that the removal of pci_platform_rom() and updating of all the callers should be combined into this patch. Thanks, Mikel ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH RESEND v2 2/2] PCI: Use ioremap(), not phys_to_virt() for platform ROM
On Tue, Mar 17, 2020 at 09:34:33PM -0400, Mikel Rychliski wrote: > I think the direct access to pdev->rom you suggest makes sense, especially > because users of the pci_platform_rom() are exposed to the fact that it just > calls ioremap(). > > I decided against wrapping the iounmap() with a pci_unmap_platform_rom(), but > I didn't apply the same consideration to the existing function. > > How about something like this (with pci_platform_rom() removed)? That looks sensible to me. ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH] drm/amdgpu: Initialize shadow to false in gfx_v9_0_rlcg_wreg
clang warns: drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:6: warning: variable 'shadow' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (offset == grbm_cntl || offset == grbm_idx) ^ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:757:6: note: uninitialized use occurs here if (shadow) { ^~ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:754:2: note: remove the 'if' if its condition is always true if (offset == grbm_cntl || offset == grbm_idx) ^~ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c:738:13: note: initialize the variable 'shadow' to silence this warning bool shadow; ^ = 0 1 warning generated. It is not wrong so initialize shadow to false to ensure shadow is always used initialized. Fixes: 2e0cc4d48b91 ("drm/amdgpu: revise RLCG access path") Link: https://github.com/ClangBuiltLinux/linux/issues/936 Signed-off-by: Nathan Chancellor --- drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index 7bc2486167e7..affbff76758c 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c @@ -735,7 +735,7 @@ void gfx_v9_0_rlcg_wreg(struct amdgpu_device *adev, u32 offset, u32 v) static void *spare_int; static uint32_t grbm_cntl; static uint32_t grbm_idx; - bool shadow; + bool shadow = false; scratch_reg0 = adev->rmmio + (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG0_BASE_IDX] + mmSCRATCH_REG0)*4; scratch_reg1 = adev->rmmio + (adev->reg_offset[GC_HWIP][0][mmSCRATCH_REG1_BASE_IDX] + mmSCRATCH_REG1)*4; -- 2.26.0.rc1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu: fix and cleanup amdgpu_gem_object_close v2
The key point is that 10ms should be sufficient that either the move or the update is finished. One alternative which came to my mind would be to add the exclusive fence as shared as well in this case. This way we won't need to block at all. Christian. Am 18.03.20 um 09:00 schrieb Pan, Xinhui: I wonder if it really fix anything with such small delay. but it should be no harm anyway. Reviewed-by: xinhui pan 2020年3月18日 15:51,Christian König 写道: Ping? Xinhui can I get an rb for this? Thanks, Christian. Am 16.03.20 um 14:22 schrieb Christian König: The problem is that we can't add the clear fence to the BO when there is an exclusive fence on it since we can't guarantee the the clear fence will complete after the exclusive one. To fix this refactor the function and wait for any potential exclusive fence with a small timeout before adding the shared clear fence. v2: fix warning Signed-off-by: Christian König --- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 43 +++-- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 5bec66e6b1f8..49c91dac35a0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -161,10 +161,11 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj, struct amdgpu_bo_list_entry vm_pd; struct list_head list, duplicates; + struct dma_fence *fence = NULL; struct ttm_validate_buffer tv; struct ww_acquire_ctx ticket; struct amdgpu_bo_va *bo_va; - int r; + long r; INIT_LIST_HEAD(&list); INIT_LIST_HEAD(&duplicates); @@ -178,28 +179,36 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj, r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates); if (r) { dev_err(adev->dev, "leaking bo va because " - "we fail to reserve bo (%d)\n", r); + "we fail to reserve bo (%ld)\n", r); return; } bo_va = amdgpu_vm_bo_find(vm, bo); - if (bo_va && --bo_va->ref_count == 0) { - amdgpu_vm_bo_rmv(adev, bo_va); + if (!bo_va || --bo_va->ref_count) + goto out_unlock; - if (amdgpu_vm_ready(vm)) { - struct dma_fence *fence = NULL; + amdgpu_vm_bo_rmv(adev, bo_va); + if (!amdgpu_vm_ready(vm)) + goto out_unlock; - r = amdgpu_vm_clear_freed(adev, vm, &fence); - if (unlikely(r)) { - dev_err(adev->dev, "failed to clear page " - "tables on GEM object close (%d)\n", r); - } - if (fence) { - amdgpu_bo_fence(bo, fence, true); - dma_fence_put(fence); - } - } - } + r = amdgpu_vm_clear_freed(adev, vm, &fence); + if (r || !fence) + goto out_unlock; + + r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, false, false, + msecs_to_jiffies(10)); + if (r == 0) + r = -ETIMEDOUT; + if (r) + goto out_unlock; + + amdgpu_bo_fence(bo, fence, true); + dma_fence_put(fence); + +out_unlock: + if (unlikely(r < 0)) + dev_err(adev->dev, "failed to clear page " + "tables on GEM object close (%ld)\n", r); ttm_eu_backoff_reservation(&ticket, &list); } ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu: fix and cleanup amdgpu_gem_object_close v2
I wonder if it really fix anything with such small delay. but it should be no harm anyway. Reviewed-by: xinhui pan > 2020年3月18日 15:51,Christian König 写道: > > Ping? Xinhui can I get an rb for this? > > Thanks, > Christian. > > Am 16.03.20 um 14:22 schrieb Christian König: >> The problem is that we can't add the clear fence to the BO >> when there is an exclusive fence on it since we can't >> guarantee the the clear fence will complete after the >> exclusive one. >> >> To fix this refactor the function and wait for any potential >> exclusive fence with a small timeout before adding the >> shared clear fence. >> >> v2: fix warning >> >> Signed-off-by: Christian König >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 43 +++-- >> 1 file changed, 26 insertions(+), 17 deletions(-) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >> index 5bec66e6b1f8..49c91dac35a0 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >> @@ -161,10 +161,11 @@ void amdgpu_gem_object_close(struct drm_gem_object >> *obj, >> struct amdgpu_bo_list_entry vm_pd; >> struct list_head list, duplicates; >> +struct dma_fence *fence = NULL; >> struct ttm_validate_buffer tv; >> struct ww_acquire_ctx ticket; >> struct amdgpu_bo_va *bo_va; >> -int r; >> +long r; >> INIT_LIST_HEAD(&list); >> INIT_LIST_HEAD(&duplicates); >> @@ -178,28 +179,36 @@ void amdgpu_gem_object_close(struct drm_gem_object >> *obj, >> r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates); >> if (r) { >> dev_err(adev->dev, "leaking bo va because " >> -"we fail to reserve bo (%d)\n", r); >> +"we fail to reserve bo (%ld)\n", r); >> return; >> } >> bo_va = amdgpu_vm_bo_find(vm, bo); >> -if (bo_va && --bo_va->ref_count == 0) { >> -amdgpu_vm_bo_rmv(adev, bo_va); >> +if (!bo_va || --bo_va->ref_count) >> +goto out_unlock; >> - if (amdgpu_vm_ready(vm)) { >> -struct dma_fence *fence = NULL; >> +amdgpu_vm_bo_rmv(adev, bo_va); >> +if (!amdgpu_vm_ready(vm)) >> +goto out_unlock; >> - r = amdgpu_vm_clear_freed(adev, vm, &fence); >> -if (unlikely(r)) { >> -dev_err(adev->dev, "failed to clear page " >> -"tables on GEM object close (%d)\n", r); >> -} >> - if (fence) { >> -amdgpu_bo_fence(bo, fence, true); >> -dma_fence_put(fence); >> -} >> -} >> -} >> +r = amdgpu_vm_clear_freed(adev, vm, &fence); >> +if (r || !fence) >> +goto out_unlock; >> + >> +r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, false, false, >> + msecs_to_jiffies(10)); >> +if (r == 0) >> +r = -ETIMEDOUT; >> +if (r) >> +goto out_unlock; >> + >> +amdgpu_bo_fence(bo, fence, true); >> +dma_fence_put(fence); >> + >> +out_unlock: >> +if (unlikely(r < 0)) >> +dev_err(adev->dev, "failed to clear page " >> +"tables on GEM object close (%ld)\n", r); >> ttm_eu_backoff_reservation(&ticket, &list); >> } >> > ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
Re: [PATCH] drm/amdgpu: fix and cleanup amdgpu_gem_object_close v2
Ping? Xinhui can I get an rb for this? Thanks, Christian. Am 16.03.20 um 14:22 schrieb Christian König: The problem is that we can't add the clear fence to the BO when there is an exclusive fence on it since we can't guarantee the the clear fence will complete after the exclusive one. To fix this refactor the function and wait for any potential exclusive fence with a small timeout before adding the shared clear fence. v2: fix warning Signed-off-by: Christian König --- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 43 +++-- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 5bec66e6b1f8..49c91dac35a0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -161,10 +161,11 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj, struct amdgpu_bo_list_entry vm_pd; struct list_head list, duplicates; + struct dma_fence *fence = NULL; struct ttm_validate_buffer tv; struct ww_acquire_ctx ticket; struct amdgpu_bo_va *bo_va; - int r; + long r; INIT_LIST_HEAD(&list); INIT_LIST_HEAD(&duplicates); @@ -178,28 +179,36 @@ void amdgpu_gem_object_close(struct drm_gem_object *obj, r = ttm_eu_reserve_buffers(&ticket, &list, false, &duplicates); if (r) { dev_err(adev->dev, "leaking bo va because " - "we fail to reserve bo (%d)\n", r); + "we fail to reserve bo (%ld)\n", r); return; } bo_va = amdgpu_vm_bo_find(vm, bo); - if (bo_va && --bo_va->ref_count == 0) { - amdgpu_vm_bo_rmv(adev, bo_va); + if (!bo_va || --bo_va->ref_count) + goto out_unlock; - if (amdgpu_vm_ready(vm)) { - struct dma_fence *fence = NULL; + amdgpu_vm_bo_rmv(adev, bo_va); + if (!amdgpu_vm_ready(vm)) + goto out_unlock; - r = amdgpu_vm_clear_freed(adev, vm, &fence); - if (unlikely(r)) { - dev_err(adev->dev, "failed to clear page " - "tables on GEM object close (%d)\n", r); - } - if (fence) { - amdgpu_bo_fence(bo, fence, true); - dma_fence_put(fence); - } - } - } + r = amdgpu_vm_clear_freed(adev, vm, &fence); + if (r || !fence) + goto out_unlock; + + r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, false, false, + msecs_to_jiffies(10)); + if (r == 0) + r = -ETIMEDOUT; + if (r) + goto out_unlock; + + amdgpu_bo_fence(bo, fence, true); + dma_fence_put(fence); + +out_unlock: + if (unlikely(r < 0)) + dev_err(adev->dev, "failed to clear page " + "tables on GEM object close (%ld)\n", r); ttm_eu_backoff_reservation(&ticket, &list); } ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx