Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mei: vsc: Improve error logging in vsc_identify_silicon()

vsc_identify_silicon() returns -EINVAL in various places without logging
what is going on.

And there are several bug reports about mei_vsc_hw_reset() failing with
-EINVAL before the "silicon stepping version is %u:%u" message get logged,
indicating this is coming from vsc_identify_silicon():

[ 10.949657] intel_vsc intel_vsc: hw_reset failed ret = -22
[ 10.988899] intel_vsc intel_vsc: hw_reset failed ret = -22
[ 11.027140] intel_vsc intel_vsc: hw_reset failed ret = -22
[ 11.027151] intel_vsc intel_vsc: reset: reached maximal consecutive resets: disabling the device
[ 11.027155] intel_vsc intel_vsc: reset failed ret = -19
[ 11.027157] intel_vsc intel_vsc: link layer initialization failed.
[ 11.027159] intel_vsc intel_vsc: error -ENODEV: init hw failed

Add proper error logging to mei_vsc_hw_reset() so that it will be clear
why it is failing when it fails.

Link: https://github.com/intel/ivsc-driver/issues/51
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20241108151234.36884-1-hdegoede@redhat.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Hans de Goede and committed by
Greg Kroah-Hartman
c4dab082 49988a79

+16 -10
+16 -10
drivers/misc/mei/vsc-fw-loader.c
··· 317 317 cmd->data.dump_mem.addr = cpu_to_le32(VSC_EFUSE_ADDR); 318 318 cmd->data.dump_mem.len = cpu_to_le16(sizeof(__le32)); 319 319 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, ack, VSC_ROM_PKG_SIZE); 320 - if (ret) 321 - return ret; 322 - if (ack->token == VSC_TOKEN_ERROR) 323 - return -EINVAL; 320 + if (ret || ack->token == VSC_TOKEN_ERROR) { 321 + dev_err(fw_loader->dev, "CMD_DUMP_MEM error %d token %d\n", ret, ack->token); 322 + return ret ?: -EINVAL; 323 + } 324 324 325 325 cmd->magic = cpu_to_le32(VSC_MAGIC_NUM); 326 326 cmd->cmd_id = VSC_CMD_GET_CONT; 327 327 ret = vsc_tp_rom_xfer(fw_loader->tp, cmd, ack, VSC_ROM_PKG_SIZE); 328 - if (ret) 329 - return ret; 330 - if (ack->token != VSC_TOKEN_DUMP_RESP) 331 - return -EINVAL; 328 + if (ret || ack->token != VSC_TOKEN_DUMP_RESP) { 329 + dev_err(fw_loader->dev, "CMD_GETCONT error %d token %d\n", ret, ack->token); 330 + return ret ?: -EINVAL; 331 + } 332 332 333 333 version = FIELD_GET(VSC_MAINSTEPPING_VERSION_MASK, ack->payload[0]); 334 334 sub_version = FIELD_GET(VSC_SUBSTEPPING_VERSION_MASK, ack->payload[0]); 335 335 336 - if (version != VSC_MAINSTEPPING_VERSION_A) 336 + if (version != VSC_MAINSTEPPING_VERSION_A) { 337 + dev_err(fw_loader->dev, "maintstepping mismatch expected %d got %d\n", 338 + VSC_MAINSTEPPING_VERSION_A, version); 337 339 return -EINVAL; 340 + } 338 341 339 342 if (sub_version != VSC_SUBSTEPPING_VERSION_0 && 340 - sub_version != VSC_SUBSTEPPING_VERSION_1) 343 + sub_version != VSC_SUBSTEPPING_VERSION_1) { 344 + dev_err(fw_loader->dev, "substepping %d is out of supported range %d - %d\n", 345 + sub_version, VSC_SUBSTEPPING_VERSION_0, VSC_SUBSTEPPING_VERSION_1); 341 346 return -EINVAL; 347 + } 342 348 343 349 dev_info(fw_loader->dev, "silicon stepping version is %u:%u\n", 344 350 version, sub_version);