forked from mirrors/linux
		
	drm/amdgpu: Unmap all MMIO mappings
Access to those must be prevented post pci_remove v6: Drop BOs list, unampping VRAM BAR is enough. v8: Add condition of xgmi.connected_to_cpu to MTTR handling and remove MTTR handling from the old place. Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210517193105.491461-1-andrey.grodzovsky@amd.com
This commit is contained in:
		
							parent
							
								
									98c6e6a7e2
								
							
						
					
					
						commit
						07775fc138
					
				
					 3 changed files with 23 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -3664,6 +3664,27 @@ int amdgpu_device_init(struct amdgpu_device *adev,
 | 
			
		|||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void amdgpu_device_unmap_mmio(struct amdgpu_device *adev)
 | 
			
		||||
{
 | 
			
		||||
	/* Clear all CPU mappings pointing to this device */
 | 
			
		||||
	unmap_mapping_range(adev->ddev.anon_inode->i_mapping, 0, 0, 1);
 | 
			
		||||
 | 
			
		||||
	/* Unmap all mapped bars - Doorbell, registers and VRAM */
 | 
			
		||||
	amdgpu_device_doorbell_fini(adev);
 | 
			
		||||
 | 
			
		||||
	iounmap(adev->rmmio);
 | 
			
		||||
	adev->rmmio = NULL;
 | 
			
		||||
	if (adev->mman.aper_base_kaddr)
 | 
			
		||||
		iounmap(adev->mman.aper_base_kaddr);
 | 
			
		||||
	adev->mman.aper_base_kaddr = NULL;
 | 
			
		||||
 | 
			
		||||
	/* Memory manager related */
 | 
			
		||||
	if (!adev->gmc.xgmi.connected_to_cpu) {
 | 
			
		||||
		arch_phys_wc_del(adev->gmc.vram_mtrr);
 | 
			
		||||
		arch_io_free_memtype_wc(adev->gmc.aper_base, adev->gmc.aper_size);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * amdgpu_device_fini - tear down the driver
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -3710,6 +3731,8 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)
 | 
			
		|||
	amdgpu_device_ip_fini_early(adev);
 | 
			
		||||
 | 
			
		||||
	amdgpu_gart_dummy_page_fini(adev);
 | 
			
		||||
 | 
			
		||||
	amdgpu_device_unmap_mmio(adev);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void amdgpu_device_fini_sw(struct amdgpu_device *adev)
 | 
			
		||||
| 
						 | 
				
			
			@ -3737,9 +3760,6 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)
 | 
			
		|||
	}
 | 
			
		||||
	if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
 | 
			
		||||
		vga_client_register(adev->pdev, NULL, NULL, NULL);
 | 
			
		||||
	iounmap(adev->rmmio);
 | 
			
		||||
	adev->rmmio = NULL;
 | 
			
		||||
	amdgpu_device_doorbell_fini(adev);
 | 
			
		||||
 | 
			
		||||
	if (IS_ENABLED(CONFIG_PERF_EVENTS))
 | 
			
		||||
		amdgpu_pmu_fini(adev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1107,10 +1107,6 @@ int amdgpu_bo_init(struct amdgpu_device *adev)
 | 
			
		|||
void amdgpu_bo_fini(struct amdgpu_device *adev)
 | 
			
		||||
{
 | 
			
		||||
	amdgpu_ttm_fini(adev);
 | 
			
		||||
	if (!adev->gmc.xgmi.connected_to_cpu) {
 | 
			
		||||
		arch_phys_wc_del(adev->gmc.vram_mtrr);
 | 
			
		||||
		arch_io_free_memtype_wc(adev->gmc.aper_base, adev->gmc.aper_size);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1841,10 +1841,6 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
 | 
			
		|||
	amdgpu_bo_free_kernel(&adev->mman.discovery_memory, NULL, NULL);
 | 
			
		||||
	amdgpu_ttm_fw_reserve_vram_fini(adev);
 | 
			
		||||
 | 
			
		||||
	if (adev->mman.aper_base_kaddr)
 | 
			
		||||
		iounmap(adev->mman.aper_base_kaddr);
 | 
			
		||||
	adev->mman.aper_base_kaddr = NULL;
 | 
			
		||||
 | 
			
		||||
	amdgpu_vram_mgr_fini(adev);
 | 
			
		||||
	amdgpu_gtt_mgr_fini(adev);
 | 
			
		||||
	ttm_range_man_fini(&adev->mman.bdev, AMDGPU_PL_GDS);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue