mirror of https://github.com/torvalds/linux.git
mei: gsc: demote unexpected reset print
Discrete graphic card can go to D3cold. On the exit from D3cold the link reset is performed. Driver did not expect such link reset and print warning. Print debug message for unexpected reset in discrete graphic case and remove infrastructure to print warning is some cases. Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://lore.kernel.org/r/20250918130435.3327400-6-alexander.usyskin@intel.com
This commit is contained in:
parent
ecdddd20b0
commit
f9deb462d5
|
|
@ -493,43 +493,6 @@ static int mei_me_hw_ready_wait(struct mei_device *dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* mei_me_check_fw_reset - check for the firmware reset error and exception conditions
|
|
||||||
*
|
|
||||||
* @dev: mei device
|
|
||||||
*/
|
|
||||||
static void mei_me_check_fw_reset(struct mei_device *dev)
|
|
||||||
{
|
|
||||||
struct mei_fw_status fw_status;
|
|
||||||
char fw_sts_str[MEI_FW_STATUS_STR_SZ] = {0};
|
|
||||||
int ret;
|
|
||||||
u32 fw_pm_event = 0;
|
|
||||||
|
|
||||||
if (!dev->saved_fw_status_flag)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
if (dev->gsc_reset_to_pxp == MEI_DEV_RESET_TO_PXP_PERFORMED) {
|
|
||||||
ret = mei_fw_status(dev, &fw_status);
|
|
||||||
if (!ret) {
|
|
||||||
fw_pm_event = fw_status.status[1] & PCI_CFG_HFS_2_PM_EVENT_MASK;
|
|
||||||
if (fw_pm_event != PCI_CFG_HFS_2_PM_CMOFF_TO_CMX_ERROR &&
|
|
||||||
fw_pm_event != PCI_CFG_HFS_2_PM_CM_RESET_ERROR)
|
|
||||||
goto end;
|
|
||||||
} else {
|
|
||||||
dev_err(&dev->dev, "failed to read firmware status: %d\n", ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mei_fw_status2str(&dev->saved_fw_status, fw_sts_str, sizeof(fw_sts_str));
|
|
||||||
dev_warn(&dev->dev, "unexpected reset: fw_pm_event = 0x%x, dev_state = %u fw status = %s\n",
|
|
||||||
fw_pm_event, dev->saved_dev_state, fw_sts_str);
|
|
||||||
|
|
||||||
end:
|
|
||||||
if (dev->gsc_reset_to_pxp == MEI_DEV_RESET_TO_PXP_PERFORMED)
|
|
||||||
dev->gsc_reset_to_pxp = MEI_DEV_RESET_TO_PXP_DONE;
|
|
||||||
dev->saved_fw_status_flag = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mei_me_hw_start - hw start routine
|
* mei_me_hw_start - hw start routine
|
||||||
*
|
*
|
||||||
|
|
@ -540,8 +503,9 @@ static int mei_me_hw_start(struct mei_device *dev)
|
||||||
{
|
{
|
||||||
int ret = mei_me_hw_ready_wait(dev);
|
int ret = mei_me_hw_ready_wait(dev);
|
||||||
|
|
||||||
if (kind_is_gsc(dev) || kind_is_gscfi(dev))
|
if ((kind_is_gsc(dev) || kind_is_gscfi(dev)) &&
|
||||||
mei_me_check_fw_reset(dev);
|
dev->gsc_reset_to_pxp == MEI_DEV_RESET_TO_PXP_PERFORMED)
|
||||||
|
dev->gsc_reset_to_pxp = MEI_DEV_RESET_TO_PXP_DONE;
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
dev_dbg(&dev->dev, "hw is ready\n");
|
dev_dbg(&dev->dev, "hw is ready\n");
|
||||||
|
|
|
||||||
|
|
@ -89,22 +89,6 @@ void mei_cancel_work(struct mei_device *dev)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mei_cancel_work);
|
EXPORT_SYMBOL_GPL(mei_cancel_work);
|
||||||
|
|
||||||
static void mei_save_fw_status(struct mei_device *dev)
|
|
||||||
{
|
|
||||||
struct mei_fw_status fw_status;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = mei_fw_status(dev, &fw_status);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(&dev->dev, "failed to read firmware status: %d\n", ret);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
dev->saved_dev_state = dev->dev_state;
|
|
||||||
dev->saved_fw_status_flag = true;
|
|
||||||
memcpy(&dev->saved_fw_status, &fw_status, sizeof(fw_status));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mei_reset - resets host and fw.
|
* mei_reset - resets host and fw.
|
||||||
*
|
*
|
||||||
|
|
@ -128,7 +112,6 @@ int mei_reset(struct mei_device *dev)
|
||||||
if (kind_is_gsc(dev) || kind_is_gscfi(dev)) {
|
if (kind_is_gsc(dev) || kind_is_gscfi(dev)) {
|
||||||
dev_dbg(&dev->dev, "unexpected reset: dev_state = %s fw status = %s\n",
|
dev_dbg(&dev->dev, "unexpected reset: dev_state = %s fw status = %s\n",
|
||||||
mei_dev_state_str(state), fw_sts_str);
|
mei_dev_state_str(state), fw_sts_str);
|
||||||
mei_save_fw_status(dev);
|
|
||||||
} else {
|
} else {
|
||||||
dev_warn(&dev->dev, "unexpected reset: dev_state = %s fw status = %s\n",
|
dev_warn(&dev->dev, "unexpected reset: dev_state = %s fw status = %s\n",
|
||||||
mei_dev_state_str(state), fw_sts_str);
|
mei_dev_state_str(state), fw_sts_str);
|
||||||
|
|
|
||||||
|
|
@ -551,9 +551,6 @@ struct mei_dev_timeouts {
|
||||||
*
|
*
|
||||||
* @dbgfs_dir : debugfs mei root directory
|
* @dbgfs_dir : debugfs mei root directory
|
||||||
*
|
*
|
||||||
* @saved_fw_status : saved firmware status
|
|
||||||
* @saved_dev_state : saved device state
|
|
||||||
* @saved_fw_status_flag : flag indicating that firmware status was saved
|
|
||||||
* @gsc_reset_to_pxp : state of reset to the PXP mode
|
* @gsc_reset_to_pxp : state of reset to the PXP mode
|
||||||
*
|
*
|
||||||
* @ops: : hw specific operations
|
* @ops: : hw specific operations
|
||||||
|
|
@ -654,9 +651,6 @@ struct mei_device {
|
||||||
struct dentry *dbgfs_dir;
|
struct dentry *dbgfs_dir;
|
||||||
#endif /* CONFIG_DEBUG_FS */
|
#endif /* CONFIG_DEBUG_FS */
|
||||||
|
|
||||||
struct mei_fw_status saved_fw_status;
|
|
||||||
enum mei_dev_state saved_dev_state;
|
|
||||||
bool saved_fw_status_flag;
|
|
||||||
enum mei_dev_reset_to_pxp gsc_reset_to_pxp;
|
enum mei_dev_reset_to_pxp gsc_reset_to_pxp;
|
||||||
|
|
||||||
const struct mei_hw_ops *ops;
|
const struct mei_hw_ops *ops;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue