Commit 93ba73fe authored by Maksim Lukoshkov's avatar Maksim Lukoshkov Committed by Herbert Xu

crypto: qat - fix constants table DMA

Copy const_tab array into DMA-able memory (accesible by qat hw).
Signed-off-by: default avatarMaksim Lukoshkov <maksim.lukoshkov@intel.com>
Signed-off-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 98a3c465
...@@ -146,6 +146,7 @@ struct adf_admin_comms { ...@@ -146,6 +146,7 @@ struct adf_admin_comms {
dma_addr_t phy_addr; dma_addr_t phy_addr;
dma_addr_t const_tbl_addr; dma_addr_t const_tbl_addr;
void *virt_addr; void *virt_addr;
void *virt_tbl_addr;
void __iomem *mailbox_addr; void __iomem *mailbox_addr;
struct mutex lock; /* protects adf_admin_comms struct */ struct mutex lock; /* protects adf_admin_comms struct */
}; };
...@@ -251,17 +252,19 @@ int adf_init_admin_comms(struct adf_accel_dev *accel_dev) ...@@ -251,17 +252,19 @@ int adf_init_admin_comms(struct adf_accel_dev *accel_dev)
return -ENOMEM; return -ENOMEM;
} }
admin->const_tbl_addr = dma_map_single(&GET_DEV(accel_dev), admin->virt_tbl_addr = dma_zalloc_coherent(&GET_DEV(accel_dev),
(void *) const_tab, 1024, PAGE_SIZE,
DMA_TO_DEVICE); &admin->const_tbl_addr,
GFP_KERNEL);
if (unlikely(dma_mapping_error(&GET_DEV(accel_dev), if (!admin->virt_tbl_addr) {
admin->const_tbl_addr))) { dev_err(&GET_DEV(accel_dev), "Failed to allocate const_tbl\n");
dma_free_coherent(&GET_DEV(accel_dev), PAGE_SIZE, dma_free_coherent(&GET_DEV(accel_dev), PAGE_SIZE,
admin->virt_addr, admin->phy_addr); admin->virt_addr, admin->phy_addr);
kfree(admin); kfree(admin);
return -ENOMEM; return -ENOMEM;
} }
memcpy(admin->virt_tbl_addr, const_tab, sizeof(const_tab));
reg_val = (u64)admin->phy_addr; reg_val = (u64)admin->phy_addr;
ADF_CSR_WR(csr, ADF_DH895XCC_ADMINMSGUR_OFFSET, reg_val >> 32); ADF_CSR_WR(csr, ADF_DH895XCC_ADMINMSGUR_OFFSET, reg_val >> 32);
ADF_CSR_WR(csr, ADF_DH895XCC_ADMINMSGLR_OFFSET, reg_val); 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) ...@@ -282,9 +285,10 @@ void adf_exit_admin_comms(struct adf_accel_dev *accel_dev)
if (admin->virt_addr) if (admin->virt_addr)
dma_free_coherent(&GET_DEV(accel_dev), PAGE_SIZE, dma_free_coherent(&GET_DEV(accel_dev), PAGE_SIZE,
admin->virt_addr, admin->phy_addr); 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); mutex_destroy(&admin->lock);
kfree(admin); kfree(admin);
accel_dev->admin = NULL; accel_dev->admin = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment