Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+12 −8
Original line number Original line Diff line number Diff line
@@ -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)
		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)
	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;