/*
 * UFS Host Controller driver for Exynos specific extensions
 *
 * Copyright (C) 2013-2014 Samsung Electronics Co., Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

#ifndef _UFS_EXYNOS_H_
#define _UFS_EXYNOS_H_

#include <linux/pm_qos.h>
#ifdef CONFIG_SOC_EXYNOS9610
#include "ufs-cal-9610.h"
#else
#include "ufs-cal-9810.h"
#endif
#include <crypto/fmp.h>

#define UFS_VER_0004	4
#define UFS_VER_0005	5

/*
 * Exynos's Vendor specific registers for UFSHCI
 */
#define HCI_TXPRDT_ENTRY_SIZE		0x00
#define HCI_RXPRDT_ENTRY_SIZE		0x04
#define HCI_TO_CNT_DIV_VAL              0x08
#define HCI_1US_TO_CNT_VAL		0x0C
 #define CNT_VAL_1US_MASK	0x3ff
#define HCI_INVALID_UPIU_CTRL		0x10
#define HCI_INVALID_UPIU_BADDR		0x14
#define HCI_INVALID_UPIU_UBADDR		0x18
#define HCI_INVALID_UTMR_OFFSET_ADDR	0x1C
#define HCI_INVALID_UTR_OFFSET_ADDR	0x20
#define HCI_INVALID_DIN_OFFSET_ADDR	0x24
#define HCI_VENDOR_SPECIFIC_IS		0x38
#define HCI_VENDOR_SPECIFIC_IE		0x3C
#define HCI_UTRL_NEXUS_TYPE		0x40
#define HCI_UTMRL_NEXUS_TYPE		0x44
#define HCI_E2EFC_CTRL			0x48
#define HCI_SW_RST			0x50
 #define UFS_LINK_SW_RST	(1 << 0)
 #define UFS_UNIPRO_SW_RST	(1 << 1)
 #define UFS_SW_RST_MASK	(UFS_UNIPRO_SW_RST | UFS_LINK_SW_RST)
#define HCI_LINK_VERSION		0x54
#define HCI_IDLE_TIMER_CONFIG		0x58
#define HCI_RX_UPIU_MATCH_ERROR_CODE	0x5C
#define HCI_DATA_REORDER		0x60
#define HCI_MAX_DOUT_DATA_SIZE		0x64
#define HCI_UNIPRO_APB_CLK_CTRL		0x68
#define HCI_AXIDMA_RWDATA_BURST_LEN	0x6C
 #define BURST_LEN(x)			((x) << 27 | (x))
 #define WLU_EN				(1 << 31)
 #define AXIDMA_RWDATA_BURST_LEN	(0xF)
#define HCI_GPIO_OUT			0x70
#define HCI_WRITE_DMA_CTRL		0x74
#define HCI_ERROR_EN_PA_LAYER		0x78
#define HCI_ERROR_EN_DL_LAYER		0x7C
#define HCI_ERROR_EN_N_LAYER		0x80
#define HCI_ERROR_EN_T_LAYER		0x84
#define HCI_ERROR_EN_DME_LAYER		0x88
#define HCI_UFSHCI_V2P1_CTRL			0X8C
#define IA_TICK_SEL				BIT(16)
#define HCI_REQ_HOLD_EN			0xAC

#define HCI_CLKSTOP_CTRL		0xB0
 #define REFCLKOUT_STOP			BIT(4)
 #define MPHY_APBCLK_STOP		BIT(3)
 #define REFCLK_STOP			BIT(2)
 #define UNIPRO_MCLK_STOP		BIT(1)
 #define UNIPRO_PCLK_STOP		BIT(0)
 #define CLK_STOP_ALL		(REFCLKOUT_STOP |\
					REFCLK_STOP |\
					UNIPRO_MCLK_STOP |\
					UNIPRO_PCLK_STOP)

#define HCI_FORCE_HCS			0xB4
 #define REFCLKOUT_STOP_EN	BIT(11)
 #define MPHY_APBCLK_STOP_EN	BIT(10)
 #define UFSP_DRCG_EN		BIT(8)   //FMP
 #define REFCLK_STOP_EN		BIT(7)
 #define UNIPRO_PCLK_STOP_EN	BIT(6)
 #define UNIPRO_MCLK_STOP_EN	BIT(5)
 #define HCI_CORECLK_STOP_EN	BIT(4)
 #define CLK_STOP_CTRL_EN_ALL	(UFSP_DRCG_EN |\
					MPHY_APBCLK_STOP_EN |\
					REFCLKOUT_STOP_EN |\
					REFCLK_STOP_EN |\
					UNIPRO_PCLK_STOP_EN |\
					UNIPRO_MCLK_STOP_EN)

#define HCI_FSM_MONITOR			0xC0
#define HCI_PRDT_HIT_RATIO		0xC4
#define HCI_DMA0_MONITOR_STATE		0xC8
#define HCI_DMA0_MONITOR_CNT		0xCC
#define HCI_DMA1_MONITOR_STATE		0xD0
#define HCI_DMA1_MONITOR_CNT		0xD4

#define HCI_UFS_AXI_DMA_IF_CTRL		0xF8
#define HCI_UFS_ACG_DISABLE		0xFC
 #define HCI_UFS_ACG_DISABLE_EN		BIT(0)
#define HCI_IOP_ACG_DISABLE		0x100
 #define HCI_IOP_ACG_DISABLE_EN		BIT(0)
#define HCI_MPHY_REFCLK_SEL		0x108
 #define MPHY_REFCLK_SEL		BIT(0)
#define HCI_SMU_ABORT_MATCH_INFO		0x10C
#define HCI_DBR_DUPLICATION_INFO		0x120

#define HCI_DBR_TIMER_CONFIG		0x140
#define HCI_DBR_TIMER_ENABLE		0x144
#define HCI_DBR_TIMER_STATUS		0x148

#define HCI_UTRL_DBR_3_0_TIMER_EXPIRED_VALUE		0x150
#define HCI_UTRL_DBR_7_4_TIMER_EXPIRED_VALUE		0x154
#define HCI_UTRL_DBR_11_8_TIMER_EXPIRED_VALUE		0x158
#define HCI_UTRL_DBR_15_12_TIMER_EXPIRED_VALUE		0x15C
#define HCI_UTMRL_DBR_3_0_TIMER_EXPIRED_VALUE		0x160

/* Device fatal error */
#define DFES_ERR_EN	BIT(31)
#define DFES_DEF_DL_ERRS	(UIC_DATA_LINK_LAYER_ERROR_RX_BUF_OF |\
				 UIC_DATA_LINK_LAYER_ERROR_PA_INIT)
#define DFES_DEF_N_ERRS		(UIC_NETWORK_UNSUPPORTED_HEADER_TYPE |\
				 UIC_NETWORK_BAD_DEVICEID_ENC |\
				 UIC_NETWORK_LHDR_TRAP_PACKET_DROPPING)
#define DFES_DEF_T_ERRS		(UIC_TRANSPORT_UNSUPPORTED_HEADER_TYPE |\
				 UIC_TRANSPORT_UNKNOWN_CPORTID |\
				 UIC_TRANSPORT_NO_CONNECTION_RX |\
				 UIC_TRANSPORT_BAD_TC)

/* TXPRDT defines */
#define PRDT_PREFECT_EN		BIT(31)
#define PRDT_SET_SIZE(x)	((x) & 0x1F)

enum {
	UNIP_PA_LYR = 0,
	UNIP_DL_LYR,
	UNIP_N_LYR,
	UNIP_T_LYR,
	UNIP_DME_LYR,
};

/*
 * UNIPRO registers
 */
#define UNIP_COMP_VERSION			0x000
#define UNIP_COMP_INFO				0x004
#define UNIP_COMP_RESET				0x010

#define UNIP_DME_POWERON_REQ			0x7800
#define UNIP_DME_POWERON_CNF_RESULT		0x7804
#define UNIP_DME_POWEROFF_REQ			0x7810
#define UNIP_DME_POWEROFF_CNF_RESULT		0x7814
#define UNIP_DME_RESET_REQ 			0x7820
#define UNIP_DME_RESET_REQ_LEVEL		0x7824
#define UNIP_DME_ENABLE_REQ			0x7830
#define UNIP_DME_ENABLE_CNF_RESULT 		0x7834
#define UNIP_DME_ENDPOINTRESET_REQ 		0x7840
#define UNIP_DME_ENDPOINTRESET_CNF_RESULT	0x7844
#define UNIP_DME_LINKSTARTUP_REQ		0x7850
#define UNIP_DME_LINKSTARTUP_CNF_RESULT		0x7854
#define UNIP_DME_HIBERN8_ENTER_REQ 		0x7860
#define UNIP_DME_HIBERN8_ENTER_CNF_RESULT	0x7864
#define UNIP_DME_HIBERN8_ENTER_IND_RESULT	0x7868
#define UNIP_DME_HIBERN8_EXIT_REQ		0x7870
#define UNIP_DME_HIBERN8_EXIT_CNF_RESULT	0x7874
#define UNIP_DME_HIBERN8_EXIT_IND_RESULT	0x7878
#define UNIP_DME_PWR_REQ			0x7880
#define UNIP_DME_PWR_REQ_POWERMODE 		0x7884
#define UNIP_DME_PWR_REQ_LOCALL2TIMER0 		0x7888
#define UNIP_DME_PWR_REQ_LOCALL2TIMER1 		0x788C
#define UNIP_DME_PWR_REQ_LOCALL2TIMER2 		0x7890
#define UNIP_DME_PWR_REQ_REMOTEL2TIMER0		0x78B8
#define UNIP_DME_PWR_REQ_REMOTEL2TIMER1		0x78BC
#define UNIP_DME_PWR_REQ_REMOTEL2TIMER2		0x78C0
#define UNIP_DME_PWR_CNF_RESULT			0x78E8
#define UNIP_DME_PWR_IND_RESULT			0x78EC
#define UNIP_DME_TEST_MODE_REQ 			0x7900
#define UNIP_DME_TEST_MODE_CNF_RESULT		0x7904

#define UNIP_DME_ERROR_IND_LAYER		0x0C0
#define UNIP_DME_ERROR_IND_ERRCODE		0x0C4
#define UNIP_DME_PACP_CNFBIT			0x0C8
#define UNIP_DME_DL_FRAME_IND			0x0D0
#define UNIP_DME_INTR_STATUS			0x0E0
#define UNIP_DME_INTR_ENABLE			0x0E4

#define UNIP_DME_GETSET_CONTROL                0x7A00
#define UNIP_DME_GETSET_ADDR                   0x7A04
#define UNIP_DME_GETSET_WDATA                  0x7A08
#define UNIP_DME_GETSET_RDATA                  0x7A0C
#define UNIP_DME_GETSET_RESULT                 0x7A10
#define UNIP_DME_PEER_GETSET_CONTROL           0x7A20
#define UNIP_DME_PEER_GETSET_ADDR              0x7A24
#define UNIP_DME_PEER_GETSET_WDATA             0x7A28
#define UNIP_DME_PEER_GETSET_RDATA             0x7A2C
#define UNIP_DME_PEER_GETSET_RESULT            0x7A30

#define UNIP_DME_INTR_STATUS_LSB			   0x7B00
#define UNIP_DME_INTR_STATUS_MSB	           0x7B04
#define UNIP_DME_INTR_ERROR_CODE			   0x7B20
#define UNIP_DME_DISCARD_PORT_ID	           0x7B24
#define UNIP_DME_DBG_OPTION_SUITE			   0x7C00
#define UNIP_DME_DBG_CTRL_FSM		           0x7D00
#define UNIP_DME_DBG_FLAG_STATUS			   0x7D14
#define UNIP_DME_DBG_LINKCFG_FSM	           0x7D18

#define UNIP_DME_INTR_ERROR_CODE		0x7B20
#define UNIP_DME_DEEPSTALL_ENTER_REQ		0x7910
#define UNIP_DME_DISCARD_CPORT_ID		0x7B24

#define UNIP_DBG_FORCE_DME_CTRL_STATE		0x150
#define UNIP_DBG_AUTO_DME_LINKSTARTUP		0x158
#define UNIP_DBG_PA_CTRLSTATE			0x15C
#define UNIP_DBG_PA_TX_STATE			0x160
#define UNIP_DBG_BREAK_DME_CTRL_STATE		0x164
#define UNIP_DBG_STEP_DME_CTRL_STATE		0x168
#define UNIP_DBG_NEXT_DME_CTRL_STATE		0x16C

/*
 * UFS Protector registers
 */
#define UFSPRCTRL	0x000
#define UFSPRSTAT	0x008
#define UFSPRSECURITY	0x010
 #define NSSMU		BIT(14)
#define DESCTYPE(type)		((type & 0x3) << 19)
#define ARPROTPRDT(type)	((type & 0x3) << 16)
#define ARPROTDESC(type)	((type & 0x3) << 9)
#define ARPROTDATA(type)	((type & 0x3) << 6)
#define AWPROTDESC(type)	((type & 0x3) << 3)
#define AWPROTDATA(type)	((type & 0x3))
#define CFG_AXPROT(type)	(ARPROTPRDT(type) | ARPROTDESC(type) | \
				ARPROTDATA(type) | AWPROTDESC(type) | \
				AWPROTDATA(type))
#define UFSPVERSION	0x01C
#define UFSPRENCKEY0	0x020
#define UFSPRENCKEY1	0x024
#define UFSPRENCKEY2	0x028
#define UFSPRENCKEY3	0x02C
#define UFSPRENCKEY4	0x030
#define UFSPRENCKEY5	0x034
#define UFSPRENCKEY6	0x038
#define UFSPRENCKEY7	0x03C
#define UFSPRTWKEY0	0x040
#define UFSPRTWKEY1	0x044
#define UFSPRTWKEY2	0x048
#define UFSPRTWKEY3	0x04C
#define UFSPRTWKEY4	0x050
#define UFSPRTWKEY5	0x054
#define UFSPRTWKEY6	0x058
#define UFSPRTWKEY7	0x05C
#define UFSPWCTRL	0x100
#define UFSPWSTAT	0x108
#define UFSPWSECURITY	0x110
#define UFSPWENCKEY0	0x120
#define UFSPWENCKEY1	0x124
#define UFSPWENCKEY2	0x128
#define UFSPWENCKEY3	0x12C
#define UFSPWENCKEY4	0x130
#define UFSPWENCKEY5	0x134
#define UFSPWENCKEY6	0x138
#define UFSPWENCKEY7	0x13C
#define UFSPWTWKEY0	0x140
#define UFSPWTWKEY1	0x144
#define UFSPWTWKEY2	0x148
#define UFSPWTWKEY3	0x14C
#define UFSPWTWKEY4	0x150
#define UFSPWTWKEY5	0x154
#define UFSPWTWKEY6	0x158
#define UFSPWTWKEY7	0x15C
#define UFSPSBEGIN0	0x200
#define UFSPSEND0	0x204
#define UFSPSLUN0	0x208
#define UFSPSCTRL0	0x20C
#define UFSPSBEGIN1	0x210
#define UFSPSEND1	0x214
#define UFSPSLUN1	0x218
#define UFSPSCTRL1	0x21C
#define UFSPSBEGIN2	0x220
#define UFSPSEND2	0x224
#define UFSPSLUN2	0x228
#define UFSPSCTRL2	0x22C
#define UFSPSBEGIN3	0x230
#define UFSPSEND3	0x234
#define UFSPSLUN3	0x238
#define UFSPSCTRL3	0x23C
#define UFSPSBEGIN4	0x240
#define UFSPSEND4	0x244
#define UFSPSLUN4	0x248
#define UFSPSCTRL4	0x24C
#define UFSPSBEGIN5	0x250
#define UFSPSEND5	0x254
#define UFSPSLUN5	0x258
#define UFSPSCTRL5	0x25C
#define UFSPSBEGIN6	0x260
#define UFSPSEND6	0x264
#define UFSPSLUN6	0x268
#define UFSPSCTRL6	0x26C
#define UFSPSBEGIN7	0x270
#define UFSPSEND7	0x274
#define UFSPSLUN7	0x278
#define UFSPSCTRL7	0x27C

/*
 * MIBs for PA debug registers
 */
#define PA_DBG_CLK_PERIOD		0x9514
#define PA_DBG_RXPHY_CFGUPDT		0x9519
#define PA_DBG_MODE			0x9529
#define PA_DBG_AUTOMODE_THLD		0x9536
#define PA_DBG_OV_TM			0x200
#define PA_DBG_RESUME_HIBERN8		0x9550
#define PA_DBG_OPTION_SUITE		0x9564

/*
 * MIBs for Transport Layer debug registers
 */
#define T_DBG_SKIP_INIT_HIBERN8_EXIT	0xc001

/*
 * Exynos MPHY attributes
 */
#define TX_LINERESET_N_VAL		0x0277
 #define TX_LINERESET_N(v)	(((v) >> 10) & 0xff)
#define TX_LINERESET_P_VAL		0x027D
 #define TX_LINERESET_P(v)	(((v) >> 12) & 0xff)
#define TX_OV_SLEEP_CNT_TIMER		0x028E
 #define TX_OV_H8_ENTER_EN		(1 << 7)
 #define TX_OV_SLEEP_CNT(v)	(((v) >> 5) & 0x7f)

#define TX_HIGH_Z_CNT_11_08		0x028c
 #define TX_HIGH_Z_CNT_H(v)	(((v) >> 8) & 0xf)
#define TX_HIGH_Z_CNT_07_00		0x028d
 #define TX_HIGH_Z_CNT_L(v)	((v) & 0xff)
#define TX_BASE_NVAL_07_00		0x0293
 #define TX_BASE_NVAL_L(v)	((v) & 0xff)
#define TX_BASE_NVAL_15_08		0x0294
 #define TX_BASE_NVAL_H(v)	(((v) >> 8) & 0xff)
#define TX_GRAN_NVAL_07_00		0x0295
 #define TX_GRAN_NVAL_L(v)	((v) & 0xff)
#define TX_GRAN_NVAL_10_08		0x0296
 #define TX_GRAN_NVAL_H(v)	(((v) >> 8) & 0x3)

#define RX_FILLER_ENABLE		0x0316
 #define RX_FILLER_EN		(1 << 1)
#define RX_LCC_IGNORE			0x0318
#define RX_LINERESET_VAL		0x0317
 #define RX_LINERESET(v)	(((v) >> 12) & 0xff)
#define RX_SYNC_MASK_LENGTH		0x0321
#define RX_HIBERN8_WAIT_VAL_BIT_20_16	0x0331
#define RX_HIBERN8_WAIT_VAL_BIT_15_08	0x0332
#define RX_HIBERN8_WAIT_VAL_BIT_07_00	0x0333

#define RX_OV_SLEEP_CNT_TIMER		0x0340
 #define RX_OV_SLEEP_CNT(v)	(((v) >> 6) & 0x1f)
#define RX_OV_STALL_CNT_TIMER		0x0341
 #define RX_OV_STALL_CNT(v)	(((v) >> 4) & 0xff)
#define RX_BASE_NVAL_07_00		0x0355
 #define RX_BASE_NVAL_L(v)	((v) & 0xff)
#define RX_BASE_NVAL_15_08		0x0354
 #define RX_BASE_NVAL_H(v)	(((v) >> 8) & 0xff)
#define RX_GRAN_NVAL_07_00		0x0353
 #define RX_GRAN_NVAL_L(v)	((v) & 0xff)
#define RX_GRAN_NVAL_10_08		0x0352
 #define RX_GRAN_NVAL_H(v)	(((v) >> 8) & 0x3)

#define CMN_PWM_CMN_CTRL		0x0402
 #define PWM_CMN_CTRL_MASK	0x3
#define CMN_REFCLK_PLL_LOCK		0x0406
#define CMN_REFCLK_STREN		0x044C
#define CMN_REFCLK_OUT			0x044E
#define CMN_REFCLK_SEL_PLL		0x044F

#define PHY_PMA_COMN_ADDR(reg)		(reg)
#define PHY_PMA_TRSV_ADDR(reg, lane)	((reg) + (0x140 * (lane)))

/*
 * Driver specific definitions
 */

enum {
	PHY_CFG_NONE = 0,
	PHY_PCS_COMN,
	PHY_PCS_RXTX,
	PHY_PMA_COMN,
	PHY_PMA_TRSV,
	PHY_PLL_WAIT,
	PHY_CDR_WAIT,
	UNIPRO_STD_MIB,
	UNIPRO_DBG_MIB,
	UNIPRO_DBG_APB,

	// Since exynos8895
	PHY_PCS_RX,
	PHY_PCS_TX,
	PHY_PCS_RX_PRD,
	PHY_PCS_TX_PRD,
	UNIPRO_DBG_PRD,
	PHY_PMA_TRSV_LANE1_SQ_OFF,
	COMMON_WAIT,
};

enum {
	TX_LANE_0 = 0,
	TX_LANE_1 = 1,
	TX_LANE_2 = 2,
	TX_LANE_3 = 3,
	RX_LANE_0 = 4,
	RX_LANE_1 = 5,
	RX_LANE_2 = 6,
	RX_LANE_3 = 7,
};

enum {
	__PMD_PWM_G1_L1,
	__PMD_PWM_G1_L2,
	__PMD_PWM_G2_L1,
	__PMD_PWM_G2_L2,
	__PMD_PWM_G3_L1,
	__PMD_PWM_G3_L2,
	__PMD_PWM_G4_L1,
	__PMD_PWM_G4_L2,
	__PMD_PWM_G5_L1,
	__PMD_PWM_G5_L2,
	__PMD_HS_G1_L1,
	__PMD_HS_G1_L2,
	__PMD_HS_G2_L1,
	__PMD_HS_G2_L2,
	__PMD_HS_G3_L1,
	__PMD_HS_G3_L2,
};

#define PMD_PWM_G1_L1	(1U << __PMD_PWM_G1_L1)
#define PMD_PWM_G1_L2	(1U << __PMD_PWM_G1_L2)
#define PMD_PWM_G2_L1	(1U << __PMD_PWM_G2_L1)
#define PMD_PWM_G2_L2	(1U << __PMD_PWM_G2_L2)
#define PMD_PWM_G3_L1	(1U << __PMD_PWM_G3_L1)
#define PMD_PWM_G3_L2	(1U << __PMD_PWM_G3_L2)
#define PMD_PWM_G4_L1	(1U << __PMD_PWM_G4_L1)
#define PMD_PWM_G4_L2	(1U << __PMD_PWM_G4_L2)
#define PMD_PWM_G5_L1	(1U << __PMD_PWM_G5_L1)
#define PMD_PWM_G5_L2	(1U << __PMD_PWM_G5_L2)
#define PMD_HS_G1_L1	(1U << __PMD_HS_G1_L1)
#define PMD_HS_G1_L2	(1U << __PMD_HS_G1_L2)
#define PMD_HS_G2_L1	(1U << __PMD_HS_G2_L1)
#define PMD_HS_G2_L2	(1U << __PMD_HS_G2_L2)
#define PMD_HS_G3_L1	(1U << __PMD_HS_G3_L1)
#define PMD_HS_G3_L2	(1U << __PMD_HS_G3_L2)

#define PMD_ALL		(PMD_HS_G3_L2 - 1)
#define PMD_PWM		(PMD_PWM_G4_L2 - 1)
#define PMD_HS		(PMD_ALL ^ PMD_PWM)

struct ufs_phy_cfg {
	u32 addr;
	u32 val;
	u32 flg;
	u32 lyr;
};

struct exynos_ufs_phy {
	void __iomem *reg_pma;
};

struct exynos_ufs_clk_info {
	struct list_head list;
	struct clk *clk;
	const char *name;
	unsigned long freq;
};

struct exynos_ufs_misc_log {
	struct list_head clk_list_head;
	bool isolation;
};

struct exynos_ufs_sfr_log {
	const char* name;
	const u32 offset;
#define LOG_STD_HCI_SFR		0xFFFFFFF0
#define LOG_VS_HCI_SFR		0xFFFFFFF1
#define LOG_FMP_SFR		0xFFFFFFF2
#define LOG_UNIPRO_SFR		0xFFFFFFF3
#define LOG_PMA_SFR		0xFFFFFFF4
	u32 val;
};

struct exynos_ufs_attr_log {
	const u32 offset;
	u32 res;
	u32 val;
};

struct exynos_ufs_debug {
	struct exynos_ufs_sfr_log* std_sfr;
	struct exynos_ufs_sfr_log* sfr;
	struct exynos_ufs_attr_log* attr;
	struct exynos_ufs_misc_log misc;
};

struct exynos_access_cxt {
	u32 offset;
	u32 mask;
	u32 val;
};

struct exynos_ufs {
	struct device *dev;
	struct ufs_hba *hba;

	void __iomem *reg_hci;
	void __iomem *reg_unipro;
	void __iomem *reg_ufsp;

	struct regmap *pmureg;
	struct regmap *sysreg;

	struct clk *clk_hci;
	struct clk *pclk;
	struct clk *clk_unipro;
	struct clk *clk_refclk_1;
	struct clk *clk_refclk_2;
	struct clk *clk_phy_symb[4];
	u32 mclk_rate;
	u32 pwm_freq;

	int num_rx_lanes;
	int num_tx_lanes;

	struct exynos_ufs_phy phy;
	struct notifier_block tcxo_nb;
	struct uic_pwr_mode req_pmd_parm;
	struct uic_pwr_mode act_pmd_parm;

	enum smu_id		fmp;
	enum smu_id		smu;

	u32 rx_min_actv_time_cap;
	u32 rx_hibern8_time_cap;
	u32 tx_hibern8_time_cap;

	u32 opts;
#define EXYNOS_UFS_OPTS_SET_LINE_INIT_PREP_LEN	BIT(1)

	/* for miscellaneous control */
	unsigned long misc_flags;
#define EXYNOS_UFS_MISC_TOGGLE_LOG	BIT(0)

	struct exynos_ufs_debug debug;

	/* Support system power mode */
	int idle_ip_index;

	u32 hw_rev;

	u32 tcxo_ex_ctrl;			/* TCXO exclusive control */
	struct exynos_access_cxt cxt_iso;	/* phy isolation */
	struct exynos_access_cxt cxt_coherency;	/* io coherency */

	struct pm_qos_request	pm_qos_int;
	s32			pm_qos_int_value;
	struct pm_qos_request	pm_qos_fsys0;
	s32			pm_qos_fsys0_value;
	bool lane1_poweroff;
	struct ufs_cal_param	*cal_param;
};

static inline struct exynos_ufs *to_exynos_ufs(struct ufs_hba *hba)
{
	return dev_get_platdata(hba->dev);
}

#ifndef __EXYNOS_UFS_MMIO_FUNC__
#define __EXYNOS_UFS_MMIO_FUNC__
#define EXYNOS_UFS_MMIO_FUNC(name)						\
static inline void name##_writel(struct exynos_ufs *ufs, u32 val, u32 reg)	\
{										\
	writel(val, ufs->reg_##name + reg);					\
}										\
										\
static inline u32 name##_readl(struct exynos_ufs *ufs, u32 reg)			\
{										\
	return readl(ufs->reg_##name + reg);					\
}

EXYNOS_UFS_MMIO_FUNC(hci);
EXYNOS_UFS_MMIO_FUNC(unipro);
EXYNOS_UFS_MMIO_FUNC(ufsp);

static inline void phy_pma_writel(struct exynos_ufs *ufs, u32 val, u32 reg)
{
	u32 reg1 = hci_readl(ufs, HCI_CLKSTOP_CTRL);

	hci_writel(ufs, reg1 & ~MPHY_APBCLK_STOP, HCI_CLKSTOP_CTRL);
	writel(val, ufs->phy.reg_pma + reg);
	hci_writel(ufs, reg1 | MPHY_APBCLK_STOP, HCI_CLKSTOP_CTRL);
}

static inline u32 phy_pma_readl(struct exynos_ufs *ufs, u32 reg)
{
	u32 reg1 = hci_readl(ufs, HCI_CLKSTOP_CTRL);

	hci_writel(ufs, reg1 & ~MPHY_APBCLK_STOP, HCI_CLKSTOP_CTRL);
	reg = readl(ufs->phy.reg_pma + reg);
	hci_writel(ufs, reg1 | MPHY_APBCLK_STOP, HCI_CLKSTOP_CTRL);

	return reg;
}
#endif

/* Structure for ufs cmd logging */
#define MAX_CMD_LOGS    128

struct ufs_cmd_logging_category {
	unsigned char cmd_opcode;
	unsigned int tag;
	unsigned long lba;
	unsigned int sct;
	int retries;
	u64 	start_time;
	u64 	end_time;
	unsigned long outstanding_reqs;

};

struct ufs_cmd_info {
	int 	first;
	int 	last;
	struct ufs_cmd_logging_category *addr_per_tag[16];
	struct ufs_cmd_logging_category  data[MAX_CMD_LOGS];

};

extern void exynos_ufs_get_uic_info(struct ufs_hba *hba);
extern void exynos_ufs_dump_uic_info(struct ufs_hba *hba);
extern int exynos_ufs_init_dbg(struct ufs_hba *hba);
extern void exynos_ufs_show_uic_info(struct ufs_hba *hba);
extern void exynos_ufs_cmd_log_start(struct ufs_hba *hba, struct scsi_cmnd *cmd);
extern void exynos_ufs_cmd_log_end(struct ufs_hba *hba, int tag);
void exynos_ufs_fmp_config(struct ufs_hba *hba, bool init);

/* TCXO UFS */
enum shared_resource_owner {
        OWNER_FIRST,
        OWNER_SECOND,
        OWNER_MAX,
};

#ifndef __EXYNOS_UFS_VS_DEBUG__
#define __EXYNOS_UFS_VS_DEBUG__
#endif

#endif /* _UFS_EXYNOS_H_ */
