If an AMD BIOS makes zero CCP queues available to the driver, the
device is unavailable and therefore can't be activated. When this
happens, report the status but don't report a (non-existent)
failure. The CCP will be unactivated.

Signed-off-by: Gary R Hook <gary.h...@amd.com>
---
 drivers/crypto/ccp/ccp-dev-v5.c |    2 +-
 drivers/crypto/ccp/ccp-dev.c    |   15 ++++++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/ccp/ccp-dev-v5.c b/drivers/crypto/ccp/ccp-dev-v5.c
index 57eb53b8ac21..2937ba3afb7b 100644
--- a/drivers/crypto/ccp/ccp-dev-v5.c
+++ b/drivers/crypto/ccp/ccp-dev-v5.c
@@ -854,7 +854,7 @@ static int ccp5_init(struct ccp_device *ccp)
 
        if (ccp->cmd_q_count == 0) {
                dev_notice(dev, "no command queues available\n");
-               ret = -EIO;
+               ret = 1;
                goto e_pool;
        }
 
diff --git a/drivers/crypto/ccp/ccp-dev.c b/drivers/crypto/ccp/ccp-dev.c
index 73acf0fdb793..19ac509ed76e 100644
--- a/drivers/crypto/ccp/ccp-dev.c
+++ b/drivers/crypto/ccp/ccp-dev.c
@@ -641,18 +641,27 @@ int ccp_dev_init(struct sp_device *sp)
                ccp->vdata->setup(ccp);
 
        ret = ccp->vdata->perform->init(ccp);
-       if (ret)
+       if (ret) {
+               /* A positive number means that the device cannot be 
initialized,
+                * but no additional message is required.
+                */
+               if (ret > 0)
+                       goto e_quiet;
+
+               /* An unexpected problem occurred, and should be reported in 
the log */
                goto e_err;
+       }
 
        dev_notice(dev, "ccp enabled\n");
 
        return 0;
 
 e_err:
-       sp->ccp_data = NULL;
-
        dev_notice(dev, "ccp initialization failed\n");
 
+e_quiet:
+       sp->ccp_data = NULL;
+
        return ret;
 }
 

Reply via email to