Skip to content

Commit 1a72d3a

Browse files
tstrukherbertx
authored andcommitted
crypto: qat - move isr files to qat common so that they can be reused
Move qat_isr.c and qat_isrvf.c files to qat_common dir so that they can be reused by all devices. Remove adf_drv.h files because thay are not longer needed. Move adf_dev_configure() function to qat_common so it can be reused. Also some minor updates to common code for multidevice. Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent b027227 commit 1a72d3a

24 files changed

+213
-422
lines changed

drivers/crypto/qat/qat_common/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ clean-files += qat_rsaprivkey-asn1.c qat_rsaprivkey-asn1.h
88

99
obj-$(CONFIG_CRYPTO_DEV_QAT) += intel_qat.o
1010
intel_qat-objs := adf_cfg.o \
11+
adf_isr.o \
12+
adf_vf_isr.o \
1113
adf_ctl_drv.o \
1214
adf_dev_mgr.o \
1315
adf_init.o \

drivers/crypto/qat/qat_common/adf_accel_devices.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
#define ADF_C3XXXIOV_PCI_DEVICE_ID 0x19e3
6868
#define ADF_ERRSOU3 (0x3A000 + 0x0C)
6969
#define ADF_ERRSOU5 (0x3A000 + 0xD8)
70+
#define ADF_DEVICE_FUSECTL_OFFSET 0x40
71+
#define ADF_DEVICE_LEGFUSE_OFFSET 0x4C
7072
#define ADF_PCI_MAX_BARS 3
7173
#define ADF_DEVICE_NAME_LENGTH 32
7274
#define ADF_ETR_MAX_RINGS_PER_BANK 16
@@ -178,11 +180,11 @@ struct adf_hw_device_data {
178180
const char *fw_mmp_name;
179181
uint32_t fuses;
180182
uint32_t accel_capabilities_mask;
183+
uint32_t instance_id;
181184
uint16_t accel_mask;
182185
uint16_t ae_mask;
183186
uint16_t tx_rings_mask;
184187
uint8_t tx_rx_gap;
185-
uint8_t instance_id;
186188
uint8_t num_banks;
187189
uint8_t num_accel;
188190
uint8_t num_logical_accel;

drivers/crypto/qat/qat_common/adf_admin.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
#include <linux/pci.h>
5252
#include <linux/dma-mapping.h>
5353
#include "adf_accel_devices.h"
54+
#include "adf_common_drv.h"
5455
#include "icp_qat_fw_init_admin.h"
5556

5657
/* Admin Messages Registers */
@@ -234,7 +235,8 @@ int adf_init_admin_comms(struct adf_accel_dev *accel_dev)
234235
struct adf_bar *pmisc =
235236
&GET_BARS(accel_dev)[hw_data->get_misc_bar_id(hw_data)];
236237
void __iomem *csr = pmisc->virt_addr;
237-
void __iomem *mailbox = csr + ADF_DH895XCC_MAILBOX_BASE_OFFSET;
238+
void __iomem *mailbox = (void __iomem *)((uintptr_t)csr +
239+
ADF_DH895XCC_MAILBOX_BASE_OFFSET);
238240
u64 reg_val;
239241

240242
admin = kzalloc_node(sizeof(*accel_dev->admin), GFP_KERNEL,

drivers/crypto/qat/qat_common/adf_aer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ struct adf_reset_dev_data {
8282
struct work_struct reset_work;
8383
};
8484

85-
static void adf_dev_restore(struct adf_accel_dev *accel_dev)
85+
void adf_dev_restore(struct adf_accel_dev *accel_dev)
8686
{
8787
struct pci_dev *pdev = accel_to_pci_dev(accel_dev);
8888
struct pci_dev *parent = pdev->bus->self;

drivers/crypto/qat/qat_common/adf_common_drv.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
#include "icp_qat_hal.h"
5555

5656
#define ADF_MAJOR_VERSION 0
57-
#define ADF_MINOR_VERSION 2
57+
#define ADF_MINOR_VERSION 6
5858
#define ADF_BUILD_VERSION 0
5959
#define ADF_DRV_VERSION __stringify(ADF_MAJOR_VERSION) "." \
6060
__stringify(ADF_MINOR_VERSION) "." \
@@ -143,6 +143,7 @@ int adf_ae_stop(struct adf_accel_dev *accel_dev);
143143

144144
int adf_enable_aer(struct adf_accel_dev *accel_dev, struct pci_driver *adf);
145145
void adf_disable_aer(struct adf_accel_dev *accel_dev);
146+
void adf_dev_restore(struct adf_accel_dev *accel_dev);
146147
int adf_init_aer(void);
147148
void adf_exit_aer(void);
148149
int adf_init_admin_comms(struct adf_accel_dev *accel_dev);
@@ -159,6 +160,7 @@ int adf_init_etr_data(struct adf_accel_dev *accel_dev);
159160
void adf_cleanup_etr_data(struct adf_accel_dev *accel_dev);
160161
int qat_crypto_register(void);
161162
int qat_crypto_unregister(void);
163+
int qat_crypto_dev_config(struct adf_accel_dev *accel_dev);
162164
struct qat_crypto_instance *qat_crypto_get_instance_node(int node);
163165
void qat_crypto_put_instance(struct qat_crypto_instance *inst);
164166
void qat_alg_callback(void *resp);
@@ -168,6 +170,11 @@ void qat_algs_unregister(void);
168170
int qat_asym_algs_register(void);
169171
void qat_asym_algs_unregister(void);
170172

173+
int adf_isr_resource_alloc(struct adf_accel_dev *accel_dev);
174+
void adf_isr_resource_free(struct adf_accel_dev *accel_dev);
175+
int adf_vf_isr_resource_alloc(struct adf_accel_dev *accel_dev);
176+
void adf_vf_isr_resource_free(struct adf_accel_dev *accel_dev);
177+
171178
int qat_hal_init(struct adf_accel_dev *accel_dev);
172179
void qat_hal_deinit(struct icp_qat_fw_loader_handle *handle);
173180
void qat_hal_start(struct icp_qat_fw_loader_handle *handle, unsigned char ae,

drivers/crypto/qat/qat_common/adf_ctl_drv.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ static int adf_copy_key_value_data(struct adf_accel_dev *accel_dev,
198198
goto out_err;
199199
}
200200

201-
params_head = section_head->params;
201+
params_head = section.params;
202202

203203
while (params_head) {
204204
if (copy_from_user(&key_val, (void __user *)params_head,
@@ -342,12 +342,10 @@ static int adf_ctl_ioctl_dev_start(struct file *fp, unsigned int cmd,
342342
if (ret)
343343
return ret;
344344

345+
ret = -ENODEV;
345346
accel_dev = adf_devmgr_get_dev_by_id(ctl_data->device_id);
346-
if (!accel_dev) {
347-
pr_err("QAT: Device %d not found\n", ctl_data->device_id);
348-
ret = -ENODEV;
347+
if (!accel_dev)
349348
goto out;
350-
}
351349

352350
if (!adf_dev_started(accel_dev)) {
353351
dev_info(&GET_DEV(accel_dev),

drivers/crypto/qat/qat_common/adf_hw_arbiter.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4646
*/
4747
#include "adf_accel_devices.h"
48+
#include "adf_common_drv.h"
4849
#include "adf_transport_internal.h"
4950

5051
#define ADF_ARB_NUM 4
@@ -124,19 +125,12 @@ int adf_init_arb(struct adf_accel_dev *accel_dev)
124125
}
125126
EXPORT_SYMBOL_GPL(adf_init_arb);
126127

127-
/**
128-
* adf_update_ring_arb() - update ring arbitration rgister
129-
* @accel_dev: Pointer to ring data.
130-
*
131-
* Function enables or disables rings for/from arbitration.
132-
*/
133128
void adf_update_ring_arb(struct adf_etr_ring_data *ring)
134129
{
135130
WRITE_CSR_ARB_RINGSRVARBEN(ring->bank->csr_addr,
136131
ring->bank->bank_number,
137132
ring->bank->ring_mask & 0xFF);
138133
}
139-
EXPORT_SYMBOL_GPL(adf_update_ring_arb);
140134

141135
void adf_exit_arb(struct adf_accel_dev *accel_dev)
142136
{

drivers/crypto/qat/qat_common/adf_init.c

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,23 +62,13 @@ static void adf_service_add(struct service_hndl *service)
6262
mutex_unlock(&service_lock);
6363
}
6464

65-
/**
66-
* adf_service_register() - Register acceleration service in the accel framework
67-
* @service: Pointer to the service
68-
*
69-
* Function adds the acceleration service to the acceleration framework.
70-
* To be used by QAT device specific drivers.
71-
*
72-
* Return: 0 on success, error code otherwise.
73-
*/
7465
int adf_service_register(struct service_hndl *service)
7566
{
7667
service->init_status = 0;
7768
service->start_status = 0;
7869
adf_service_add(service);
7970
return 0;
8071
}
81-
EXPORT_SYMBOL_GPL(adf_service_register);
8272

8373
static void adf_service_remove(struct service_hndl *service)
8474
{
@@ -87,15 +77,6 @@ static void adf_service_remove(struct service_hndl *service)
8777
mutex_unlock(&service_lock);
8878
}
8979

90-
/**
91-
* adf_service_unregister() - Unregister acceleration service from the framework
92-
* @service: Pointer to the service
93-
*
94-
* Function remove the acceleration service from the acceleration framework.
95-
* To be used by QAT device specific drivers.
96-
*
97-
* Return: 0 on success, error code otherwise.
98-
*/
9980
int adf_service_unregister(struct service_hndl *service)
10081
{
10182
if (service->init_status || service->start_status) {
@@ -105,7 +86,6 @@ int adf_service_unregister(struct service_hndl *service)
10586
adf_service_remove(service);
10687
return 0;
10788
}
108-
EXPORT_SYMBOL_GPL(adf_service_unregister);
10989

11090
/**
11191
* adf_dev_init() - Init data structures and services for the given accel device
@@ -366,6 +346,7 @@ void adf_dev_shutdown(struct adf_accel_dev *accel_dev)
366346

367347
hw_data->disable_iov(accel_dev);
368348
adf_cleanup_etr_data(accel_dev);
349+
adf_dev_restore(accel_dev);
369350
}
370351
EXPORT_SYMBOL_GPL(adf_dev_shutdown);
371352

drivers/crypto/qat/qat_dh895xcc/adf_isr.c renamed to drivers/crypto/qat/qat_common/adf_isr.c

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,13 @@
5151
#include <linux/slab.h>
5252
#include <linux/errno.h>
5353
#include <linux/interrupt.h>
54-
#include <adf_accel_devices.h>
55-
#include <adf_common_drv.h>
56-
#include <adf_cfg.h>
57-
#include <adf_cfg_strings.h>
58-
#include <adf_cfg_common.h>
59-
#include <adf_transport_access_macros.h>
60-
#include <adf_transport_internal.h>
61-
#include "adf_drv.h"
62-
#include "adf_dh895xcc_hw_data.h"
54+
#include "adf_accel_devices.h"
55+
#include "adf_common_drv.h"
56+
#include "adf_cfg.h"
57+
#include "adf_cfg_strings.h"
58+
#include "adf_cfg_common.h"
59+
#include "adf_transport_access_macros.h"
60+
#include "adf_transport_internal.h"
6361

6462
static int adf_enable_msix(struct adf_accel_dev *accel_dev)
6563
{
@@ -109,14 +107,16 @@ static irqreturn_t adf_msix_isr_ae(int irq, void *dev_ptr)
109107
#ifdef CONFIG_PCI_IOV
110108
/* If SR-IOV is enabled (vf_info is non-NULL), check for VF->PF ints */
111109
if (accel_dev->pf.vf_info) {
112-
void __iomem *pmisc_bar_addr =
113-
(&GET_BARS(accel_dev)[ADF_DH895XCC_PMISC_BAR])->virt_addr;
110+
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
111+
struct adf_bar *pmisc =
112+
&GET_BARS(accel_dev)[hw_data->get_misc_bar_id(hw_data)];
113+
void __iomem *pmisc_bar_addr = pmisc->virt_addr;
114114
u32 vf_mask;
115115

116116
/* Get the interrupt sources triggered by VFs */
117-
vf_mask = ((ADF_CSR_RD(pmisc_bar_addr, ADF_DH895XCC_ERRSOU5) &
117+
vf_mask = ((ADF_CSR_RD(pmisc_bar_addr, ADF_ERRSOU5) &
118118
0x0000FFFF) << 16) |
119-
((ADF_CSR_RD(pmisc_bar_addr, ADF_DH895XCC_ERRSOU3) &
119+
((ADF_CSR_RD(pmisc_bar_addr, ADF_ERRSOU3) &
120120
0x01FFFE00) >> 9);
121121

122122
if (vf_mask) {
@@ -301,14 +301,29 @@ static void adf_cleanup_bh(struct adf_accel_dev *accel_dev)
301301
}
302302
}
303303

304+
/**
305+
* adf_vf_isr_resource_free() - Free IRQ for acceleration device
306+
* @accel_dev: Pointer to acceleration device.
307+
*
308+
* Function frees interrupts for acceleration device.
309+
*/
304310
void adf_isr_resource_free(struct adf_accel_dev *accel_dev)
305311
{
306312
adf_free_irqs(accel_dev);
307313
adf_cleanup_bh(accel_dev);
308314
adf_disable_msix(&accel_dev->accel_pci_dev);
309315
adf_isr_free_msix_entry_table(accel_dev);
310316
}
311-
317+
EXPORT_SYMBOL_GPL(adf_isr_resource_free);
318+
319+
/**
320+
* adf_vf_isr_resource_alloc() - Allocate IRQ for acceleration device
321+
* @accel_dev: Pointer to acceleration device.
322+
*
323+
* Function allocates interrupts for acceleration device.
324+
*
325+
* Return: 0 on success, error code otherwise.
326+
*/
312327
int adf_isr_resource_alloc(struct adf_accel_dev *accel_dev)
313328
{
314329
int ret;
@@ -330,3 +345,4 @@ int adf_isr_resource_alloc(struct adf_accel_dev *accel_dev)
330345
adf_isr_resource_free(accel_dev);
331346
return -EFAULT;
332347
}
348+
EXPORT_SYMBOL_GPL(adf_isr_resource_alloc);

drivers/crypto/qat/qat_common/adf_pf2vf_msg.c

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@
4545
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4646
*/
4747

48-
#include <linux/pci.h>
49-
#include <linux/mutex.h>
5048
#include <linux/delay.h>
5149
#include "adf_accel_devices.h"
5250
#include "adf_common_drv.h"
@@ -58,12 +56,6 @@
5856
#define ADF_DH895XCC_ERRMSK5 (ADF_DH895XCC_EP_OFFSET + 0xDC)
5957
#define ADF_DH895XCC_ERRMSK5_VF2PF_U_MASK(vf_mask) (vf_mask >> 16)
6058

61-
/**
62-
* adf_enable_pf2vf_interrupts() - Enable PF to VF interrupts
63-
* @accel_dev: Pointer to acceleration device.
64-
*
65-
* Function enables PF to VF interrupts
66-
*/
6759
void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev)
6860
{
6961
struct adf_accel_pci *pci_info = &accel_dev->accel_pci_dev;
@@ -73,14 +65,7 @@ void adf_enable_pf2vf_interrupts(struct adf_accel_dev *accel_dev)
7365

7466
ADF_CSR_WR(pmisc_bar_addr, hw_data->get_vintmsk_offset(0), 0x0);
7567
}
76-
EXPORT_SYMBOL_GPL(adf_enable_pf2vf_interrupts);
7768

78-
/**
79-
* adf_disable_pf2vf_interrupts() - Disable PF to VF interrupts
80-
* @accel_dev: Pointer to acceleration device.
81-
*
82-
* Function disables PF to VF interrupts
83-
*/
8469
void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev)
8570
{
8671
struct adf_accel_pci *pci_info = &accel_dev->accel_pci_dev;
@@ -90,7 +75,6 @@ void adf_disable_pf2vf_interrupts(struct adf_accel_dev *accel_dev)
9075

9176
ADF_CSR_WR(pmisc_bar_addr, hw_data->get_vintmsk_offset(0), 0x2);
9277
}
93-
EXPORT_SYMBOL_GPL(adf_disable_pf2vf_interrupts);
9478

9579
void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,
9680
u32 vf_mask)
@@ -116,12 +100,6 @@ void adf_enable_vf2pf_interrupts(struct adf_accel_dev *accel_dev,
116100
}
117101
}
118102

119-
/**
120-
* adf_disable_pf2vf_interrupts() - Disable VF to PF interrupts
121-
* @accel_dev: Pointer to acceleration device.
122-
*
123-
* Function disables VF to PF interrupts
124-
*/
125103
void adf_disable_vf2pf_interrupts(struct adf_accel_dev *accel_dev, u32 vf_mask)
126104
{
127105
struct adf_hw_device_data *hw_data = accel_dev->hw_device;
@@ -144,7 +122,6 @@ void adf_disable_vf2pf_interrupts(struct adf_accel_dev *accel_dev, u32 vf_mask)
144122
ADF_CSR_WR(pmisc_addr, ADF_DH895XCC_ERRMSK5, reg);
145123
}
146124
}
147-
EXPORT_SYMBOL_GPL(adf_disable_vf2pf_interrupts);
148125

149126
static int __adf_iov_putmsg(struct adf_accel_dev *accel_dev, u32 msg, u8 vf_nr)
150127
{

0 commit comments

Comments
 (0)