Re: [PATCH v5] bus: mhi: host: don't free bhie tables during suspend/hibernation

From: Jeff Hugo
Date: Fri May 16 2025 - 11:09:49 EST


On 5/14/2025 2:14 AM, Muhammad Usama Anjum wrote:
Fix dma_direct_alloc() failure at resume time during bhie_table
allocation because of memory pressure. There is a report where at
resume time, the memory from the dma doesn't get allocated and MHI
fails to re-initialize.

To fix it, don't free the memory at power down during suspend /
hibernation. Instead, use the same allocated memory again after every
resume / hibernation. This patch has been tested with resume and
hibernation both.

There are two allocations of bhie; rddm and fbc. Optimize both of those

There are 3, but you touch 2. I just commented on this in v4. Only touching two is fine (the device for the 3rd one doesn't need this), but the documentation must be accurate.

allocations. The rddm is of constant size for a given hardware. While
the fbc_image size depends on the firmware. If the firmware changes,
we'll free and allocate new memory for it. This patch is moticated from

moticated? Motivated maybe?

the ath12k [1] and ath11k [2] patches. They don't free the memory and
reuse the same memory if new size is same. The firmware caching hasn't
been implemented for the drivers other than the nouveau. (The changing
of firmware isn't tested/supported for wireless drivers. But let's
follow the example patches here.)

[1] https://lore.kernel.org/all/20240419034034.2842-1-quic_bqiang@xxxxxxxxxxx/
[2] https://lore.kernel.org/all/20220506141448.10340-1-quic_akolli@xxxxxxxxxxx/

Tested-on: WCN6855 WLAN.HSP.1.1-03926.13-QCAHSPSWPL_V2_SILICONZ_CE-2.52297.6
Tested-on: WCN7850 hw2.0 WLAN.HMT.1.1.c5-00284-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Acked-by: Jeff Johnson <jeff.johnson@xxxxxxxxxxxxxxxx>
Tested-by: Baochen Qiang <quic_bqiang@xxxxxxxxxxx>
Signed-off-by: Muhammad Usama Anjum <usama.anjum@xxxxxxxxxxxxx>
---
Changes since v1:
- Don't free bhie tables during suspend/hibernation only
- Handle fbc_image changed size correctly
- Remove fbc_image getting set to NULL in *free_bhie_table()

Changes since v2:
- Remove the new mhi_partial_unprepare_after_power_down() and instead
update mhi_power_down_keep_dev() to use
mhi_power_down_unprepare_keep_dev() as suggested by Mani
- Update all users of this API such as ath12k (previously only ath11k
was updated)
- Define prev_fw_sz in docs
- Do better alignment of comments

Changes since v3:
- Fix state machine of ath12k by setting ATH12K_MHI_DEINIT with
ATH12K_MHI_POWER_OFF_KEEP_DEV state (Thanks Sebastian for testing and
finding the problem)
- Use static with mhi_power_down_unprepare_keep_dev()
- Remove crash log as it was showing that kworker wasn't able to
allocate memory.

Changes since v4:
- Update desctiption

While I'm commenting on spelling, "description"


Code looks ok to me. I think we just need to hash out some of the documentation and this will be good to go.