On Fri, Jan 08, 2016 at 03:44:51AM +0000, Zhu, Rex wrote:
Hi Dan,
It is (result == 0).
From code, smum_send_msg_to_smc() will return negative a error code or zero.
0 mean success.
Hm.. I have investigated more and the problem is typos in tonga_send_msg_to_smc().
drivers/gpu/drm/amd/powerplay/smumgr/tonga_smumgr.c 183 /** 184 * Send a message to the SMC, and wait for its response. 185 * 186 * @param smumgr the address of the powerplay hardware manager. 187 * @param msg the message to send. 188 * @return The response that came from the SMC. 189 */ 190 static int tonga_send_msg_to_smc(struct pp_smumgr *smumgr, uint16_t msg) 191 { 192 if (smumgr == NULL || smumgr->device == NULL) 193 return -EINVAL; 194 195 if (!tonga_is_smc_ram_running(smumgr)) 196 return -1; 197 198 SMUM_WAIT_FIELD_UNEQUAL(smumgr, SMC_RESP_0, SMC_RESP, 0); 199 PP_ASSERT_WITH_CODE( 200 1 == SMUM_READ_FIELD(smumgr->device, SMC_RESP_0, SMC_RESP), 201 "Failed to send Previous Message.", 202 return 1); ^^^^^^^^ We intended to return -EINVAL here. (returning -1 means -EPERM but it's sloppy to use -1 instead of -EPERM, -1 is never a valid error code).
203 204 cgs_write_register(smumgr->device, mmSMC_MESSAGE_0, msg); 205 206 SMUM_WAIT_FIELD_UNEQUAL(smumgr, SMC_RESP_0, SMC_RESP, 0); 207 PP_ASSERT_WITH_CODE( 208 1 == SMUM_READ_FIELD(smumgr->device, SMC_RESP_0, SMC_RESP), 209 "Failed to send Message.", 210 return 1); ^^^^^^^^
return -EINVAL;
211 212 return 0; 213 }
regards, dan carpenter