Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Apr 14-17, 2025
Register
Loading...
v6.2
  1/*
  2 * Driver for MMC and SSD cards for Cavium OCTEON and ThunderX SOCs.
  3 *
  4 * This file is subject to the terms and conditions of the GNU General Public
  5 * License.  See the file "COPYING" in the main directory of this archive
  6 * for more details.
  7 *
  8 * Copyright (C) 2012-2017 Cavium Inc.
  9 */
 10
 11#ifndef _CAVIUM_MMC_H_
 12#define _CAVIUM_MMC_H_
 13
 14#include <linux/bitops.h>
 15#include <linux/clk.h>
 16#include <linux/gpio/consumer.h>
 17#include <linux/io.h>
 18#include <linux/mmc/host.h>
 19#include <linux/of.h>
 20#include <linux/scatterlist.h>
 21#include <linux/semaphore.h>
 22
 23#define CAVIUM_MAX_MMC		4
 24
 25/* DMA register addresses */
 26#define MIO_EMM_DMA_FIFO_CFG(x)	(0x00 + x->reg_off_dma)
 27#define MIO_EMM_DMA_FIFO_ADR(x)	(0x10 + x->reg_off_dma)
 28#define MIO_EMM_DMA_FIFO_CMD(x)	(0x18 + x->reg_off_dma)
 29#define MIO_EMM_DMA_CFG(x)	(0x20 + x->reg_off_dma)
 30#define MIO_EMM_DMA_ADR(x)	(0x28 + x->reg_off_dma)
 31#define MIO_EMM_DMA_INT(x)	(0x30 + x->reg_off_dma)
 32#define MIO_EMM_DMA_INT_W1S(x)	(0x38 + x->reg_off_dma)
 33#define MIO_EMM_DMA_INT_ENA_W1S(x) (0x40 + x->reg_off_dma)
 34#define MIO_EMM_DMA_INT_ENA_W1C(x) (0x48 + x->reg_off_dma)
 35
 36/* register addresses */
 37#define MIO_EMM_CFG(x)		(0x00 + x->reg_off)
 38#define MIO_EMM_SWITCH(x)	(0x48 + x->reg_off)
 39#define MIO_EMM_DMA(x)		(0x50 + x->reg_off)
 40#define MIO_EMM_CMD(x)		(0x58 + x->reg_off)
 41#define MIO_EMM_RSP_STS(x)	(0x60 + x->reg_off)
 42#define MIO_EMM_RSP_LO(x)	(0x68 + x->reg_off)
 43#define MIO_EMM_RSP_HI(x)	(0x70 + x->reg_off)
 44#define MIO_EMM_INT(x)		(0x78 + x->reg_off)
 45#define MIO_EMM_INT_EN(x)	(0x80 + x->reg_off)
 46#define MIO_EMM_WDOG(x)		(0x88 + x->reg_off)
 47#define MIO_EMM_SAMPLE(x)	(0x90 + x->reg_off)
 48#define MIO_EMM_STS_MASK(x)	(0x98 + x->reg_off)
 49#define MIO_EMM_RCA(x)		(0xa0 + x->reg_off)
 50#define MIO_EMM_INT_EN_SET(x)	(0xb0 + x->reg_off)
 51#define MIO_EMM_INT_EN_CLR(x)	(0xb8 + x->reg_off)
 52#define MIO_EMM_BUF_IDX(x)	(0xe0 + x->reg_off)
 53#define MIO_EMM_BUF_DAT(x)	(0xe8 + x->reg_off)
 54
 55struct cvm_mmc_host {
 56	struct device *dev;
 57	void __iomem *base;
 58	void __iomem *dma_base;
 59	int reg_off;
 60	int reg_off_dma;
 61	u64 emm_cfg;
 62	u64 n_minus_one;	/* OCTEON II workaround location */
 63	int last_slot;
 64	struct clk *clk;
 65	int sys_freq;
 66
 67	struct mmc_request *current_req;
 68	struct sg_mapping_iter smi;
 69	bool dma_active;
 70	bool use_sg;
 71
 72	bool has_ciu3;
 73	bool big_dma_addr;
 74	bool need_irq_handler_lock;
 75	spinlock_t irq_handler_lock;
 76	struct semaphore mmc_serializer;
 77
 78	struct gpio_desc *global_pwr_gpiod;
 79	atomic_t shared_power_users;
 80
 81	struct cvm_mmc_slot *slot[CAVIUM_MAX_MMC];
 82	struct platform_device *slot_pdev[CAVIUM_MAX_MMC];
 83
 84	void (*set_shared_power)(struct cvm_mmc_host *, int);
 85	void (*acquire_bus)(struct cvm_mmc_host *);
 86	void (*release_bus)(struct cvm_mmc_host *);
 87	void (*int_enable)(struct cvm_mmc_host *, u64);
 88	/* required on some MIPS models */
 89	void (*dmar_fixup)(struct cvm_mmc_host *, struct mmc_command *,
 90			   struct mmc_data *, u64);
 91	void (*dmar_fixup_done)(struct cvm_mmc_host *);
 92};
 93
 94struct cvm_mmc_slot {
 95	struct mmc_host *mmc;		/* slot-level mmc_core object */
 96	struct cvm_mmc_host *host;	/* common hw for all slots */
 97
 98	u64 clock;
 99
100	u64 cached_switch;
101	u64 cached_rca;
102
103	unsigned int cmd_cnt;		/* sample delay */
104	unsigned int dat_cnt;		/* sample delay */
105
106	int bus_id;
107};
108
109struct cvm_mmc_cr_type {
110	u8 ctype;
111	u8 rtype;
112};
113
114struct cvm_mmc_cr_mods {
115	u8 ctype_xor;
116	u8 rtype_xor;
117};
118
119/* Bitfield definitions */
120#define MIO_EMM_DMA_FIFO_CFG_CLR	BIT_ULL(16)
121#define MIO_EMM_DMA_FIFO_CFG_INT_LVL	GENMASK_ULL(12, 8)
122#define MIO_EMM_DMA_FIFO_CFG_COUNT	GENMASK_ULL(4, 0)
123
124#define MIO_EMM_DMA_FIFO_CMD_RW		BIT_ULL(62)
125#define MIO_EMM_DMA_FIFO_CMD_INTDIS	BIT_ULL(60)
126#define MIO_EMM_DMA_FIFO_CMD_SWAP32	BIT_ULL(59)
127#define MIO_EMM_DMA_FIFO_CMD_SWAP16	BIT_ULL(58)
128#define MIO_EMM_DMA_FIFO_CMD_SWAP8	BIT_ULL(57)
129#define MIO_EMM_DMA_FIFO_CMD_ENDIAN	BIT_ULL(56)
130#define MIO_EMM_DMA_FIFO_CMD_SIZE	GENMASK_ULL(55, 36)
131
132#define MIO_EMM_CMD_SKIP_BUSY		BIT_ULL(62)
133#define MIO_EMM_CMD_BUS_ID		GENMASK_ULL(61, 60)
134#define MIO_EMM_CMD_VAL			BIT_ULL(59)
135#define MIO_EMM_CMD_DBUF		BIT_ULL(55)
136#define MIO_EMM_CMD_OFFSET		GENMASK_ULL(54, 49)
137#define MIO_EMM_CMD_CTYPE_XOR		GENMASK_ULL(42, 41)
138#define MIO_EMM_CMD_RTYPE_XOR		GENMASK_ULL(40, 38)
139#define MIO_EMM_CMD_IDX			GENMASK_ULL(37, 32)
140#define MIO_EMM_CMD_ARG			GENMASK_ULL(31, 0)
141
142#define MIO_EMM_DMA_SKIP_BUSY		BIT_ULL(62)
143#define MIO_EMM_DMA_BUS_ID		GENMASK_ULL(61, 60)
144#define MIO_EMM_DMA_VAL			BIT_ULL(59)
145#define MIO_EMM_DMA_SECTOR		BIT_ULL(58)
146#define MIO_EMM_DMA_DAT_NULL		BIT_ULL(57)
147#define MIO_EMM_DMA_THRES		GENMASK_ULL(56, 51)
148#define MIO_EMM_DMA_REL_WR		BIT_ULL(50)
149#define MIO_EMM_DMA_RW			BIT_ULL(49)
150#define MIO_EMM_DMA_MULTI		BIT_ULL(48)
151#define MIO_EMM_DMA_BLOCK_CNT		GENMASK_ULL(47, 32)
152#define MIO_EMM_DMA_CARD_ADDR		GENMASK_ULL(31, 0)
153
154#define MIO_EMM_DMA_CFG_EN		BIT_ULL(63)
155#define MIO_EMM_DMA_CFG_RW		BIT_ULL(62)
156#define MIO_EMM_DMA_CFG_CLR		BIT_ULL(61)
157#define MIO_EMM_DMA_CFG_SWAP32		BIT_ULL(59)
158#define MIO_EMM_DMA_CFG_SWAP16		BIT_ULL(58)
159#define MIO_EMM_DMA_CFG_SWAP8		BIT_ULL(57)
160#define MIO_EMM_DMA_CFG_ENDIAN		BIT_ULL(56)
161#define MIO_EMM_DMA_CFG_SIZE		GENMASK_ULL(55, 36)
162#define MIO_EMM_DMA_CFG_ADR		GENMASK_ULL(35, 0)
163
164#define MIO_EMM_INT_SWITCH_ERR		BIT_ULL(6)
165#define MIO_EMM_INT_SWITCH_DONE		BIT_ULL(5)
166#define MIO_EMM_INT_DMA_ERR		BIT_ULL(4)
167#define MIO_EMM_INT_CMD_ERR		BIT_ULL(3)
168#define MIO_EMM_INT_DMA_DONE		BIT_ULL(2)
169#define MIO_EMM_INT_CMD_DONE		BIT_ULL(1)
170#define MIO_EMM_INT_BUF_DONE		BIT_ULL(0)
171
172#define MIO_EMM_RSP_STS_BUS_ID		GENMASK_ULL(61, 60)
173#define MIO_EMM_RSP_STS_CMD_VAL		BIT_ULL(59)
174#define MIO_EMM_RSP_STS_SWITCH_VAL	BIT_ULL(58)
175#define MIO_EMM_RSP_STS_DMA_VAL		BIT_ULL(57)
176#define MIO_EMM_RSP_STS_DMA_PEND	BIT_ULL(56)
177#define MIO_EMM_RSP_STS_DBUF_ERR	BIT_ULL(28)
178#define MIO_EMM_RSP_STS_DBUF		BIT_ULL(23)
179#define MIO_EMM_RSP_STS_BLK_TIMEOUT	BIT_ULL(22)
180#define MIO_EMM_RSP_STS_BLK_CRC_ERR	BIT_ULL(21)
181#define MIO_EMM_RSP_STS_RSP_BUSYBIT	BIT_ULL(20)
182#define MIO_EMM_RSP_STS_STP_TIMEOUT	BIT_ULL(19)
183#define MIO_EMM_RSP_STS_STP_CRC_ERR	BIT_ULL(18)
184#define MIO_EMM_RSP_STS_STP_BAD_STS	BIT_ULL(17)
185#define MIO_EMM_RSP_STS_STP_VAL		BIT_ULL(16)
186#define MIO_EMM_RSP_STS_RSP_TIMEOUT	BIT_ULL(15)
187#define MIO_EMM_RSP_STS_RSP_CRC_ERR	BIT_ULL(14)
188#define MIO_EMM_RSP_STS_RSP_BAD_STS	BIT_ULL(13)
189#define MIO_EMM_RSP_STS_RSP_VAL		BIT_ULL(12)
190#define MIO_EMM_RSP_STS_RSP_TYPE	GENMASK_ULL(11, 9)
191#define MIO_EMM_RSP_STS_CMD_TYPE	GENMASK_ULL(8, 7)
192#define MIO_EMM_RSP_STS_CMD_IDX		GENMASK_ULL(6, 1)
193#define MIO_EMM_RSP_STS_CMD_DONE	BIT_ULL(0)
194
195#define MIO_EMM_SAMPLE_CMD_CNT		GENMASK_ULL(25, 16)
196#define MIO_EMM_SAMPLE_DAT_CNT		GENMASK_ULL(9, 0)
197
198#define MIO_EMM_SWITCH_BUS_ID		GENMASK_ULL(61, 60)
199#define MIO_EMM_SWITCH_EXE		BIT_ULL(59)
200#define MIO_EMM_SWITCH_ERR0		BIT_ULL(58)
201#define MIO_EMM_SWITCH_ERR1		BIT_ULL(57)
202#define MIO_EMM_SWITCH_ERR2		BIT_ULL(56)
203#define MIO_EMM_SWITCH_HS_TIMING	BIT_ULL(48)
204#define MIO_EMM_SWITCH_BUS_WIDTH	GENMASK_ULL(42, 40)
205#define MIO_EMM_SWITCH_POWER_CLASS	GENMASK_ULL(35, 32)
206#define MIO_EMM_SWITCH_CLK_HI		GENMASK_ULL(31, 16)
207#define MIO_EMM_SWITCH_CLK_LO		GENMASK_ULL(15, 0)
208
209/* Protoypes */
210irqreturn_t cvm_mmc_interrupt(int irq, void *dev_id);
211int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host);
212int cvm_mmc_of_slot_remove(struct cvm_mmc_slot *slot);
213extern const char *cvm_mmc_irq_names[];
214
215#endif
v6.8
  1/*
  2 * Driver for MMC and SSD cards for Cavium OCTEON and ThunderX SOCs.
  3 *
  4 * This file is subject to the terms and conditions of the GNU General Public
  5 * License.  See the file "COPYING" in the main directory of this archive
  6 * for more details.
  7 *
  8 * Copyright (C) 2012-2017 Cavium Inc.
  9 */
 10
 11#ifndef _CAVIUM_MMC_H_
 12#define _CAVIUM_MMC_H_
 13
 14#include <linux/bitops.h>
 15#include <linux/clk.h>
 16#include <linux/gpio/consumer.h>
 17#include <linux/io.h>
 18#include <linux/mmc/host.h>
 19#include <linux/of.h>
 20#include <linux/scatterlist.h>
 21#include <linux/semaphore.h>
 22
 23#define CAVIUM_MAX_MMC		4
 24
 25/* DMA register addresses */
 26#define MIO_EMM_DMA_FIFO_CFG(x)	(0x00 + x->reg_off_dma)
 27#define MIO_EMM_DMA_FIFO_ADR(x)	(0x10 + x->reg_off_dma)
 28#define MIO_EMM_DMA_FIFO_CMD(x)	(0x18 + x->reg_off_dma)
 29#define MIO_EMM_DMA_CFG(x)	(0x20 + x->reg_off_dma)
 30#define MIO_EMM_DMA_ADR(x)	(0x28 + x->reg_off_dma)
 31#define MIO_EMM_DMA_INT(x)	(0x30 + x->reg_off_dma)
 32#define MIO_EMM_DMA_INT_W1S(x)	(0x38 + x->reg_off_dma)
 33#define MIO_EMM_DMA_INT_ENA_W1S(x) (0x40 + x->reg_off_dma)
 34#define MIO_EMM_DMA_INT_ENA_W1C(x) (0x48 + x->reg_off_dma)
 35
 36/* register addresses */
 37#define MIO_EMM_CFG(x)		(0x00 + x->reg_off)
 38#define MIO_EMM_SWITCH(x)	(0x48 + x->reg_off)
 39#define MIO_EMM_DMA(x)		(0x50 + x->reg_off)
 40#define MIO_EMM_CMD(x)		(0x58 + x->reg_off)
 41#define MIO_EMM_RSP_STS(x)	(0x60 + x->reg_off)
 42#define MIO_EMM_RSP_LO(x)	(0x68 + x->reg_off)
 43#define MIO_EMM_RSP_HI(x)	(0x70 + x->reg_off)
 44#define MIO_EMM_INT(x)		(0x78 + x->reg_off)
 45#define MIO_EMM_INT_EN(x)	(0x80 + x->reg_off)
 46#define MIO_EMM_WDOG(x)		(0x88 + x->reg_off)
 47#define MIO_EMM_SAMPLE(x)	(0x90 + x->reg_off)
 48#define MIO_EMM_STS_MASK(x)	(0x98 + x->reg_off)
 49#define MIO_EMM_RCA(x)		(0xa0 + x->reg_off)
 50#define MIO_EMM_INT_EN_SET(x)	(0xb0 + x->reg_off)
 51#define MIO_EMM_INT_EN_CLR(x)	(0xb8 + x->reg_off)
 52#define MIO_EMM_BUF_IDX(x)	(0xe0 + x->reg_off)
 53#define MIO_EMM_BUF_DAT(x)	(0xe8 + x->reg_off)
 54
 55struct cvm_mmc_host {
 56	struct device *dev;
 57	void __iomem *base;
 58	void __iomem *dma_base;
 59	int reg_off;
 60	int reg_off_dma;
 61	u64 emm_cfg;
 62	u64 n_minus_one;	/* OCTEON II workaround location */
 63	int last_slot;
 64	struct clk *clk;
 65	int sys_freq;
 66
 67	struct mmc_request *current_req;
 68	struct sg_mapping_iter smi;
 69	bool dma_active;
 70	bool use_sg;
 71
 72	bool has_ciu3;
 73	bool big_dma_addr;
 74	bool need_irq_handler_lock;
 75	spinlock_t irq_handler_lock;
 76	struct semaphore mmc_serializer;
 77
 78	struct gpio_desc *global_pwr_gpiod;
 79	atomic_t shared_power_users;
 80
 81	struct cvm_mmc_slot *slot[CAVIUM_MAX_MMC];
 82	struct platform_device *slot_pdev[CAVIUM_MAX_MMC];
 83
 84	void (*set_shared_power)(struct cvm_mmc_host *, int);
 85	void (*acquire_bus)(struct cvm_mmc_host *);
 86	void (*release_bus)(struct cvm_mmc_host *);
 87	void (*int_enable)(struct cvm_mmc_host *, u64);
 88	/* required on some MIPS models */
 89	void (*dmar_fixup)(struct cvm_mmc_host *, struct mmc_command *,
 90			   struct mmc_data *, u64);
 91	void (*dmar_fixup_done)(struct cvm_mmc_host *);
 92};
 93
 94struct cvm_mmc_slot {
 95	struct mmc_host *mmc;		/* slot-level mmc_core object */
 96	struct cvm_mmc_host *host;	/* common hw for all slots */
 97
 98	u64 clock;
 99
100	u64 cached_switch;
101	u64 cached_rca;
102
103	unsigned int cmd_cnt;		/* sample delay */
104	unsigned int dat_cnt;		/* sample delay */
105
106	int bus_id;
107};
108
109struct cvm_mmc_cr_type {
110	u8 ctype;
111	u8 rtype;
112};
113
114struct cvm_mmc_cr_mods {
115	u8 ctype_xor;
116	u8 rtype_xor;
117};
118
119/* Bitfield definitions */
120#define MIO_EMM_DMA_FIFO_CFG_CLR	BIT_ULL(16)
121#define MIO_EMM_DMA_FIFO_CFG_INT_LVL	GENMASK_ULL(12, 8)
122#define MIO_EMM_DMA_FIFO_CFG_COUNT	GENMASK_ULL(4, 0)
123
124#define MIO_EMM_DMA_FIFO_CMD_RW		BIT_ULL(62)
125#define MIO_EMM_DMA_FIFO_CMD_INTDIS	BIT_ULL(60)
126#define MIO_EMM_DMA_FIFO_CMD_SWAP32	BIT_ULL(59)
127#define MIO_EMM_DMA_FIFO_CMD_SWAP16	BIT_ULL(58)
128#define MIO_EMM_DMA_FIFO_CMD_SWAP8	BIT_ULL(57)
129#define MIO_EMM_DMA_FIFO_CMD_ENDIAN	BIT_ULL(56)
130#define MIO_EMM_DMA_FIFO_CMD_SIZE	GENMASK_ULL(55, 36)
131
132#define MIO_EMM_CMD_SKIP_BUSY		BIT_ULL(62)
133#define MIO_EMM_CMD_BUS_ID		GENMASK_ULL(61, 60)
134#define MIO_EMM_CMD_VAL			BIT_ULL(59)
135#define MIO_EMM_CMD_DBUF		BIT_ULL(55)
136#define MIO_EMM_CMD_OFFSET		GENMASK_ULL(54, 49)
137#define MIO_EMM_CMD_CTYPE_XOR		GENMASK_ULL(42, 41)
138#define MIO_EMM_CMD_RTYPE_XOR		GENMASK_ULL(40, 38)
139#define MIO_EMM_CMD_IDX			GENMASK_ULL(37, 32)
140#define MIO_EMM_CMD_ARG			GENMASK_ULL(31, 0)
141
142#define MIO_EMM_DMA_SKIP_BUSY		BIT_ULL(62)
143#define MIO_EMM_DMA_BUS_ID		GENMASK_ULL(61, 60)
144#define MIO_EMM_DMA_VAL			BIT_ULL(59)
145#define MIO_EMM_DMA_SECTOR		BIT_ULL(58)
146#define MIO_EMM_DMA_DAT_NULL		BIT_ULL(57)
147#define MIO_EMM_DMA_THRES		GENMASK_ULL(56, 51)
148#define MIO_EMM_DMA_REL_WR		BIT_ULL(50)
149#define MIO_EMM_DMA_RW			BIT_ULL(49)
150#define MIO_EMM_DMA_MULTI		BIT_ULL(48)
151#define MIO_EMM_DMA_BLOCK_CNT		GENMASK_ULL(47, 32)
152#define MIO_EMM_DMA_CARD_ADDR		GENMASK_ULL(31, 0)
153
154#define MIO_EMM_DMA_CFG_EN		BIT_ULL(63)
155#define MIO_EMM_DMA_CFG_RW		BIT_ULL(62)
156#define MIO_EMM_DMA_CFG_CLR		BIT_ULL(61)
157#define MIO_EMM_DMA_CFG_SWAP32		BIT_ULL(59)
158#define MIO_EMM_DMA_CFG_SWAP16		BIT_ULL(58)
159#define MIO_EMM_DMA_CFG_SWAP8		BIT_ULL(57)
160#define MIO_EMM_DMA_CFG_ENDIAN		BIT_ULL(56)
161#define MIO_EMM_DMA_CFG_SIZE		GENMASK_ULL(55, 36)
162#define MIO_EMM_DMA_CFG_ADR		GENMASK_ULL(35, 0)
163
164#define MIO_EMM_INT_SWITCH_ERR		BIT_ULL(6)
165#define MIO_EMM_INT_SWITCH_DONE		BIT_ULL(5)
166#define MIO_EMM_INT_DMA_ERR		BIT_ULL(4)
167#define MIO_EMM_INT_CMD_ERR		BIT_ULL(3)
168#define MIO_EMM_INT_DMA_DONE		BIT_ULL(2)
169#define MIO_EMM_INT_CMD_DONE		BIT_ULL(1)
170#define MIO_EMM_INT_BUF_DONE		BIT_ULL(0)
171
172#define MIO_EMM_RSP_STS_BUS_ID		GENMASK_ULL(61, 60)
173#define MIO_EMM_RSP_STS_CMD_VAL		BIT_ULL(59)
174#define MIO_EMM_RSP_STS_SWITCH_VAL	BIT_ULL(58)
175#define MIO_EMM_RSP_STS_DMA_VAL		BIT_ULL(57)
176#define MIO_EMM_RSP_STS_DMA_PEND	BIT_ULL(56)
177#define MIO_EMM_RSP_STS_DBUF_ERR	BIT_ULL(28)
178#define MIO_EMM_RSP_STS_DBUF		BIT_ULL(23)
179#define MIO_EMM_RSP_STS_BLK_TIMEOUT	BIT_ULL(22)
180#define MIO_EMM_RSP_STS_BLK_CRC_ERR	BIT_ULL(21)
181#define MIO_EMM_RSP_STS_RSP_BUSYBIT	BIT_ULL(20)
182#define MIO_EMM_RSP_STS_STP_TIMEOUT	BIT_ULL(19)
183#define MIO_EMM_RSP_STS_STP_CRC_ERR	BIT_ULL(18)
184#define MIO_EMM_RSP_STS_STP_BAD_STS	BIT_ULL(17)
185#define MIO_EMM_RSP_STS_STP_VAL		BIT_ULL(16)
186#define MIO_EMM_RSP_STS_RSP_TIMEOUT	BIT_ULL(15)
187#define MIO_EMM_RSP_STS_RSP_CRC_ERR	BIT_ULL(14)
188#define MIO_EMM_RSP_STS_RSP_BAD_STS	BIT_ULL(13)
189#define MIO_EMM_RSP_STS_RSP_VAL		BIT_ULL(12)
190#define MIO_EMM_RSP_STS_RSP_TYPE	GENMASK_ULL(11, 9)
191#define MIO_EMM_RSP_STS_CMD_TYPE	GENMASK_ULL(8, 7)
192#define MIO_EMM_RSP_STS_CMD_IDX		GENMASK_ULL(6, 1)
193#define MIO_EMM_RSP_STS_CMD_DONE	BIT_ULL(0)
194
195#define MIO_EMM_SAMPLE_CMD_CNT		GENMASK_ULL(25, 16)
196#define MIO_EMM_SAMPLE_DAT_CNT		GENMASK_ULL(9, 0)
197
198#define MIO_EMM_SWITCH_BUS_ID		GENMASK_ULL(61, 60)
199#define MIO_EMM_SWITCH_EXE		BIT_ULL(59)
200#define MIO_EMM_SWITCH_ERR0		BIT_ULL(58)
201#define MIO_EMM_SWITCH_ERR1		BIT_ULL(57)
202#define MIO_EMM_SWITCH_ERR2		BIT_ULL(56)
203#define MIO_EMM_SWITCH_HS_TIMING	BIT_ULL(48)
204#define MIO_EMM_SWITCH_BUS_WIDTH	GENMASK_ULL(42, 40)
205#define MIO_EMM_SWITCH_POWER_CLASS	GENMASK_ULL(35, 32)
206#define MIO_EMM_SWITCH_CLK_HI		GENMASK_ULL(31, 16)
207#define MIO_EMM_SWITCH_CLK_LO		GENMASK_ULL(15, 0)
208
209/* Protoypes */
210irqreturn_t cvm_mmc_interrupt(int irq, void *dev_id);
211int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host);
212int cvm_mmc_of_slot_remove(struct cvm_mmc_slot *slot);
213extern const char *cvm_mmc_irq_names[];
214
215#endif