[PATCH v1] Revert "scsi: ufs-qcom-ice: add Inline Crypto Engine (ICE) support for UFS"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This reverts commit 54acb89a8d8682d99ee8594f9ce0dd863a2df80d.

Since ICE driver hasn't been uploaded to upstream, ICE support for
UFS driver could not be functional at this time.
Therefore this change should be reverted.
---
 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, 1 insertion(+), 726 deletions(-)
 delete mode 100644 drivers/scsi/ufs/ufs-qcom-ice.c
 delete mode 100644 drivers/scsi/ufs/ufs-qcom-ice.h

diff --git a/drivers/scsi/ufs/Kconfig b/drivers/scsi/ufs/Kconfig
index ecf34ed..8a1f4b3 100644
--- a/drivers/scsi/ufs/Kconfig
+++ b/drivers/scsi/ufs/Kconfig
@@ -83,15 +83,3 @@ 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 31adca5..8303bcc 100644
--- a/drivers/scsi/ufs/Makefile
+++ b/drivers/scsi/ufs/Makefile
@@ -1,6 +1,5 @@
 # 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
deleted file mode 100644
index 9202b73..0000000
--- a/drivers/scsi/ufs/ufs-qcom-ice.c
+++ /dev/null
@@ -1,520 +0,0 @@
-/* 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 <linux/of.h>
-#include <linux/async.h>
-#include <linux/blkdev.h>
-#include <crypto/ice.h>
-
-#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: invalid ice_vops\n", __func__);
-
-	of_node_put(node);
-out:
-	return ice_vops;
-}
-
-/**
- * ufs_qcom_ice_get_dev() - sets pointers to ICE data structs in UFS QCom host
- * @qcom_host:	Pointer to a UFS QCom internal host structure.
- *
- * Sets ICE platform device pointer and ICE vops structure
- * corresponding to the current UFS device.
- *
- * Return: -EINVAL in-case of invalid input parameters:
- *  qcom_host, qcom_host->hba or qcom_host->hba->dev
- *         -ENODEV in-case ICE device is not required
- *         -EPROBE_DEFER in-case ICE is required and hasn't been probed yet
- *         0 otherwise
- */
-int ufs_qcom_ice_get_dev(struct ufs_qcom_host *qcom_host)
-{
-	struct device *ufs_dev;
-	int err = 0;
-
-	if (!qcom_host || !qcom_host->hba || !qcom_host->hba->dev) {
-		pr_err("%s: invalid qcom_host %p or qcom_host->hba or qcom_host->hba->dev\n",
-			__func__, qcom_host);
-		err = -EINVAL;
-		goto out;
-	}
-
-	ufs_dev = qcom_host->hba->dev;
-
-	qcom_host->ice.vops  = ufs_qcom_ice_get_vops(ufs_dev);
-	qcom_host->ice.pdev = ufs_qcom_ice_get_pdevice(ufs_dev);
-
-	if (qcom_host->ice.pdev == ERR_PTR(-EPROBE_DEFER)) {
-		dev_err(ufs_dev, "%s: ICE device not probed yet\n",
-			__func__);
-		qcom_host->ice.pdev = NULL;
-		qcom_host->ice.vops = NULL;
-		err = -EPROBE_DEFER;
-		goto out;
-	}
-
-	if (!qcom_host->ice.pdev || !qcom_host->ice.vops) {
-		dev_err(ufs_dev, "%s: invalid platform device %p or vops %p\n",
-			__func__, qcom_host->ice.pdev, qcom_host->ice.vops);
-		qcom_host->ice.pdev = NULL;
-		qcom_host->ice.vops = NULL;
-		err = -ENODEV;
-		goto out;
-	}
-
-	qcom_host->ice.state = UFS_QCOM_ICE_STATE_DISABLED;
-
-out:
-	return err;
-
-}
-
-/**
- * ufs_qcom_ice_init() - initializes the ICE-UFS interface and ICE device
- * @qcom_host:	Pointer to a UFS QCom internal host structure.
- *		qcom_host, qcom_host->hba and qcom_host->hba->dev should all
- *		be valid pointers.
- *
- * Return: -EINVAL in-case of an error
- *         0 otherwise
- */
-int ufs_qcom_ice_init(struct ufs_qcom_host *qcom_host)
-{
-	struct device *ufs_dev = qcom_host->hba->dev;
-	int err = -EINVAL;
-
-	init_completion(&qcom_host->ice.async_done);
-	err = qcom_host->ice.vops->init(qcom_host->ice.pdev,
-				qcom_host,
-				ufs_qcom_ice_success_cb,
-				ufs_qcom_ice_error_cb);
-	if (err) {
-		dev_err(ufs_dev, "%s: ice init failed. err = %d\n",
-			__func__, err);
-		goto out;
-	}
-
-	if (!wait_for_completion_timeout(&qcom_host->ice.async_done,
-			msecs_to_jiffies(UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS))) {
-		dev_err(qcom_host->hba->dev,
-			"%s: error. got timeout after %d ms\n",
-			__func__, UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS);
-		err = -ETIMEDOUT;
-		goto out;
-	}
-
-	if (qcom_host->ice.state != UFS_QCOM_ICE_STATE_ACTIVE) {
-		dev_err(qcom_host->hba->dev,
-			"%s: error. ice.state (%d) is not in active state\n",
-			__func__, qcom_host->ice.state);
-		err = -EINVAL;
-	}
-
-out:
-	return err;
-}
-
-static inline bool ufs_qcom_is_data_cmd(char cmd_op, bool is_write)
-{
-	if (is_write) {
-		if (cmd_op == WRITE_6 || cmd_op == WRITE_10 ||
-		    cmd_op == WRITE_16)
-			return true;
-	} else {
-		if (cmd_op == READ_6 || cmd_op == READ_10 ||
-		    cmd_op == READ_16)
-			return true;
-	}
-
-	return false;
-}
-
-/**
- * ufs_qcom_ice_cfg() - configures UFS's ICE registers for an ICE transaction
- * @qcom_host:	Pointer to a UFS QCom internal host structure.
- *		qcom_host, qcom_host->hba and qcom_host->hba->dev should all
- *		be valid pointers.
- * @cmd:	Pointer to a valid scsi command. cmd->request should also be
- *              a valid pointer.
- *
- * Return: -EINVAL in-case of an error
- *         0 otherwise
- */
-int ufs_qcom_ice_cfg(struct ufs_qcom_host *qcom_host, struct scsi_cmnd *cmd)
-{
-	struct device *dev = qcom_host->hba->dev;
-	int err = 0;
-	struct ice_data_setting ice_set;
-	unsigned int slot = 0;
-	sector_t lba = 0;
-	unsigned int ctrl_info_2_val = 0;
-	unsigned int bypass = 0;
-	struct request *req;
-	char cmd_op;
-
-	if (!qcom_host->ice.pdev || !qcom_host->ice.vops) {
-		dev_dbg(dev, "%s: ice device is not enabled\n", __func__);
-		goto out;
-	}
-
-	if (qcom_host->ice.state != UFS_QCOM_ICE_STATE_ACTIVE) {
-		dev_err(dev, "%s: ice state (%d) is not active\n",
-			__func__, qcom_host->ice.state);
-		return -EINVAL;
-	}
-
-	req = cmd->request;
-	if (req->bio)
-		lba = req->bio->bi_sector;
-
-	slot = req->tag;
-	if (slot < 0 || slot > qcom_host->hba->nutrs) {
-		dev_err(dev, "%s: slot (%d) is out of boundaries (0...%d)\n",
-			__func__, slot, qcom_host->hba->nutrs);
-		return -EINVAL;
-	}
-
-	memset(&ice_set, sizeof(ice_set), 0);
-	if (qcom_host->ice.vops->config) {
-		err = qcom_host->ice.vops->config(qcom_host->ice.pdev,
-							req, &ice_set);
-
-		if (err) {
-			dev_err(dev, "%s: error in ice_vops->config %d\n",
-				__func__, err);
-			goto out;
-		}
-	}
-
-	cmd_op = cmd->cmnd[0];
-
-#define UFS_QCOM_DIR_WRITE	true
-#define UFS_QCOM_DIR_READ	false
-	/* if non data command, bypass shall be enabled */
-	if (!ufs_qcom_is_data_cmd(cmd_op, UFS_QCOM_DIR_WRITE) &&
-	    !ufs_qcom_is_data_cmd(cmd_op, UFS_QCOM_DIR_READ))
-		bypass = UFS_QCOM_ICE_ENABLE_BYPASS;
-	/* if writing data command */
-	else if (ufs_qcom_is_data_cmd(cmd_op, UFS_QCOM_DIR_WRITE))
-		bypass = ice_set.encr_bypass ? UFS_QCOM_ICE_ENABLE_BYPASS :
-						UFS_QCOM_ICE_DISABLE_BYPASS;
-	/* if reading data command */
-	else if (ufs_qcom_is_data_cmd(cmd_op, UFS_QCOM_DIR_READ))
-		bypass = ice_set.decr_bypass ? UFS_QCOM_ICE_ENABLE_BYPASS :
-						UFS_QCOM_ICE_DISABLE_BYPASS;
-
-	/* Configure ICE index */
-	ctrl_info_2_val =
-		(ice_set.crypto_data.key_index &
-		 MASK_UFS_QCOM_ICE_CTRL_INFO_2_KEY_INDEX)
-		 << OFFSET_UFS_QCOM_ICE_CTRL_INFO_2_KEY_INDEX;
-
-	/* Configure data unit size of transfer request */
-	ctrl_info_2_val |=
-		(UFS_QCOM_ICE_TR_DATA_UNIT_4_KB &
-		 MASK_UFS_QCOM_ICE_CTRL_INFO_2_CDU)
-		 << OFFSET_UFS_QCOM_ICE_CTRL_INFO_2_CDU;
-
-	/* Configure ICE bypass mode */
-	ctrl_info_2_val |=
-		(bypass & MASK_UFS_QCOM_ICE_CTRL_INFO_2_BYPASS)
-		 << OFFSET_UFS_QCOM_ICE_CTRL_INFO_2_BYPASS;
-
-	ufshcd_writel(qcom_host->hba, lba,
-		     (REG_UFS_QCOM_ICE_CTRL_INFO_1_n + 8 * slot));
-
-	ufshcd_writel(qcom_host->hba, ctrl_info_2_val,
-		     (REG_UFS_QCOM_ICE_CTRL_INFO_2_n + 8 * slot));
-
-	/*
-	 * Ensure UFS-ICE registers are being configured
-	 * before next operation, otherwise UFS Host Controller might
-	 * set get errors
-	 */
-	mb();
-out:
-	return err;
-}
-
-/**
- * ufs_qcom_ice_reset() - resets UFS-ICE interface and ICE device
- * @qcom_host:	Pointer to a UFS QCom internal host structure.
- *		qcom_host, qcom_host->hba and qcom_host->hba->dev should all
- *		be valid pointers.
- *
- * Return: -EINVAL in-case of an error
- *         0 otherwise
- */
-int ufs_qcom_ice_reset(struct ufs_qcom_host *qcom_host)
-{
-	struct device *dev = qcom_host->hba->dev;
-	int err = 0;
-
-	if (!qcom_host->ice.pdev) {
-		dev_dbg(dev, "%s: ice device is not enabled\n", __func__);
-		goto out;
-	}
-
-	if (!qcom_host->ice.vops) {
-		dev_err(dev, "%s: invalid ice_vops\n", __func__);
-		return -EINVAL;
-	}
-
-	if (qcom_host->ice.state != UFS_QCOM_ICE_STATE_ACTIVE)
-		goto out;
-
-	init_completion(&qcom_host->ice.async_done);
-
-	if (qcom_host->ice.vops->reset) {
-		err = qcom_host->ice.vops->reset(qcom_host->ice.pdev);
-		if (err) {
-			dev_err(dev, "%s: ice_vops->reset failed. err %d\n",
-				__func__, err);
-			goto out;
-		}
-	}
-
-	if (!wait_for_completion_timeout(&qcom_host->ice.async_done,
-	     msecs_to_jiffies(UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS))) {
-		dev_err(dev,
-			"%s: error. got timeout after %d ms\n",
-			__func__, UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS);
-		err = -ETIMEDOUT;
-	}
-
-out:
-	return err;
-}
-
-/**
- * ufs_qcom_ice_resume() - resumes UFS-ICE interface and ICE device from power
- * collapse
- * @qcom_host:	Pointer to a UFS QCom internal host structure.
- *		qcom_host, qcom_host->hba and qcom_host->hba->dev should all
- *		be valid pointers.
- *
- * Return: -EINVAL in-case of an error
- *         0 otherwise
- */
-int ufs_qcom_ice_resume(struct ufs_qcom_host *qcom_host)
-{
-	struct device *dev = qcom_host->hba->dev;
-	int err = 0;
-
-	if (!qcom_host->ice.pdev) {
-		dev_dbg(dev, "%s: ice device is not enabled\n", __func__);
-		goto out;
-	}
-
-	if (qcom_host->ice.state !=
-			UFS_QCOM_ICE_STATE_SUSPENDED) {
-		goto out;
-	}
-
-	if (!qcom_host->ice.vops) {
-		dev_err(dev, "%s: invalid ice_vops\n", __func__);
-		return -EINVAL;
-	}
-
-	init_completion(&qcom_host->ice.async_done);
-
-	if (qcom_host->ice.vops->resume) {
-		err = qcom_host->ice.vops->resume(qcom_host->ice.pdev);
-		if (err) {
-			dev_err(dev, "%s: ice_vops->resume failed. err %d\n",
-				__func__, err);
-			return -EINVAL;
-		}
-	}
-
-	if (!wait_for_completion_timeout(&qcom_host->ice.async_done,
-			msecs_to_jiffies(UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS))) {
-		dev_err(dev,
-			"%s: error. got timeout after %d ms\n",
-			__func__, UFS_QCOM_ICE_COMPLETION_TIMEOUT_MS);
-		err = -ETIMEDOUT;
-		goto out;
-	}
-
-	if (qcom_host->ice.state != UFS_QCOM_ICE_STATE_ACTIVE)
-		err = -EINVAL;
-out:
-	return err;
-}
-
-/**
- * ufs_qcom_ice_suspend() - suspends UFS-ICE interface and ICE device
- * @qcom_host:	Pointer to a UFS QCom internal host structure.
- *		qcom_host, qcom_host->hba and qcom_host->hba->dev should all
- *		be valid pointers.
- *
- * Return: -EINVAL in-case of an error
- *         0 otherwise
- */
-int ufs_qcom_ice_suspend(struct ufs_qcom_host *qcom_host)
-{
-	struct device *dev = qcom_host->hba->dev;
-	int err = 0;
-
-	if (!qcom_host->ice.pdev) {
-		dev_dbg(dev, "%s: ice device is not enabled\n", __func__);
-		goto out;
-	}
-
-	if (qcom_host->ice.vops->suspend) {
-		err = qcom_host->ice.vops->suspend(qcom_host->ice.pdev);
-		if (err) {
-			dev_err(qcom_host->hba->dev,
-				"%s: ice_vops->suspend failed. err %d\n",
-				__func__, err);
-			return -EINVAL;
-		}
-	}
-
-	if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_ACTIVE) {
-		qcom_host->ice.state = UFS_QCOM_ICE_STATE_SUSPENDED;
-	} else if (qcom_host->ice.state == UFS_QCOM_ICE_STATE_DISABLED) {
-		dev_err(qcom_host->hba->dev,
-				"%s: ice state is invalid: disabled\n",
-				__func__);
-		err = -EINVAL;
-	}
-
-out:
-	return err;
-}
-
-/**
- * ufs_qcom_ice_get_status() - returns the status of an ICE transaction
- * @qcom_host:	Pointer to a UFS QCom internal host structure.
- *		qcom_host, qcom_host->hba and qcom_host->hba->dev should all
- *		be valid pointers.
- * @ice_status:	Pointer to a valid output parameter.
- *		< 0 in case of ICE transaction failure.
- *		0 otherwise.
- *
- * Return: -EINVAL in-case of an error
- *         0 otherwise
- */
-int ufs_qcom_ice_get_status(struct ufs_qcom_host *qcom_host, int *ice_status)
-{
-	struct device *dev = NULL;
-	int err = 0;
-	int stat = -EINVAL;
-
-	ice_status = 0;
-
-	dev = qcom_host->hba->dev;
-	if (!dev) {
-		err = -EINVAL;
-		goto out;
-	}
-
-	if (!qcom_host->ice.pdev) {
-		dev_dbg(dev, "%s: ice device is not enabled\n", __func__);
-		goto out;
-	}
-
-	if (qcom_host->ice.state != UFS_QCOM_ICE_STATE_ACTIVE) {
-		err = -EINVAL;
-		goto out;
-	}
-
-	if (!qcom_host->ice.vops) {
-		dev_err(dev, "%s: invalid ice_vops\n", __func__);
-		return -EINVAL;
-	}
-
-	if (qcom_host->ice.vops->status) {
-		stat = qcom_host->ice.vops->status(qcom_host->ice.pdev);
-		if (stat < 0) {
-			dev_err(dev, "%s: ice_vops->status failed. stat %d\n",
-				__func__, stat);
-			err = -EINVAL;
-			goto out;
-		}
-
-		*ice_status = stat;
-	}
-
-out:
-	return err;
-}
diff --git a/drivers/scsi/ufs/ufs-qcom-ice.h b/drivers/scsi/ufs/ufs-qcom-ice.h
deleted file mode 100644
index 5ccbf5f..0000000
--- a/drivers/scsi/ufs/ufs-qcom-ice.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* 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.
- *
- */
-
-#ifndef _UFS_QCOM_ICE_H_
-#define _UFS_QCOM_ICE_H_
-
-#include <scsi/scsi_cmnd.h>
-
-#include "ufs-qcom.h"
-
-/*
- * UFS host controller ICE registers. There are n [0..31]
- * of each of these registers
- */
-enum {
-	REG_UFS_QCOM_ICE_CTRL_INFO_1_n           = 0x2204,
-	REG_UFS_QCOM_ICE_CTRL_INFO_2_n           = 0x2208,
-};
-
-/* UFS QCOM ICE CTRL Info 2 register offset */
-enum {
-	OFFSET_UFS_QCOM_ICE_CTRL_INFO_2_BYPASS     = 0,
-	OFFSET_UFS_QCOM_ICE_CTRL_INFO_2_KEY_INDEX  = 0x1,
-	OFFSET_UFS_QCOM_ICE_CTRL_INFO_2_CDU        = 0x6,
-};
-
-/* UFS QCOM ICE CTRL Info 2 register masks */
-enum {
-	MASK_UFS_QCOM_ICE_CTRL_INFO_2_BYPASS     = 0x1,
-	MASK_UFS_QCOM_ICE_CTRL_INFO_2_KEY_INDEX  = 0x1F,
-	MASK_UFS_QCOM_ICE_CTRL_INFO_2_CDU        = 0x8,
-};
-
-/* UFS QCOM ICE encryption/decryption bypass state */
-enum {
-	UFS_QCOM_ICE_DISABLE_BYPASS  = 0,
-	UFS_QCOM_ICE_ENABLE_BYPASS = 1,
-};
-
-/* UFS QCOM ICE Crypto Data Unit of target DUN of Transfer Request */
-enum {
-	UFS_QCOM_ICE_TR_DATA_UNIT_512_B          = 0,
-	UFS_QCOM_ICE_TR_DATA_UNIT_1_KB           = 1,
-	UFS_QCOM_ICE_TR_DATA_UNIT_2_KB           = 2,
-	UFS_QCOM_ICE_TR_DATA_UNIT_4_KB           = 3,
-	UFS_QCOM_ICE_TR_DATA_UNIT_8_KB           = 4,
-	UFS_QCOM_ICE_TR_DATA_UNIT_16_KB          = 5,
-	UFS_QCOM_ICE_TR_DATA_UNIT_32_KB          = 6,
-};
-
-/* UFS QCOM ICE internal state */
-enum {
-	UFS_QCOM_ICE_STATE_DISABLED   = 0,
-	UFS_QCOM_ICE_STATE_ACTIVE     = 1,
-	UFS_QCOM_ICE_STATE_SUSPENDED  = 2,
-};
-
-#ifdef CONFIG_SCSI_UFS_QCOM_ICE
-int ufs_qcom_ice_get_dev(struct ufs_qcom_host *qcom_host);
-int ufs_qcom_ice_init(struct ufs_qcom_host *qcom_host);
-int ufs_qcom_ice_cfg(struct ufs_qcom_host *qcom_host, struct scsi_cmnd *cmd);
-int ufs_qcom_ice_reset(struct ufs_qcom_host *qcom_host);
-int ufs_qcom_ice_resume(struct ufs_qcom_host *qcom_host);
-int ufs_qcom_ice_suspend(struct ufs_qcom_host *qcom_host);
-int ufs_qcom_ice_get_status(struct ufs_qcom_host *qcom_host, int *ice_status);
-#else
-inline int ufs_qcom_ice_get_dev(struct ufs_qcom_host *qcom_host)
-{
-	if (qcom_host) {
-		qcom_host->ice.pdev = NULL;
-		qcom_host->ice.vops = NULL;
-	}
-	return -ENODEV;
-}
-inline int ufs_qcom_ice_init(struct ufs_qcom_host *qcom_host)
-{
-	return 0;
-}
-inline int ufs_qcom_ice_cfg(struct ufs_qcom_host *qcom_host,
-			    struct scsi_cmnd *cmd)
-{
-	return 0;
-}
-inline int ufs_qcom_ice_reset(struct ufs_qcom_host *qcom_host)
-{
-	return 0;
-}
-inline int ufs_qcom_ice_resume(struct ufs_qcom_host *qcom_host)
-{
-	return 0;
-}
-inline int ufs_qcom_ice_suspend(struct ufs_qcom_host *qcom_host)
-{
-	return 0;
-}
-inline int ufs_qcom_ice_get_status(struct ufs_qcom_host *qcom_host,
-				   int *ice_status)
-{
-	return 0;
-}
-#endif /* CONFIG_SCSI_UFS_QCOM_ICE */
-
-#endif /* UFS_QCOM_ICE_H_ */
diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index fd01255..9217af9 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -22,7 +22,6 @@
 #include "unipro.h"
 #include "ufs-qcom.h"
 #include "ufshci.h"
