qcacmn: Add INI to disable wake IRQ

Some platform would like to disable wake IRQ, so add INI to disable
wake IRQ.

Wake IRQ can't share the same IRQ with the copy engines. In one MSI
mode, we don't know whether wake IRQ is triggered or not in wake IRQ
handler. known issue CR 2055359.

Disable wake IRQ for one MSI mode. If you want to support wake IRQ.
Please allocate at least 2 MSI vector. The first is for wake IRQ while
the others share the second vector.

Change-Id: Id9e54e287f146ff64d94669bbc44dc0a724d9480
CRs-Fixed: 3290867
This commit is contained in:
Bing Sun
2022-09-14 14:58:34 +08:00
committed by Madan Koyyalamudi
parent 186e8421e0
commit 4fb2121bbe
5 changed files with 82 additions and 19 deletions

View File

@@ -54,9 +54,7 @@
#endif
#include <linux/cpumask.h>
#if defined(HIF_IPCI) && defined(FEATURE_HAL_DELAYED_REG_WRITE)
#include <pld_common.h>
#endif
void hif_dump(struct hif_opaque_softc *hif_ctx, uint8_t cmd_id, bool start)
{
@@ -543,15 +541,15 @@ void hif_rtpm_lock_deinit(struct hif_softc *scn)
#ifdef WLAN_CE_INTERRUPT_THRESHOLD_CONFIG
/**
* hif_get_cfg_from_psoc() - Retrieve ini cfg from psoc
* hif_get_interrupt_threshold_cfg_from_psoc() - Retrieve ini cfg from psoc
* @scn: hif context
* @psoc: psoc objmgr handle
*
* Return: None
*/
static inline
void hif_get_cfg_from_psoc(struct hif_softc *scn,
struct wlan_objmgr_psoc *psoc)
void hif_get_interrupt_threshold_cfg_from_psoc(struct hif_softc *scn,
struct wlan_objmgr_psoc *psoc)
{
if (psoc) {
scn->ini_cfg.ce_status_ring_timer_threshold =
@@ -564,12 +562,42 @@ void hif_get_cfg_from_psoc(struct hif_softc *scn,
}
#else
static inline
void hif_get_cfg_from_psoc(struct hif_softc *scn,
struct wlan_objmgr_psoc *psoc)
void hif_get_interrupt_threshold_cfg_from_psoc(struct hif_softc *scn,
struct wlan_objmgr_psoc *psoc)
{
}
#endif /* WLAN_CE_INTERRUPT_THRESHOLD_CONFIG */
/**
* hif_get_cfg_from_psoc() - Retrieve ini cfg from psoc
* @scn: hif context
* @psoc: psoc objmgr handle
*
* Return: None
*/
static inline
void hif_get_cfg_from_psoc(struct hif_softc *scn,
struct wlan_objmgr_psoc *psoc)
{
if (psoc) {
scn->ini_cfg.disable_wake_irq =
cfg_get(psoc, CFG_DISABLE_WAKE_IRQ);
/**
* Wake IRQ can't share the same IRQ with the copy engines
* In one MSI mode, we don't know whether wake IRQ is triggered
* or not in wake IRQ handler. known issue CR 2055359
* If you want to support Wake IRQ. Please allocate at least
* 2 MSI vector. The first is for wake IRQ while the others
* share the second vector
*/
if (pld_is_one_msi(scn->qdf_dev->dev)) {
hif_debug("Disable wake IRQ once it is one MSI mode");
scn->ini_cfg.disable_wake_irq = true;
}
hif_get_interrupt_threshold_cfg_from_psoc(scn, psoc);
}
}
#if defined(HIF_CE_LOG_INFO) || defined(HIF_BUS_LOG_INFO)
/**
* hif_recovery_notifier_cb - Recovery notifier callback to log