diff mbox series

[RFC,3/5] scsi: ufs: add quirk to disable inline crypto support

Message ID 20200110061634.46742-4-ebiggers@kernel.org
State Superseded
Headers show
Series Inline crypto support on DragonBoard 845c | expand

Commit Message

Eric Biggers Jan. 10, 2020, 6:16 a.m. UTC
From: Eric Biggers <ebiggers@google.com>

Add a quirk flag which allows UFS drivers to tell the UFS core that
their crypto support is not working properly, so should not be used
despite the host controller declaring the standard crypto support bit.

There are various situations in which this can be needed:

- When the crypto support requires vendor-specific logic that hasn't
  been implemented yet.  For example, the standard keyslot programming
  procedure doesn't work with ufs-hisi and ufs-qcom.

- When necessary vendor-specific crypto registers haven't been declared
  in the device tree for the SoC yet.

- When the crypto hardware declares an unsupported vendor-specific
  version number, has vendor-specific fuses blown which make it unusable
  in the normal way, or a vendor-specific self-test fails.

- The crypto produces the wrong results.

Originally-from: John Stultz <john.stultz@linaro.org>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
 drivers/scsi/ufs/ufshcd-crypto.c | 3 ++-
 drivers/scsi/ufs/ufshcd.h        | 7 +++++++
 2 files changed, 9 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/drivers/scsi/ufs/ufshcd-crypto.c b/drivers/scsi/ufs/ufshcd-crypto.c
index 749c325686a7d..2c34beb47f8e0 100644
--- a/drivers/scsi/ufs/ufshcd-crypto.c
+++ b/drivers/scsi/ufs/ufshcd-crypto.c
@@ -278,7 +278,8 @@  int ufshcd_hba_init_crypto(struct ufs_hba *hba)
 	hba->caps &= ~UFSHCD_CAP_CRYPTO;
 
 	/* Return 0 if crypto support isn't present */
-	if (!(hba->capabilities & MASK_CRYPTO_SUPPORT))
+	if (!(hba->capabilities & MASK_CRYPTO_SUPPORT) ||
+	    (hba->quirks & UFSHCD_QUIRK_BROKEN_CRYPTO))
 		goto out;
 
 	/*
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 5f5440059dd8a..b6f0d08a98a8b 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -650,6 +650,13 @@  struct ufs_hba {
 	 * enabled via HCE register.
 	 */
 	#define UFSHCI_QUIRK_BROKEN_HCE				0x400
+
+	/*
+	 * This quirk needs to be enabled if the host controller advertises
+	 * inline encryption support but it doesn't work correctly.
+	 */
+	#define UFSHCD_QUIRK_BROKEN_CRYPTO			0x800
+
 	unsigned int quirks;	/* Deviations from standard UFSHCI spec. */
 
 	/* Device deviations from standard UFS device spec. */