# SPDX-License-Identifier: GPL-2.0+
#
# Kernel configuration file for the UFS Host Controller core.
#
# Copyright (C) 2011-2013 Samsung India Software Operations
#
# Authors:
#	Santosh Yaraganavi <santosh.sy@samsung.com>
#	Vinayak Holikatti <h.vinayak@samsung.com>

config SCSI_UFS_BSG
	bool "Universal Flash Storage BSG device node"
	select BLK_DEV_BSGLIB
	help
	  Universal Flash Storage (UFS) is SCSI transport specification for
	  accessing flash storage on digital cameras, mobile phones and
	  consumer electronic devices.
	  A UFS controller communicates with a UFS device by exchanging
	  UFS Protocol Information Units (UPIUs).
	  UPIUs can not only be used as a transport layer for the SCSI protocol
	  but are also used by the UFS native command set.
	  This transport driver supports exchanging UFS protocol information units
	  with a UFS device. See also the ufshcd driver, which is a SCSI driver
	  that supports UFS devices.

	  Select this if you need a bsg device node for your UFS controller.
	  If unsure, say N.

config SCSI_UFS_CRYPTO
	bool "UFS Crypto Engine Support"
	depends on BLK_INLINE_ENCRYPTION
	help
	  Enable Crypto Engine Support in UFS.
	  Enabling this makes it possible for the kernel to use the crypto
	  capabilities of the UFS device (if present) to perform crypto
	  operations on data being transferred to/from the device.

config SCSI_UFS_HPB
	bool "Support UFS Host Performance Booster"
	help
	  The UFS HPB feature improves random read performance. It caches
	  L2P (logical to physical) map of UFS to host DRAM. The driver uses HPB
	  read command by piggybacking physical page number for bypassing FTL (flash
	  translation layer)'s L2P address translation.

config SCSI_UFS_FAULT_INJECTION
	bool "UFS Fault Injection Support"
	depends on FAULT_INJECTION
	help
	  Enable fault injection support in the UFS driver. This makes it easier
	  to test the UFS error handler and abort handler.

config SCSI_UFS_HWMON
	bool "UFS Temperature Notification"
	depends on SCSI_UFSHCD=HWMON || HWMON=y
	help
	  This provides support for UFS hardware monitoring. If enabled,
	  a hardware monitoring device will be created for the UFS device.

	  If unsure, say N.
