ACK: [PATCH Vivid/Wily/Xenial SRU] UBUNTU: SAUCE: (noup) crypto: nx-842 - Mask XERS0 bit in return value

Brad Figg brad.figg at canonical.com
Tue Jan 5 14:21:25 UTC 2016


On Mon, Jan 04, 2016 at 05:45:33PM -0700, tim.gardner at canonical.com wrote:
> From: Haren Myneni <haren at linux.vnet.ibm.com>
> 
> BugLink: http://bugs.launchpad.net/bugs/1529666
> 
> NX842 coprocessor sets 3rd bit in CR register with XER[S0] which is
> nothing to do with NX request. Since this bit can be set with other
> valuable return status, mast this bit.
> 
> One of other bits (INITIATED, BUSY or REJECTED) will be returned for
> any given NX request.
> 
> Signed-off-by: Haren Myneni <haren at us.ibm.com>
> Signed-off-by: Herbert Xu <herbert at gondor.apana.org.au>
> (cherry picked from linux-next commit 6333ed8f26cf77311088d2e2b7cf16d8480bcbb2)
> Signed-off-by: Tim Gardner <tim.gardner at canonical.com>
> ---
>  arch/powerpc/include/asm/icswx.h   |  1 +
>  drivers/crypto/nx/nx-842-powernv.c | 12 ++++++++----
>  2 files changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/icswx.h b/arch/powerpc/include/asm/icswx.h
> index 9f8402b..27e588f 100644
> --- a/arch/powerpc/include/asm/icswx.h
> +++ b/arch/powerpc/include/asm/icswx.h
> @@ -164,6 +164,7 @@ struct coprocessor_request_block {
>  #define ICSWX_INITIATED		(0x8)
>  #define ICSWX_BUSY		(0x4)
>  #define ICSWX_REJECTED		(0x2)
> +#define ICSWX_XERS0		(0x1)	/* undefined or set from XERSO. */
>  
>  static inline int icswx(__be32 ccw, struct coprocessor_request_block *crb)
>  {
> diff --git a/drivers/crypto/nx/nx-842-powernv.c b/drivers/crypto/nx/nx-842-powernv.c
> index 33b3b0a..80d5976 100644
> --- a/drivers/crypto/nx/nx-842-powernv.c
> +++ b/drivers/crypto/nx/nx-842-powernv.c
> @@ -439,6 +439,14 @@ static int nx842_powernv_function(const unsigned char *in, unsigned int inlen,
>  			     (unsigned int)ccw,
>  			     (unsigned int)be32_to_cpu(crb->ccw));
>  
> +	/*
> +	 * NX842 coprocessor sets 3rd bit in CR register with XER[S0].
> +	 * XER[S0] is the integer summary overflow bit which is nothing
> +	 * to do NX. Since this bit can be set with other return values,
> +	 * mask this bit.
> +	 */
> +	ret &= ~ICSWX_XERS0;
> +
>  	switch (ret) {
>  	case ICSWX_INITIATED:
>  		ret = wait_for_csb(wmem, csb);
> @@ -451,10 +459,6 @@ static int nx842_powernv_function(const unsigned char *in, unsigned int inlen,
>  		pr_err_ratelimited("ICSWX rejected\n");
>  		ret = -EPROTO;
>  		break;
> -	default:
> -		pr_err_ratelimited("Invalid ICSWX return code %x\n", ret);
> -		ret = -EPROTO;
> -		break;
>  	}
>  
>  	if (!ret)
> -- 
> 1.9.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team

Looks good

-- 
Brad Figg brad.figg at canonical.com http://www.canonical.com




More information about the kernel-team mailing list