Re: [PATCH v7 5/5] scsi: ufs-qcom-ice: add Inline Crypto Engine (ICE) support for UFS
Paul, we have decided to revert the ICE change that support UFS. a change already uploaded: look for subject: [PATCH v1] Revert "scsi: ufs-qcom-ice: add Inline Crypto Engine (ICE) support for UFS" thanks, Yaniv > Yaniv, > > On Thu, 2015-01-15 at 16:32 +0200, Yaniv Gardi wrote: >> From: Yaniv Gardi >> >> In-order to enhance storage encryption performance, >> an Inline Cryptographic Engine is introduced to UFS. >> This patch adds in-line encryption capabilities to the UFS >> driver. >> >> Signed-off-by: Yaniv Gardi > > This patch became commit 8805ccd069b7 ("ufs-qcom-ice: add Inline Crypto > Engine (ICE) support for UFS") in today's linux-next (ie, > next-20150123). I noticed because a script I use to check linux-next > spotted a problem with it. > >> --- >> drivers/scsi/ufs/Kconfig| 12 + >> drivers/scsi/ufs/Makefile | 1 + >> drivers/scsi/ufs/ufs-qcom-ice.c | 520 >> >> drivers/scsi/ufs/ufs-qcom-ice.h | 113 + >> drivers/scsi/ufs/ufs-qcom.c | 56 - >> drivers/scsi/ufs/ufs-qcom.h | 25 ++ >> 6 files changed, 726 insertions(+), 1 deletion(-) >> create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.c >> create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.h >> >> diff --git a/drivers/scsi/ufs/Kconfig b/drivers/scsi/ufs/Kconfig >> index 8a1f4b3..ecf34ed 100644 >> --- a/drivers/scsi/ufs/Kconfig >> +++ b/drivers/scsi/ufs/Kconfig >> @@ -83,3 +83,15 @@ config SCSI_UFS_QCOM >> >>Select this if you have UFS controller on QCOM chipset. >>If unsure, say N. >> + >> +config SCSI_UFS_QCOM_ICE >> +bool "QCOM specific hooks to Inline Crypto Engine for UFS driver" >> +depends on SCSI_UFS_QCOM && CRYPTO_DEV_QCOM_ICE > > There's currently no Kconfig symbol CRYPTO_DEV_QCOM_ICE in linux-next. > So SCSI_UFS_QCOM_ICE can not be set and these "in-line encryption > capabilities" can not be enabled. > >> +help >> + This selects the QCOM specific additions to support Inline Crypto >> + Engine (ICE). >> + ICE accelerates the crypto operations and maintains the high UFS >> + performance. >> + >> + Select this if you have ICE supported for UFS on QCOM chipset. >> + If unsure, say N. >> diff --git a/drivers/scsi/ufs/Makefile b/drivers/scsi/ufs/Makefile >> index 8303bcc..31adca5 100644 >> --- a/drivers/scsi/ufs/Makefile >> +++ b/drivers/scsi/ufs/Makefile >> @@ -1,5 +1,6 @@ >> # UFSHCD makefile >> obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o >> +obj-$(CONFIG_SCSI_UFS_QCOM_ICE) += ufs-qcom-ice.o >> obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o >> obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o >> obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += ufshcd-pltfrm.o >> diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c >> b/drivers/scsi/ufs/ufs-qcom-ice.c >> new file mode 100644 >> index 000..9202b73 >> --- /dev/null >> +++ b/drivers/scsi/ufs/ufs-qcom-ice.c >> @@ -0,0 +1,520 @@ >> +/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License version 2 and >> + * only version 2 as published by the Free Software Foundation. >> + * >> + * This program is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + */ >> + >> +#include >> +#include >> +#include >> +#include > > This header is not included in linux-next so manually building > ufs-qcom-ice.o isn't possible either. > > I assume a series to add CRYPTO_DEV_QCOM_ICE and crypto/ice.h (and > whatever else is needed to build this) is queued somewhere. Is that > correct? > > > Paul Bolle > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v7 5/5] scsi: ufs-qcom-ice: add Inline Crypto Engine (ICE) support for UFS
Yaniv, On Thu, 2015-01-15 at 16:32 +0200, Yaniv Gardi wrote: > From: Yaniv Gardi > > In-order to enhance storage encryption performance, > an Inline Cryptographic Engine is introduced to UFS. > This patch adds in-line encryption capabilities to the UFS > driver. > > Signed-off-by: Yaniv Gardi This patch became commit 8805ccd069b7 ("ufs-qcom-ice: add Inline Crypto Engine (ICE) support for UFS") in today's linux-next (ie, next-20150123). I noticed because a script I use to check linux-next spotted a problem with it. > --- > drivers/scsi/ufs/Kconfig| 12 + > drivers/scsi/ufs/Makefile | 1 + > drivers/scsi/ufs/ufs-qcom-ice.c | 520 > > drivers/scsi/ufs/ufs-qcom-ice.h | 113 + > drivers/scsi/ufs/ufs-qcom.c | 56 - > drivers/scsi/ufs/ufs-qcom.h | 25 ++ > 6 files changed, 726 insertions(+), 1 deletion(-) > create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.c > create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.h > > diff --git a/drivers/scsi/ufs/Kconfig b/drivers/scsi/ufs/Kconfig > index 8a1f4b3..ecf34ed 100644 > --- a/drivers/scsi/ufs/Kconfig > +++ b/drivers/scsi/ufs/Kconfig > @@ -83,3 +83,15 @@ config SCSI_UFS_QCOM > > Select this if you have UFS controller on QCOM chipset. > If unsure, say N. > + > +config SCSI_UFS_QCOM_ICE > + bool "QCOM specific hooks to Inline Crypto Engine for UFS driver" > + depends on SCSI_UFS_QCOM && CRYPTO_DEV_QCOM_ICE There's currently no Kconfig symbol CRYPTO_DEV_QCOM_ICE in linux-next. So SCSI_UFS_QCOM_ICE can not be set and these "in-line encryption capabilities" can not be enabled. > + help > + This selects the QCOM specific additions to support Inline Crypto > + Engine (ICE). > + ICE accelerates the crypto operations and maintains the high UFS > + performance. > + > + Select this if you have ICE supported for UFS on QCOM chipset. > + If unsure, say N. > diff --git a/drivers/scsi/ufs/Makefile b/drivers/scsi/ufs/Makefile > index 8303bcc..31adca5 100644 > --- a/drivers/scsi/ufs/Makefile > +++ b/drivers/scsi/ufs/Makefile > @@ -1,5 +1,6 @@ > # UFSHCD makefile > obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o > +obj-$(CONFIG_SCSI_UFS_QCOM_ICE) += ufs-qcom-ice.o > obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o > obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o > obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += ufshcd-pltfrm.o > diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c b/drivers/scsi/ufs/ufs-qcom-ice.c > new file mode 100644 > index 000..9202b73 > --- /dev/null > +++ b/drivers/scsi/ufs/ufs-qcom-ice.c > @@ -0,0 +1,520 @@ > +/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 and > + * only version 2 as published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include This header is not included in linux-next so manually building ufs-qcom-ice.o isn't possible either. I assume a series to add CRYPTO_DEV_QCOM_ICE and crypto/ice.h (and whatever else is needed to build this) is queued somewhere. Is that correct? Paul Bolle -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v7 5/5] scsi: ufs-qcom-ice: add Inline Crypto Engine (ICE) support for UFS
Reviewed-by: Dov Levenglick > From: Yaniv Gardi > > In-order to enhance storage encryption performance, > an Inline Cryptographic Engine is introduced to UFS. > This patch adds in-line encryption capabilities to the UFS > driver. > > Signed-off-by: Yaniv Gardi > > --- > drivers/scsi/ufs/Kconfig| 12 + > drivers/scsi/ufs/Makefile | 1 + > drivers/scsi/ufs/ufs-qcom-ice.c | 520 > > drivers/scsi/ufs/ufs-qcom-ice.h | 113 + > drivers/scsi/ufs/ufs-qcom.c | 56 - > drivers/scsi/ufs/ufs-qcom.h | 25 ++ > 6 files changed, 726 insertions(+), 1 deletion(-) > create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.c > create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.h > > diff --git a/drivers/scsi/ufs/Kconfig b/drivers/scsi/ufs/Kconfig > index 8a1f4b3..ecf34ed 100644 > --- a/drivers/scsi/ufs/Kconfig > +++ b/drivers/scsi/ufs/Kconfig > @@ -83,3 +83,15 @@ config SCSI_UFS_QCOM > > Select this if you have UFS controller on QCOM chipset. > If unsure, say N. > + > +config SCSI_UFS_QCOM_ICE > + bool "QCOM specific hooks to Inline Crypto Engine for UFS driver" > + depends on SCSI_UFS_QCOM && CRYPTO_DEV_QCOM_ICE > + help > + This selects the QCOM specific additions to support Inline > Crypto > + Engine (ICE). > + ICE accelerates the crypto operations and maintains the high UFS > + performance. > + > + Select this if you have ICE supported for UFS on QCOM chipset. > + If unsure, say N. > diff --git a/drivers/scsi/ufs/Makefile b/drivers/scsi/ufs/Makefile > index 8303bcc..31adca5 100644 > --- a/drivers/scsi/ufs/Makefile > +++ b/drivers/scsi/ufs/Makefile > @@ -1,5 +1,6 @@ > # UFSHCD makefile > obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o > +obj-$(CONFIG_SCSI_UFS_QCOM_ICE) += ufs-qcom-ice.o > obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o > obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o > obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += ufshcd-pltfrm.o > diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c > b/drivers/scsi/ufs/ufs-qcom-ice.c > new file mode 100644 > index 000..9202b73 > --- /dev/null > +++ b/drivers/scsi/ufs/ufs-qcom-ice.c > @@ -0,0 +1,520 @@ > +/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 and > + * only version 2 as published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include > + > +#include "ufs-qcom-ice.h" > +#include "ufshcd.h" > + > +#define UFS_QCOM_CRYPTO_LABEL "ufs-qcom-crypto" > +/* Timeout waiting for ICE initialization, that requires TZ access */ > +#define UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS 500 > + > +static void ufs_qcom_ice_success_cb(void *host_ctrl, > + enum ice_event_completion evt) > +{ > + struct ufs_qcom_host *qcom_host = (struct ufs_qcom_host > *)host_ctrl; > + > + if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_DISABLED && > + evt == ICE_INIT_COMPLETION) > + qcom_host->ice.state = UFS_QCOM_ICE_STATE_ACTIVE; > + else if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_SUSPENDED && > +evt == ICE_RESUME_COMPLETION) > + qcom_host->ice.state = UFS_QCOM_ICE_STATE_ACTIVE; > + > + complete(&qcom_host->ice.async_done); > +} > + > +static void ufs_qcom_ice_error_cb(void *host_ctrl, enum ice_error_code > evt) > +{ > + struct ufs_qcom_host *qcom_host = (struct ufs_qcom_host > *)host_ctrl; > + > + dev_err(qcom_host->hba->dev, "%s: Error in ice operation %d", > + __func__, evt); > + > + if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_ACTIVE) > + qcom_host->ice.state = UFS_QCOM_ICE_STATE_DISABLED; > + > + complete(&qcom_host->ice.async_done); > +} > + > +static struct platform_device *ufs_qcom_ice_get_pdevice(struct device > *ufs_dev) > +{ > + struct device_node *node; > + struct platform_device *ice_pdev = NULL; > + > + node = of_parse_phandle(ufs_dev->of_node, UFS_QCOM_CRYPTO_LABEL, > 0); > + > + if (!node) { > + dev_err(ufs_dev, "%s: ufs-qcom-crypto property not > specified\n", > + __func__); > + goto out; > + } > + > + ice_pdev = qcom_ice_get_pdevice(node); > +out: > + return ice_pdev; > +} > + > +static > +struct qcom_ice_variant_ops *ufs_qcom_ice_get_vops(struct device > *ufs_dev) > +{ > + struct qcom_ice_variant_ops *ice_vops = NULL; > + struct device_node *node; > + > + node = of_parse_phandle(ufs_dev->of_node, UFS_QCOM_CRYPTO_LABEL, > 0); > + > + if (!node) { > + dev_err(ufs_dev, "%s
[PATCH v7 5/5] scsi: ufs-qcom-ice: add Inline Crypto Engine (ICE) support for UFS
From: Yaniv Gardi In-order to enhance storage encryption performance, an Inline Cryptographic Engine is introduced to UFS. This patch adds in-line encryption capabilities to the UFS driver. Signed-off-by: Yaniv Gardi --- drivers/scsi/ufs/Kconfig| 12 + drivers/scsi/ufs/Makefile | 1 + drivers/scsi/ufs/ufs-qcom-ice.c | 520 drivers/scsi/ufs/ufs-qcom-ice.h | 113 + drivers/scsi/ufs/ufs-qcom.c | 56 - drivers/scsi/ufs/ufs-qcom.h | 25 ++ 6 files changed, 726 insertions(+), 1 deletion(-) create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.c create mode 100644 drivers/scsi/ufs/ufs-qcom-ice.h diff --git a/drivers/scsi/ufs/Kconfig b/drivers/scsi/ufs/Kconfig index 8a1f4b3..ecf34ed 100644 --- a/drivers/scsi/ufs/Kconfig +++ b/drivers/scsi/ufs/Kconfig @@ -83,3 +83,15 @@ config SCSI_UFS_QCOM Select this if you have UFS controller on QCOM chipset. If unsure, say N. + +config SCSI_UFS_QCOM_ICE + bool "QCOM specific hooks to Inline Crypto Engine for UFS driver" + depends on SCSI_UFS_QCOM && CRYPTO_DEV_QCOM_ICE + help + This selects the QCOM specific additions to support Inline Crypto + Engine (ICE). + ICE accelerates the crypto operations and maintains the high UFS + performance. + + Select this if you have ICE supported for UFS on QCOM chipset. + If unsure, say N. diff --git a/drivers/scsi/ufs/Makefile b/drivers/scsi/ufs/Makefile index 8303bcc..31adca5 100644 --- a/drivers/scsi/ufs/Makefile +++ b/drivers/scsi/ufs/Makefile @@ -1,5 +1,6 @@ # UFSHCD makefile obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o +obj-$(CONFIG_SCSI_UFS_QCOM_ICE) += ufs-qcom-ice.o obj-$(CONFIG_SCSI_UFSHCD) += ufshcd.o obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += ufshcd-pltfrm.o diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c b/drivers/scsi/ufs/ufs-qcom-ice.c new file mode 100644 index 000..9202b73 --- /dev/null +++ b/drivers/scsi/ufs/ufs-qcom-ice.c @@ -0,0 +1,520 @@ +/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include + +#include "ufs-qcom-ice.h" +#include "ufshcd.h" + +#define UFS_QCOM_CRYPTO_LABEL "ufs-qcom-crypto" +/* Timeout waiting for ICE initialization, that requires TZ access */ +#define UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS 500 + +static void ufs_qcom_ice_success_cb(void *host_ctrl, + enum ice_event_completion evt) +{ + struct ufs_qcom_host *qcom_host = (struct ufs_qcom_host *)host_ctrl; + + if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_DISABLED && + evt == ICE_INIT_COMPLETION) + qcom_host->ice.state = UFS_QCOM_ICE_STATE_ACTIVE; +else if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_SUSPENDED && + evt == ICE_RESUME_COMPLETION) + qcom_host->ice.state = UFS_QCOM_ICE_STATE_ACTIVE; + + complete(&qcom_host->ice.async_done); +} + +static void ufs_qcom_ice_error_cb(void *host_ctrl, enum ice_error_code evt) +{ + struct ufs_qcom_host *qcom_host = (struct ufs_qcom_host *)host_ctrl; + + dev_err(qcom_host->hba->dev, "%s: Error in ice operation %d", + __func__, evt); + + if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_ACTIVE) + qcom_host->ice.state = UFS_QCOM_ICE_STATE_DISABLED; + + complete(&qcom_host->ice.async_done); +} + +static struct platform_device *ufs_qcom_ice_get_pdevice(struct device *ufs_dev) +{ + struct device_node *node; + struct platform_device *ice_pdev = NULL; + + node = of_parse_phandle(ufs_dev->of_node, UFS_QCOM_CRYPTO_LABEL, 0); + + if (!node) { + dev_err(ufs_dev, "%s: ufs-qcom-crypto property not specified\n", + __func__); + goto out; + } + + ice_pdev = qcom_ice_get_pdevice(node); +out: + return ice_pdev; +} + +static +struct qcom_ice_variant_ops *ufs_qcom_ice_get_vops(struct device *ufs_dev) +{ + struct qcom_ice_variant_ops *ice_vops = NULL; + struct device_node *node; + + node = of_parse_phandle(ufs_dev->of_node, UFS_QCOM_CRYPTO_LABEL, 0); + + if (!node) { + dev_err(ufs_dev, "%s: ufs-qcom-crypto property not specified\n", + __func__); + goto out; + } + + ice_vops = qcom_ice_get_variant_ops(node); + + if (!ice_vops) + dev_err(ufs_dev, "%s: invali