-#include "ufs-qcom-ice.h"
 
 static struct ufs_qcom_host *ufs_qcom_hosts[MAX_UFS_QCOM_HOSTS];
 
@@ -295,13 +294,6 @@ static int ufs_qcom_hce_enable_notify(struct ufs_hba *hba, bool status)
 		/* check if UFS PHY moved from DISABLED to HIBERN8 */
 		err = ufs_qcom_check_hibern8(hba);
 		ufs_qcom_enable_hw_clk_gating(hba);
-		if (!err) {
-			err = ufs_qcom_ice_reset(host);
-			if (err)
-				dev_err(hba->dev,
-					"%s: ufs_qcom_ice_reset() failed %d\n",
-					__func__, err);
-		}
 
 		break;
 	default:
@@ -461,10 +453,6 @@ static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 		 */
 		ufs_qcom_disable_lane_clks(host);
 		phy_power_off(phy);
-		ret = ufs_qcom_ice_suspend(host);
-		if (ret)
-			dev_err(hba->dev, "%s: failed ufs_qcom_ice_suspend %d\n",
-					__func__, ret);
 
 		/* Assert PHY soft reset */
 		ufs_qcom_assert_reset(hba);
@@ -475,10 +463,8 @@ static int ufs_qcom_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 	 * If UniPro link is not active, PHY ref_clk, main PHY analog power
 	 * rail and low noise analog power rail for PLL can be switched off.
 	 */
