crypto: amcc - Hold the reference returned by of_find_compatible_node
In crypto4xx_probe(), we should hold the reference returned by of_find_compatible_node() and use it to call of_node_put to keep refcount balance. Signed-off-by: Liang He <windhl@126.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
cc8166bfc8
commit
9984a64473
|
@ -1378,6 +1378,7 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
|||
struct resource res;
|
||||
struct device *dev = &ofdev->dev;
|
||||
struct crypto4xx_core_device *core_dev;
|
||||
struct device_node *np;
|
||||
u32 pvr;
|
||||
bool is_revb = true;
|
||||
|
||||
|
@ -1385,29 +1386,36 @@ static int crypto4xx_probe(struct platform_device *ofdev)
|
|||
if (rc)
|
||||
return -ENODEV;
|
||||
|
||||
if (of_find_compatible_node(NULL, NULL, "amcc,ppc460ex-crypto")) {
|
||||
np = of_find_compatible_node(NULL, NULL, "amcc,ppc460ex-crypto");
|
||||
if (np) {
|
||||
mtdcri(SDR0, PPC460EX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC460EX_SDR0_SRST) | PPC460EX_CE_RESET);
|
||||
mtdcri(SDR0, PPC460EX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC460EX_SDR0_SRST) & ~PPC460EX_CE_RESET);
|
||||
} else if (of_find_compatible_node(NULL, NULL,
|
||||
"amcc,ppc405ex-crypto")) {
|
||||
mtdcri(SDR0, PPC405EX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC405EX_SDR0_SRST) | PPC405EX_CE_RESET);
|
||||
mtdcri(SDR0, PPC405EX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC405EX_SDR0_SRST) & ~PPC405EX_CE_RESET);
|
||||
is_revb = false;
|
||||
} else if (of_find_compatible_node(NULL, NULL,
|
||||
"amcc,ppc460sx-crypto")) {
|
||||
mtdcri(SDR0, PPC460SX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC460SX_SDR0_SRST) | PPC460SX_CE_RESET);
|
||||
mtdcri(SDR0, PPC460SX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC460SX_SDR0_SRST) & ~PPC460SX_CE_RESET);
|
||||
} else {
|
||||
printk(KERN_ERR "Crypto Function Not supported!\n");
|
||||
return -EINVAL;
|
||||
np = of_find_compatible_node(NULL, NULL, "amcc,ppc405ex-crypto");
|
||||
if (np) {
|
||||
mtdcri(SDR0, PPC405EX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC405EX_SDR0_SRST) | PPC405EX_CE_RESET);
|
||||
mtdcri(SDR0, PPC405EX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC405EX_SDR0_SRST) & ~PPC405EX_CE_RESET);
|
||||
is_revb = false;
|
||||
} else {
|
||||
np = of_find_compatible_node(NULL, NULL, "amcc,ppc460sx-crypto");
|
||||
if (np) {
|
||||
mtdcri(SDR0, PPC460SX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC460SX_SDR0_SRST) | PPC460SX_CE_RESET);
|
||||
mtdcri(SDR0, PPC460SX_SDR0_SRST,
|
||||
mfdcri(SDR0, PPC460SX_SDR0_SRST) & ~PPC460SX_CE_RESET);
|
||||
} else {
|
||||
printk(KERN_ERR "Crypto Function Not supported!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
of_node_put(np);
|
||||
|
||||
core_dev = kzalloc(sizeof(struct crypto4xx_core_device), GFP_KERNEL);
|
||||
if (!core_dev)
|
||||
return -ENOMEM;
|
||||
|
|
Loading…
Reference in New Issue