cnss2: Fix DEV SOL interrupt issue

Fix misfiring of DEV SOL interrupt during enable_irq().
Ignore DEV SOL interrupt in case of device power off
as it is expected as part of off sequence.
In case of HOST triggered recovery, CNSS driver
tries to put device to RDDM first using MHI_SYS_ERR
and HOST_RESET_REQUEST if MHI_SYS_ERR fails. With
SOL enable, replace HOST_RESET_REQUEST with HOST_SOL.

Change-Id: I90c1a2dbd68c4c9c2e56d87dd1304a6ab0db53eb
CRs-Fixed: 3590408
This commit is contained in:
Naman Padhiar
2023-08-11 19:25:27 +05:30
committed by Ravindra Konda
parent 02e22639bc
commit f140232c39
8 changed files with 88 additions and 20 deletions

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */
/* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. */
/* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved. */
#include <linux/err.h>
@@ -174,6 +174,9 @@ static int cnss_stats_show_state(struct seq_file *s,
case CNSS_DRIVER_REGISTERED:
seq_puts(s, "DRIVER REGISTERED");
continue;
case CNSS_POWER_OFF:
seq_puts(s, "POWER OFF");
continue;
}
seq_printf(s, "UNKNOWN-%d", i);
@@ -262,6 +265,8 @@ static ssize_t cnss_dev_boot_debug_write(struct file *fp,
0, NULL);
clear_bit(CNSS_DRIVER_DEBUG, &plat_priv->driver_state);
} else if (sysfs_streq(cmd, "assert_host_sol")) {
pci_priv = plat_priv->bus_priv;
cnss_auto_resume(&pci_priv->pci_dev->dev);
ret = cnss_set_host_sol_value(plat_priv, 1);
} else if (sysfs_streq(cmd, "deassert_host_sol")) {
ret = cnss_set_host_sol_value(plat_priv, 0);