qcacmn: avoid FSE cache flush messages during runtime suspend

When runtime power management is enabled, until the system is fully
resumed, we do not post any message to CE, instead they will be queued
in HTC. Once the device is fully resumed, all HTT messages in the queues
will be downloaded to CE at once. In some corner cases, it is found that
too many FSE caches flush messages getting queued during the runtime
resume; once the device is fully resumed, all these would be downloaded
to the FW/HW at once causing unintended crashes.

Avoid posting FSE cache flush messages until the device is fully resumed
to fix the issue.

Change-Id: I2be21406e8c7a9dcd86df3e93c2568797defcad0
CRs-Fixed: 2843541
Este commit está contenido en:
Manikanta Pubbisetty
2020-12-22 17:48:58 +05:30
cometido por snandini
padre f3a732ed1c
commit a5c11aabcb
Se han modificado 3 ficheros con 15 adiciones y 3 borrados

Ver fichero

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -2328,12 +2328,20 @@ void dp_rx_dump_fisa_table(struct dp_soc *soc);
*/ */
void dp_rx_fst_update_cmem_params(struct dp_soc *soc, uint16_t num_entries, void dp_rx_fst_update_cmem_params(struct dp_soc *soc, uint16_t num_entries,
uint32_t cmem_ba_lo, uint32_t cmem_ba_hi); uint32_t cmem_ba_lo, uint32_t cmem_ba_hi);
void
dp_rx_fst_update_pm_suspend_status(struct dp_soc *soc, bool suspended);
#else #else
static inline void static inline void
dp_rx_fst_update_cmem_params(struct dp_soc *soc, uint16_t num_entries, dp_rx_fst_update_cmem_params(struct dp_soc *soc, uint16_t num_entries,
uint32_t cmem_ba_lo, uint32_t cmem_ba_hi) uint32_t cmem_ba_lo, uint32_t cmem_ba_hi)
{ {
} }
static inline void
dp_rx_fst_update_pm_suspend_status(struct dp_soc *soc, bool suspended)
{
}
#endif /* WLAN_SUPPORT_RX_FISA */ #endif /* WLAN_SUPPORT_RX_FISA */
#ifdef MAX_ALLOC_PAGE_SIZE #ifdef MAX_ALLOC_PAGE_SIZE

Ver fichero

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -11365,6 +11365,8 @@ static QDF_STATUS dp_runtime_suspend(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
if (soc->intr_mode == DP_INTR_POLL) if (soc->intr_mode == DP_INTR_POLL)
qdf_timer_stop(&soc->int_timer); qdf_timer_stop(&soc->int_timer);
dp_rx_fst_update_pm_suspend_status(soc, true);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -11412,6 +11414,7 @@ static QDF_STATUS dp_runtime_resume(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
} }
dp_flush_ring_hptp(soc, soc->reo_cmd_ring.hal_srng); dp_flush_ring_hptp(soc, soc->reo_cmd_ring.hal_srng);
dp_rx_fst_update_pm_suspend_status(soc, false);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }

Ver fichero

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
* *
* Permission to use, copy, modify, and/or distribute this software for * Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the * any purpose with or without fee is hereby granted, provided that the
@@ -3006,6 +3006,7 @@ struct dp_rx_fst {
qdf_event_t cmem_resp_event; qdf_event_t cmem_resp_event;
bool flow_deletion_supported; bool flow_deletion_supported;
bool fst_in_cmem; bool fst_in_cmem;
bool pm_suspended;
}; };
#endif /* WLAN_SUPPORT_RX_FISA */ #endif /* WLAN_SUPPORT_RX_FISA */