Merge "cnss2: Add code to fallback to non-contiguous FW mem allocation" into wlan-platform.lnx.1.0

This commit is contained in:
CNSS_WLAN Service
2022-07-13 20:55:38 -07:00
committed by Gerrit - the friendly Code Review server
2 changed files with 28 additions and 12 deletions

View File

@@ -3934,15 +3934,25 @@ int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv)
for (i = 0; i < plat_priv->fw_mem_seg_len; i++) {
if (!fw_mem[i].va && fw_mem[i].size) {
retry:
fw_mem[i].va =
dma_alloc_attrs(dev, fw_mem[i].size,
&fw_mem[i].pa, GFP_KERNEL,
fw_mem[i].attrs);
if (!fw_mem[i].va) {
if ((fw_mem[i].attrs &
DMA_ATTR_FORCE_CONTIGUOUS)) {
fw_mem[i].attrs &=
~DMA_ATTR_FORCE_CONTIGUOUS;
cnss_pr_dbg("Fallback to non-contiguous memory for FW, Mem type: %u\n",
fw_mem[i].type);
goto retry;
}
cnss_pr_err("Failed to allocate memory for FW, size: 0x%zx, type: %u\n",
fw_mem[i].size, fw_mem[i].type);
CNSS_ASSERT(0);
return -ENOMEM;
}
}
@@ -4982,17 +4992,21 @@ void cnss_pci_collect_dump_info(struct cnss_pci_data *pci_priv, bool in_panic)
dump_data->nentries += rddm_image->entries;
cnss_pr_dbg("Collect remote heap dump segment\n");
for (i = 0, j = 0; i < plat_priv->fw_mem_seg_len; i++) {
if (fw_mem[i].type == CNSS_MEM_TYPE_DDR) {
cnss_pci_add_dump_seg(pci_priv, dump_seg,
CNSS_FW_REMOTE_HEAP, j,
fw_mem[i].va, fw_mem[i].pa,
fw_mem[i].size);
dump_seg++;
dump_data->nentries++;
j++;
if (fw_mem[i].attrs & DMA_ATTR_FORCE_CONTIGUOUS) {
cnss_pr_dbg("Collect remote heap dump segment\n");
cnss_pci_add_dump_seg(pci_priv, dump_seg,
CNSS_FW_REMOTE_HEAP, j,
fw_mem[i].va,
fw_mem[i].pa,
fw_mem[i].size);
dump_seg++;
dump_data->nentries++;
j++;
} else {
cnss_pr_dbg("Skip remote heap dumps as it is non-contiguous\n");
}
}
}
@@ -5037,7 +5051,8 @@ void cnss_pci_clear_dump_info(struct cnss_pci_data *pci_priv)
}
for (i = 0, j = 0; i < plat_priv->fw_mem_seg_len; i++) {
if (fw_mem[i].type == CNSS_MEM_TYPE_DDR) {
if (fw_mem[i].type == CNSS_MEM_TYPE_DDR &&
(fw_mem[i].attrs & DMA_ATTR_FORCE_CONTIGUOUS)) {
cnss_pci_remove_dump_seg(pci_priv, dump_seg,
CNSS_FW_REMOTE_HEAP, j,
fw_mem[i].va, fw_mem[i].pa,

View File

@@ -2409,7 +2409,8 @@ static void cnss_wlfw_request_mem_ind_cb(struct qmi_handle *qmi_wlfw,
ind_msg->mem_seg[i].size, ind_msg->mem_seg[i].type);
plat_priv->fw_mem[i].type = ind_msg->mem_seg[i].type;
plat_priv->fw_mem[i].size = ind_msg->mem_seg[i].size;
if (plat_priv->fw_mem[i].type == CNSS_MEM_TYPE_DDR)
if (!plat_priv->fw_mem[i].va &&
plat_priv->fw_mem[i].type == CNSS_MEM_TYPE_DDR)
plat_priv->fw_mem[i].attrs |=
DMA_ATTR_FORCE_CONTIGUOUS;
if (plat_priv->fw_mem[i].type == CNSS_MEM_CAL_V01)