diff options
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vi.c | 1 |
5 files changed, 20 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index e9af03113fc3..c1b913541739 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
| @@ -1482,6 +1482,9 @@ struct amdgpu_device { | |||
| 1482 | spinlock_t gtt_list_lock; | 1482 | spinlock_t gtt_list_lock; |
| 1483 | struct list_head gtt_list; | 1483 | struct list_head gtt_list; |
| 1484 | 1484 | ||
| 1485 | /* record hw reset is performed */ | ||
| 1486 | bool has_hw_reset; | ||
| 1487 | |||
| 1485 | }; | 1488 | }; |
| 1486 | 1489 | ||
| 1487 | static inline struct amdgpu_device *amdgpu_ttm_adev(struct ttm_bo_device *bdev) | 1490 | static inline struct amdgpu_device *amdgpu_ttm_adev(struct ttm_bo_device *bdev) |
| @@ -1700,7 +1703,7 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring) | |||
| 1700 | int amdgpu_gpu_reset(struct amdgpu_device *adev); | 1703 | int amdgpu_gpu_reset(struct amdgpu_device *adev); |
| 1701 | bool amdgpu_need_backup(struct amdgpu_device *adev); | 1704 | bool amdgpu_need_backup(struct amdgpu_device *adev); |
| 1702 | void amdgpu_pci_config_reset(struct amdgpu_device *adev); | 1705 | void amdgpu_pci_config_reset(struct amdgpu_device *adev); |
| 1703 | bool amdgpu_card_posted(struct amdgpu_device *adev); | 1706 | bool amdgpu_need_post(struct amdgpu_device *adev); |
| 1704 | void amdgpu_update_display_priority(struct amdgpu_device *adev); | 1707 | void amdgpu_update_display_priority(struct amdgpu_device *adev); |
| 1705 | 1708 | ||
| 1706 | int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data); | 1709 | int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c index d9def01f276e..821f7cc2051f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c | |||
| @@ -100,7 +100,7 @@ static bool igp_read_bios_from_vram(struct amdgpu_device *adev) | |||
| 100 | resource_size_t size = 256 * 1024; /* ??? */ | 100 | resource_size_t size = 256 * 1024; /* ??? */ |
| 101 | 101 | ||
| 102 | if (!(adev->flags & AMD_IS_APU)) | 102 | if (!(adev->flags & AMD_IS_APU)) |
| 103 | if (!amdgpu_card_posted(adev)) | 103 | if (amdgpu_need_post(adev)) |
| 104 | return false; | 104 | return false; |
| 105 | 105 | ||
| 106 | adev->bios = NULL; | 106 | adev->bios = NULL; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 944ba0d3874a..6abb238b25c9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |||
| @@ -619,25 +619,29 @@ void amdgpu_gtt_location(struct amdgpu_device *adev, struct amdgpu_mc *mc) | |||
| 619 | * GPU helpers function. | 619 | * GPU helpers function. |
| 620 | */ | 620 | */ |
| 621 | /** | 621 | /** |
| 622 | * amdgpu_card_posted - check if the hw has already been initialized | 622 | * amdgpu_need_post - check if the hw need post or not |
| 623 | * | 623 | * |
| 624 | * @adev: amdgpu_device pointer | 624 | * @adev: amdgpu_device pointer |
| 625 | * | 625 | * |
| 626 | * Check if the asic has been initialized (all asics). | 626 | * Check if the asic has been initialized (all asics) at driver startup |
| 627 | * Used at driver startup. | 627 | * or post is needed if hw reset is performed. |
| 628 | * Returns true if initialized or false if not. | 628 | * Returns true if need or false if not. |
| 629 | */ | 629 | */ |
| 630 | bool amdgpu_card_posted(struct amdgpu_device *adev) | 630 | bool amdgpu_need_post(struct amdgpu_device *adev) |
| 631 | { | 631 | { |
| 632 | uint32_t reg; | 632 | uint32_t reg; |
| 633 | 633 | ||
| 634 | if (adev->has_hw_reset) { | ||
| 635 | adev->has_hw_reset = false; | ||
| 636 | return true; | ||
| 637 | } | ||
| 634 | /* then check MEM_SIZE, in case the crtcs are off */ | 638 | /* then check MEM_SIZE, in case the crtcs are off */ |
| 635 | reg = RREG32(mmCONFIG_MEMSIZE); | 639 | reg = RREG32(mmCONFIG_MEMSIZE); |
| 636 | 640 | ||
| 637 | if (reg) | 641 | if (reg) |
| 638 | return true; | 642 | return false; |
| 639 | 643 | ||
| 640 | return false; | 644 | return true; |
| 641 | 645 | ||
| 642 | } | 646 | } |
| 643 | 647 | ||
| @@ -665,7 +669,7 @@ static bool amdgpu_vpost_needed(struct amdgpu_device *adev) | |||
| 665 | return true; | 669 | return true; |
| 666 | } | 670 | } |
| 667 | } | 671 | } |
| 668 | return !amdgpu_card_posted(adev); | 672 | return amdgpu_need_post(adev); |
| 669 | } | 673 | } |
| 670 | 674 | ||
| 671 | /** | 675 | /** |
| @@ -2071,7 +2075,7 @@ int amdgpu_device_resume(struct drm_device *dev, bool resume, bool fbcon) | |||
| 2071 | amdgpu_atombios_scratch_regs_restore(adev); | 2075 | amdgpu_atombios_scratch_regs_restore(adev); |
| 2072 | 2076 | ||
| 2073 | /* post card */ | 2077 | /* post card */ |
| 2074 | if (!amdgpu_card_posted(adev) || !resume) { | 2078 | if (amdgpu_need_post(adev)) { |
| 2075 | r = amdgpu_atom_asic_init(adev->mode_info.atom_context); | 2079 | r = amdgpu_atom_asic_init(adev->mode_info.atom_context); |
| 2076 | if (r) | 2080 | if (r) |
| 2077 | DRM_ERROR("amdgpu asic init failed\n"); | 2081 | DRM_ERROR("amdgpu asic init failed\n"); |
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c index 7c39b538dc0e..c4d4b35e54ec 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik.c +++ b/drivers/gpu/drm/amd/amdgpu/cik.c | |||
| @@ -1176,6 +1176,7 @@ static int cik_gpu_pci_config_reset(struct amdgpu_device *adev) | |||
| 1176 | if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) { | 1176 | if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) { |
| 1177 | /* enable BM */ | 1177 | /* enable BM */ |
| 1178 | pci_set_master(adev->pdev); | 1178 | pci_set_master(adev->pdev); |
| 1179 | adev->has_hw_reset = true; | ||
| 1179 | r = 0; | 1180 | r = 0; |
| 1180 | break; | 1181 | break; |
| 1181 | } | 1182 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c index 4922fff08c3c..50bdb24ef8d6 100644 --- a/drivers/gpu/drm/amd/amdgpu/vi.c +++ b/drivers/gpu/drm/amd/amdgpu/vi.c | |||
| @@ -721,6 +721,7 @@ static int vi_gpu_pci_config_reset(struct amdgpu_device *adev) | |||
| 721 | if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) { | 721 | if (RREG32(mmCONFIG_MEMSIZE) != 0xffffffff) { |
| 722 | /* enable BM */ | 722 | /* enable BM */ |
| 723 | pci_set_master(adev->pdev); | 723 | pci_set_master(adev->pdev); |
| 724 | adev->has_hw_reset = true; | ||
| 724 | return 0; | 725 | return 0; |
| 725 | } | 726 | } |
| 726 | udelay(1); | 727 | udelay(1); |