-	if (!ufs_qcom_is_link_active(hba)) {
+	if (!ufs_qcom_is_link_active(hba))
 		phy_power_off(phy);
-		ufs_qcom_ice_suspend(host);
-	}
 
 out:
 	return ret;
@@ -497,13 +483,6 @@ static int ufs_qcom_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 		goto out;
 	}
 
-	err = ufs_qcom_ice_resume(host);
-	if (err) {
-		dev_err(hba->dev, "%s: ufs_qcom_ice_resume failed, err = %d\n",
-			__func__, err);
-		goto out;
-	}
-
 	hba->is_sys_suspended = false;
 
 out:
@@ -938,30 +917,6 @@ static int ufs_qcom_init(struct ufs_hba *hba)
 	host->hba = hba;
 	hba->priv = (void *)host;
 
-	err = ufs_qcom_ice_get_dev(host);
-	if (err == -EPROBE_DEFER) {
-		/*
-		 * UFS driver might be probed before ICE driver does.
-		 * In that case we would like to return EPROBE_DEFER code
-		 * in order to delay its probing.
-		 */
-		dev_err(dev, "%s: required ICE device not probed yet err = %d\n",
-			__func__, err);
-		goto out_host_free;
-
-	} else if (err == -ENODEV) {
-		/*
-		 * ICE device is not enabled in DTS file. No need for further
-		 * initialization of ICE driver.
-		 */
-		dev_warn(dev, "%s: ICE device is not enabled",
-			__func__);
-	} else if (err) {
-		dev_err(dev, "%s: ufs_qcom_ice_get_dev failed %d\n",
-			__func__, err);
-		goto out_host_free;
-	}
-
 	host->generic_phy = devm_phy_get(dev, "ufsphy");
 
 	if (IS_ERR(host->generic_phy)) {
@@ -989,15 +944,6 @@ static int ufs_qcom_init(struct ufs_hba *hba)
 	hba->caps |= UFSHCD_CAP_AUTO_BKOPS_SUSPEND;
 
 	ufs_qcom_setup_clocks(hba, true);
-	if (host->ice.pdev) {
-		err = ufs_qcom_ice_init(host);
-		if (err) {
-			dev_err(dev, "%s: ICE driver initialization failed (%d)\n",
-				__func__, err);
-			device_remove_file(dev, &host->bus_vote.max_bus_bw);
-			goto out_disable_phy;
-		}
-	}
 
 	if (hba->dev->id < MAX_UFS_QCOM_HOSTS)
 		ufs_qcom_hosts[hba->dev->id] = host;
diff --git a/drivers/scsi/ufs/ufs-qcom.h b/drivers/scsi/ufs/ufs-qcom.h
index 8340f2c..9a6febd 100644
--- a/drivers/scsi/ufs/ufs-qcom.h
+++ b/drivers/scsi/ufs/ufs-qcom.h
@@ -151,30 +151,6 @@ struct ufs_qcom_bus_vote {
 	struct device_attribute max_bus_bw;
 };
 
-/**
- * struct ufs_qcom_ice_data - ICE related information
- * @vops:	pointer to variant operations of ICE
- * @async_done:	completion for supporting ICE's driver asynchronous nature
- * @pdev:	pointer to the proper ICE platform device
- * @state:      UFS-ICE interface's internal state (see
- *       ufs-qcom-ice.h for possible internal states)
- * @quirks:     UFS-ICE interface related quirks
- */
-struct ufs_qcom_ice_data {
-	struct qcom_ice_variant_ops *vops;
-	struct completion async_done;
-	struct platform_device *pdev;
-	int state;
-
-	/*
-	 * If UFS host controller should handle cryptographic engine's
-	 * errors, enables this quirk.
-	 */
-	#define UFS_QCOM_ICE_QUIRK_HANDLE_CRYPTO_ENGINE_ERRORS	UFS_BIT(0)
-
-	u16 quirks;
-};
-
 struct ufs_qcom_host {
 	struct phy *generic_phy;
 	struct ufs_hba *hba;
@@ -185,7 +161,6 @@ struct ufs_qcom_host {
 	struct clk *rx_l1_sync_clk;
 	struct clk *tx_l1_sync_clk;
 	bool is_lane_clks_enabled;
-	struct ufs_qcom_ice_data ice;
 };
 
 #define ufs_qcom_is_link_off(hba) ufshcd_is_link_off(hba)
-- 
1.8.5.2

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux