linux/drivers/crypto/caam
Horia Geantă 23d422a4f1 crypto: caam/jr - fix shared IRQ line handling
There are cases when the interrupt status register (JRINTR) is non-zero,
even though:
1. An interrupt was generated, but it was masked OR
2. There was no interrupt generated at all
for the corresponding job ring.

1. The case when interrupt is masked (JRCFGR_LS[IMSK]=1b'1)
while other events have happened and are being accounted for, e.g.
-JRINTR[HALT]=2b'10 - input job ring underwent a flush of all on-going
jobs and processing of still-existing jobs (sitting in the ring) has been
halted
-JRINTR[HALT]=2b'01 - input job ring is currently undergoing a flush
-JRINTR[ENTER_FAIL]=1b'1 - SecMon / SNVS transitioned to FAIL MODE
It doesn't matter whether these events would assert the interrupt signal
or not, interrupt is anyhow masked.

2. The case when interrupt is not masked (JRCFGR_LS[IMSK]=1b'0), however
the events accounted for in JRINTR do not generate interrupts, e.g.:
-JRINTR[HALT]=2b'01
-JRINTR[ENTER_FAIL]=1b'1 and JRCFGR_MS[FAIL_MODE]=1b'0

Currently in these cases, when the JR interrupt handler is invoked (as a
consequence of JR sharing the interrupt line with other devices - e.g.
the two JRs on i.MX7ULP) it continues execution instead of returning
IRQ_NONE.
This could lead to situations like interrupt handler clearing JRINTR (and
thus also the JRINTR[HALT] field) while corresponding job ring is
suspended and then that job ring failing on resume path, due to expecting
JRINTR[HALT]=b'10 and reading instead JRINTR[HALT]=b'00.

Fix this by checking status of JRINTR[JRI] in the JR interrupt handler.
If JRINTR[JRI]=1b'0, there was no interrupt generated for this JR and
handler must return IRQ_NONE.

Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
Reviewed-by: Gaurav Jain <gaurav.jain@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2023-08-18 17:01:09 +08:00
..
blob_gen.c crypto: caam - Remove GFP_DMA and add DMA alignment padding 2023-01-06 17:15:47 +08:00
caamalg_desc.c crypto: caam/jr - add support for XTS with 16B IV 2020-10-02 18:02:12 +10:00
caamalg_desc.h crypto: caam - update rfc4106 sh desc to support zero length input 2019-08-09 15:11:48 +10:00
caamalg_qi2.c bus: fsl-mc: Make remove function return void 2023-05-30 18:58:43 -05:00
caamalg_qi2.h crypto: caam - Remove GFP_DMA and add DMA alignment padding 2023-01-06 17:15:47 +08:00
caamalg_qi.c crypto: caam - Fix edesc/iv ordering mixup 2023-02-28 16:30:58 +08:00
caamalg.c crypto: caam - reduce page 0 regs access to minimum 2023-04-14 18:59:34 +08:00
caamhash_desc.c crypto: caam - drop unexpected word 'for' in comments 2022-06-30 15:56:57 +08:00
caamhash_desc.h crypto: caam - keep both virtual and dma key addresses 2019-08-09 15:11:49 +10:00
caamhash.c crypto: caam - Remove messages related to memory allocation failure 2023-07-28 18:20:25 +08:00
caampkc.c crypto: caam - fix unchecked return value error 2023-08-18 17:01:08 +08:00
caampkc.h crypto: caam - add crypto_engine support for RSA algorithms 2020-02-22 09:25:48 +08:00
caamprng.c crypto: caam - Remove GFP_DMA and add DMA alignment padding 2023-01-06 17:15:47 +08:00
caamrng.c crypto: caam - add a test for the RNG 2023-06-23 16:15:36 +08:00
compat.h crypto: sha - split sha.h into sha1.h and sha2.h 2020-11-20 14:45:33 +11:00
ctrl.c crypto: caam - fix PM operations definition 2023-08-18 16:55:25 +08:00
ctrl.h crypto: caam - staticize caam_get_era() 2018-04-21 00:58:36 +08:00
debugfs.c crypto: caam - OP-TEE firmware support 2023-04-14 18:59:34 +08:00
debugfs.h crypto: caam - reduce page 0 regs access to minimum 2023-04-14 18:59:34 +08:00
desc_constr.h crypto: caam - Avoid GCC memset bug warning 2023-01-06 17:15:46 +08:00
desc.h crypto: caam - fix typos 2020-06-15 17:38:54 +10:00
dpseci_cmd.h crypto: caam/qi2 - add support for dpseci_reset() 2020-06-18 17:19:45 +10:00
dpseci-debugfs.c crypto: caam - remove unnecessary (void*) conversions 2023-03-24 18:22:29 +08:00
dpseci-debugfs.h crypto: caam/qi2 - Add printing dpseci fq stats using debugfs 2019-08-02 14:44:01 +10:00
dpseci.c crypto: caam/qi2 - add support for dpseci_reset() 2020-06-18 17:19:45 +10:00
dpseci.h crypto: caam/qi2 - add support for dpseci_reset() 2020-06-18 17:19:45 +10:00
error.c crypto: caam - add more RNG hw error codes 2020-07-31 18:25:28 +10:00
error.h crypto: caam - fix return code in completion callbacks 2019-08-09 15:11:45 +10:00
intern.h crypto: caam - add power management support 2023-08-04 16:59:55 +08:00
jr.c crypto: caam/jr - fix shared IRQ line handling 2023-08-18 17:01:09 +08:00
jr.h
Kconfig crypto: caam - add a test for the RNG 2023-06-23 16:15:36 +08:00
key_gen.c crypto: caam - Remove GFP_DMA and add DMA alignment padding 2023-01-06 17:15:47 +08:00
key_gen.h
Makefile This update includes the following changes: 2022-05-27 18:06:49 -07:00
pdb.h treewide: Replace zero-length arrays with flexible-array members 2022-02-17 07:00:39 -06:00
pkc_desc.c crypto: caam - select DMA address size at runtime 2019-08-30 18:05:30 +10:00
qi.c crypto: caam - Fix edesc/iv ordering mixup 2023-02-28 16:30:58 +08:00
qi.h crypto: caam - Remove GFP_DMA and add DMA alignment padding 2023-01-06 17:15:47 +08:00
regs.h crypto: caam - add power management support 2023-08-04 16:59:55 +08:00
sg_sw_qm2.h crypto: caam - use len instead of nents for bulding HW S/G table 2019-06-20 14:18:33 +08:00
sg_sw_qm.h crypto: caam - use len instead of nents for bulding HW S/G table 2019-06-20 14:18:33 +08:00
sg_sw_sec4.h crypto: caam - use len instead of nents for bulding HW S/G table 2019-06-20 14:18:33 +08:00