mirror of https://gitee.com/openkylin/linux.git
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
Pull crypto fixes from Herbert Xu: "This fixes a bug in the newly added Exynos5433 AES code as well as an old one in the caam driver" * 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: crypto: caam - add missing put_device() call crypto: s5p-sss - fix AES support for Exynos5433
This commit is contained in:
commit
dac0bde43b
|
@ -3455,7 +3455,6 @@ static int __init caam_algapi_init(void)
|
|||
{
|
||||
struct device_node *dev_node;
|
||||
struct platform_device *pdev;
|
||||
struct device *ctrldev;
|
||||
struct caam_drv_private *priv;
|
||||
int i = 0, err = 0;
|
||||
u32 aes_vid, aes_inst, des_inst, md_vid, md_inst, ccha_inst, ptha_inst;
|
||||
|
@ -3476,16 +3475,17 @@ static int __init caam_algapi_init(void)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
ctrldev = &pdev->dev;
|
||||
priv = dev_get_drvdata(ctrldev);
|
||||
priv = dev_get_drvdata(&pdev->dev);
|
||||
of_node_put(dev_node);
|
||||
|
||||
/*
|
||||
* If priv is NULL, it's probably because the caam driver wasn't
|
||||
* properly initialized (e.g. RNG4 init failed). Thus, bail out here.
|
||||
*/
|
||||
if (!priv)
|
||||
return -ENODEV;
|
||||
if (!priv) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
@ -3626,6 +3626,8 @@ static int __init caam_algapi_init(void)
|
|||
if (registered)
|
||||
pr_info("caam algorithms registered in /proc/crypto\n");
|
||||
|
||||
out_put_dev:
|
||||
put_device(&pdev->dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -2492,12 +2492,15 @@ static int __init caam_qi_algapi_init(void)
|
|||
* If priv is NULL, it's probably because the caam driver wasn't
|
||||
* properly initialized (e.g. RNG4 init failed). Thus, bail out here.
|
||||
*/
|
||||
if (!priv || !priv->qi_present)
|
||||
return -ENODEV;
|
||||
if (!priv || !priv->qi_present) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
if (caam_dpaa2) {
|
||||
dev_info(ctrldev, "caam/qi frontend driver not suitable for DPAA 2.x, aborting...\n");
|
||||
return -ENODEV;
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2610,6 +2613,8 @@ static int __init caam_qi_algapi_init(void)
|
|||
if (registered)
|
||||
dev_info(priv->qidev, "algorithms registered in /proc/crypto\n");
|
||||
|
||||
out_put_dev:
|
||||
put_device(ctrldev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -1993,7 +1993,6 @@ static int __init caam_algapi_hash_init(void)
|
|||
{
|
||||
struct device_node *dev_node;
|
||||
struct platform_device *pdev;
|
||||
struct device *ctrldev;
|
||||
int i = 0, err = 0;
|
||||
struct caam_drv_private *priv;
|
||||
unsigned int md_limit = SHA512_DIGEST_SIZE;
|
||||
|
@ -2012,16 +2011,17 @@ static int __init caam_algapi_hash_init(void)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
ctrldev = &pdev->dev;
|
||||
priv = dev_get_drvdata(ctrldev);
|
||||
priv = dev_get_drvdata(&pdev->dev);
|
||||
of_node_put(dev_node);
|
||||
|
||||
/*
|
||||
* If priv is NULL, it's probably because the caam driver wasn't
|
||||
* properly initialized (e.g. RNG4 init failed). Thus, bail out here.
|
||||
*/
|
||||
if (!priv)
|
||||
return -ENODEV;
|
||||
if (!priv) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
/*
|
||||
* Register crypto algorithms the device supports. First, identify
|
||||
|
@ -2043,8 +2043,10 @@ static int __init caam_algapi_hash_init(void)
|
|||
* Skip registration of any hashing algorithms if MD block
|
||||
* is not present.
|
||||
*/
|
||||
if (!md_inst)
|
||||
return -ENODEV;
|
||||
if (!md_inst) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
/* Limit digest size based on LP256 */
|
||||
if (md_vid == CHA_VER_VID_MD_LP256)
|
||||
|
@ -2101,6 +2103,8 @@ static int __init caam_algapi_hash_init(void)
|
|||
list_add_tail(&t_alg->entry, &hash_list);
|
||||
}
|
||||
|
||||
out_put_dev:
|
||||
put_device(&pdev->dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -1042,8 +1042,10 @@ static int __init caam_pkc_init(void)
|
|||
* If priv is NULL, it's probably because the caam driver wasn't
|
||||
* properly initialized (e.g. RNG4 init failed). Thus, bail out here.
|
||||
*/
|
||||
if (!priv)
|
||||
return -ENODEV;
|
||||
if (!priv) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
/* Determine public key hardware accelerator presence. */
|
||||
if (priv->era < 10)
|
||||
|
@ -1053,8 +1055,10 @@ static int __init caam_pkc_init(void)
|
|||
pk_inst = rd_reg32(&priv->ctrl->vreg.pkha) & CHA_VER_NUM_MASK;
|
||||
|
||||
/* Do not register algorithms if PKHA is not present. */
|
||||
if (!pk_inst)
|
||||
return -ENODEV;
|
||||
if (!pk_inst) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
err = crypto_register_akcipher(&caam_rsa);
|
||||
if (err)
|
||||
|
@ -1063,6 +1067,8 @@ static int __init caam_pkc_init(void)
|
|||
else
|
||||
dev_info(ctrldev, "caam pkc algorithms registered in /proc/crypto\n");
|
||||
|
||||
out_put_dev:
|
||||
put_device(ctrldev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -308,7 +308,6 @@ static int __init caam_rng_init(void)
|
|||
struct device *dev;
|
||||
struct device_node *dev_node;
|
||||
struct platform_device *pdev;
|
||||
struct device *ctrldev;
|
||||
struct caam_drv_private *priv;
|
||||
u32 rng_inst;
|
||||
int err;
|
||||
|
@ -326,16 +325,17 @@ static int __init caam_rng_init(void)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
ctrldev = &pdev->dev;
|
||||
priv = dev_get_drvdata(ctrldev);
|
||||
priv = dev_get_drvdata(&pdev->dev);
|
||||
of_node_put(dev_node);
|
||||
|
||||
/*
|
||||
* If priv is NULL, it's probably because the caam driver wasn't
|
||||
* properly initialized (e.g. RNG4 init failed). Thus, bail out here.
|
||||
*/
|
||||
if (!priv)
|
||||
return -ENODEV;
|
||||
if (!priv) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
/* Check for an instantiated RNG before registration */
|
||||
if (priv->era < 10)
|
||||
|
@ -344,13 +344,16 @@ static int __init caam_rng_init(void)
|
|||
else
|
||||
rng_inst = rd_reg32(&priv->ctrl->vreg.rng) & CHA_VER_NUM_MASK;
|
||||
|
||||
if (!rng_inst)
|
||||
return -ENODEV;
|
||||
if (!rng_inst) {
|
||||
err = -ENODEV;
|
||||
goto out_put_dev;
|
||||
}
|
||||
|
||||
dev = caam_jr_alloc();
|
||||
if (IS_ERR(dev)) {
|
||||
pr_err("Job Ring Device allocation for transform failed\n");
|
||||
return PTR_ERR(dev);
|
||||
err = PTR_ERR(dev);
|
||||
goto out_put_dev;
|
||||
}
|
||||
rng_ctx = kmalloc(sizeof(*rng_ctx), GFP_DMA | GFP_KERNEL);
|
||||
if (!rng_ctx) {
|
||||
|
@ -361,6 +364,7 @@ static int __init caam_rng_init(void)
|
|||
if (err)
|
||||
goto free_rng_ctx;
|
||||
|
||||
put_device(&pdev->dev);
|
||||
dev_info(dev, "registering rng-caam\n");
|
||||
return hwrng_register(&caam_rng);
|
||||
|
||||
|
@ -368,6 +372,8 @@ static int __init caam_rng_init(void)
|
|||
kfree(rng_ctx);
|
||||
free_caam_alloc:
|
||||
caam_jr_free(dev);
|
||||
out_put_dev:
|
||||
put_device(&pdev->dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -241,7 +241,7 @@
|
|||
struct samsung_aes_variant {
|
||||
unsigned int aes_offset;
|
||||
unsigned int hash_offset;
|
||||
const char *clk_names[];
|
||||
const char *clk_names[2];
|
||||
};
|
||||
|
||||
struct s5p_aes_reqctx {
|
||||
|
|
Loading…
Reference in New Issue