xref: /linux/drivers/bus/mhi/common.h (revision 3a1b8e281a2693c286f7dbaa57f6291e0d032c0c)
18485149cSManivannan Sadhasivam /* SPDX-License-Identifier: GPL-2.0 */
28485149cSManivannan Sadhasivam /*
38485149cSManivannan Sadhasivam  * Copyright (c) 2022, Linaro Ltd.
48485149cSManivannan Sadhasivam  *
58485149cSManivannan Sadhasivam  */
68485149cSManivannan Sadhasivam 
78485149cSManivannan Sadhasivam #ifndef _MHI_COMMON_H
88485149cSManivannan Sadhasivam #define _MHI_COMMON_H
98485149cSManivannan Sadhasivam 
108485149cSManivannan Sadhasivam #include <linux/bitfield.h>
118485149cSManivannan Sadhasivam #include <linux/mhi.h>
128485149cSManivannan Sadhasivam 
138485149cSManivannan Sadhasivam /* MHI registers */
148485149cSManivannan Sadhasivam #define MHIREGLEN			0x00
158485149cSManivannan Sadhasivam #define MHIVER				0x08
168485149cSManivannan Sadhasivam #define MHICFG				0x10
178485149cSManivannan Sadhasivam #define CHDBOFF				0x18
188485149cSManivannan Sadhasivam #define ERDBOFF				0x20
198485149cSManivannan Sadhasivam #define BHIOFF				0x28
208485149cSManivannan Sadhasivam #define BHIEOFF				0x2c
218485149cSManivannan Sadhasivam #define DEBUGOFF			0x30
228485149cSManivannan Sadhasivam #define MHICTRL				0x38
238485149cSManivannan Sadhasivam #define MHISTATUS			0x48
248485149cSManivannan Sadhasivam #define CCABAP_LOWER			0x58
258485149cSManivannan Sadhasivam #define CCABAP_HIGHER			0x5c
268485149cSManivannan Sadhasivam #define ECABAP_LOWER			0x60
278485149cSManivannan Sadhasivam #define ECABAP_HIGHER			0x64
288485149cSManivannan Sadhasivam #define CRCBAP_LOWER			0x68
298485149cSManivannan Sadhasivam #define CRCBAP_HIGHER			0x6c
308485149cSManivannan Sadhasivam #define CRDB_LOWER			0x70
318485149cSManivannan Sadhasivam #define CRDB_HIGHER			0x74
328485149cSManivannan Sadhasivam #define MHICTRLBASE_LOWER		0x80
338485149cSManivannan Sadhasivam #define MHICTRLBASE_HIGHER		0x84
348485149cSManivannan Sadhasivam #define MHICTRLLIMIT_LOWER		0x88
358485149cSManivannan Sadhasivam #define MHICTRLLIMIT_HIGHER		0x8c
368485149cSManivannan Sadhasivam #define MHIDATABASE_LOWER		0x98
378485149cSManivannan Sadhasivam #define MHIDATABASE_HIGHER		0x9c
388485149cSManivannan Sadhasivam #define MHIDATALIMIT_LOWER		0xa0
398485149cSManivannan Sadhasivam #define MHIDATALIMIT_HIGHER		0xa4
408485149cSManivannan Sadhasivam 
418485149cSManivannan Sadhasivam /* MHI BHI registers */
428485149cSManivannan Sadhasivam #define BHI_BHIVERSION_MINOR		0x00
438485149cSManivannan Sadhasivam #define BHI_BHIVERSION_MAJOR		0x04
448485149cSManivannan Sadhasivam #define BHI_IMGADDR_LOW			0x08
458485149cSManivannan Sadhasivam #define BHI_IMGADDR_HIGH		0x0c
468485149cSManivannan Sadhasivam #define BHI_IMGSIZE			0x10
478485149cSManivannan Sadhasivam #define BHI_RSVD1			0x14
488485149cSManivannan Sadhasivam #define BHI_IMGTXDB			0x18
498485149cSManivannan Sadhasivam #define BHI_RSVD2			0x1c
508485149cSManivannan Sadhasivam #define BHI_INTVEC			0x20
518485149cSManivannan Sadhasivam #define BHI_RSVD3			0x24
528485149cSManivannan Sadhasivam #define BHI_EXECENV			0x28
538485149cSManivannan Sadhasivam #define BHI_STATUS			0x2c
548485149cSManivannan Sadhasivam #define BHI_ERRCODE			0x30
558485149cSManivannan Sadhasivam #define BHI_ERRDBG1			0x34
568485149cSManivannan Sadhasivam #define BHI_ERRDBG2			0x38
578485149cSManivannan Sadhasivam #define BHI_ERRDBG3			0x3c
588485149cSManivannan Sadhasivam #define BHI_SERIALNU			0x40
598485149cSManivannan Sadhasivam #define BHI_SBLANTIROLLVER		0x44
608485149cSManivannan Sadhasivam #define BHI_NUMSEG			0x48
618485149cSManivannan Sadhasivam #define BHI_MSMHWID(n)			(0x4c + (0x4 * (n)))
628485149cSManivannan Sadhasivam #define BHI_OEMPKHASH(n)		(0x64 + (0x4 * (n)))
638485149cSManivannan Sadhasivam #define BHI_RSVD5			0xc4
648485149cSManivannan Sadhasivam 
658485149cSManivannan Sadhasivam /* BHI register bits */
668485149cSManivannan Sadhasivam #define BHI_TXDB_SEQNUM_BMSK		GENMASK(29, 0)
678485149cSManivannan Sadhasivam #define BHI_TXDB_SEQNUM_SHFT		0
688485149cSManivannan Sadhasivam #define BHI_STATUS_MASK			GENMASK(31, 30)
698485149cSManivannan Sadhasivam #define BHI_STATUS_ERROR		0x03
708485149cSManivannan Sadhasivam #define BHI_STATUS_SUCCESS		0x02
718485149cSManivannan Sadhasivam #define BHI_STATUS_RESET		0x00
728485149cSManivannan Sadhasivam 
738485149cSManivannan Sadhasivam /* MHI BHIE registers */
748485149cSManivannan Sadhasivam #define BHIE_MSMSOCID_OFFS		0x00
758485149cSManivannan Sadhasivam #define BHIE_TXVECADDR_LOW_OFFS		0x2c
768485149cSManivannan Sadhasivam #define BHIE_TXVECADDR_HIGH_OFFS	0x30
778485149cSManivannan Sadhasivam #define BHIE_TXVECSIZE_OFFS		0x34
788485149cSManivannan Sadhasivam #define BHIE_TXVECDB_OFFS		0x3c
798485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_OFFS		0x44
808485149cSManivannan Sadhasivam #define BHIE_RXVECADDR_LOW_OFFS		0x60
818485149cSManivannan Sadhasivam #define BHIE_RXVECADDR_HIGH_OFFS	0x64
828485149cSManivannan Sadhasivam #define BHIE_RXVECSIZE_OFFS		0x68
838485149cSManivannan Sadhasivam #define BHIE_RXVECDB_OFFS		0x70
848485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_OFFS		0x78
858485149cSManivannan Sadhasivam 
868485149cSManivannan Sadhasivam /* BHIE register bits */
878485149cSManivannan Sadhasivam #define BHIE_TXVECDB_SEQNUM_BMSK	GENMASK(29, 0)
888485149cSManivannan Sadhasivam #define BHIE_TXVECDB_SEQNUM_SHFT	0
898485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_SEQNUM_BMSK	GENMASK(29, 0)
908485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_SEQNUM_SHFT	0
918485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_BMSK	GENMASK(31, 30)
928485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_SHFT	30
938485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_RESET	0x00
948485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_XFER_COMPL	0x02
958485149cSManivannan Sadhasivam #define BHIE_TXVECSTATUS_STATUS_ERROR	0x03
968485149cSManivannan Sadhasivam #define BHIE_RXVECDB_SEQNUM_BMSK	GENMASK(29, 0)
978485149cSManivannan Sadhasivam #define BHIE_RXVECDB_SEQNUM_SHFT	0
988485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_SEQNUM_BMSK	GENMASK(29, 0)
998485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_SEQNUM_SHFT	0
1008485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_BMSK	GENMASK(31, 30)
1018485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_SHFT	30
1028485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_RESET	0x00
1038485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_XFER_COMPL	0x02
1048485149cSManivannan Sadhasivam #define BHIE_RXVECSTATUS_STATUS_ERROR	0x03
1058485149cSManivannan Sadhasivam 
1068485149cSManivannan Sadhasivam /* MHI register bits */
1078485149cSManivannan Sadhasivam #define MHICFG_NHWER_MASK		GENMASK(31, 24)
1088485149cSManivannan Sadhasivam #define MHICFG_NER_MASK			GENMASK(23, 16)
1098485149cSManivannan Sadhasivam #define MHICFG_NHWCH_MASK		GENMASK(15, 8)
1108485149cSManivannan Sadhasivam #define MHICFG_NCH_MASK			GENMASK(7, 0)
1118485149cSManivannan Sadhasivam #define MHICTRL_MHISTATE_MASK		GENMASK(15, 8)
1128485149cSManivannan Sadhasivam #define MHICTRL_RESET_MASK		BIT(1)
1138485149cSManivannan Sadhasivam #define MHISTATUS_MHISTATE_MASK		GENMASK(15, 8)
1148485149cSManivannan Sadhasivam #define MHISTATUS_SYSERR_MASK		BIT(2)
1158485149cSManivannan Sadhasivam #define MHISTATUS_READY_MASK		BIT(0)
1168485149cSManivannan Sadhasivam 
1178485149cSManivannan Sadhasivam /* Command Ring Element macros */
1188485149cSManivannan Sadhasivam /* No operation command */
1198485149cSManivannan Sadhasivam #define MHI_TRE_CMD_NOOP_PTR		0
1208485149cSManivannan Sadhasivam #define MHI_TRE_CMD_NOOP_DWORD0		0
1218485149cSManivannan Sadhasivam #define MHI_TRE_CMD_NOOP_DWORD1		cpu_to_le32(FIELD_PREP(GENMASK(23, 16), MHI_CMD_NOP))
1228485149cSManivannan Sadhasivam 
1238485149cSManivannan Sadhasivam /* Channel reset command */
1248485149cSManivannan Sadhasivam #define MHI_TRE_CMD_RESET_PTR		0
1258485149cSManivannan Sadhasivam #define MHI_TRE_CMD_RESET_DWORD0	0
1268485149cSManivannan Sadhasivam #define MHI_TRE_CMD_RESET_DWORD1(chid)	cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \
1278485149cSManivannan Sadhasivam 						    FIELD_PREP(GENMASK(23, 16),         \
1288485149cSManivannan Sadhasivam 							       MHI_CMD_RESET_CHAN))
1298485149cSManivannan Sadhasivam 
1308485149cSManivannan Sadhasivam /* Channel stop command */
1318485149cSManivannan Sadhasivam #define MHI_TRE_CMD_STOP_PTR		0
1328485149cSManivannan Sadhasivam #define MHI_TRE_CMD_STOP_DWORD0		0
1338485149cSManivannan Sadhasivam #define MHI_TRE_CMD_STOP_DWORD1(chid)	cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \
1348485149cSManivannan Sadhasivam 						    FIELD_PREP(GENMASK(23, 16),         \
1358485149cSManivannan Sadhasivam 							       MHI_CMD_STOP_CHAN))
1368485149cSManivannan Sadhasivam 
1378485149cSManivannan Sadhasivam /* Channel start command */
1388485149cSManivannan Sadhasivam #define MHI_TRE_CMD_START_PTR		0
1398485149cSManivannan Sadhasivam #define MHI_TRE_CMD_START_DWORD0	0
1408485149cSManivannan Sadhasivam #define MHI_TRE_CMD_START_DWORD1(chid)	cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \
1418485149cSManivannan Sadhasivam 						    FIELD_PREP(GENMASK(23, 16),         \
1428485149cSManivannan Sadhasivam 							       MHI_CMD_START_CHAN))
1438485149cSManivannan Sadhasivam 
1448485149cSManivannan Sadhasivam #define MHI_TRE_GET_DWORD(tre, word)	le32_to_cpu((tre)->dword[(word)])
1458485149cSManivannan Sadhasivam #define MHI_TRE_GET_CMD_CHID(tre)	FIELD_GET(GENMASK(31, 24), MHI_TRE_GET_DWORD(tre, 1))
1468485149cSManivannan Sadhasivam #define MHI_TRE_GET_CMD_TYPE(tre)	FIELD_GET(GENMASK(23, 16), MHI_TRE_GET_DWORD(tre, 1))
1478485149cSManivannan Sadhasivam 
1488485149cSManivannan Sadhasivam /* Event descriptor macros */
1498485149cSManivannan Sadhasivam #define MHI_TRE_EV_PTR(ptr)		cpu_to_le64(ptr)
1508485149cSManivannan Sadhasivam #define MHI_TRE_EV_DWORD0(code, len)	cpu_to_le32(FIELD_PREP(GENMASK(31, 24), code) | \
1518485149cSManivannan Sadhasivam 						    FIELD_PREP(GENMASK(15, 0), len))
1528485149cSManivannan Sadhasivam #define MHI_TRE_EV_DWORD1(chid, type)	cpu_to_le32(FIELD_PREP(GENMASK(31, 24), chid) | \
1538485149cSManivannan Sadhasivam 						    FIELD_PREP(GENMASK(23, 16), type))
1548485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_PTR(tre)		le64_to_cpu((tre)->ptr)
1558485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_CODE(tre)	FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 0)))
1568485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_LEN(tre)		FIELD_GET(GENMASK(15, 0), (MHI_TRE_GET_DWORD(tre, 0)))
1578485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_CHID(tre)	FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 1)))
1588485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_TYPE(tre)	FIELD_GET(GENMASK(23, 16), (MHI_TRE_GET_DWORD(tre, 1)))
1598485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_STATE(tre)	FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 0)))
1608485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_EXECENV(tre)	FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 0)))
1618485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_SEQ(tre)		MHI_TRE_GET_DWORD(tre, 0)
1628485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_TIME(tre)	MHI_TRE_GET_EV_PTR(tre)
1638485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_COOKIE(tre)	lower_32_bits(MHI_TRE_GET_EV_PTR(tre))
1648485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_VEID(tre)	FIELD_GET(GENMASK(23, 16), (MHI_TRE_GET_DWORD(tre, 0)))
1658485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_LINKSPEED(tre)	FIELD_GET(GENMASK(31, 24), (MHI_TRE_GET_DWORD(tre, 1)))
1668485149cSManivannan Sadhasivam #define MHI_TRE_GET_EV_LINKWIDTH(tre)	FIELD_GET(GENMASK(7, 0), (MHI_TRE_GET_DWORD(tre, 0)))
1678485149cSManivannan Sadhasivam 
1688485149cSManivannan Sadhasivam /* Transfer descriptor macros */
1698485149cSManivannan Sadhasivam #define MHI_TRE_DATA_PTR(ptr)		cpu_to_le64(ptr)
1708485149cSManivannan Sadhasivam #define MHI_TRE_DATA_DWORD0(len)	cpu_to_le32(FIELD_PREP(GENMASK(15, 0), len))
1718485149cSManivannan Sadhasivam #define MHI_TRE_TYPE_TRANSFER		2
1728485149cSManivannan Sadhasivam #define MHI_TRE_DATA_DWORD1(bei, ieot, ieob, chain) cpu_to_le32(FIELD_PREP(GENMASK(23, 16), \
1738485149cSManivannan Sadhasivam 								MHI_TRE_TYPE_TRANSFER) |    \
1748485149cSManivannan Sadhasivam 								FIELD_PREP(BIT(10), bei) |  \
1758485149cSManivannan Sadhasivam 								FIELD_PREP(BIT(9), ieot) |  \
1768485149cSManivannan Sadhasivam 								FIELD_PREP(BIT(8), ieob) |  \
1778485149cSManivannan Sadhasivam 								FIELD_PREP(BIT(0), chain))
1788485149cSManivannan Sadhasivam 
1798485149cSManivannan Sadhasivam /* RSC transfer descriptor macros */
1808485149cSManivannan Sadhasivam #define MHI_RSCTRE_DATA_PTR(ptr, len)	cpu_to_le64(FIELD_PREP(GENMASK(64, 48), len) | ptr)
1818485149cSManivannan Sadhasivam #define MHI_RSCTRE_DATA_DWORD0(cookie)	cpu_to_le32(cookie)
1828485149cSManivannan Sadhasivam #define MHI_RSCTRE_DATA_DWORD1		cpu_to_le32(FIELD_PREP(GENMASK(23, 16), \
1838485149cSManivannan Sadhasivam 							       MHI_PKT_TYPE_COALESCING))
1848485149cSManivannan Sadhasivam 
1858485149cSManivannan Sadhasivam enum mhi_pkt_type {
1868485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_INVALID = 0x0,
1878485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_NOOP_CMD = 0x1,
1888485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_TRANSFER = 0x2,
1898485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_COALESCING = 0x8,
1908485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_RESET_CHAN_CMD = 0x10,
1918485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_STOP_CHAN_CMD = 0x11,
1928485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_START_CHAN_CMD = 0x12,
1938485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_STATE_CHANGE_EVENT = 0x20,
1948485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_CMD_COMPLETION_EVENT = 0x21,
1958485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_TX_EVENT = 0x22,
1968485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_RSC_TX_EVENT = 0x28,
1978485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_EE_EVENT = 0x40,
1988485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_TSYNC_EVENT = 0x48,
1998485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_BW_REQ_EVENT = 0x50,
2008485149cSManivannan Sadhasivam 	MHI_PKT_TYPE_STALE_EVENT, /* internal event */
2018485149cSManivannan Sadhasivam };
2028485149cSManivannan Sadhasivam 
2038485149cSManivannan Sadhasivam /* MHI transfer completion events */
2048485149cSManivannan Sadhasivam enum mhi_ev_ccs {
2058485149cSManivannan Sadhasivam 	MHI_EV_CC_INVALID = 0x0,
2068485149cSManivannan Sadhasivam 	MHI_EV_CC_SUCCESS = 0x1,
2078485149cSManivannan Sadhasivam 	MHI_EV_CC_EOT = 0x2, /* End of transfer event */
2088485149cSManivannan Sadhasivam 	MHI_EV_CC_OVERFLOW = 0x3,
2098485149cSManivannan Sadhasivam 	MHI_EV_CC_EOB = 0x4, /* End of block event */
2108485149cSManivannan Sadhasivam 	MHI_EV_CC_OOB = 0x5, /* Out of block event */
2118485149cSManivannan Sadhasivam 	MHI_EV_CC_DB_MODE = 0x6,
2128485149cSManivannan Sadhasivam 	MHI_EV_CC_UNDEFINED_ERR = 0x10,
2138485149cSManivannan Sadhasivam 	MHI_EV_CC_BAD_TRE = 0x11,
2148485149cSManivannan Sadhasivam };
2158485149cSManivannan Sadhasivam 
2168485149cSManivannan Sadhasivam /* Channel state */
2178485149cSManivannan Sadhasivam enum mhi_ch_state {
2188485149cSManivannan Sadhasivam 	MHI_CH_STATE_DISABLED,
2198485149cSManivannan Sadhasivam 	MHI_CH_STATE_ENABLED,
2208485149cSManivannan Sadhasivam 	MHI_CH_STATE_RUNNING,
2218485149cSManivannan Sadhasivam 	MHI_CH_STATE_SUSPENDED,
2228485149cSManivannan Sadhasivam 	MHI_CH_STATE_STOP,
2238485149cSManivannan Sadhasivam 	MHI_CH_STATE_ERROR,
2248485149cSManivannan Sadhasivam };
2258485149cSManivannan Sadhasivam 
2268485149cSManivannan Sadhasivam enum mhi_cmd_type {
2278485149cSManivannan Sadhasivam 	MHI_CMD_NOP = 1,
2288485149cSManivannan Sadhasivam 	MHI_CMD_RESET_CHAN = 16,
2298485149cSManivannan Sadhasivam 	MHI_CMD_STOP_CHAN = 17,
2308485149cSManivannan Sadhasivam 	MHI_CMD_START_CHAN = 18,
2318485149cSManivannan Sadhasivam };
2328485149cSManivannan Sadhasivam 
2338485149cSManivannan Sadhasivam #define EV_CTX_RESERVED_MASK		GENMASK(7, 0)
2348485149cSManivannan Sadhasivam #define EV_CTX_INTMODC_MASK		GENMASK(15, 8)
2358485149cSManivannan Sadhasivam #define EV_CTX_INTMODT_MASK		GENMASK(31, 16)
2368485149cSManivannan Sadhasivam struct mhi_event_ctxt {
2378485149cSManivannan Sadhasivam 	__le32 intmod;
2388485149cSManivannan Sadhasivam 	__le32 ertype;
2398485149cSManivannan Sadhasivam 	__le32 msivec;
2408485149cSManivannan Sadhasivam 
2418485149cSManivannan Sadhasivam 	__le64 rbase __packed __aligned(4);
2428485149cSManivannan Sadhasivam 	__le64 rlen __packed __aligned(4);
2438485149cSManivannan Sadhasivam 	__le64 rp __packed __aligned(4);
2448485149cSManivannan Sadhasivam 	__le64 wp __packed __aligned(4);
2458485149cSManivannan Sadhasivam };
2468485149cSManivannan Sadhasivam 
2478485149cSManivannan Sadhasivam #define CHAN_CTX_CHSTATE_MASK		GENMASK(7, 0)
2488485149cSManivannan Sadhasivam #define CHAN_CTX_BRSTMODE_MASK		GENMASK(9, 8)
2498485149cSManivannan Sadhasivam #define CHAN_CTX_POLLCFG_MASK		GENMASK(15, 10)
2508485149cSManivannan Sadhasivam #define CHAN_CTX_RESERVED_MASK		GENMASK(31, 16)
2518485149cSManivannan Sadhasivam struct mhi_chan_ctxt {
2528485149cSManivannan Sadhasivam 	__le32 chcfg;
2538485149cSManivannan Sadhasivam 	__le32 chtype;
2548485149cSManivannan Sadhasivam 	__le32 erindex;
2558485149cSManivannan Sadhasivam 
2568485149cSManivannan Sadhasivam 	__le64 rbase __packed __aligned(4);
2578485149cSManivannan Sadhasivam 	__le64 rlen __packed __aligned(4);
2588485149cSManivannan Sadhasivam 	__le64 rp __packed __aligned(4);
2598485149cSManivannan Sadhasivam 	__le64 wp __packed __aligned(4);
2608485149cSManivannan Sadhasivam };
2618485149cSManivannan Sadhasivam 
2628485149cSManivannan Sadhasivam struct mhi_cmd_ctxt {
2638485149cSManivannan Sadhasivam 	__le32 reserved0;
2648485149cSManivannan Sadhasivam 	__le32 reserved1;
2658485149cSManivannan Sadhasivam 	__le32 reserved2;
2668485149cSManivannan Sadhasivam 
2678485149cSManivannan Sadhasivam 	__le64 rbase __packed __aligned(4);
2688485149cSManivannan Sadhasivam 	__le64 rlen __packed __aligned(4);
2698485149cSManivannan Sadhasivam 	__le64 rp __packed __aligned(4);
2708485149cSManivannan Sadhasivam 	__le64 wp __packed __aligned(4);
2718485149cSManivannan Sadhasivam };
2728485149cSManivannan Sadhasivam 
2738485149cSManivannan Sadhasivam struct mhi_ring_element {
2748485149cSManivannan Sadhasivam 	__le64 ptr;
2758485149cSManivannan Sadhasivam 	__le32 dword[2];
2768485149cSManivannan Sadhasivam };
2778485149cSManivannan Sadhasivam 
278*3a1b8e28SManivannan Sadhasivam static inline const char *mhi_state_str(enum mhi_state state)
279*3a1b8e28SManivannan Sadhasivam {
280*3a1b8e28SManivannan Sadhasivam 	switch (state) {
281*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_RESET:
282*3a1b8e28SManivannan Sadhasivam 		return "RESET";
283*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_READY:
284*3a1b8e28SManivannan Sadhasivam 		return "READY";
285*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_M0:
286*3a1b8e28SManivannan Sadhasivam 		return "M0";
287*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_M1:
288*3a1b8e28SManivannan Sadhasivam 		return "M1";
289*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_M2:
290*3a1b8e28SManivannan Sadhasivam 		return "M2";
291*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_M3:
292*3a1b8e28SManivannan Sadhasivam 		return "M3";
293*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_M3_FAST:
294*3a1b8e28SManivannan Sadhasivam 		return "M3 FAST";
295*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_BHI:
296*3a1b8e28SManivannan Sadhasivam 		return "BHI";
297*3a1b8e28SManivannan Sadhasivam 	case MHI_STATE_SYS_ERR:
298*3a1b8e28SManivannan Sadhasivam 		return "SYS ERROR";
299*3a1b8e28SManivannan Sadhasivam 	default:
300*3a1b8e28SManivannan Sadhasivam 		return "Unknown state";
301*3a1b8e28SManivannan Sadhasivam 	}
302*3a1b8e28SManivannan Sadhasivam };
3038485149cSManivannan Sadhasivam 
3048485149cSManivannan Sadhasivam #endif /* _MHI_COMMON_H */
305