diff options
Diffstat (limited to 'drivers/crypto/amcc')
| -rw-r--r-- | drivers/crypto/amcc/crypto4xx_alg.c | 31 | ||||
| -rw-r--r-- | drivers/crypto/amcc/crypto4xx_core.c | 37 | 
2 files changed, 23 insertions, 45 deletions
| diff --git a/drivers/crypto/amcc/crypto4xx_alg.c b/drivers/crypto/amcc/crypto4xx_alg.c index a42f8619589d..f7fc0c464125 100644 --- a/drivers/crypto/amcc/crypto4xx_alg.c +++ b/drivers/crypto/amcc/crypto4xx_alg.c @@ -128,12 +128,9 @@ static int crypto4xx_setkey_aes(struct crypto_skcipher *cipher,  	struct dynamic_sa_ctl *sa;  	int    rc; -	if (keylen != AES_KEYSIZE_256 && -		keylen != AES_KEYSIZE_192 && keylen != AES_KEYSIZE_128) { -		crypto_skcipher_set_flags(cipher, -				CRYPTO_TFM_RES_BAD_KEY_LEN); +	if (keylen != AES_KEYSIZE_256 && keylen != AES_KEYSIZE_192 && +	    keylen != AES_KEYSIZE_128)  		return -EINVAL; -	}  	/* Create SA */  	if (ctx->sa_in || ctx->sa_out) @@ -292,19 +289,11 @@ static int crypto4xx_sk_setup_fallback(struct crypto4xx_ctx *ctx,  				       const u8 *key,  				       unsigned int keylen)  { -	int rc; -  	crypto_sync_skcipher_clear_flags(ctx->sw_cipher.cipher,  				    CRYPTO_TFM_REQ_MASK);  	crypto_sync_skcipher_set_flags(ctx->sw_cipher.cipher,  		crypto_skcipher_get_flags(cipher) & CRYPTO_TFM_REQ_MASK); -	rc = crypto_sync_skcipher_setkey(ctx->sw_cipher.cipher, key, keylen); -	crypto_skcipher_clear_flags(cipher, CRYPTO_TFM_RES_MASK); -	crypto_skcipher_set_flags(cipher, -		crypto_sync_skcipher_get_flags(ctx->sw_cipher.cipher) & -			CRYPTO_TFM_RES_MASK); - -	return rc; +	return crypto_sync_skcipher_setkey(ctx->sw_cipher.cipher, key, keylen);  }  int crypto4xx_setkey_aes_ctr(struct crypto_skcipher *cipher, @@ -379,18 +368,10 @@ static int crypto4xx_aead_setup_fallback(struct crypto4xx_ctx *ctx,  					 const u8 *key,  					 unsigned int keylen)  { -	int rc; -  	crypto_aead_clear_flags(ctx->sw_cipher.aead, CRYPTO_TFM_REQ_MASK);  	crypto_aead_set_flags(ctx->sw_cipher.aead,  		crypto_aead_get_flags(cipher) & CRYPTO_TFM_REQ_MASK); -	rc = crypto_aead_setkey(ctx->sw_cipher.aead, key, keylen); -	crypto_aead_clear_flags(cipher, CRYPTO_TFM_RES_MASK); -	crypto_aead_set_flags(cipher, -		crypto_aead_get_flags(ctx->sw_cipher.aead) & -			CRYPTO_TFM_RES_MASK); - -	return rc; +	return crypto_aead_setkey(ctx->sw_cipher.aead, key, keylen);  }  /** @@ -551,10 +532,8 @@ int crypto4xx_setkey_aes_gcm(struct crypto_aead *cipher,  	struct dynamic_sa_ctl *sa;  	int    rc = 0; -	if (crypto4xx_aes_gcm_validate_keylen(keylen) != 0) { -		crypto_aead_set_flags(cipher, CRYPTO_TFM_RES_BAD_KEY_LEN); +	if (crypto4xx_aes_gcm_validate_keylen(keylen) != 0)  		return -EINVAL; -	}  	rc = crypto4xx_aead_setup_fallback(ctx, cipher, key, keylen);  	if (rc) diff --git a/drivers/crypto/amcc/crypto4xx_core.c b/drivers/crypto/amcc/crypto4xx_core.c index 7d6b695c4ab3..981de43ea5e2 100644 --- a/drivers/crypto/amcc/crypto4xx_core.c +++ b/drivers/crypto/amcc/crypto4xx_core.c @@ -169,7 +169,7 @@ static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev)  	int i;  	dev->pdr = dma_alloc_coherent(dev->core_dev->device,  				      sizeof(struct ce_pd) * PPC4XX_NUM_PD, -				      &dev->pdr_pa, GFP_ATOMIC); +				      &dev->pdr_pa, GFP_KERNEL);  	if (!dev->pdr)  		return -ENOMEM; @@ -185,13 +185,13 @@ static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev)  	dev->shadow_sa_pool = dma_alloc_coherent(dev->core_dev->device,  				   sizeof(union shadow_sa_buf) * PPC4XX_NUM_PD,  				   &dev->shadow_sa_pool_pa, -				   GFP_ATOMIC); +				   GFP_KERNEL);  	if (!dev->shadow_sa_pool)  		return -ENOMEM;  	dev->shadow_sr_pool = dma_alloc_coherent(dev->core_dev->device,  			 sizeof(struct sa_state_record) * PPC4XX_NUM_PD, -			 &dev->shadow_sr_pool_pa, GFP_ATOMIC); +			 &dev->shadow_sr_pool_pa, GFP_KERNEL);  	if (!dev->shadow_sr_pool)  		return -ENOMEM;  	for (i = 0; i < PPC4XX_NUM_PD; i++) { @@ -277,7 +277,7 @@ static u32 crypto4xx_build_gdr(struct crypto4xx_device *dev)  {  	dev->gdr = dma_alloc_coherent(dev->core_dev->device,  				      sizeof(struct ce_gd) * PPC4XX_NUM_GD, -				      &dev->gdr_pa, GFP_ATOMIC); +				      &dev->gdr_pa, GFP_KERNEL);  	if (!dev->gdr)  		return -ENOMEM; @@ -286,7 +286,8 @@ static u32 crypto4xx_build_gdr(struct crypto4xx_device *dev)  static inline void crypto4xx_destroy_gdr(struct crypto4xx_device *dev)  { -	dma_free_coherent(dev->core_dev->device, +	if (dev->gdr) +		dma_free_coherent(dev->core_dev->device,  			  sizeof(struct ce_gd) * PPC4XX_NUM_GD,  			  dev->gdr, dev->gdr_pa);  } @@ -354,20 +355,20 @@ static u32 crypto4xx_build_sdr(struct crypto4xx_device *dev)  {  	int i; -	/* alloc memory for scatter descriptor ring */ -	dev->sdr = dma_alloc_coherent(dev->core_dev->device, -				      sizeof(struct ce_sd) * PPC4XX_NUM_SD, -				      &dev->sdr_pa, GFP_ATOMIC); -	if (!dev->sdr) -		return -ENOMEM; -  	dev->scatter_buffer_va =  		dma_alloc_coherent(dev->core_dev->device,  			PPC4XX_SD_BUFFER_SIZE * PPC4XX_NUM_SD, -			&dev->scatter_buffer_pa, GFP_ATOMIC); +			&dev->scatter_buffer_pa, GFP_KERNEL);  	if (!dev->scatter_buffer_va)  		return -ENOMEM; +	/* alloc memory for scatter descriptor ring */ +	dev->sdr = dma_alloc_coherent(dev->core_dev->device, +				      sizeof(struct ce_sd) * PPC4XX_NUM_SD, +				      &dev->sdr_pa, GFP_KERNEL); +	if (!dev->sdr) +		return -ENOMEM; +  	for (i = 0; i < PPC4XX_NUM_SD; i++) {  		dev->sdr[i].ptr = dev->scatter_buffer_pa +  				  PPC4XX_SD_BUFFER_SIZE * i; @@ -1439,16 +1440,15 @@ static int crypto4xx_probe(struct platform_device *ofdev)  	spin_lock_init(&core_dev->lock);  	INIT_LIST_HEAD(&core_dev->dev->alg_list);  	ratelimit_default_init(&core_dev->dev->aead_ratelimit); +	rc = crypto4xx_build_sdr(core_dev->dev); +	if (rc) +		goto err_build_sdr;  	rc = crypto4xx_build_pdr(core_dev->dev);  	if (rc) -		goto err_build_pdr; +		goto err_build_sdr;  	rc = crypto4xx_build_gdr(core_dev->dev);  	if (rc) -		goto err_build_pdr; - -	rc = crypto4xx_build_sdr(core_dev->dev); -	if (rc)  		goto err_build_sdr;  	/* Init tasklet for bottom half processing */ @@ -1493,7 +1493,6 @@ err_iomap:  err_build_sdr:  	crypto4xx_destroy_sdr(core_dev->dev);  	crypto4xx_destroy_gdr(core_dev->dev); -err_build_pdr:  	crypto4xx_destroy_pdr(core_dev->dev);  	kfree(core_dev->dev);  err_alloc_dev: | 
