@@ -151,26 +151,14 @@ static void cptlf_set_misc_intrs(struct otx2_cptlfs_info *lfs, u8 enable)
151151 irq_misc .u );
152152}
153153
154- static void cptlf_enable_intrs (struct otx2_cptlfs_info * lfs )
154+ static void cptlf_set_done_intrs (struct otx2_cptlfs_info * lfs , u8 enable )
155155{
156+ u64 reg = enable ? OTX2_CPT_LF_DONE_INT_ENA_W1S :
157+ OTX2_CPT_LF_DONE_INT_ENA_W1C ;
156158 int slot ;
157159
158- /* Enable done interrupts */
159160 for (slot = 0 ; slot < lfs -> lfs_num ; slot ++ )
160- otx2_cpt_write64 (lfs -> reg_base , lfs -> blkaddr , slot ,
161- OTX2_CPT_LF_DONE_INT_ENA_W1S , 0x1 );
162- /* Enable Misc interrupts */
163- cptlf_set_misc_intrs (lfs , true);
164- }
165-
166- static void cptlf_disable_intrs (struct otx2_cptlfs_info * lfs )
167- {
168- int slot ;
169-
170- for (slot = 0 ; slot < lfs -> lfs_num ; slot ++ )
171- otx2_cpt_write64 (lfs -> reg_base , lfs -> blkaddr , slot ,
172- OTX2_CPT_LF_DONE_INT_ENA_W1C , 0x1 );
173- cptlf_set_misc_intrs (lfs , false);
161+ otx2_cpt_write64 (lfs -> reg_base , lfs -> blkaddr , slot , reg , 0x1 );
174162}
175163
176164static inline int cptlf_read_done_cnt (struct otx2_cptlf_info * lf )
@@ -257,24 +245,44 @@ static irqreturn_t cptlf_done_intr_handler(int irq, void *arg)
257245 return IRQ_HANDLED ;
258246}
259247
260- void otx2_cptlf_unregister_interrupts (struct otx2_cptlfs_info * lfs )
248+ void otx2_cptlf_unregister_misc_interrupts (struct otx2_cptlfs_info * lfs )
261249{
262- int i , offs , vector ;
250+ int i , irq_offs , vector ;
263251
252+ irq_offs = OTX2_CPT_LF_INT_VEC_E_MISC ;
264253 for (i = 0 ; i < lfs -> lfs_num ; i ++ ) {
265- for (offs = 0 ; offs < OTX2_CPT_LF_MSIX_VECTORS ; offs ++ ) {
266- if (!lfs -> lf [i ].is_irq_reg [offs ])
267- continue ;
254+ if (!lfs -> lf [i ].is_irq_reg [irq_offs ])
255+ continue ;
268256
269- vector = pci_irq_vector (lfs -> pdev ,
270- lfs -> lf [i ].msix_offset + offs );
271- free_irq (vector , & lfs -> lf [i ]);
272- lfs -> lf [i ].is_irq_reg [offs ] = false;
273- }
257+ vector = pci_irq_vector (lfs -> pdev ,
258+ lfs -> lf [i ].msix_offset + irq_offs );
259+ free_irq (vector , & lfs -> lf [i ]);
260+ lfs -> lf [i ].is_irq_reg [irq_offs ] = false;
261+ }
262+
263+ cptlf_set_misc_intrs (lfs , false);
264+ }
265+ EXPORT_SYMBOL_NS_GPL (otx2_cptlf_unregister_misc_interrupts ,
266+ CRYPTO_DEV_OCTEONTX2_CPT );
267+
268+ void otx2_cptlf_unregister_done_interrupts (struct otx2_cptlfs_info * lfs )
269+ {
270+ int i , irq_offs , vector ;
271+
272+ irq_offs = OTX2_CPT_LF_INT_VEC_E_DONE ;
273+ for (i = 0 ; i < lfs -> lfs_num ; i ++ ) {
274+ if (!lfs -> lf [i ].is_irq_reg [irq_offs ])
275+ continue ;
276+
277+ vector = pci_irq_vector (lfs -> pdev ,
278+ lfs -> lf [i ].msix_offset + irq_offs );
279+ free_irq (vector , & lfs -> lf [i ]);
280+ lfs -> lf [i ].is_irq_reg [irq_offs ] = false;
274281 }
275- cptlf_disable_intrs (lfs );
282+
283+ cptlf_set_done_intrs (lfs , false);
276284}
277- EXPORT_SYMBOL_NS_GPL (otx2_cptlf_unregister_interrupts ,
285+ EXPORT_SYMBOL_NS_GPL (otx2_cptlf_unregister_done_interrupts ,
278286 CRYPTO_DEV_OCTEONTX2_CPT );
279287
280288static int cptlf_do_register_interrrupts (struct otx2_cptlfs_info * lfs ,
@@ -296,34 +304,53 @@ static int cptlf_do_register_interrrupts(struct otx2_cptlfs_info *lfs,
296304 return ret ;
297305}
298306
299- int otx2_cptlf_register_interrupts (struct otx2_cptlfs_info * lfs )
307+ int otx2_cptlf_register_misc_interrupts (struct otx2_cptlfs_info * lfs )
300308{
309+ bool is_cpt1 = (lfs -> blkaddr == BLKADDR_CPT1 );
301310 int irq_offs , ret , i ;
302311
312+ irq_offs = OTX2_CPT_LF_INT_VEC_E_MISC ;
303313 for (i = 0 ; i < lfs -> lfs_num ; i ++ ) {
304- irq_offs = OTX2_CPT_LF_INT_VEC_E_MISC ;
305- snprintf ( lfs -> lf [ i ]. irq_name [ irq_offs ], 32 , "CPTLF Misc%d" , i );
314+ snprintf ( lfs -> lf [ i ]. irq_name [ irq_offs ], 32 , "CPT%dLF Misc%d" ,
315+ is_cpt1 , i );
306316 ret = cptlf_do_register_interrrupts (lfs , i , irq_offs ,
307317 cptlf_misc_intr_handler );
308318 if (ret )
309319 goto free_irq ;
320+ }
321+ cptlf_set_misc_intrs (lfs , true);
322+ return 0 ;
310323
311- irq_offs = OTX2_CPT_LF_INT_VEC_E_DONE ;
312- snprintf (lfs -> lf [i ].irq_name [irq_offs ], 32 , "OTX2_CPTLF Done%d" ,
313- i );
324+ free_irq :
325+ otx2_cptlf_unregister_misc_interrupts (lfs );
326+ return ret ;
327+ }
328+ EXPORT_SYMBOL_NS_GPL (otx2_cptlf_register_misc_interrupts ,
329+ CRYPTO_DEV_OCTEONTX2_CPT );
330+
331+ int otx2_cptlf_register_done_interrupts (struct otx2_cptlfs_info * lfs )
332+ {
333+ bool is_cpt1 = (lfs -> blkaddr == BLKADDR_CPT1 );
334+ int irq_offs , ret , i ;
335+
336+ irq_offs = OTX2_CPT_LF_INT_VEC_E_DONE ;
337+ for (i = 0 ; i < lfs -> lfs_num ; i ++ ) {
338+ snprintf (lfs -> lf [i ].irq_name [irq_offs ], 32 ,
339+ "OTX2_CPT%dLF Done%d" , is_cpt1 , i );
314340 ret = cptlf_do_register_interrrupts (lfs , i , irq_offs ,
315341 cptlf_done_intr_handler );
316342 if (ret )
317343 goto free_irq ;
318344 }
319- cptlf_enable_intrs (lfs );
345+ cptlf_set_done_intrs (lfs , true );
320346 return 0 ;
321347
322348free_irq :
323- otx2_cptlf_unregister_interrupts (lfs );
349+ otx2_cptlf_unregister_done_interrupts (lfs );
324350 return ret ;
325351}
326- EXPORT_SYMBOL_NS_GPL (otx2_cptlf_register_interrupts , CRYPTO_DEV_OCTEONTX2_CPT );
352+ EXPORT_SYMBOL_NS_GPL (otx2_cptlf_register_done_interrupts ,
353+ CRYPTO_DEV_OCTEONTX2_CPT );
327354
328355void otx2_cptlf_free_irqs_affinity (struct otx2_cptlfs_info * lfs )
329356{
0 commit comments