From: Maksim Lukoshkov <maksim.lukosh...@intel.com>

Copy const_tab array into DMA-able memory (accesible by qat hw).

Signed-off-by: Maksim Lukoshkov <maksim.lukosh...@intel.com>
Signed-off-by: Giovanni Cabiddu <giovanni.cabi...@intel.com>
---
 drivers/crypto/qat/qat_common/adf_admin.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/crypto/qat/qat_common/adf_admin.c 
b/drivers/crypto/qat/qat_common/adf_admin.c
index ce7c462..3744b22 100644
--- a/drivers/crypto/qat/qat_common/adf_admin.c
+++ b/drivers/crypto/qat/qat_common/adf_admin.c
@@ -146,6 +146,7 @@ struct adf_admin_comms {
        dma_addr_t phy_addr;
        dma_addr_t const_tbl_addr;
        void *virt_addr;
+       void *virt_tbl_addr;
        void __iomem *mailbox_addr;
        struct mutex lock;      /* protects adf_admin_comms struct */
 };
@@ -251,17 +252,19 @@ int adf_init_admin_comms(struct adf_accel_dev *accel_dev)
                return -ENOMEM;
        }
 
-       admin->const_tbl_addr = dma_map_single(&GET_DEV(accel_dev),
-                                              (void *) const_tab, 1024,
-                                              DMA_TO_DEVICE);
-
-       if (unlikely(dma_mapping_error(&GET_DEV(accel_dev),
-                                      admin->const_tbl_addr))) {
+       admin->virt_tbl_addr = dma_zalloc_coherent(&GET_DEV(accel_dev),
+                                                  PAGE_SIZE,
+                                                  &admin->const_tbl_addr,
+                                                  GFP_KERNEL);
+       if (!admin->virt_tbl_addr) {
+               dev_err(&GET_DEV(accel_dev), "Failed to allocate const_tbl\n");
                dma_free_coherent(&GET_DEV(accel_dev), PAGE_SIZE,
                                  admin->virt_addr, admin->phy_addr);
                kfree(admin);
                return -ENOMEM;
        }
+
+       memcpy(admin->virt_tbl_addr, const_tab, sizeof(const_tab));
        reg_val = (u64)admin->phy_addr;
        ADF_CSR_WR(csr, ADF_DH895XCC_ADMINMSGUR_OFFSET, reg_val >> 32);
        ADF_CSR_WR(csr, ADF_DH895XCC_ADMINMSGLR_OFFSET, reg_val);
@@ -282,9 +285,10 @@ void adf_exit_admin_comms(struct adf_accel_dev *accel_dev)
        if (admin->virt_addr)
                dma_free_coherent(&GET_DEV(accel_dev), PAGE_SIZE,
                                  admin->virt_addr, admin->phy_addr);
+       if (admin->virt_tbl_addr)
+               dma_free_coherent(&GET_DEV(accel_dev), PAGE_SIZE,
+                                 admin->virt_tbl_addr, admin->const_tbl_addr);
 
-       dma_unmap_single(&GET_DEV(accel_dev), admin->const_tbl_addr, 1024,
-                        DMA_TO_DEVICE);
        mutex_destroy(&admin->lock);
        kfree(admin);
        accel_dev->admin = NULL;
-- 
1.7.4.1

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to