[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <ZN86OX2/B/5w4Uxh@gondor.apana.org.au>
Date: Fri, 18 Aug 2023 17:30:33 +0800
From: Herbert Xu <herbert@...dor.apana.org.au>
To: meenakshi.aggarwal@....com
Cc: horia.geanta@....com, V.sethi@....com, pankaj.gupta@....com,
gaurav.jain@....com, davem@...emloft.net,
linux-crypto@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] crypto: caam/jr - fix shared IRQ line handling
On Tue, Aug 08, 2023 at 12:55:27PM +0200, meenakshi.aggarwal@....com wrote:
> From: Horia Geantă <horia.geanta@....com>
>
> 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@....com>
> Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@....com>
> ---
> drivers/crypto/caam/jr.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Patch applied. Thanks.
--
Email: Herbert Xu <herbert@...dor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
Powered by blists - more mailing lists