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

crypto: ccp - Refactor code to enable checks for queue space.

Available queue space is used to decide (by counting free slots)
if we have to put a command on hold or if it can be sent
to the engine immediately.
Signed-off-by: default avatarGary R Hook <gary.hook@amd.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 8256e683
...@@ -70,6 +70,11 @@ static void ccp_free_ksb(struct ccp_cmd_queue *cmd_q, unsigned int start, ...@@ -70,6 +70,11 @@ static void ccp_free_ksb(struct ccp_cmd_queue *cmd_q, unsigned int start,
wake_up_interruptible_all(&ccp->sb_queue); wake_up_interruptible_all(&ccp->sb_queue);
} }
static unsigned int ccp_get_free_slots(struct ccp_cmd_queue *cmd_q)
{
return CMD_Q_DEPTH(ioread32(cmd_q->reg_status));
}
static int ccp_do_cmd(struct ccp_op *op, u32 *cr, unsigned int cr_count) static int ccp_do_cmd(struct ccp_op *op, u32 *cr, unsigned int cr_count)
{ {
struct ccp_cmd_queue *cmd_q = op->cmd_q; struct ccp_cmd_queue *cmd_q = op->cmd_q;
...@@ -357,7 +362,7 @@ static int ccp_init(struct ccp_device *ccp) ...@@ -357,7 +362,7 @@ static int ccp_init(struct ccp_device *ccp)
cmd_q->int_ok = 1 << (i * 2); cmd_q->int_ok = 1 << (i * 2);
cmd_q->int_err = 1 << ((i * 2) + 1); cmd_q->int_err = 1 << ((i * 2) + 1);
cmd_q->free_slots = CMD_Q_DEPTH(ioread32(cmd_q->reg_status)); cmd_q->free_slots = ccp_get_free_slots(cmd_q);
init_waitqueue_head(&cmd_q->int_queue); init_waitqueue_head(&cmd_q->int_queue);
...@@ -559,6 +564,7 @@ static const struct ccp_actions ccp3_actions = { ...@@ -559,6 +564,7 @@ static const struct ccp_actions ccp3_actions = {
.sbfree = ccp_free_ksb, .sbfree = ccp_free_ksb,
.init = ccp_init, .init = ccp_init,
.destroy = ccp_destroy, .destroy = ccp_destroy,
.get_free_slots = ccp_get_free_slots,
.irqhandler = ccp_irq_handler, .irqhandler = ccp_irq_handler,
}; };
......
...@@ -458,6 +458,7 @@ struct ccp_actions { ...@@ -458,6 +458,7 @@ struct ccp_actions {
u32 (*sballoc)(struct ccp_cmd_queue *, unsigned int); u32 (*sballoc)(struct ccp_cmd_queue *, unsigned int);
void (*sbfree)(struct ccp_cmd_queue *, unsigned int, void (*sbfree)(struct ccp_cmd_queue *, unsigned int,
unsigned int); unsigned int);
unsigned int (*get_free_slots)(struct ccp_cmd_queue *);
int (*init)(struct ccp_device *); int (*init)(struct ccp_device *);
void (*destroy)(struct ccp_device *); void (*destroy)(struct ccp_device *);
irqreturn_t (*irqhandler)(int, void *); irqreturn_t (*irqhandler)(int, void *);
......
...@@ -1765,7 +1765,7 @@ int ccp_run_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd) ...@@ -1765,7 +1765,7 @@ int ccp_run_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
cmd->engine_error = 0; cmd->engine_error = 0;
cmd_q->cmd_error = 0; cmd_q->cmd_error = 0;
cmd_q->int_rcvd = 0; cmd_q->int_rcvd = 0;
cmd_q->free_slots = CMD_Q_DEPTH(ioread32(cmd_q->reg_status)); cmd_q->free_slots = cmd_q->ccp->vdata->perform->get_free_slots(cmd_q);
switch (cmd->engine) { switch (cmd->engine) {
case CCP_ENGINE_AES: case CCP_ENGINE_AES:
......
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