[PATCH v2 00/15] introduce exynosauto v9 ufs driver

Chanho Park
2021-07-14T07:12:20Z

In ExynosAuto(variant of the Exynos for automotive), the UFS Storage needs
to be accessed from multi-OS. To increase IO performance and reduce SW
complexity, we implemented UFS-IOV to support storage IO virtualization
feature on UFS.

IO virtualization increases IO performance and reduce SW complexity
with small area cost. And IO virtualization supports virtual machine
isolation for Security and Safety which are requested by Multi-OS system
such as automotive application.

Below figure is the conception of UFS-IOV architeture.

+------+ +------+
| OS#1 | | OS#2 |
+------+ +------+
| |
+------------+ +------------+
| Physical | | Virtual |
| Host | | Host |
+------------+ +------------+
| | | <-- UTP_CMD_SAP, UTP_TM_SAP
| +-------------------------+
| | Function Arbitor |
| +-------------------------+
+-------------------------------+
| UTP Layer |
+-------------------------------+
+-------------------------------+
| UIC Layer |
+-------------------------------+

There are two types of host controllers on the UFS host controller
that we designed.
The UFS device has a Function Arbitor that arranges commands of each host.
When each host transmits a command to the Arbitor, the Arbitor transmits it
to the UTP layer.
Physical Host(PH) support all UFSHCI functions(all SAPs) same as
conventional UFSHCI.
Virtual Host(VH) support only data transfer function(UTP_CMD_SAP and
UTP_TM_SAP).

In an environment where multiple OSs are used, the OS that has the
leadership of the system is called System OS(Dom0). This system OS uses
PH and controls error handling.

Since VH can only use less functions than PH, it is necessary to send a
request to PH for Detected Error Handling in VH. To interface among PH
and VHs, UFSHCI HW supports mailbox. PH can broadcast mail to other VH at
the same time with arguments and VH can mail to PH with arguments.
PH and VH generate interrupts when mails from PH or VH.

In this structure, the virtual host can't support some feature and need
to skip the some part of ufshcd code by using quirk.
This patchs add quirks so that the UIC command is ignored and the ufshcd
init process can be skipped for VH. Also, according to our UFS-IOV policy,

First two patches, I picked them up from Jonmin's patchset[1] and the third
patch has been dropped because we need to check it again.

[1]: https://lore.kernel.org/linux-scsi/20210527030901.88403-1-jjmin.jeong@samsung.com/

Patch 0003 ~ 0012, they are changes of exynos7 ufs driver to apply
exynosauto v9 variant and PH/VH capabilities.
Patch 0013 ~ 0015, they introduce exynosauto v9 ufs MHCI which includes
PH and VH.

Changes from v1:
- Change quirk name from UFSHCD_QUIRK_SKIP_INTERFACE_CONFIGURATION to
UFSHCD_QUIRK_SKIP_PH_CONFIGURATION
- Add compatibles to Documentation/devicetree/bindings/ufs/samsung,exynos-ufs.yaml
on top of https://lore.kernel.org/linux-scsi/20200613024706.27975-9-alim.akhtar@samsung.com/

Chanho Park (13):
scsi: ufs: ufs-exynos: change pclk available max value
scsi: ufs: ufs-exynos: simplify drv_data retrieval
scsi: ufs: ufs-exynos: get sysreg regmap for io-coherency
scsi: ufs: ufs-exynos: add refclkout_stop control
scsi: ufs: ufs-exynos: add setup_clocks callback
scsi: ufs: ufs-exynos: correct timeout value setting registers
scsi: ufs: ufs-exynos: support custom version of ufs_hba_variant_ops
scsi: ufs: ufs-exynos: add EXYNOS_UFS_OPT_SKIP_CONFIG_PHY_ATTR option
scsi: ufs: ufs-exynos: factor out priv data init
scsi: ufs: ufs-exynos: add pre/post_hce_enable drv callbacks
scsi: ufs: ufs-exynos: support exynosauto v9 ufs driver
scsi: ufs: ufs-exynos: multi-host configuration for exynosauto
scsi: ufs: ufs-exynos: introduce exynosauto v9 virtual host

jongmin jeong (2):
scsi: ufs: add quirk to handle broken UIC command
scsi: ufs: add quirk to enable host controller without ph
configuration

.../bindings/ufs/samsung,exynos-ufs.yaml | 7 +
drivers/scsi/ufs/ufs-exynos.c | 318 ++++++++++++++++--
drivers/scsi/ufs/ufs-exynos.h | 10 +-
drivers/scsi/ufs/ufshcd.c | 6 +
drivers/scsi/ufs/ufshcd.h | 12 +
5 files changed, 327 insertions(+), 26 deletions(-)

--
2.32.0