Commit 765bea0d authored by Hawking Zhang's avatar Hawking Zhang Committed by Alex Deucher

drm/amdgpu: Apply retry to IP discovery v2 and v4

To ensure GPU driver touch the local framebuffer until
it is initialized by integrated firmware.
Signed-off-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: default avatarLikun Gao <Likun.Gao@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 9dc57c2a
...@@ -245,12 +245,16 @@ static int amdgpu_discovery_read_binary_from_sysmem(struct amdgpu_device *adev, ...@@ -245,12 +245,16 @@ static int amdgpu_discovery_read_binary_from_sysmem(struct amdgpu_device *adev,
return -ENOENT; return -ENOENT;
} }
#define IP_DISCOVERY_V2 2
#define IP_DISCOVERY_V4 4
static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev, static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
uint8_t *binary) uint8_t *binary)
{ {
uint64_t vram_size; uint64_t vram_size;
u32 msg; u32 msg;
int i, ret = 0; int i, ret = 0;
int ip_discovery_ver = 0;
/* It can take up to a second for IFWI init to complete on some dGPUs, /* It can take up to a second for IFWI init to complete on some dGPUs,
* but generally it should be in the 60-100ms range. Normally this starts * but generally it should be in the 60-100ms range. Normally this starts
...@@ -259,7 +263,11 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev, ...@@ -259,7 +263,11 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
* wait for this to complete. Once the C2PMSG is updated, we can * wait for this to complete. Once the C2PMSG is updated, we can
* continue. * continue.
*/ */
if (dev_is_removable(&adev->pdev->dev)) {
ip_discovery_ver = RREG32(mmIP_DISCOVERY_VERSION);
if ((dev_is_removable(&adev->pdev->dev)) ||
(ip_discovery_ver == IP_DISCOVERY_V2) ||
(ip_discovery_ver == IP_DISCOVERY_V4)) {
for (i = 0; i < 1000; i++) { for (i = 0; i < 1000; i++) {
msg = RREG32(mmMP0_SMN_C2PMSG_33); msg = RREG32(mmMP0_SMN_C2PMSG_33);
if (msg & 0x80000000) if (msg & 0x80000000)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment