]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
crypto: ccp - Add a module parameter to specify a queue count
authorHook, Gary <Gary.Hook@amd.com>
Tue, 9 Jul 2019 15:07:22 +0000 (15:07 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 26 Jul 2019 12:08:03 +0000 (22:08 +1000)
Add a module parameter to limit the number of queues per CCP. The default
value (nqueues=0) is to set up every available queue on each device.

The count of queues starts from the first one found on the device (which
varies based on the device ID).

Signed-off-by: Gary R Hook <gary.hook@amd.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/ccp/ccp-dev-v3.c
drivers/crypto/ccp/ccp-dev-v5.c
drivers/crypto/ccp/ccp-dev.c
drivers/crypto/ccp/ccp-dev.h

index 2b7d47ed5c74638900e2b39115734f978036bd17..4005d438dff9873e0d765f705a509200e8ccdaac 100644 (file)
@@ -379,7 +379,7 @@ static int ccp_init(struct ccp_device *ccp)
        /* Find available queues */
        ccp->qim = 0;
        qmr = ioread32(ccp->io_regs + Q_MASK_REG);
-       for (i = 0; i < MAX_HW_QUEUES; i++) {
+       for (i = 0; (i < MAX_HW_QUEUES) && (ccp->cmd_q_count < ccp->max_q_count); i++) {
                if (!(qmr & (1 << i)))
                        continue;
 
index 35b3d866726d5d7b0a59e211c33acb6dde591e63..f146b51a23a5086146ac42cc9f940b924f2f5351 100644 (file)
@@ -2,16 +2,14 @@
 /*
  * AMD Cryptographic Coprocessor (CCP) driver
  *
- * Copyright (C) 2016,2017 Advanced Micro Devices, Inc.
+ * Copyright (C) 2016,2019 Advanced Micro Devices, Inc.
  *
  * Author: Gary R Hook <gary.hook@amd.com>
  */
 
-#include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/pci.h>
 #include <linux/kthread.h>
-#include <linux/debugfs.h>
 #include <linux/dma-mapping.h>
 #include <linux/interrupt.h>
 #include <linux/compiler.h>
@@ -792,8 +790,7 @@ static int ccp5_init(struct ccp_device *ccp)
 
        /* Find available queues */
        qmr = ioread32(ccp->io_regs + Q_MASK_REG);
-       for (i = 0; i < MAX_HW_QUEUES; i++) {
-
+       for (i = 0; (i < MAX_HW_QUEUES) && (ccp->cmd_q_count < ccp->max_q_count); i++) {
                if (!(qmr & (1 << i)))
                        continue;
 
index f79eede71c62d8e1d50cb7640f7ea64023b1b590..352059d0c5725bca7ac02924f75d2c54a39917de 100644 (file)
@@ -8,6 +8,7 @@
  * Author: Gary R Hook <gary.hook@amd.com>
  */
 
+#include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/kthread.h>
 #include <linux/sched.h>
 
 #include "ccp-dev.h"
 
+/* Limit CCP use to a specifed number of queues per device */
+static unsigned int nqueues = 0;
+module_param(nqueues, uint, 0444);
+MODULE_PARM_DESC(nqueues, "Number of queues per CCP (minimum 1; default: all available)");
+
 struct ccp_tasklet_data {
        struct completion completion;
        struct ccp_cmd *cmd;
@@ -592,6 +598,11 @@ int ccp_dev_init(struct sp_device *sp)
                goto e_err;
        sp->ccp_data = ccp;
 
+       if (!nqueues || (nqueues > MAX_HW_QUEUES))
+               ccp->max_q_count = MAX_HW_QUEUES;
+       else
+               ccp->max_q_count = nqueues;
+
        ccp->vdata = (struct ccp_vdata *)sp->dev_vdata->ccp_vdata;
        if (!ccp->vdata || !ccp->vdata->version) {
                ret = -ENODEV;
index 5e624920fd99e207f1f4174dab510a9426a3eb13..dd13468111cd56ab985f29e48635acd1b08d8009 100644 (file)
@@ -379,6 +379,7 @@ struct ccp_device {
         */
        struct ccp_cmd_queue cmd_q[MAX_HW_QUEUES];
        unsigned int cmd_q_count;
+       unsigned int max_q_count;
 
        /* Support for the CCP True RNG
         */