From: Shahar S Matityahu <[email protected]>

Prior to gen2 we allocate the paging memory via alloc_pages
which requires passing ownership on the memory between the
cpu and the device using dma_sync_single_for_cpu and
dma_sync_single_for_device.

Add missing dma_sync_single_for_device in iwl_dump_paging
after copying the memory.

since gen2, we allocate the paging memory using dma_alloc_coherent
which does not need passing ownership between the cpu and device.

Remove unneeded call to dma_sync_single_for_cpu in
iwl_trans_pcie_dump_data prior to copying the memory.

Signed-off-by: Shahar S Matityahu <[email protected]>
Fixes: 5538409ba393 ("iwlwifi: pcie: support page dumping in wrt in gen2")
Signed-off-by: Luca Coelho <[email protected]>
---
 drivers/net/wireless/intel/iwlwifi/fw/dbg.c     | 3 +++
 drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 4 ----
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c 
b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
index 35c2b1a23d10..d16a8a4f0c3f 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
+++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
@@ -815,6 +815,9 @@ static void iwl_dump_paging(struct iwl_fw_runtime *fwrt,
                                        DMA_BIDIRECTIONAL);
                memcpy(paging->data, page_address(pages),
                       PAGING_BLOCK_SIZE);
+               dma_sync_single_for_device(fwrt->trans->dev, addr,
+                                          PAGING_BLOCK_SIZE,
+                                          DMA_BIDIRECTIONAL);
                (*data) = iwl_fw_error_next_data(*data);
        }
 }
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c 
b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index f74281508197..f26664b0f0f8 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -3277,16 +3277,12 @@ static struct iwl_trans_dump_data
        if (trans->cfg->gen2 && dump_mask & BIT(IWL_FW_ERROR_DUMP_PAGING)) {
                for (i = 0; i < trans_pcie->init_dram.paging_cnt; i++) {
                        struct iwl_fw_error_dump_paging *paging;
-                       dma_addr_t addr =
-                               trans_pcie->init_dram.paging[i].physical;
                        u32 page_len = trans_pcie->init_dram.paging[i].size;
 
                        data->type = cpu_to_le32(IWL_FW_ERROR_DUMP_PAGING);
                        data->len = cpu_to_le32(sizeof(*paging) + page_len);
                        paging = (void *)data->data;
                        paging->index = cpu_to_le32(i);
-                       dma_sync_single_for_cpu(trans->dev, addr, page_len,
-                                               DMA_BIDIRECTIONAL);
                        memcpy(paging->data,
                               trans_pcie->init_dram.paging[i].block, page_len);
                        data = iwl_fw_error_next_data(data);
-- 
2.20.1

Reply via email to