Commit 084935b2 authored by Gary R Hook's avatar Gary R Hook Committed by Herbert Xu

crypto: ccp - Add support for the RNG in a version 5 CCP

Signed-off-by: default avatarGary R Hook <gary.hook@amd.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 4b394a23
...@@ -432,14 +432,9 @@ static int ccp_init(struct ccp_device *ccp) ...@@ -432,14 +432,9 @@ static int ccp_init(struct ccp_device *ccp)
dev_dbg(dev, "Registering device...\n"); dev_dbg(dev, "Registering device...\n");
ccp_add_device(ccp); ccp_add_device(ccp);
/* Register the RNG */ ret = ccp_register_rng(ccp);
ccp->hwrng.name = ccp->rngname; if (ret)
ccp->hwrng.read = ccp_trng_read;
ret = hwrng_register(&ccp->hwrng);
if (ret) {
dev_err(dev, "error registering hwrng (%d)\n", ret);
goto e_kthread; goto e_kthread;
}
/* Register the DMA engine support */ /* Register the DMA engine support */
ret = ccp_dmaengine_register(ccp); ret = ccp_dmaengine_register(ccp);
...@@ -449,7 +444,7 @@ static int ccp_init(struct ccp_device *ccp) ...@@ -449,7 +444,7 @@ static int ccp_init(struct ccp_device *ccp)
return 0; return 0;
e_hwrng: e_hwrng:
hwrng_unregister(&ccp->hwrng); ccp_unregister_rng(ccp);
e_kthread: e_kthread:
for (i = 0; i < ccp->cmd_q_count; i++) for (i = 0; i < ccp->cmd_q_count; i++)
...@@ -475,7 +470,7 @@ static void ccp_destroy(struct ccp_device *ccp) ...@@ -475,7 +470,7 @@ static void ccp_destroy(struct ccp_device *ccp)
ccp_dmaengine_unregister(ccp); ccp_dmaengine_unregister(ccp);
/* Unregister the RNG */ /* Unregister the RNG */
hwrng_unregister(&ccp->hwrng); ccp_unregister_rng(ccp);
/* Remove this device from the list of available units */ /* Remove this device from the list of available units */
ccp_del_device(ccp); ccp_del_device(ccp);
......
...@@ -828,6 +828,10 @@ static int ccp5_init(struct ccp_device *ccp) ...@@ -828,6 +828,10 @@ static int ccp5_init(struct ccp_device *ccp)
/* Put this on the unit list to make it available */ /* Put this on the unit list to make it available */
ccp_add_device(ccp); ccp_add_device(ccp);
ret = ccp_register_rng(ccp);
if (ret)
goto e_kthread;
return 0; return 0;
e_kthread: e_kthread:
...@@ -852,6 +856,9 @@ static void ccp5_destroy(struct ccp_device *ccp) ...@@ -852,6 +856,9 @@ static void ccp5_destroy(struct ccp_device *ccp)
struct ccp_cmd *cmd; struct ccp_cmd *cmd;
unsigned int i; unsigned int i;
/* Unregister the RNG */
ccp_unregister_rng(ccp);
/* Remove this device from the list of available units first */ /* Remove this device from the list of available units first */
ccp_del_device(ccp); ccp_del_device(ccp);
......
...@@ -119,6 +119,29 @@ void ccp_del_device(struct ccp_device *ccp) ...@@ -119,6 +119,29 @@ void ccp_del_device(struct ccp_device *ccp)
write_unlock_irqrestore(&ccp_unit_lock, flags); write_unlock_irqrestore(&ccp_unit_lock, flags);
} }
int ccp_register_rng(struct ccp_device *ccp)
{
int ret = 0;
dev_dbg(ccp->dev, "Registering RNG...\n");
/* Register an RNG */
ccp->hwrng.name = ccp->rngname;
ccp->hwrng.read = ccp_trng_read;
ret = hwrng_register(&ccp->hwrng);
if (ret)
dev_err(ccp->dev, "error registering hwrng (%d)\n", ret);
return ret;
}
void ccp_unregister_rng(struct ccp_device *ccp)
{
if (ccp->hwrng.name)
hwrng_unregister(&ccp->hwrng);
}
static struct ccp_device *ccp_get_device(void) static struct ccp_device *ccp_get_device(void)
{ {
unsigned long flags; unsigned long flags;
......
...@@ -601,6 +601,8 @@ int ccp_trng_read(struct hwrng *rng, void *data, size_t max, bool wait); ...@@ -601,6 +601,8 @@ int ccp_trng_read(struct hwrng *rng, void *data, size_t max, bool wait);
int ccp_run_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd); int ccp_run_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd);
int ccp_register_rng(struct ccp_device *ccp);
void ccp_unregister_rng(struct ccp_device *ccp);
int ccp_dmaengine_register(struct ccp_device *ccp); int ccp_dmaengine_register(struct ccp_device *ccp);
void ccp_dmaengine_unregister(struct ccp_device *ccp); void ccp_dmaengine_unregister(struct ccp_device *ccp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment