All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3 0/2] Improve CCP error handling messages
@ 2019-10-18 19:39 Hook, Gary
  2019-10-18 19:40 ` [PATCH 1/2] crypto: ccp - Change a message to reflect status instead of failure Hook, Gary
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Hook, Gary @ 2019-10-18 19:39 UTC (permalink / raw)
  To: linux-crypto; +Cc: Lendacky, Thomas, herbert, davem

This pair of patches is intended to clarify the messaging produced
by the CCP driver when known, but non-critical, problems arise. The
precipitating conditions can be determined based on simple, unalarming
messages in the system log.

---

Gary R Hook (2):
      crypto: ccp - Change a message to reflect status instead of failure
      crypto: ccp - Verify access to device registers before initializing


 drivers/crypto/ccp/ccp-dev-v5.c |   14 +++++++++++++-
 drivers/crypto/ccp/ccp-dev.c    |   15 ++++++++++++---
 drivers/crypto/ccp/psp-dev.c    |   18 ++++++++++++++++--
 3 files changed, 41 insertions(+), 6 deletions(-)

--

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] crypto: ccp - Change a message to reflect status instead of failure
  2019-10-18 19:39 [PATCH 3 0/2] Improve CCP error handling messages Hook, Gary
@ 2019-10-18 19:40 ` Hook, Gary
  2019-10-18 19:40 ` [PATCH 2/2] crypto: ccp - Verify access to device registers before initializing Hook, Gary
  2019-10-25 15:25 ` [PATCH 3 0/2] Improve CCP error handling messages Herbert Xu
  2 siblings, 0 replies; 4+ messages in thread
From: Hook, Gary @ 2019-10-18 19:40 UTC (permalink / raw)
  To: linux-crypto; +Cc: Lendacky, Thomas, herbert, davem

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.hook@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;
 }
 


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] crypto: ccp - Verify access to device registers before initializing
  2019-10-18 19:39 [PATCH 3 0/2] Improve CCP error handling messages Hook, Gary
  2019-10-18 19:40 ` [PATCH 1/2] crypto: ccp - Change a message to reflect status instead of failure Hook, Gary
@ 2019-10-18 19:40 ` Hook, Gary
  2019-10-25 15:25 ` [PATCH 3 0/2] Improve CCP error handling messages Herbert Xu
  2 siblings, 0 replies; 4+ messages in thread
From: Hook, Gary @ 2019-10-18 19:40 UTC (permalink / raw)
  To: linux-crypto; +Cc: Lendacky, Thomas, herbert, davem

Check early whether device registers can be accessed. Some BIOSes have
a broken security policy that prevents access to the device registers,
and return values from ioread() can be misinterpreted. If a read of
a feature register returns a -1, we may not be able to access
any device register, so report the problem and suggestion, and return.

For the PSP, the feature register is checked. For the CCP, the queue
register is checked.

Signed-off-by: Gary R Hook <gary.hook@amd.com>
---
 drivers/crypto/ccp/ccp-dev-v5.c |   12 ++++++++++++
 drivers/crypto/ccp/psp-dev.c    |   18 ++++++++++++++++--
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/drivers/crypto/ccp/ccp-dev-v5.c b/drivers/crypto/ccp/ccp-dev-v5.c
index 2937ba3afb7b..72ea805cadaa 100644
--- a/drivers/crypto/ccp/ccp-dev-v5.c
+++ b/drivers/crypto/ccp/ccp-dev-v5.c
@@ -789,6 +789,18 @@ static int ccp5_init(struct ccp_device *ccp)
 
 	/* Find available queues */
 	qmr = ioread32(ccp->io_regs + Q_MASK_REG);
+	/*
+	 * Check for a access to the registers.  If this read returns
+	 * 0xffffffff, it's likely that the system is running a broken
+	 * BIOS which disallows access to the device. Stop here and fail
+	 * the initialization (but not the load, as the PSP could get
+	 * properly initialized).
+	 */
+	if (qmr == 0Xffffffff) {
+		dev_notice(dev, "ccp: unable to access the device: you might be running a broken BIOS.\n");
+		return 1;
+	}
+
 	for (i = 0; (i < MAX_HW_QUEUES) && (ccp->cmd_q_count < ccp->max_q_count); i++) {
 		if (!(qmr & (1 << i)))
 			continue;
diff --git a/drivers/crypto/ccp/psp-dev.c b/drivers/crypto/ccp/psp-dev.c
index 6b17d179ef8a..1524e44b0736 100644
--- a/drivers/crypto/ccp/psp-dev.c
+++ b/drivers/crypto/ccp/psp-dev.c
@@ -929,8 +929,22 @@ static int sev_misc_init(struct psp_device *psp)
 
 static int psp_check_sev_support(struct psp_device *psp)
 {
-	/* Check if device supports SEV feature */
-	if (!(ioread32(psp->io_regs + psp->vdata->feature_reg) & 1)) {
+	unsigned int val = ioread32(psp->io_regs + psp->vdata->feature_reg);
+
+	/*
+	 * Check for a access to the registers.  If this read returns
+	 * 0xffffffff, it's likely that the system is running a broken
+	 * BIOS which disallows access to the device. Stop here and
+	 * fail the PSP initialization (but not the load, as the CCP
+	 * could get properly initialized).
+	 */
+	if (val == 0xffffffff) {
+		dev_notice(psp->dev, "psp: unable to access the device: you might be running a broken BIOS.\n");
+		return -ENODEV;
+	}
+
+	if (!(val & 1)) {
+		/* Device does not support the SEV feature */
 		dev_dbg(psp->dev, "psp does not support SEV\n");
 		return -ENODEV;
 	}


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 3 0/2] Improve CCP error handling messages
  2019-10-18 19:39 [PATCH 3 0/2] Improve CCP error handling messages Hook, Gary
  2019-10-18 19:40 ` [PATCH 1/2] crypto: ccp - Change a message to reflect status instead of failure Hook, Gary
  2019-10-18 19:40 ` [PATCH 2/2] crypto: ccp - Verify access to device registers before initializing Hook, Gary
@ 2019-10-25 15:25 ` Herbert Xu
  2 siblings, 0 replies; 4+ messages in thread
From: Herbert Xu @ 2019-10-25 15:25 UTC (permalink / raw)
  To: Hook, Gary; +Cc: linux-crypto, Lendacky, Thomas, davem

On Fri, Oct 18, 2019 at 07:39:59PM +0000, Hook, Gary wrote:
> This pair of patches is intended to clarify the messaging produced
> by the CCP driver when known, but non-critical, problems arise. The
> precipitating conditions can be determined based on simple, unalarming
> messages in the system log.
> 
> ---
> 
> Gary R Hook (2):
>       crypto: ccp - Change a message to reflect status instead of failure
>       crypto: ccp - Verify access to device registers before initializing
> 
> 
>  drivers/crypto/ccp/ccp-dev-v5.c |   14 +++++++++++++-
>  drivers/crypto/ccp/ccp-dev.c    |   15 ++++++++++++---
>  drivers/crypto/ccp/psp-dev.c    |   18 ++++++++++++++++--
>  3 files changed, 41 insertions(+), 6 deletions(-)

All applied.  Thanks.
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-10-25 15:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-18 19:39 [PATCH 3 0/2] Improve CCP error handling messages Hook, Gary
2019-10-18 19:40 ` [PATCH 1/2] crypto: ccp - Change a message to reflect status instead of failure Hook, Gary
2019-10-18 19:40 ` [PATCH 2/2] crypto: ccp - Verify access to device registers before initializing Hook, Gary
2019-10-25 15:25 ` [PATCH 3 0/2] Improve CCP error handling messages Herbert Xu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.