@@ -6389,23 +6389,28 @@ static int amdgpu_device_sched_resume(struct list_head *device_list,
63896389 if (!drm_drv_uses_atomic_modeset (adev_to_drm (tmp_adev )) && !job_signaled )
63906390 drm_helper_resume_force_mode (adev_to_drm (tmp_adev ));
63916391
6392- if (tmp_adev -> asic_reset_res )
6393- r = tmp_adev -> asic_reset_res ;
6394-
6395- tmp_adev -> asic_reset_res = 0 ;
6396-
6397- if (r ) {
6392+ if (tmp_adev -> asic_reset_res ) {
63986393 /* bad news, how to tell it to userspace ?
63996394 * for ras error, we should report GPU bad status instead of
64006395 * reset failure
64016396 */
64026397 if (reset_context -> src != AMDGPU_RESET_SRC_RAS ||
64036398 !amdgpu_ras_eeprom_check_err_threshold (tmp_adev ))
6404- dev_info (tmp_adev -> dev , "GPU reset(%d) failed\n" ,
6405- atomic_read (& tmp_adev -> gpu_reset_counter ));
6406- amdgpu_vf_error_put (tmp_adev , AMDGIM_ERROR_VF_GPU_RESET_FAIL , 0 , r );
6399+ dev_info (
6400+ tmp_adev -> dev ,
6401+ "GPU reset(%d) failed with error %d \n" ,
6402+ atomic_read (
6403+ & tmp_adev -> gpu_reset_counter ),
6404+ tmp_adev -> asic_reset_res );
6405+ amdgpu_vf_error_put (tmp_adev ,
6406+ AMDGIM_ERROR_VF_GPU_RESET_FAIL , 0 ,
6407+ tmp_adev -> asic_reset_res );
6408+ if (!r )
6409+ r = tmp_adev -> asic_reset_res ;
6410+ tmp_adev -> asic_reset_res = 0 ;
64076411 } else {
6408- dev_info (tmp_adev -> dev , "GPU reset(%d) succeeded!\n" , atomic_read (& tmp_adev -> gpu_reset_counter ));
6412+ dev_info (tmp_adev -> dev , "GPU reset(%d) succeeded!\n" ,
6413+ atomic_read (& tmp_adev -> gpu_reset_counter ));
64096414 if (amdgpu_acpi_smart_shift_update (tmp_adev ,
64106415 AMDGPU_SS_DEV_D0 ))
64116416 dev_warn (tmp_adev -> dev ,
@@ -7157,28 +7162,35 @@ void amdgpu_pci_resume(struct pci_dev *pdev)
71577162
71587163static void amdgpu_device_cache_switch_state (struct amdgpu_device * adev )
71597164{
7160- struct pci_dev * parent = pci_upstream_bridge ( adev -> pdev ) ;
7165+ struct pci_dev * swus , * swds ;
71617166 int r ;
71627167
7163- if (!parent || parent -> vendor != PCI_VENDOR_ID_ATI )
7168+ swds = pci_upstream_bridge (adev -> pdev );
7169+ if (!swds || swds -> vendor != PCI_VENDOR_ID_ATI ||
7170+ pci_pcie_type (swds ) != PCI_EXP_TYPE_DOWNSTREAM )
7171+ return ;
7172+ swus = pci_upstream_bridge (swds );
7173+ if (!swus ||
7174+ (swus -> vendor != PCI_VENDOR_ID_ATI &&
7175+ swus -> vendor != PCI_VENDOR_ID_AMD ) ||
7176+ pci_pcie_type (swus ) != PCI_EXP_TYPE_UPSTREAM )
71647177 return ;
71657178
71667179 /* If already saved, return */
71677180 if (adev -> pcie_reset_ctx .swus )
71687181 return ;
71697182 /* Upstream bridge is ATI, assume it's SWUS/DS architecture */
7170- r = pci_save_state (parent );
7183+ r = pci_save_state (swds );
71717184 if (r )
71727185 return ;
7173- adev -> pcie_reset_ctx .swds_pcistate = pci_store_saved_state (parent );
7186+ adev -> pcie_reset_ctx .swds_pcistate = pci_store_saved_state (swds );
71747187
7175- parent = pci_upstream_bridge (parent );
7176- r = pci_save_state (parent );
7188+ r = pci_save_state (swus );
71777189 if (r )
71787190 return ;
7179- adev -> pcie_reset_ctx .swus_pcistate = pci_store_saved_state (parent );
7191+ adev -> pcie_reset_ctx .swus_pcistate = pci_store_saved_state (swus );
71807192
7181- adev -> pcie_reset_ctx .swus = parent ;
7193+ adev -> pcie_reset_ctx .swus = swus ;
71827194}
71837195
71847196static void amdgpu_device_load_switch_state (struct amdgpu_device * adev )
0 commit comments