mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-14 16:06:15 -05:00
drm/amdgpu: Add a noverbose flag to psp_wait_for
For extended wait with retries on a PSP register value, add a noverbose flag to avoid excessive error messages on each timeout. Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Asad Kamal <asad.kamal@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -575,9 +575,11 @@ static int psp_sw_fini(struct amdgpu_ip_block *ip_block)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int psp_wait_for(struct psp_context *psp, uint32_t reg_index,
|
||||
uint32_t reg_val, uint32_t mask, bool check_changed)
|
||||
int psp_wait_for(struct psp_context *psp, uint32_t reg_index, uint32_t reg_val,
|
||||
uint32_t mask, uint32_t flags)
|
||||
{
|
||||
bool check_changed = flags & PSP_WAITREG_CHANGED;
|
||||
bool verbose = !(flags & PSP_WAITREG_NOVERBOSE);
|
||||
uint32_t val;
|
||||
int i;
|
||||
struct amdgpu_device *adev = psp->adev;
|
||||
@@ -597,9 +599,10 @@ int psp_wait_for(struct psp_context *psp, uint32_t reg_index,
|
||||
udelay(1);
|
||||
}
|
||||
|
||||
dev_err(adev->dev,
|
||||
"psp reg (0x%x) wait timed out, mask: %x, read: %x exp: %x",
|
||||
reg_index, mask, val, reg_val);
|
||||
if (verbose)
|
||||
dev_err(adev->dev,
|
||||
"psp reg (0x%x) wait timed out, mask: %x, read: %x exp: %x",
|
||||
reg_index, mask, val, reg_val);
|
||||
|
||||
return -ETIME;
|
||||
}
|
||||
|
||||
@@ -134,6 +134,9 @@ enum psp_reg_prog_id {
|
||||
PSP_REG_LAST
|
||||
};
|
||||
|
||||
#define PSP_WAITREG_CHANGED BIT(0) /* check if the value has changed */
|
||||
#define PSP_WAITREG_NOVERBOSE BIT(1) /* No error verbose */
|
||||
|
||||
struct psp_funcs {
|
||||
int (*init_microcode)(struct psp_context *psp);
|
||||
int (*wait_for_bootloader)(struct psp_context *psp);
|
||||
@@ -532,8 +535,8 @@ extern const struct amdgpu_ip_block_version psp_v13_0_ip_block;
|
||||
extern const struct amdgpu_ip_block_version psp_v13_0_4_ip_block;
|
||||
extern const struct amdgpu_ip_block_version psp_v14_0_ip_block;
|
||||
|
||||
extern int psp_wait_for(struct psp_context *psp, uint32_t reg_index,
|
||||
uint32_t field_val, uint32_t mask, bool check_changed);
|
||||
int psp_wait_for(struct psp_context *psp, uint32_t reg_index,
|
||||
uint32_t field_val, uint32_t mask, uint32_t flags);
|
||||
extern int psp_wait_for_spirom_update(struct psp_context *psp, uint32_t reg_index,
|
||||
uint32_t field_val, uint32_t mask, uint32_t msec_timeout);
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ static int psp_v10_0_ring_create(struct psp_context *psp,
|
||||
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -115,7 +115,7 @@ static int psp_v10_0_ring_stop(struct psp_context *psp,
|
||||
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -152,11 +152,9 @@ static int psp_v11_0_wait_for_bootloader(struct psp_context *psp)
|
||||
for (retry_loop = 0; retry_loop < 10; retry_loop++) {
|
||||
/* Wait for bootloader to signify that is
|
||||
ready having bit 31 of C2PMSG_35 set to 1 */
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000,
|
||||
0x80000000,
|
||||
false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, PSP_WAITREG_NOVERBOSE);
|
||||
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
@@ -252,8 +250,8 @@ static int psp_v11_0_bootloader_load_sos(struct psp_context *psp)
|
||||
/* there might be handshake issue with hardware which needs delay */
|
||||
mdelay(20);
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_81),
|
||||
RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81),
|
||||
0, true);
|
||||
RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81), 0,
|
||||
PSP_WAITREG_CHANGED);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -279,11 +277,11 @@ static int psp_v11_0_ring_stop(struct psp_context *psp,
|
||||
if (amdgpu_sriov_vf(adev))
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
else
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -321,13 +319,13 @@ static int psp_v11_0_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_101 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
} else {
|
||||
/* Wait for sOS ready for ring creation */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, false);
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to wait for sOS ready for ring creation\n");
|
||||
return ret;
|
||||
@@ -353,7 +351,7 @@ static int psp_v11_0_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -387,7 +385,7 @@ static int psp_v11_0_mode1_reset(struct psp_context *psp)
|
||||
offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64);
|
||||
|
||||
ret = psp_wait_for(psp, offset, MBOX_TOS_READY_FLAG,
|
||||
MBOX_TOS_READY_MASK, false);
|
||||
MBOX_TOS_READY_MASK, 0);
|
||||
|
||||
if (ret) {
|
||||
DRM_INFO("psp is not working correctly before mode1 reset!\n");
|
||||
@@ -402,7 +400,7 @@ static int psp_v11_0_mode1_reset(struct psp_context *psp)
|
||||
offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_33);
|
||||
|
||||
ret = psp_wait_for(psp, offset, MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK,
|
||||
false);
|
||||
0);
|
||||
|
||||
if (ret) {
|
||||
DRM_INFO("psp mode 1 reset failed!\n");
|
||||
@@ -428,8 +426,9 @@ static int psp_v11_0_memory_training_send_msg(struct psp_context *psp, int msg)
|
||||
|
||||
max_wait = MEM_TRAIN_SEND_MSG_TIMEOUT_US / adev->usec_timeout;
|
||||
for (i = 0; i < max_wait; i++) {
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, PSP_WAITREG_NOVERBOSE);
|
||||
if (ret == 0)
|
||||
break;
|
||||
}
|
||||
@@ -608,7 +607,7 @@ static int psp_v11_0_load_usbc_pd_fw(struct psp_context *psp, uint64_t fw_pri_mc
|
||||
WREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_36, (fw_pri_mc_addr >> 20));
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -645,7 +644,7 @@ static int psp_v11_0_read_usbc_pd_fw(struct psp_context *psp, uint32_t *fw_ver)
|
||||
WREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_35, C2PMSG_CMD_GFX_USB_PD_FW_VER);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (!ret)
|
||||
*fw_ver = RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_36);
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ static int psp_v11_0_8_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
} else {
|
||||
/* Write the ring destroy command*/
|
||||
WREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_64,
|
||||
@@ -53,7 +53,7 @@ static int psp_v11_0_8_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -91,13 +91,13 @@ static int psp_v11_0_8_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_101 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
} else {
|
||||
/* Wait for sOS ready for ring creation */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, false);
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to wait for trust OS ready for ring creation\n");
|
||||
return ret;
|
||||
@@ -123,7 +123,7 @@ static int psp_v11_0_8_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -82,7 +82,7 @@ static int psp_v12_0_bootloader_load_sysdrv(struct psp_context *psp)
|
||||
|
||||
/* Wait for bootloader to signify that is ready having bit 31 of C2PMSG_35 set to 1 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -97,7 +97,7 @@ static int psp_v12_0_bootloader_load_sysdrv(struct psp_context *psp)
|
||||
psp_gfxdrv_command_reg);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -118,7 +118,7 @@ static int psp_v12_0_bootloader_load_sos(struct psp_context *psp)
|
||||
|
||||
/* Wait for bootloader to signify that is ready having bit 31 of C2PMSG_35 set to 1 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -133,8 +133,8 @@ static int psp_v12_0_bootloader_load_sos(struct psp_context *psp)
|
||||
psp_gfxdrv_command_reg);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_81),
|
||||
RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81),
|
||||
0, true);
|
||||
RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81), 0,
|
||||
PSP_WAITREG_CHANGED);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -163,7 +163,7 @@ static int psp_v12_0_ring_create(struct psp_context *psp,
|
||||
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -186,11 +186,11 @@ static int psp_v12_0_ring_stop(struct psp_context *psp,
|
||||
if (amdgpu_sriov_vf(adev))
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
else
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -222,7 +222,7 @@ static int psp_v12_0_mode1_reset(struct psp_context *psp)
|
||||
offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64);
|
||||
|
||||
ret = psp_wait_for(psp, offset, MBOX_TOS_READY_FLAG,
|
||||
MBOX_TOS_READY_MASK, false);
|
||||
MBOX_TOS_READY_MASK, 0);
|
||||
|
||||
if (ret) {
|
||||
DRM_INFO("psp is not working correctly before mode1 reset!\n");
|
||||
@@ -237,7 +237,7 @@ static int psp_v12_0_mode1_reset(struct psp_context *psp)
|
||||
offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_33);
|
||||
|
||||
ret = psp_wait_for(psp, offset, MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK,
|
||||
false);
|
||||
0);
|
||||
|
||||
if (ret) {
|
||||
DRM_INFO("psp mode 1 reset failed!\n");
|
||||
|
||||
@@ -182,7 +182,7 @@ static int psp_v13_0_wait_for_vmbx_ready(struct psp_context *psp)
|
||||
ready having bit 31 of C2PMSG_33 set to 1 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_33),
|
||||
0x80000000, 0xffffffff, false);
|
||||
0x80000000, 0xffffffff, PSP_WAITREG_NOVERBOSE);
|
||||
|
||||
if (ret == 0)
|
||||
break;
|
||||
@@ -213,7 +213,7 @@ static int psp_v13_0_wait_for_bootloader(struct psp_context *psp)
|
||||
for (retry_loop = 0; retry_loop < retry_cnt; retry_loop++) {
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0xffffffff, false);
|
||||
0x80000000, 0xffffffff, PSP_WAITREG_NOVERBOSE);
|
||||
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
@@ -362,8 +362,8 @@ static int psp_v13_0_bootloader_load_sos(struct psp_context *psp)
|
||||
/* there might be handshake issue with hardware which needs delay */
|
||||
mdelay(20);
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_81),
|
||||
RREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_81),
|
||||
0, true);
|
||||
RREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_81), 0,
|
||||
PSP_WAITREG_CHANGED);
|
||||
|
||||
if (!ret)
|
||||
psp_v13_0_init_sos_version(psp);
|
||||
@@ -386,7 +386,7 @@ static int psp_v13_0_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
} else {
|
||||
/* Write the ring destroy command*/
|
||||
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_64,
|
||||
@@ -396,7 +396,7 @@ static int psp_v13_0_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -434,13 +434,13 @@ static int psp_v13_0_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_101 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
} else {
|
||||
/* Wait for sOS ready for ring creation */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, false);
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to wait for trust OS ready for ring creation\n");
|
||||
return ret;
|
||||
@@ -466,7 +466,7 @@ static int psp_v13_0_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -529,8 +529,9 @@ static int psp_v13_0_memory_training_send_msg(struct psp_context *psp, int msg)
|
||||
|
||||
max_wait = MEM_TRAIN_SEND_MSG_TIMEOUT_US / adev->usec_timeout;
|
||||
for (i = 0; i < max_wait; i++) {
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, PSP_WAITREG_NOVERBOSE);
|
||||
if (ret == 0)
|
||||
break;
|
||||
}
|
||||
@@ -682,7 +683,7 @@ static int psp_v13_0_load_usbc_pd_fw(struct psp_context *psp, uint64_t fw_pri_mc
|
||||
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_36, (fw_pri_mc_addr >> 20));
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -719,7 +720,7 @@ static int psp_v13_0_read_usbc_pd_fw(struct psp_context *psp, uint32_t *fw_ver)
|
||||
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_35, C2PMSG_CMD_GFX_USB_PD_FW_VER);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (!ret)
|
||||
*fw_ver = RREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_36);
|
||||
|
||||
@@ -744,8 +745,9 @@ static int psp_v13_0_exec_spi_cmd(struct psp_context *psp, int cmd)
|
||||
ret = psp_wait_for_spirom_update(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, PSP_SPIROM_UPDATE_TIMEOUT);
|
||||
else
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, 0);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "SPI cmd %x timed out, ret = %d", cmd, ret);
|
||||
return ret;
|
||||
@@ -769,7 +771,7 @@ static int psp_v13_0_update_spirom(struct psp_context *psp,
|
||||
|
||||
/* Confirm PSP is ready to start */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, false);
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, 0);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "PSP Not ready to start processing, ret = %d", ret);
|
||||
return ret;
|
||||
@@ -804,7 +806,7 @@ static int psp_v13_0_dump_spirom(struct psp_context *psp,
|
||||
|
||||
/* Confirm PSP is ready to start */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, false);
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, 0);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "PSP Not ready to start processing, ret = %d", ret);
|
||||
return ret;
|
||||
@@ -931,8 +933,9 @@ static int psp_v13_0_reg_program_no_ring(struct psp_context *psp, uint32_t val,
|
||||
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_102, id);
|
||||
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_103, val);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101),
|
||||
0x80000000, 0x80000000, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -76,11 +76,9 @@ static int psp_v13_0_4_wait_for_bootloader(struct psp_context *psp)
|
||||
for (retry_loop = 0; retry_loop < 10; retry_loop++) {
|
||||
/* Wait for bootloader to signify that is
|
||||
ready having bit 31 of C2PMSG_35 set to 1 */
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35),
|
||||
0x80000000,
|
||||
0x80000000,
|
||||
false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, PSP_WAITREG_NOVERBOSE);
|
||||
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
@@ -185,8 +183,8 @@ static int psp_v13_0_4_bootloader_load_sos(struct psp_context *psp)
|
||||
/* there might be handshake issue with hardware which needs delay */
|
||||
mdelay(20);
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_81),
|
||||
RREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_81),
|
||||
0, true);
|
||||
RREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_81), 0,
|
||||
PSP_WAITREG_CHANGED);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -206,7 +204,7 @@ static int psp_v13_0_4_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
} else {
|
||||
/* Write the ring destroy command*/
|
||||
WREG32_SOC15(MP0, 0, regMP0_SMN_C2PMSG_64,
|
||||
@@ -216,7 +214,7 @@ static int psp_v13_0_4_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -254,13 +252,13 @@ static int psp_v13_0_4_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_101 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
} else {
|
||||
/* Wait for sOS ready for ring creation */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, false);
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to wait for trust OS ready for ring creation\n");
|
||||
return ret;
|
||||
@@ -286,7 +284,7 @@ static int psp_v13_0_4_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMP0_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -109,11 +109,9 @@ static int psp_v14_0_wait_for_bootloader(struct psp_context *psp)
|
||||
for (retry_loop = 0; retry_loop < 10; retry_loop++) {
|
||||
/* Wait for bootloader to signify that is
|
||||
ready having bit 31 of C2PMSG_35 set to 1 */
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000,
|
||||
0x80000000,
|
||||
false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, PSP_WAITREG_NOVERBOSE);
|
||||
|
||||
if (ret == 0)
|
||||
return 0;
|
||||
@@ -228,9 +226,10 @@ static int psp_v14_0_bootloader_load_sos(struct psp_context *psp)
|
||||
|
||||
/* there might be handshake issue with hardware which needs delay */
|
||||
mdelay(20);
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_81),
|
||||
RREG32_SOC15(MP0, 0, regMPASP_SMN_C2PMSG_81),
|
||||
0, true);
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_81),
|
||||
RREG32_SOC15(MP0, 0, regMPASP_SMN_C2PMSG_81), 0,
|
||||
PSP_WAITREG_CHANGED);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -250,7 +249,7 @@ static int psp_v14_0_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
} else {
|
||||
/* Write the ring destroy command*/
|
||||
WREG32_SOC15(MP0, 0, regMPASP_SMN_C2PMSG_64,
|
||||
@@ -260,7 +259,7 @@ static int psp_v14_0_ring_stop(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -298,13 +297,13 @@ static int psp_v14_0_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_101 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_101),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
|
||||
} else {
|
||||
/* Wait for sOS ready for ring creation */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_64),
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, false);
|
||||
MBOX_TOS_READY_FLAG, MBOX_TOS_READY_MASK, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to wait for trust OS ready for ring creation\n");
|
||||
return ret;
|
||||
@@ -330,7 +329,7 @@ static int psp_v14_0_ring_create(struct psp_context *psp,
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_64),
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, false);
|
||||
MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK, 0);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -393,8 +392,9 @@ static int psp_v14_0_memory_training_send_msg(struct psp_context *psp, int msg)
|
||||
|
||||
max_wait = MEM_TRAIN_SEND_MSG_TIMEOUT_US / adev->usec_timeout;
|
||||
for (i = 0; i < max_wait; i++) {
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, PSP_WAITREG_NOVERBOSE);
|
||||
if (ret == 0)
|
||||
break;
|
||||
}
|
||||
@@ -545,8 +545,9 @@ static int psp_v14_0_load_usbc_pd_fw(struct psp_context *psp, uint64_t fw_pri_mc
|
||||
*/
|
||||
WREG32_SOC15(MP0, 0, regMPASP_SMN_C2PMSG_36, (fw_pri_mc_addr >> 20));
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -582,8 +583,9 @@ static int psp_v14_0_read_usbc_pd_fw(struct psp_context *psp, uint32_t *fw_ver)
|
||||
|
||||
WREG32_SOC15(MP0, 0, regMPASP_SMN_C2PMSG_35, C2PMSG_CMD_GFX_USB_PD_FW_VER);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (!ret)
|
||||
*fw_ver = RREG32_SOC15(MP0, 0, regMPASP_SMN_C2PMSG_36);
|
||||
|
||||
@@ -607,11 +609,13 @@ static int psp_v14_0_exec_spi_cmd(struct psp_context *psp, int cmd)
|
||||
ret = psp_wait_for_spirom_update(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, PSP_SPIROM_UPDATE_TIMEOUT);
|
||||
else
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, 0);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, false);
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, 0);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "SPI cmd %x timed out, ret = %d", cmd, ret);
|
||||
return ret;
|
||||
@@ -634,8 +638,9 @@ static int psp_v14_0_update_spirom(struct psp_context *psp,
|
||||
int ret;
|
||||
|
||||
/* Confirm PSP is ready to start */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, false);
|
||||
ret = psp_wait_for(psp,
|
||||
SOC15_REG_OFFSET(MP0, 0, regMPASP_SMN_C2PMSG_115),
|
||||
MBOX_READY_FLAG, MBOX_READY_MASK, 0);
|
||||
if (ret) {
|
||||
dev_err(adev->dev, "PSP Not ready to start processing, ret = %d", ret);
|
||||
return ret;
|
||||
|
||||
@@ -91,7 +91,7 @@ static int psp_v3_1_bootloader_load_sysdrv(struct psp_context *psp)
|
||||
|
||||
/* Wait for bootloader to signify that is ready having bit 31 of C2PMSG_35 set to 1 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -109,7 +109,7 @@ static int psp_v3_1_bootloader_load_sysdrv(struct psp_context *psp)
|
||||
mdelay(20);
|
||||
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -130,7 +130,7 @@ static int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
|
||||
|
||||
/* Wait for bootloader to signify that is ready having bit 31 of C2PMSG_35 set to 1 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
|
||||
0x80000000, 0x80000000, false);
|
||||
0x80000000, 0x80000000, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -147,8 +147,8 @@ static int psp_v3_1_bootloader_load_sos(struct psp_context *psp)
|
||||
/* there might be handshake issue with hardware which needs delay */
|
||||
mdelay(20);
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_81),
|
||||
RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81),
|
||||
0, true);
|
||||
RREG32_SOC15(MP0, 0, mmMP0_SMN_C2PMSG_81), 0,
|
||||
PSP_WAITREG_CHANGED);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -168,7 +168,7 @@ static void psp_v3_1_reroute_ih(struct psp_context *psp)
|
||||
|
||||
mdelay(20);
|
||||
psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
0x80000000, 0x8000FFFF, false);
|
||||
0x80000000, 0x8000FFFF, 0);
|
||||
|
||||
/* Change IH ring for UMC */
|
||||
tmp = REG_SET_FIELD(0, IH_CLIENT_CFG_DATA, CREDIT_RETURN_ADDR, 0x1216b);
|
||||
@@ -180,7 +180,7 @@ static void psp_v3_1_reroute_ih(struct psp_context *psp)
|
||||
|
||||
mdelay(20);
|
||||
psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
0x80000000, 0x8000FFFF, false);
|
||||
0x80000000, 0x8000FFFF, 0);
|
||||
}
|
||||
|
||||
static int psp_v3_1_ring_create(struct psp_context *psp,
|
||||
@@ -217,9 +217,9 @@ static int psp_v3_1_ring_create(struct psp_context *psp,
|
||||
mdelay(20);
|
||||
|
||||
/* Wait for response flag (bit 31) in C2PMSG_101 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0,
|
||||
mmMP0_SMN_C2PMSG_101), 0x80000000,
|
||||
0x8000FFFF, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
0x80000000, 0x8000FFFF, 0);
|
||||
} else {
|
||||
|
||||
/* Write low address of the ring to C2PMSG_69 */
|
||||
@@ -240,10 +240,9 @@ static int psp_v3_1_ring_create(struct psp_context *psp,
|
||||
mdelay(20);
|
||||
|
||||
/* Wait for response flag (bit 31) in C2PMSG_64 */
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0,
|
||||
mmMP0_SMN_C2PMSG_64), 0x80000000,
|
||||
0x8000FFFF, false);
|
||||
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
0x80000000, 0x8000FFFF, 0);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@@ -267,11 +266,13 @@ static int psp_v3_1_ring_stop(struct psp_context *psp,
|
||||
|
||||
/* Wait for response flag (bit 31) */
|
||||
if (amdgpu_sriov_vf(adev))
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_101),
|
||||
0x80000000, 0x80000000, 0);
|
||||
else
|
||||
ret = psp_wait_for(psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(
|
||||
psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64),
|
||||
0x80000000, 0x80000000, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -311,7 +312,7 @@ static int psp_v3_1_mode1_reset(struct psp_context *psp)
|
||||
|
||||
offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_64);
|
||||
|
||||
ret = psp_wait_for(psp, offset, 0x80000000, 0x8000FFFF, false);
|
||||
ret = psp_wait_for(psp, offset, 0x80000000, 0x8000FFFF, 0);
|
||||
|
||||
if (ret) {
|
||||
DRM_INFO("psp is not working correctly before mode1 reset!\n");
|
||||
@@ -325,7 +326,7 @@ static int psp_v3_1_mode1_reset(struct psp_context *psp)
|
||||
|
||||
offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_33);
|
||||
|
||||
ret = psp_wait_for(psp, offset, 0x80000000, 0x80000000, false);
|
||||
ret = psp_wait_for(psp, offset, 0x80000000, 0x80000000, 0);
|
||||
|
||||
if (ret) {
|
||||
DRM_INFO("psp mode 1 reset failed!\n");
|
||||
|
||||
Reference in New Issue
Block a user