brintos

brintos / linux-shallow public Read only

0
0
Text · 92.1 KiB · e9f6e4e Raw
3630 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Synopsys DesignWare Multimedia Card Interface driver4 *  (Based on NXP driver for lpc 31xx)5 *6 * Copyright (C) 2009 NXP Semiconductors7 * Copyright (C) 2009, 2010 Imagination Technologies Ltd.8 */9 10#include <linux/blkdev.h>11#include <linux/clk.h>12#include <linux/debugfs.h>13#include <linux/device.h>14#include <linux/dma-mapping.h>15#include <linux/err.h>16#include <linux/init.h>17#include <linux/interrupt.h>18#include <linux/iopoll.h>19#include <linux/ioport.h>20#include <linux/ktime.h>21#include <linux/module.h>22#include <linux/platform_device.h>23#include <linux/pm_runtime.h>24#include <linux/prandom.h>25#include <linux/seq_file.h>26#include <linux/slab.h>27#include <linux/stat.h>28#include <linux/delay.h>29#include <linux/irq.h>30#include <linux/mmc/card.h>31#include <linux/mmc/host.h>32#include <linux/mmc/mmc.h>33#include <linux/mmc/sd.h>34#include <linux/mmc/sdio.h>35#include <linux/bitops.h>36#include <linux/regulator/consumer.h>37#include <linux/of.h>38#include <linux/mmc/slot-gpio.h>39 40#include "dw_mmc.h"41 42/* Common flag combinations */43#define DW_MCI_DATA_ERROR_FLAGS	(SDMMC_INT_DRTO | SDMMC_INT_DCRC | \44				 SDMMC_INT_HTO | SDMMC_INT_SBE  | \45				 SDMMC_INT_EBE | SDMMC_INT_HLE)46#define DW_MCI_CMD_ERROR_FLAGS	(SDMMC_INT_RTO | SDMMC_INT_RCRC | \47				 SDMMC_INT_RESP_ERR | SDMMC_INT_HLE)48#define DW_MCI_ERROR_FLAGS	(DW_MCI_DATA_ERROR_FLAGS | \49				 DW_MCI_CMD_ERROR_FLAGS)50#define DW_MCI_SEND_STATUS	151#define DW_MCI_RECV_STATUS	252#define DW_MCI_DMA_THRESHOLD	1653 54#define DW_MCI_FREQ_MAX	200000000	/* unit: HZ */55#define DW_MCI_FREQ_MIN	100000		/* unit: HZ */56 57#define IDMAC_INT_CLR		(SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \58				 SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \59				 SDMMC_IDMAC_INT_FBE | SDMMC_IDMAC_INT_RI | \60				 SDMMC_IDMAC_INT_TI)61 62#define DESC_RING_BUF_SZ	PAGE_SIZE63 64struct idmac_desc_64addr {65	u32		des0;	/* Control Descriptor */66#define IDMAC_OWN_CLR64(x) \67	!((x) & cpu_to_le32(IDMAC_DES0_OWN))68 69	u32		des1;	/* Reserved */70 71	u32		des2;	/*Buffer sizes */72#define IDMAC_64ADDR_SET_BUFFER1_SIZE(d, s) \73	((d)->des2 = ((d)->des2 & cpu_to_le32(0x03ffe000)) | \74	 ((cpu_to_le32(s)) & cpu_to_le32(0x1fff)))75 76	u32		des3;	/* Reserved */77 78	u32		des4;	/* Lower 32-bits of Buffer Address Pointer 1*/79	u32		des5;	/* Upper 32-bits of Buffer Address Pointer 1*/80 81	u32		des6;	/* Lower 32-bits of Next Descriptor Address */82	u32		des7;	/* Upper 32-bits of Next Descriptor Address */83};84 85struct idmac_desc {86	__le32		des0;	/* Control Descriptor */87#define IDMAC_DES0_DIC	BIT(1)88#define IDMAC_DES0_LD	BIT(2)89#define IDMAC_DES0_FD	BIT(3)90#define IDMAC_DES0_CH	BIT(4)91#define IDMAC_DES0_ER	BIT(5)92#define IDMAC_DES0_CES	BIT(30)93#define IDMAC_DES0_OWN	BIT(31)94 95	__le32		des1;	/* Buffer sizes */96#define IDMAC_SET_BUFFER1_SIZE(d, s) \97	((d)->des1 = ((d)->des1 & cpu_to_le32(0x03ffe000)) | (cpu_to_le32((s) & 0x1fff)))98 99	__le32		des2;	/* buffer 1 physical address */100 101	__le32		des3;	/* buffer 2 physical address */102};103 104/* Each descriptor can transfer up to 4KB of data in chained mode */105#define DW_MCI_DESC_DATA_LENGTH	0x1000106 107#if defined(CONFIG_DEBUG_FS)108static int dw_mci_req_show(struct seq_file *s, void *v)109{110	struct dw_mci_slot *slot = s->private;111	struct mmc_request *mrq;112	struct mmc_command *cmd;113	struct mmc_command *stop;114	struct mmc_data	*data;115 116	/* Make sure we get a consistent snapshot */117	spin_lock_bh(&slot->host->lock);118	mrq = slot->mrq;119 120	if (mrq) {121		cmd = mrq->cmd;122		data = mrq->data;123		stop = mrq->stop;124 125		if (cmd)126			seq_printf(s,127				   "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",128				   cmd->opcode, cmd->arg, cmd->flags,129				   cmd->resp[0], cmd->resp[1], cmd->resp[2],130				   cmd->resp[2], cmd->error);131		if (data)132			seq_printf(s, "DATA %u / %u * %u flg %x err %d\n",133				   data->bytes_xfered, data->blocks,134				   data->blksz, data->flags, data->error);135		if (stop)136			seq_printf(s,137				   "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",138				   stop->opcode, stop->arg, stop->flags,139				   stop->resp[0], stop->resp[1], stop->resp[2],140				   stop->resp[2], stop->error);141	}142 143	spin_unlock_bh(&slot->host->lock);144 145	return 0;146}147DEFINE_SHOW_ATTRIBUTE(dw_mci_req);148 149static int dw_mci_regs_show(struct seq_file *s, void *v)150{151	struct dw_mci *host = s->private;152 153	pm_runtime_get_sync(host->dev);154 155	seq_printf(s, "STATUS:\t0x%08x\n", mci_readl(host, STATUS));156	seq_printf(s, "RINTSTS:\t0x%08x\n", mci_readl(host, RINTSTS));157	seq_printf(s, "CMD:\t0x%08x\n", mci_readl(host, CMD));158	seq_printf(s, "CTRL:\t0x%08x\n", mci_readl(host, CTRL));159	seq_printf(s, "INTMASK:\t0x%08x\n", mci_readl(host, INTMASK));160	seq_printf(s, "CLKENA:\t0x%08x\n", mci_readl(host, CLKENA));161 162	pm_runtime_put_autosuspend(host->dev);163 164	return 0;165}166DEFINE_SHOW_ATTRIBUTE(dw_mci_regs);167 168static void dw_mci_init_debugfs(struct dw_mci_slot *slot)169{170	struct mmc_host	*mmc = slot->mmc;171	struct dw_mci *host = slot->host;172	struct dentry *root;173 174	root = mmc->debugfs_root;175	if (!root)176		return;177 178	debugfs_create_file("regs", S_IRUSR, root, host, &dw_mci_regs_fops);179	debugfs_create_file("req", S_IRUSR, root, slot, &dw_mci_req_fops);180	debugfs_create_u32("state", S_IRUSR, root, &host->state);181	debugfs_create_xul("pending_events", S_IRUSR, root,182			   &host->pending_events);183	debugfs_create_xul("completed_events", S_IRUSR, root,184			   &host->completed_events);185#ifdef CONFIG_FAULT_INJECTION186	fault_create_debugfs_attr("fail_data_crc", root, &host->fail_data_crc);187#endif188}189#endif /* defined(CONFIG_DEBUG_FS) */190 191static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset)192{193	u32 ctrl;194 195	ctrl = mci_readl(host, CTRL);196	ctrl |= reset;197	mci_writel(host, CTRL, ctrl);198 199	/* wait till resets clear */200	if (readl_poll_timeout_atomic(host->regs + SDMMC_CTRL, ctrl,201				      !(ctrl & reset),202				      1, 500 * USEC_PER_MSEC)) {203		dev_err(host->dev,204			"Timeout resetting block (ctrl reset %#x)\n",205			ctrl & reset);206		return false;207	}208 209	return true;210}211 212static void dw_mci_wait_while_busy(struct dw_mci *host, u32 cmd_flags)213{214	u32 status;215 216	/*217	 * Databook says that before issuing a new data transfer command218	 * we need to check to see if the card is busy.  Data transfer commands219	 * all have SDMMC_CMD_PRV_DAT_WAIT set, so we'll key off that.220	 *221	 * ...also allow sending for SDMMC_CMD_VOLT_SWITCH where busy is222	 * expected.223	 */224	if ((cmd_flags & SDMMC_CMD_PRV_DAT_WAIT) &&225	    !(cmd_flags & SDMMC_CMD_VOLT_SWITCH)) {226		if (readl_poll_timeout_atomic(host->regs + SDMMC_STATUS,227					      status,228					      !(status & SDMMC_STATUS_BUSY),229					      10, 500 * USEC_PER_MSEC))230			dev_err(host->dev, "Busy; trying anyway\n");231	}232}233 234static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg)235{236	struct dw_mci *host = slot->host;237	unsigned int cmd_status = 0;238 239	mci_writel(host, CMDARG, arg);240	wmb(); /* drain writebuffer */241	dw_mci_wait_while_busy(host, cmd);242	mci_writel(host, CMD, SDMMC_CMD_START | cmd);243 244	if (readl_poll_timeout_atomic(host->regs + SDMMC_CMD, cmd_status,245				      !(cmd_status & SDMMC_CMD_START),246				      1, 500 * USEC_PER_MSEC))247		dev_err(&slot->mmc->class_dev,248			"Timeout sending command (cmd %#x arg %#x status %#x)\n",249			cmd, arg, cmd_status);250}251 252static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd)253{254	struct dw_mci_slot *slot = mmc_priv(mmc);255	struct dw_mci *host = slot->host;256	u32 cmdr;257 258	cmd->error = -EINPROGRESS;259	cmdr = cmd->opcode;260 261	if (cmd->opcode == MMC_STOP_TRANSMISSION ||262	    cmd->opcode == MMC_GO_IDLE_STATE ||263	    cmd->opcode == MMC_GO_INACTIVE_STATE ||264	    (cmd->opcode == SD_IO_RW_DIRECT &&265	     ((cmd->arg >> 9) & 0x1FFFF) == SDIO_CCCR_ABORT))266		cmdr |= SDMMC_CMD_STOP;267	else if (cmd->opcode != MMC_SEND_STATUS && cmd->data)268		cmdr |= SDMMC_CMD_PRV_DAT_WAIT;269 270	if (cmd->opcode == SD_SWITCH_VOLTAGE) {271		u32 clk_en_a;272 273		/* Special bit makes CMD11 not die */274		cmdr |= SDMMC_CMD_VOLT_SWITCH;275 276		/* Change state to continue to handle CMD11 weirdness */277		WARN_ON(slot->host->state != STATE_SENDING_CMD);278		slot->host->state = STATE_SENDING_CMD11;279 280		/*281		 * We need to disable low power mode (automatic clock stop)282		 * while doing voltage switch so we don't confuse the card,283		 * since stopping the clock is a specific part of the UHS284		 * voltage change dance.285		 *286		 * Note that low power mode (SDMMC_CLKEN_LOW_PWR) will be287		 * unconditionally turned back on in dw_mci_setup_bus() if it's288		 * ever called with a non-zero clock.  That shouldn't happen289		 * until the voltage change is all done.290		 */291		clk_en_a = mci_readl(host, CLKENA);292		clk_en_a &= ~(SDMMC_CLKEN_LOW_PWR << slot->id);293		mci_writel(host, CLKENA, clk_en_a);294		mci_send_cmd(slot, SDMMC_CMD_UPD_CLK |295			     SDMMC_CMD_PRV_DAT_WAIT, 0);296	}297 298	if (cmd->flags & MMC_RSP_PRESENT) {299		/* We expect a response, so set this bit */300		cmdr |= SDMMC_CMD_RESP_EXP;301		if (cmd->flags & MMC_RSP_136)302			cmdr |= SDMMC_CMD_RESP_LONG;303	}304 305	if (cmd->flags & MMC_RSP_CRC)306		cmdr |= SDMMC_CMD_RESP_CRC;307 308	if (cmd->data) {309		cmdr |= SDMMC_CMD_DAT_EXP;310		if (cmd->data->flags & MMC_DATA_WRITE)311			cmdr |= SDMMC_CMD_DAT_WR;312	}313 314	if (!test_bit(DW_MMC_CARD_NO_USE_HOLD, &slot->flags))315		cmdr |= SDMMC_CMD_USE_HOLD_REG;316 317	return cmdr;318}319 320static u32 dw_mci_prep_stop_abort(struct dw_mci *host, struct mmc_command *cmd)321{322	struct mmc_command *stop;323	u32 cmdr;324 325	if (!cmd->data)326		return 0;327 328	stop = &host->stop_abort;329	cmdr = cmd->opcode;330	memset(stop, 0, sizeof(struct mmc_command));331 332	if (cmdr == MMC_READ_SINGLE_BLOCK ||333	    cmdr == MMC_READ_MULTIPLE_BLOCK ||334	    cmdr == MMC_WRITE_BLOCK ||335	    cmdr == MMC_WRITE_MULTIPLE_BLOCK ||336	    mmc_op_tuning(cmdr) ||337	    cmdr == MMC_GEN_CMD) {338		stop->opcode = MMC_STOP_TRANSMISSION;339		stop->arg = 0;340		stop->flags = MMC_RSP_R1B | MMC_CMD_AC;341	} else if (cmdr == SD_IO_RW_EXTENDED) {342		stop->opcode = SD_IO_RW_DIRECT;343		stop->arg |= (1 << 31) | (0 << 28) | (SDIO_CCCR_ABORT << 9) |344			     ((cmd->arg >> 28) & 0x7);345		stop->flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_AC;346	} else {347		return 0;348	}349 350	cmdr = stop->opcode | SDMMC_CMD_STOP |351		SDMMC_CMD_RESP_CRC | SDMMC_CMD_RESP_EXP;352 353	if (!test_bit(DW_MMC_CARD_NO_USE_HOLD, &host->slot->flags))354		cmdr |= SDMMC_CMD_USE_HOLD_REG;355 356	return cmdr;357}358 359static inline void dw_mci_set_cto(struct dw_mci *host)360{361	unsigned int cto_clks;362	unsigned int cto_div;363	unsigned int cto_ms;364	unsigned long irqflags;365 366	cto_clks = mci_readl(host, TMOUT) & 0xff;367	cto_div = (mci_readl(host, CLKDIV) & 0xff) * 2;368	if (cto_div == 0)369		cto_div = 1;370 371	cto_ms = DIV_ROUND_UP_ULL((u64)MSEC_PER_SEC * cto_clks * cto_div,372				  host->bus_hz);373 374	/* add a bit spare time */375	cto_ms += 10;376 377	/*378	 * The durations we're working with are fairly short so we have to be379	 * extra careful about synchronization here.  Specifically in hardware a380	 * command timeout is _at most_ 5.1 ms, so that means we expect an381	 * interrupt (either command done or timeout) to come rather quickly382	 * after the mci_writel.  ...but just in case we have a long interrupt383	 * latency let's add a bit of paranoia.384	 *385	 * In general we'll assume that at least an interrupt will be asserted386	 * in hardware by the time the cto_timer runs.  ...and if it hasn't387	 * been asserted in hardware by that time then we'll assume it'll never388	 * come.389	 */390	spin_lock_irqsave(&host->irq_lock, irqflags);391	if (!test_bit(EVENT_CMD_COMPLETE, &host->pending_events))392		mod_timer(&host->cto_timer,393			jiffies + msecs_to_jiffies(cto_ms) + 1);394	spin_unlock_irqrestore(&host->irq_lock, irqflags);395}396 397static void dw_mci_start_command(struct dw_mci *host,398				 struct mmc_command *cmd, u32 cmd_flags)399{400	host->cmd = cmd;401	dev_vdbg(host->dev,402		 "start command: ARGR=0x%08x CMDR=0x%08x\n",403		 cmd->arg, cmd_flags);404 405	mci_writel(host, CMDARG, cmd->arg);406	wmb(); /* drain writebuffer */407	dw_mci_wait_while_busy(host, cmd_flags);408 409	mci_writel(host, CMD, cmd_flags | SDMMC_CMD_START);410 411	/* response expected command only */412	if (cmd_flags & SDMMC_CMD_RESP_EXP)413		dw_mci_set_cto(host);414}415 416static inline void send_stop_abort(struct dw_mci *host, struct mmc_data *data)417{418	struct mmc_command *stop = &host->stop_abort;419 420	dw_mci_start_command(host, stop, host->stop_cmdr);421}422 423/* DMA interface functions */424static void dw_mci_stop_dma(struct dw_mci *host)425{426	if (host->using_dma) {427		host->dma_ops->stop(host);428		host->dma_ops->cleanup(host);429	}430 431	/* Data transfer was stopped by the interrupt handler */432	set_bit(EVENT_XFER_COMPLETE, &host->pending_events);433}434 435static void dw_mci_dma_cleanup(struct dw_mci *host)436{437	struct mmc_data *data = host->data;438 439	if (data && data->host_cookie == COOKIE_MAPPED) {440		dma_unmap_sg(host->dev,441			     data->sg,442			     data->sg_len,443			     mmc_get_dma_dir(data));444		data->host_cookie = COOKIE_UNMAPPED;445	}446}447 448static void dw_mci_idmac_reset(struct dw_mci *host)449{450	u32 bmod = mci_readl(host, BMOD);451	/* Software reset of DMA */452	bmod |= SDMMC_IDMAC_SWRESET;453	mci_writel(host, BMOD, bmod);454}455 456static void dw_mci_idmac_stop_dma(struct dw_mci *host)457{458	u32 temp;459 460	/* Disable and reset the IDMAC interface */461	temp = mci_readl(host, CTRL);462	temp &= ~SDMMC_CTRL_USE_IDMAC;463	temp |= SDMMC_CTRL_DMA_RESET;464	mci_writel(host, CTRL, temp);465 466	/* Stop the IDMAC running */467	temp = mci_readl(host, BMOD);468	temp &= ~(SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB);469	temp |= SDMMC_IDMAC_SWRESET;470	mci_writel(host, BMOD, temp);471}472 473static void dw_mci_dmac_complete_dma(void *arg)474{475	struct dw_mci *host = arg;476	struct mmc_data *data = host->data;477 478	dev_vdbg(host->dev, "DMA complete\n");479 480	if ((host->use_dma == TRANS_MODE_EDMAC) &&481	    data && (data->flags & MMC_DATA_READ))482		/* Invalidate cache after read */483		dma_sync_sg_for_cpu(mmc_dev(host->slot->mmc),484				    data->sg,485				    data->sg_len,486				    DMA_FROM_DEVICE);487 488	host->dma_ops->cleanup(host);489 490	/*491	 * If the card was removed, data will be NULL. No point in trying to492	 * send the stop command or waiting for NBUSY in this case.493	 */494	if (data) {495		set_bit(EVENT_XFER_COMPLETE, &host->pending_events);496		queue_work(system_bh_wq, &host->bh_work);497	}498}499 500static int dw_mci_idmac_init(struct dw_mci *host)501{502	int i;503 504	if (host->dma_64bit_address == 1) {505		struct idmac_desc_64addr *p;506		/* Number of descriptors in the ring buffer */507		host->ring_size =508			DESC_RING_BUF_SZ / sizeof(struct idmac_desc_64addr);509 510		/* Forward link the descriptor list */511		for (i = 0, p = host->sg_cpu; i < host->ring_size - 1;512								i++, p++) {513			p->des6 = (host->sg_dma +514					(sizeof(struct idmac_desc_64addr) *515							(i + 1))) & 0xffffffff;516 517			p->des7 = (u64)(host->sg_dma +518					(sizeof(struct idmac_desc_64addr) *519							(i + 1))) >> 32;520			/* Initialize reserved and buffer size fields to "0" */521			p->des0 = 0;522			p->des1 = 0;523			p->des2 = 0;524			p->des3 = 0;525		}526 527		/* Set the last descriptor as the end-of-ring descriptor */528		p->des6 = host->sg_dma & 0xffffffff;529		p->des7 = (u64)host->sg_dma >> 32;530		p->des0 = IDMAC_DES0_ER;531 532	} else {533		struct idmac_desc *p;534		/* Number of descriptors in the ring buffer */535		host->ring_size =536			DESC_RING_BUF_SZ / sizeof(struct idmac_desc);537 538		/* Forward link the descriptor list */539		for (i = 0, p = host->sg_cpu;540		     i < host->ring_size - 1;541		     i++, p++) {542			p->des3 = cpu_to_le32(host->sg_dma +543					(sizeof(struct idmac_desc) * (i + 1)));544			p->des0 = 0;545			p->des1 = 0;546		}547 548		/* Set the last descriptor as the end-of-ring descriptor */549		p->des3 = cpu_to_le32(host->sg_dma);550		p->des0 = cpu_to_le32(IDMAC_DES0_ER);551	}552 553	dw_mci_idmac_reset(host);554 555	if (host->dma_64bit_address == 1) {556		/* Mask out interrupts - get Tx & Rx complete only */557		mci_writel(host, IDSTS64, IDMAC_INT_CLR);558		mci_writel(host, IDINTEN64, SDMMC_IDMAC_INT_NI |559				SDMMC_IDMAC_INT_RI | SDMMC_IDMAC_INT_TI);560 561		/* Set the descriptor base address */562		mci_writel(host, DBADDRL, host->sg_dma & 0xffffffff);563		mci_writel(host, DBADDRU, (u64)host->sg_dma >> 32);564 565	} else {566		/* Mask out interrupts - get Tx & Rx complete only */567		mci_writel(host, IDSTS, IDMAC_INT_CLR);568		mci_writel(host, IDINTEN, SDMMC_IDMAC_INT_NI |569				SDMMC_IDMAC_INT_RI | SDMMC_IDMAC_INT_TI);570 571		/* Set the descriptor base address */572		mci_writel(host, DBADDR, host->sg_dma);573	}574 575	return 0;576}577 578static inline int dw_mci_prepare_desc64(struct dw_mci *host,579					 struct mmc_data *data,580					 unsigned int sg_len)581{582	unsigned int desc_len;583	struct idmac_desc_64addr *desc_first, *desc_last, *desc;584	u32 val;585	int i;586 587	desc_first = desc_last = desc = host->sg_cpu;588 589	for (i = 0; i < sg_len; i++) {590		unsigned int length = sg_dma_len(&data->sg[i]);591 592		u64 mem_addr = sg_dma_address(&data->sg[i]);593 594		for ( ; length ; desc++) {595			desc_len = (length <= DW_MCI_DESC_DATA_LENGTH) ?596				   length : DW_MCI_DESC_DATA_LENGTH;597 598			length -= desc_len;599 600			/*601			 * Wait for the former clear OWN bit operation602			 * of IDMAC to make sure that this descriptor603			 * isn't still owned by IDMAC as IDMAC's write604			 * ops and CPU's read ops are asynchronous.605			 */606			if (readl_poll_timeout_atomic(&desc->des0, val,607						!(val & IDMAC_DES0_OWN),608						10, 100 * USEC_PER_MSEC))609				goto err_own_bit;610 611			/*612			 * Set the OWN bit and disable interrupts613			 * for this descriptor614			 */615			desc->des0 = IDMAC_DES0_OWN | IDMAC_DES0_DIC |616						IDMAC_DES0_CH;617 618			/* Buffer length */619			IDMAC_64ADDR_SET_BUFFER1_SIZE(desc, desc_len);620 621			/* Physical address to DMA to/from */622			desc->des4 = mem_addr & 0xffffffff;623			desc->des5 = mem_addr >> 32;624 625			/* Update physical address for the next desc */626			mem_addr += desc_len;627 628			/* Save pointer to the last descriptor */629			desc_last = desc;630		}631	}632 633	/* Set first descriptor */634	desc_first->des0 |= IDMAC_DES0_FD;635 636	/* Set last descriptor */637	desc_last->des0 &= ~(IDMAC_DES0_CH | IDMAC_DES0_DIC);638	desc_last->des0 |= IDMAC_DES0_LD;639 640	return 0;641err_own_bit:642	/* restore the descriptor chain as it's polluted */643	dev_dbg(host->dev, "descriptor is still owned by IDMAC.\n");644	memset(host->sg_cpu, 0, DESC_RING_BUF_SZ);645	dw_mci_idmac_init(host);646	return -EINVAL;647}648 649 650static inline int dw_mci_prepare_desc32(struct dw_mci *host,651					 struct mmc_data *data,652					 unsigned int sg_len)653{654	unsigned int desc_len;655	struct idmac_desc *desc_first, *desc_last, *desc;656	u32 val;657	int i;658 659	desc_first = desc_last = desc = host->sg_cpu;660 661	for (i = 0; i < sg_len; i++) {662		unsigned int length = sg_dma_len(&data->sg[i]);663 664		u32 mem_addr = sg_dma_address(&data->sg[i]);665 666		for ( ; length ; desc++) {667			desc_len = (length <= DW_MCI_DESC_DATA_LENGTH) ?668				   length : DW_MCI_DESC_DATA_LENGTH;669 670			length -= desc_len;671 672			/*673			 * Wait for the former clear OWN bit operation674			 * of IDMAC to make sure that this descriptor675			 * isn't still owned by IDMAC as IDMAC's write676			 * ops and CPU's read ops are asynchronous.677			 */678			if (readl_poll_timeout_atomic(&desc->des0, val,679						      IDMAC_OWN_CLR64(val),680						      10,681						      100 * USEC_PER_MSEC))682				goto err_own_bit;683 684			/*685			 * Set the OWN bit and disable interrupts686			 * for this descriptor687			 */688			desc->des0 = cpu_to_le32(IDMAC_DES0_OWN |689						 IDMAC_DES0_DIC |690						 IDMAC_DES0_CH);691 692			/* Buffer length */693			IDMAC_SET_BUFFER1_SIZE(desc, desc_len);694 695			/* Physical address to DMA to/from */696			desc->des2 = cpu_to_le32(mem_addr);697 698			/* Update physical address for the next desc */699			mem_addr += desc_len;700 701			/* Save pointer to the last descriptor */702			desc_last = desc;703		}704	}705 706	/* Set first descriptor */707	desc_first->des0 |= cpu_to_le32(IDMAC_DES0_FD);708 709	/* Set last descriptor */710	desc_last->des0 &= cpu_to_le32(~(IDMAC_DES0_CH |711				       IDMAC_DES0_DIC));712	desc_last->des0 |= cpu_to_le32(IDMAC_DES0_LD);713 714	return 0;715err_own_bit:716	/* restore the descriptor chain as it's polluted */717	dev_dbg(host->dev, "descriptor is still owned by IDMAC.\n");718	memset(host->sg_cpu, 0, DESC_RING_BUF_SZ);719	dw_mci_idmac_init(host);720	return -EINVAL;721}722 723static int dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len)724{725	u32 temp;726	int ret;727 728	if (host->dma_64bit_address == 1)729		ret = dw_mci_prepare_desc64(host, host->data, sg_len);730	else731		ret = dw_mci_prepare_desc32(host, host->data, sg_len);732 733	if (ret)734		goto out;735 736	/* drain writebuffer */737	wmb();738 739	/* Make sure to reset DMA in case we did PIO before this */740	dw_mci_ctrl_reset(host, SDMMC_CTRL_DMA_RESET);741	dw_mci_idmac_reset(host);742 743	/* Select IDMAC interface */744	temp = mci_readl(host, CTRL);745	temp |= SDMMC_CTRL_USE_IDMAC;746	mci_writel(host, CTRL, temp);747 748	/* drain writebuffer */749	wmb();750 751	/* Enable the IDMAC */752	temp = mci_readl(host, BMOD);753	temp |= SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB;754	mci_writel(host, BMOD, temp);755 756	/* Start it running */757	mci_writel(host, PLDMND, 1);758 759out:760	return ret;761}762 763static const struct dw_mci_dma_ops dw_mci_idmac_ops = {764	.init = dw_mci_idmac_init,765	.start = dw_mci_idmac_start_dma,766	.stop = dw_mci_idmac_stop_dma,767	.complete = dw_mci_dmac_complete_dma,768	.cleanup = dw_mci_dma_cleanup,769};770 771static void dw_mci_edmac_stop_dma(struct dw_mci *host)772{773	dmaengine_terminate_async(host->dms->ch);774}775 776static int dw_mci_edmac_start_dma(struct dw_mci *host,777					    unsigned int sg_len)778{779	struct dma_slave_config cfg;780	struct dma_async_tx_descriptor *desc = NULL;781	struct scatterlist *sgl = host->data->sg;782	static const u32 mszs[] = {1, 4, 8, 16, 32, 64, 128, 256};783	u32 sg_elems = host->data->sg_len;784	u32 fifoth_val;785	u32 fifo_offset = host->fifo_reg - host->regs;786	int ret = 0;787 788	/* Set external dma config: burst size, burst width */789	memset(&cfg, 0, sizeof(cfg));790	cfg.dst_addr = host->phy_regs + fifo_offset;791	cfg.src_addr = cfg.dst_addr;792	cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;793	cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;794 795	/* Match burst msize with external dma config */796	fifoth_val = mci_readl(host, FIFOTH);797	cfg.dst_maxburst = mszs[(fifoth_val >> 28) & 0x7];798	cfg.src_maxburst = cfg.dst_maxburst;799 800	if (host->data->flags & MMC_DATA_WRITE)801		cfg.direction = DMA_MEM_TO_DEV;802	else803		cfg.direction = DMA_DEV_TO_MEM;804 805	ret = dmaengine_slave_config(host->dms->ch, &cfg);806	if (ret) {807		dev_err(host->dev, "Failed to config edmac.\n");808		return -EBUSY;809	}810 811	desc = dmaengine_prep_slave_sg(host->dms->ch, sgl,812				       sg_len, cfg.direction,813				       DMA_PREP_INTERRUPT | DMA_CTRL_ACK);814	if (!desc) {815		dev_err(host->dev, "Can't prepare slave sg.\n");816		return -EBUSY;817	}818 819	/* Set dw_mci_dmac_complete_dma as callback */820	desc->callback = dw_mci_dmac_complete_dma;821	desc->callback_param = (void *)host;822	dmaengine_submit(desc);823 824	/* Flush cache before write */825	if (host->data->flags & MMC_DATA_WRITE)826		dma_sync_sg_for_device(mmc_dev(host->slot->mmc), sgl,827				       sg_elems, DMA_TO_DEVICE);828 829	dma_async_issue_pending(host->dms->ch);830 831	return 0;832}833 834static int dw_mci_edmac_init(struct dw_mci *host)835{836	/* Request external dma channel */837	host->dms = kzalloc(sizeof(struct dw_mci_dma_slave), GFP_KERNEL);838	if (!host->dms)839		return -ENOMEM;840 841	host->dms->ch = dma_request_chan(host->dev, "rx-tx");842	if (IS_ERR(host->dms->ch)) {843		int ret = PTR_ERR(host->dms->ch);844 845		dev_err(host->dev, "Failed to get external DMA channel.\n");846		kfree(host->dms);847		host->dms = NULL;848		return ret;849	}850 851	return 0;852}853 854static void dw_mci_edmac_exit(struct dw_mci *host)855{856	if (host->dms) {857		if (host->dms->ch) {858			dma_release_channel(host->dms->ch);859			host->dms->ch = NULL;860		}861		kfree(host->dms);862		host->dms = NULL;863	}864}865 866static const struct dw_mci_dma_ops dw_mci_edmac_ops = {867	.init = dw_mci_edmac_init,868	.exit = dw_mci_edmac_exit,869	.start = dw_mci_edmac_start_dma,870	.stop = dw_mci_edmac_stop_dma,871	.complete = dw_mci_dmac_complete_dma,872	.cleanup = dw_mci_dma_cleanup,873};874 875static int dw_mci_pre_dma_transfer(struct dw_mci *host,876				   struct mmc_data *data,877				   int cookie)878{879	struct scatterlist *sg;880	unsigned int i, sg_len;881 882	if (data->host_cookie == COOKIE_PRE_MAPPED)883		return data->sg_len;884 885	/*886	 * We don't do DMA on "complex" transfers, i.e. with887	 * non-word-aligned buffers or lengths. Also, we don't bother888	 * with all the DMA setup overhead for short transfers.889	 */890	if (data->blocks * data->blksz < DW_MCI_DMA_THRESHOLD)891		return -EINVAL;892 893	if (data->blksz & 3)894		return -EINVAL;895 896	for_each_sg(data->sg, sg, data->sg_len, i) {897		if (sg->offset & 3 || sg->length & 3)898			return -EINVAL;899	}900 901	sg_len = dma_map_sg(host->dev,902			    data->sg,903			    data->sg_len,904			    mmc_get_dma_dir(data));905	if (sg_len == 0)906		return -EINVAL;907 908	data->host_cookie = cookie;909 910	return sg_len;911}912 913static void dw_mci_pre_req(struct mmc_host *mmc,914			   struct mmc_request *mrq)915{916	struct dw_mci_slot *slot = mmc_priv(mmc);917	struct mmc_data *data = mrq->data;918 919	if (!slot->host->use_dma || !data)920		return;921 922	/* This data might be unmapped at this time */923	data->host_cookie = COOKIE_UNMAPPED;924 925	if (dw_mci_pre_dma_transfer(slot->host, mrq->data,926				COOKIE_PRE_MAPPED) < 0)927		data->host_cookie = COOKIE_UNMAPPED;928}929 930static void dw_mci_post_req(struct mmc_host *mmc,931			    struct mmc_request *mrq,932			    int err)933{934	struct dw_mci_slot *slot = mmc_priv(mmc);935	struct mmc_data *data = mrq->data;936 937	if (!slot->host->use_dma || !data)938		return;939 940	if (data->host_cookie != COOKIE_UNMAPPED)941		dma_unmap_sg(slot->host->dev,942			     data->sg,943			     data->sg_len,944			     mmc_get_dma_dir(data));945	data->host_cookie = COOKIE_UNMAPPED;946}947 948static int dw_mci_get_cd(struct mmc_host *mmc)949{950	int present;951	struct dw_mci_slot *slot = mmc_priv(mmc);952	struct dw_mci *host = slot->host;953	int gpio_cd = mmc_gpio_get_cd(mmc);954 955	/* Use platform get_cd function, else try onboard card detect */956	if (((mmc->caps & MMC_CAP_NEEDS_POLL)957				|| !mmc_card_is_removable(mmc))) {958		present = 1;959 960		if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {961			if (mmc->caps & MMC_CAP_NEEDS_POLL) {962				dev_info(&mmc->class_dev,963					"card is polling.\n");964			} else {965				dev_info(&mmc->class_dev,966					"card is non-removable.\n");967			}968			set_bit(DW_MMC_CARD_PRESENT, &slot->flags);969		}970 971		return present;972	} else if (gpio_cd >= 0)973		present = gpio_cd;974	else975		present = (mci_readl(slot->host, CDETECT) & (1 << slot->id))976			== 0 ? 1 : 0;977 978	spin_lock_bh(&host->lock);979	if (present && !test_and_set_bit(DW_MMC_CARD_PRESENT, &slot->flags))980		dev_dbg(&mmc->class_dev, "card is present\n");981	else if (!present &&982			!test_and_clear_bit(DW_MMC_CARD_PRESENT, &slot->flags))983		dev_dbg(&mmc->class_dev, "card is not present\n");984	spin_unlock_bh(&host->lock);985 986	return present;987}988 989static void dw_mci_adjust_fifoth(struct dw_mci *host, struct mmc_data *data)990{991	unsigned int blksz = data->blksz;992	static const u32 mszs[] = {1, 4, 8, 16, 32, 64, 128, 256};993	u32 fifo_width = 1 << host->data_shift;994	u32 blksz_depth = blksz / fifo_width, fifoth_val;995	u32 msize = 0, rx_wmark = 1, tx_wmark, tx_wmark_invers;996	int idx = ARRAY_SIZE(mszs) - 1;997 998	/* pio should ship this scenario */999	if (!host->use_dma)1000		return;1001 1002	tx_wmark = (host->fifo_depth) / 2;1003	tx_wmark_invers = host->fifo_depth - tx_wmark;1004 1005	/*1006	 * MSIZE is '1',1007	 * if blksz is not a multiple of the FIFO width1008	 */1009	if (blksz % fifo_width)1010		goto done;1011 1012	do {1013		if (!((blksz_depth % mszs[idx]) ||1014		     (tx_wmark_invers % mszs[idx]))) {1015			msize = idx;1016			rx_wmark = mszs[idx] - 1;1017			break;1018		}1019	} while (--idx > 0);1020	/*1021	 * If idx is '0', it won't be tried1022	 * Thus, initial values are uesed1023	 */1024done:1025	fifoth_val = SDMMC_SET_FIFOTH(msize, rx_wmark, tx_wmark);1026	mci_writel(host, FIFOTH, fifoth_val);1027}1028 1029static void dw_mci_ctrl_thld(struct dw_mci *host, struct mmc_data *data)1030{1031	unsigned int blksz = data->blksz;1032	u32 blksz_depth, fifo_depth;1033	u16 thld_size;1034	u8 enable;1035 1036	/*1037	 * CDTHRCTL doesn't exist prior to 240A (in fact that register offset is1038	 * in the FIFO region, so we really shouldn't access it).1039	 */1040	if (host->verid < DW_MMC_240A ||1041		(host->verid < DW_MMC_280A && data->flags & MMC_DATA_WRITE))1042		return;1043 1044	/*1045	 * Card write Threshold is introduced since 2.80a1046	 * It's used when HS400 mode is enabled.1047	 */1048	if (data->flags & MMC_DATA_WRITE &&1049		host->timing != MMC_TIMING_MMC_HS400)1050		goto disable;1051 1052	if (data->flags & MMC_DATA_WRITE)1053		enable = SDMMC_CARD_WR_THR_EN;1054	else1055		enable = SDMMC_CARD_RD_THR_EN;1056 1057	if (host->timing != MMC_TIMING_MMC_HS200 &&1058	    host->timing != MMC_TIMING_UHS_SDR104 &&1059	    host->timing != MMC_TIMING_MMC_HS400)1060		goto disable;1061 1062	blksz_depth = blksz / (1 << host->data_shift);1063	fifo_depth = host->fifo_depth;1064 1065	if (blksz_depth > fifo_depth)1066		goto disable;1067 1068	/*1069	 * If (blksz_depth) >= (fifo_depth >> 1), should be 'thld_size <= blksz'1070	 * If (blksz_depth) <  (fifo_depth >> 1), should be thld_size = blksz1071	 * Currently just choose blksz.1072	 */1073	thld_size = blksz;1074	mci_writel(host, CDTHRCTL, SDMMC_SET_THLD(thld_size, enable));1075	return;1076 1077disable:1078	mci_writel(host, CDTHRCTL, 0);1079}1080 1081static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)1082{1083	unsigned long irqflags;1084	int sg_len;1085	u32 temp;1086 1087	host->using_dma = 0;1088 1089	/* If we don't have a channel, we can't do DMA */1090	if (!host->use_dma)1091		return -ENODEV;1092 1093	sg_len = dw_mci_pre_dma_transfer(host, data, COOKIE_MAPPED);1094	if (sg_len < 0) {1095		host->dma_ops->stop(host);1096		return sg_len;1097	}1098 1099	host->using_dma = 1;1100 1101	if (host->use_dma == TRANS_MODE_IDMAC)1102		dev_vdbg(host->dev,1103			 "sd sg_cpu: %#lx sg_dma: %#lx sg_len: %d\n",1104			 (unsigned long)host->sg_cpu,1105			 (unsigned long)host->sg_dma,1106			 sg_len);1107 1108	/*1109	 * Decide the MSIZE and RX/TX Watermark.1110	 * If current block size is same with previous size,1111	 * no need to update fifoth.1112	 */1113	if (host->prev_blksz != data->blksz)1114		dw_mci_adjust_fifoth(host, data);1115 1116	/* Enable the DMA interface */1117	temp = mci_readl(host, CTRL);1118	temp |= SDMMC_CTRL_DMA_ENABLE;1119	mci_writel(host, CTRL, temp);1120 1121	/* Disable RX/TX IRQs, let DMA handle it */1122	spin_lock_irqsave(&host->irq_lock, irqflags);1123	temp = mci_readl(host, INTMASK);1124	temp  &= ~(SDMMC_INT_RXDR | SDMMC_INT_TXDR);1125	mci_writel(host, INTMASK, temp);1126	spin_unlock_irqrestore(&host->irq_lock, irqflags);1127 1128	if (host->dma_ops->start(host, sg_len)) {1129		host->dma_ops->stop(host);1130		/* We can't do DMA, try PIO for this one */1131		dev_dbg(host->dev,1132			"%s: fall back to PIO mode for current transfer\n",1133			__func__);1134		return -ENODEV;1135	}1136 1137	return 0;1138}1139 1140static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data)1141{1142	unsigned long irqflags;1143	int flags = SG_MITER_ATOMIC;1144	u32 temp;1145 1146	data->error = -EINPROGRESS;1147 1148	WARN_ON(host->data);1149	host->sg = NULL;1150	host->data = data;1151 1152	if (data->flags & MMC_DATA_READ)1153		host->dir_status = DW_MCI_RECV_STATUS;1154	else1155		host->dir_status = DW_MCI_SEND_STATUS;1156 1157	dw_mci_ctrl_thld(host, data);1158 1159	if (dw_mci_submit_data_dma(host, data)) {1160		if (host->data->flags & MMC_DATA_READ)1161			flags |= SG_MITER_TO_SG;1162		else1163			flags |= SG_MITER_FROM_SG;1164 1165		sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags);1166		host->sg = data->sg;1167		host->part_buf_start = 0;1168		host->part_buf_count = 0;1169 1170		mci_writel(host, RINTSTS, SDMMC_INT_TXDR | SDMMC_INT_RXDR);1171 1172		spin_lock_irqsave(&host->irq_lock, irqflags);1173		temp = mci_readl(host, INTMASK);1174		temp |= SDMMC_INT_TXDR | SDMMC_INT_RXDR;1175		mci_writel(host, INTMASK, temp);1176		spin_unlock_irqrestore(&host->irq_lock, irqflags);1177 1178		temp = mci_readl(host, CTRL);1179		temp &= ~SDMMC_CTRL_DMA_ENABLE;1180		mci_writel(host, CTRL, temp);1181 1182		/*1183		 * Use the initial fifoth_val for PIO mode. If wm_algined1184		 * is set, we set watermark same as data size.1185		 * If next issued data may be transfered by DMA mode,1186		 * prev_blksz should be invalidated.1187		 */1188		if (host->wm_aligned)1189			dw_mci_adjust_fifoth(host, data);1190		else1191			mci_writel(host, FIFOTH, host->fifoth_val);1192		host->prev_blksz = 0;1193	} else {1194		/*1195		 * Keep the current block size.1196		 * It will be used to decide whether to update1197		 * fifoth register next time.1198		 */1199		host->prev_blksz = data->blksz;1200	}1201}1202 1203static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)1204{1205	struct dw_mci *host = slot->host;1206	unsigned int clock = slot->clock;1207	u32 div;1208	u32 clk_en_a;1209	u32 sdmmc_cmd_bits = SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT;1210 1211	/* We must continue to set bit 28 in CMD until the change is complete */1212	if (host->state == STATE_WAITING_CMD11_DONE)1213		sdmmc_cmd_bits |= SDMMC_CMD_VOLT_SWITCH;1214 1215	slot->mmc->actual_clock = 0;1216 1217	if (!clock) {1218		mci_writel(host, CLKENA, 0);1219		mci_send_cmd(slot, sdmmc_cmd_bits, 0);1220	} else if (clock != host->current_speed || force_clkinit) {1221		div = host->bus_hz / clock;1222		if (host->bus_hz % clock && host->bus_hz > clock)1223			/*1224			 * move the + 1 after the divide to prevent1225			 * over-clocking the card.1226			 */1227			div += 1;1228 1229		div = (host->bus_hz != clock) ? DIV_ROUND_UP(div, 2) : 0;1230 1231		if ((clock != slot->__clk_old &&1232			!test_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags)) ||1233			force_clkinit) {1234			/* Silent the verbose log if calling from PM context */1235			if (!force_clkinit)1236				dev_info(&slot->mmc->class_dev,1237					 "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",1238					 slot->id, host->bus_hz, clock,1239					 div ? ((host->bus_hz / div) >> 1) :1240					 host->bus_hz, div);1241 1242			/*1243			 * If card is polling, display the message only1244			 * one time at boot time.1245			 */1246			if (slot->mmc->caps & MMC_CAP_NEEDS_POLL &&1247					slot->mmc->f_min == clock)1248				set_bit(DW_MMC_CARD_NEEDS_POLL, &slot->flags);1249		}1250 1251		/* disable clock */1252		mci_writel(host, CLKENA, 0);1253		mci_writel(host, CLKSRC, 0);1254 1255		/* inform CIU */1256		mci_send_cmd(slot, sdmmc_cmd_bits, 0);1257 1258		/* set clock to desired speed */1259		mci_writel(host, CLKDIV, div);1260 1261		/* inform CIU */1262		mci_send_cmd(slot, sdmmc_cmd_bits, 0);1263 1264		/* enable clock; only low power if no SDIO */1265		clk_en_a = SDMMC_CLKEN_ENABLE << slot->id;1266		if (!test_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags))1267			clk_en_a |= SDMMC_CLKEN_LOW_PWR << slot->id;1268		mci_writel(host, CLKENA, clk_en_a);1269 1270		/* inform CIU */1271		mci_send_cmd(slot, sdmmc_cmd_bits, 0);1272 1273		/* keep the last clock value that was requested from core */1274		slot->__clk_old = clock;1275		slot->mmc->actual_clock = div ? ((host->bus_hz / div) >> 1) :1276					  host->bus_hz;1277	}1278 1279	host->current_speed = clock;1280 1281	/* Set the current slot bus width */1282	mci_writel(host, CTYPE, (slot->ctype << slot->id));1283}1284 1285static void dw_mci_set_data_timeout(struct dw_mci *host,1286				    unsigned int timeout_ns)1287{1288	const struct dw_mci_drv_data *drv_data = host->drv_data;1289	u32 clk_div, tmout;1290	u64 tmp;1291 1292	if (drv_data && drv_data->set_data_timeout)1293		return drv_data->set_data_timeout(host, timeout_ns);1294 1295	clk_div = (mci_readl(host, CLKDIV) & 0xFF) * 2;1296	if (clk_div == 0)1297		clk_div = 1;1298 1299	tmp = DIV_ROUND_UP_ULL((u64)timeout_ns * host->bus_hz, NSEC_PER_SEC);1300	tmp = DIV_ROUND_UP_ULL(tmp, clk_div);1301 1302	/* TMOUT[7:0] (RESPONSE_TIMEOUT) */1303	tmout = 0xFF; /* Set maximum */1304 1305	/* TMOUT[31:8] (DATA_TIMEOUT) */1306	if (!tmp || tmp > 0xFFFFFF)1307		tmout |= (0xFFFFFF << 8);1308	else1309		tmout |= (tmp & 0xFFFFFF) << 8;1310 1311	mci_writel(host, TMOUT, tmout);1312	dev_dbg(host->dev, "timeout_ns: %u => TMOUT[31:8]: %#08x",1313		timeout_ns, tmout >> 8);1314}1315 1316static void __dw_mci_start_request(struct dw_mci *host,1317				   struct dw_mci_slot *slot,1318				   struct mmc_command *cmd)1319{1320	struct mmc_request *mrq;1321	struct mmc_data	*data;1322	u32 cmdflags;1323 1324	mrq = slot->mrq;1325 1326	host->mrq = mrq;1327 1328	host->pending_events = 0;1329	host->completed_events = 0;1330	host->cmd_status = 0;1331	host->data_status = 0;1332	host->dir_status = 0;1333 1334	data = cmd->data;1335	if (data) {1336		dw_mci_set_data_timeout(host, data->timeout_ns);1337		mci_writel(host, BYTCNT, data->blksz*data->blocks);1338		mci_writel(host, BLKSIZ, data->blksz);1339	}1340 1341	cmdflags = dw_mci_prepare_command(slot->mmc, cmd);1342 1343	/* this is the first command, send the initialization clock */1344	if (test_and_clear_bit(DW_MMC_CARD_NEED_INIT, &slot->flags))1345		cmdflags |= SDMMC_CMD_INIT;1346 1347	if (data) {1348		dw_mci_submit_data(host, data);1349		wmb(); /* drain writebuffer */1350	}1351 1352	dw_mci_start_command(host, cmd, cmdflags);1353 1354	if (cmd->opcode == SD_SWITCH_VOLTAGE) {1355		unsigned long irqflags;1356 1357		/*1358		 * Databook says to fail after 2ms w/ no response, but evidence1359		 * shows that sometimes the cmd11 interrupt takes over 130ms.1360		 * We'll set to 500ms, plus an extra jiffy just in case jiffies1361		 * is just about to roll over.1362		 *1363		 * We do this whole thing under spinlock and only if the1364		 * command hasn't already completed (indicating the irq1365		 * already ran so we don't want the timeout).1366		 */1367		spin_lock_irqsave(&host->irq_lock, irqflags);1368		if (!test_bit(EVENT_CMD_COMPLETE, &host->pending_events))1369			mod_timer(&host->cmd11_timer,1370				jiffies + msecs_to_jiffies(500) + 1);1371		spin_unlock_irqrestore(&host->irq_lock, irqflags);1372	}1373 1374	host->stop_cmdr = dw_mci_prep_stop_abort(host, cmd);1375}1376 1377static void dw_mci_start_request(struct dw_mci *host,1378				 struct dw_mci_slot *slot)1379{1380	struct mmc_request *mrq = slot->mrq;1381	struct mmc_command *cmd;1382 1383	cmd = mrq->sbc ? mrq->sbc : mrq->cmd;1384	__dw_mci_start_request(host, slot, cmd);1385}1386 1387/* must be called with host->lock held */1388static void dw_mci_queue_request(struct dw_mci *host, struct dw_mci_slot *slot,1389				 struct mmc_request *mrq)1390{1391	dev_vdbg(&slot->mmc->class_dev, "queue request: state=%d\n",1392		 host->state);1393 1394	slot->mrq = mrq;1395 1396	if (host->state == STATE_WAITING_CMD11_DONE) {1397		dev_warn(&slot->mmc->class_dev,1398			 "Voltage change didn't complete\n");1399		/*1400		 * this case isn't expected to happen, so we can1401		 * either crash here or just try to continue on1402		 * in the closest possible state1403		 */1404		host->state = STATE_IDLE;1405	}1406 1407	if (host->state == STATE_IDLE) {1408		host->state = STATE_SENDING_CMD;1409		dw_mci_start_request(host, slot);1410	} else {1411		list_add_tail(&slot->queue_node, &host->queue);1412	}1413}1414 1415static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)1416{1417	struct dw_mci_slot *slot = mmc_priv(mmc);1418	struct dw_mci *host = slot->host;1419 1420	WARN_ON(slot->mrq);1421 1422	/*1423	 * The check for card presence and queueing of the request must be1424	 * atomic, otherwise the card could be removed in between and the1425	 * request wouldn't fail until another card was inserted.1426	 */1427 1428	if (!dw_mci_get_cd(mmc)) {1429		mrq->cmd->error = -ENOMEDIUM;1430		mmc_request_done(mmc, mrq);1431		return;1432	}1433 1434	spin_lock_bh(&host->lock);1435 1436	dw_mci_queue_request(host, slot, mrq);1437 1438	spin_unlock_bh(&host->lock);1439}1440 1441static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)1442{1443	struct dw_mci_slot *slot = mmc_priv(mmc);1444	const struct dw_mci_drv_data *drv_data = slot->host->drv_data;1445	u32 regs;1446	int ret;1447 1448	switch (ios->bus_width) {1449	case MMC_BUS_WIDTH_4:1450		slot->ctype = SDMMC_CTYPE_4BIT;1451		break;1452	case MMC_BUS_WIDTH_8:1453		slot->ctype = SDMMC_CTYPE_8BIT;1454		break;1455	default:1456		/* set default 1 bit mode */1457		slot->ctype = SDMMC_CTYPE_1BIT;1458	}1459 1460	regs = mci_readl(slot->host, UHS_REG);1461 1462	/* DDR mode set */1463	if (ios->timing == MMC_TIMING_MMC_DDR52 ||1464	    ios->timing == MMC_TIMING_UHS_DDR50 ||1465	    ios->timing == MMC_TIMING_MMC_HS400)1466		regs |= ((0x1 << slot->id) << 16);1467	else1468		regs &= ~((0x1 << slot->id) << 16);1469 1470	mci_writel(slot->host, UHS_REG, regs);1471	slot->host->timing = ios->timing;1472 1473	/*1474	 * Use mirror of ios->clock to prevent race with mmc1475	 * core ios update when finding the minimum.1476	 */1477	slot->clock = ios->clock;1478 1479	if (drv_data && drv_data->set_ios)1480		drv_data->set_ios(slot->host, ios);1481 1482	switch (ios->power_mode) {1483	case MMC_POWER_UP:1484		if (!IS_ERR(mmc->supply.vmmc)) {1485			ret = mmc_regulator_set_ocr(mmc, mmc->supply.vmmc,1486					ios->vdd);1487			if (ret) {1488				dev_err(slot->host->dev,1489					"failed to enable vmmc regulator\n");1490				/*return, if failed turn on vmmc*/1491				return;1492			}1493		}1494		set_bit(DW_MMC_CARD_NEED_INIT, &slot->flags);1495		regs = mci_readl(slot->host, PWREN);1496		regs |= (1 << slot->id);1497		mci_writel(slot->host, PWREN, regs);1498		break;1499	case MMC_POWER_ON:1500		if (!slot->host->vqmmc_enabled) {1501			if (!IS_ERR(mmc->supply.vqmmc)) {1502				ret = regulator_enable(mmc->supply.vqmmc);1503				if (ret < 0)1504					dev_err(slot->host->dev,1505						"failed to enable vqmmc\n");1506				else1507					slot->host->vqmmc_enabled = true;1508 1509			} else {1510				/* Keep track so we don't reset again */1511				slot->host->vqmmc_enabled = true;1512			}1513 1514			/* Reset our state machine after powering on */1515			dw_mci_ctrl_reset(slot->host,1516					  SDMMC_CTRL_ALL_RESET_FLAGS);1517		}1518 1519		/* Adjust clock / bus width after power is up */1520		dw_mci_setup_bus(slot, false);1521 1522		break;1523	case MMC_POWER_OFF:1524		/* Turn clock off before power goes down */1525		dw_mci_setup_bus(slot, false);1526 1527		if (!IS_ERR(mmc->supply.vmmc))1528			mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);1529 1530		if (!IS_ERR(mmc->supply.vqmmc) && slot->host->vqmmc_enabled)1531			regulator_disable(mmc->supply.vqmmc);1532		slot->host->vqmmc_enabled = false;1533 1534		regs = mci_readl(slot->host, PWREN);1535		regs &= ~(1 << slot->id);1536		mci_writel(slot->host, PWREN, regs);1537		break;1538	default:1539		break;1540	}1541 1542	if (slot->host->state == STATE_WAITING_CMD11_DONE && ios->clock != 0)1543		slot->host->state = STATE_IDLE;1544}1545 1546static int dw_mci_card_busy(struct mmc_host *mmc)1547{1548	struct dw_mci_slot *slot = mmc_priv(mmc);1549	u32 status;1550 1551	/*1552	 * Check the busy bit which is low when DAT[3:0]1553	 * (the data lines) are 00001554	 */1555	status = mci_readl(slot->host, STATUS);1556 1557	return !!(status & SDMMC_STATUS_BUSY);1558}1559 1560static int dw_mci_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)1561{1562	struct dw_mci_slot *slot = mmc_priv(mmc);1563	struct dw_mci *host = slot->host;1564	const struct dw_mci_drv_data *drv_data = host->drv_data;1565	u32 uhs;1566	u32 v18 = SDMMC_UHS_18V << slot->id;1567	int ret;1568 1569	if (drv_data && drv_data->switch_voltage)1570		return drv_data->switch_voltage(mmc, ios);1571 1572	/*1573	 * Program the voltage.  Note that some instances of dw_mmc may use1574	 * the UHS_REG for this.  For other instances (like exynos) the UHS_REG1575	 * does no harm but you need to set the regulator directly.  Try both.1576	 */1577	uhs = mci_readl(host, UHS_REG);1578	if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330)1579		uhs &= ~v18;1580	else1581		uhs |= v18;1582 1583	if (!IS_ERR(mmc->supply.vqmmc)) {1584		ret = mmc_regulator_set_vqmmc(mmc, ios);1585		if (ret < 0) {1586			dev_dbg(&mmc->class_dev,1587					 "Regulator set error %d - %s V\n",1588					 ret, uhs & v18 ? "1.8" : "3.3");1589			return ret;1590		}1591	}1592	mci_writel(host, UHS_REG, uhs);1593 1594	return 0;1595}1596 1597static int dw_mci_get_ro(struct mmc_host *mmc)1598{1599	int read_only;1600	struct dw_mci_slot *slot = mmc_priv(mmc);1601	int gpio_ro = mmc_gpio_get_ro(mmc);1602 1603	/* Use platform get_ro function, else try on board write protect */1604	if (gpio_ro >= 0)1605		read_only = gpio_ro;1606	else1607		read_only =1608			mci_readl(slot->host, WRTPRT) & (1 << slot->id) ? 1 : 0;1609 1610	dev_dbg(&mmc->class_dev, "card is %s\n",1611		read_only ? "read-only" : "read-write");1612 1613	return read_only;1614}1615 1616static void dw_mci_hw_reset(struct mmc_host *mmc)1617{1618	struct dw_mci_slot *slot = mmc_priv(mmc);1619	struct dw_mci *host = slot->host;1620	const struct dw_mci_drv_data *drv_data = host->drv_data;1621	int reset;1622 1623	if (host->use_dma == TRANS_MODE_IDMAC)1624		dw_mci_idmac_reset(host);1625 1626	if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_DMA_RESET |1627				     SDMMC_CTRL_FIFO_RESET))1628		return;1629 1630	if (drv_data && drv_data->hw_reset) {1631		drv_data->hw_reset(host);1632		return;1633	}1634 1635	/*1636	 * According to eMMC spec, card reset procedure:1637	 * tRstW >= 1us:   RST_n pulse width1638	 * tRSCA >= 200us: RST_n to Command time1639	 * tRSTH >= 1us:   RST_n high period1640	 */1641	reset = mci_readl(host, RST_N);1642	reset &= ~(SDMMC_RST_HWACTIVE << slot->id);1643	mci_writel(host, RST_N, reset);1644	usleep_range(1, 2);1645	reset |= SDMMC_RST_HWACTIVE << slot->id;1646	mci_writel(host, RST_N, reset);1647	usleep_range(200, 300);1648}1649 1650static void dw_mci_prepare_sdio_irq(struct dw_mci_slot *slot, bool prepare)1651{1652	struct dw_mci *host = slot->host;1653	const u32 clken_low_pwr = SDMMC_CLKEN_LOW_PWR << slot->id;1654	u32 clk_en_a_old;1655	u32 clk_en_a;1656 1657	/*1658	 * Low power mode will stop the card clock when idle.  According to the1659	 * description of the CLKENA register we should disable low power mode1660	 * for SDIO cards if we need SDIO interrupts to work.1661	 */1662 1663	clk_en_a_old = mci_readl(host, CLKENA);1664	if (prepare) {1665		set_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);1666		clk_en_a = clk_en_a_old & ~clken_low_pwr;1667	} else {1668		clear_bit(DW_MMC_CARD_NO_LOW_PWR, &slot->flags);1669		clk_en_a = clk_en_a_old | clken_low_pwr;1670	}1671 1672	if (clk_en_a != clk_en_a_old) {1673		mci_writel(host, CLKENA, clk_en_a);1674		mci_send_cmd(slot, SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT,1675			     0);1676	}1677}1678 1679static void __dw_mci_enable_sdio_irq(struct dw_mci_slot *slot, int enb)1680{1681	struct dw_mci *host = slot->host;1682	unsigned long irqflags;1683	u32 int_mask;1684 1685	spin_lock_irqsave(&host->irq_lock, irqflags);1686 1687	/* Enable/disable Slot Specific SDIO interrupt */1688	int_mask = mci_readl(host, INTMASK);1689	if (enb)1690		int_mask |= SDMMC_INT_SDIO(slot->sdio_id);1691	else1692		int_mask &= ~SDMMC_INT_SDIO(slot->sdio_id);1693	mci_writel(host, INTMASK, int_mask);1694 1695	spin_unlock_irqrestore(&host->irq_lock, irqflags);1696}1697 1698static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb)1699{1700	struct dw_mci_slot *slot = mmc_priv(mmc);1701	struct dw_mci *host = slot->host;1702 1703	dw_mci_prepare_sdio_irq(slot, enb);1704	__dw_mci_enable_sdio_irq(slot, enb);1705 1706	/* Avoid runtime suspending the device when SDIO IRQ is enabled */1707	if (enb)1708		pm_runtime_get_noresume(host->dev);1709	else1710		pm_runtime_put_noidle(host->dev);1711}1712 1713static void dw_mci_ack_sdio_irq(struct mmc_host *mmc)1714{1715	struct dw_mci_slot *slot = mmc_priv(mmc);1716 1717	__dw_mci_enable_sdio_irq(slot, 1);1718}1719 1720static int dw_mci_execute_tuning(struct mmc_host *mmc, u32 opcode)1721{1722	struct dw_mci_slot *slot = mmc_priv(mmc);1723	struct dw_mci *host = slot->host;1724	const struct dw_mci_drv_data *drv_data = host->drv_data;1725	int err = -EINVAL;1726 1727	if (drv_data && drv_data->execute_tuning)1728		err = drv_data->execute_tuning(slot, opcode);1729	return err;1730}1731 1732static int dw_mci_prepare_hs400_tuning(struct mmc_host *mmc,1733				       struct mmc_ios *ios)1734{1735	struct dw_mci_slot *slot = mmc_priv(mmc);1736	struct dw_mci *host = slot->host;1737	const struct dw_mci_drv_data *drv_data = host->drv_data;1738 1739	if (drv_data && drv_data->prepare_hs400_tuning)1740		return drv_data->prepare_hs400_tuning(host, ios);1741 1742	return 0;1743}1744 1745static bool dw_mci_reset(struct dw_mci *host)1746{1747	u32 flags = SDMMC_CTRL_RESET | SDMMC_CTRL_FIFO_RESET;1748	bool ret = false;1749	u32 status = 0;1750 1751	/*1752	 * Resetting generates a block interrupt, hence setting1753	 * the scatter-gather pointer to NULL.1754	 */1755	if (host->sg) {1756		sg_miter_stop(&host->sg_miter);1757		host->sg = NULL;1758	}1759 1760	if (host->use_dma)1761		flags |= SDMMC_CTRL_DMA_RESET;1762 1763	if (dw_mci_ctrl_reset(host, flags)) {1764		/*1765		 * In all cases we clear the RAWINTS1766		 * register to clear any interrupts.1767		 */1768		mci_writel(host, RINTSTS, 0xFFFFFFFF);1769 1770		if (!host->use_dma) {1771			ret = true;1772			goto ciu_out;1773		}1774 1775		/* Wait for dma_req to be cleared */1776		if (readl_poll_timeout_atomic(host->regs + SDMMC_STATUS,1777					      status,1778					      !(status & SDMMC_STATUS_DMA_REQ),1779					      1, 500 * USEC_PER_MSEC)) {1780			dev_err(host->dev,1781				"%s: Timeout waiting for dma_req to be cleared\n",1782				__func__);1783			goto ciu_out;1784		}1785 1786		/* when using DMA next we reset the fifo again */1787		if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_FIFO_RESET))1788			goto ciu_out;1789	} else {1790		/* if the controller reset bit did clear, then set clock regs */1791		if (!(mci_readl(host, CTRL) & SDMMC_CTRL_RESET)) {1792			dev_err(host->dev,1793				"%s: fifo/dma reset bits didn't clear but ciu was reset, doing clock update\n",1794				__func__);1795			goto ciu_out;1796		}1797	}1798 1799	if (host->use_dma == TRANS_MODE_IDMAC)1800		/* It is also required that we reinit idmac */1801		dw_mci_idmac_init(host);1802 1803	ret = true;1804 1805ciu_out:1806	/* After a CTRL reset we need to have CIU set clock registers  */1807	mci_send_cmd(host->slot, SDMMC_CMD_UPD_CLK, 0);1808 1809	return ret;1810}1811 1812static const struct mmc_host_ops dw_mci_ops = {1813	.request		= dw_mci_request,1814	.pre_req		= dw_mci_pre_req,1815	.post_req		= dw_mci_post_req,1816	.set_ios		= dw_mci_set_ios,1817	.get_ro			= dw_mci_get_ro,1818	.get_cd			= dw_mci_get_cd,1819	.card_hw_reset          = dw_mci_hw_reset,1820	.enable_sdio_irq	= dw_mci_enable_sdio_irq,1821	.ack_sdio_irq		= dw_mci_ack_sdio_irq,1822	.execute_tuning		= dw_mci_execute_tuning,1823	.card_busy		= dw_mci_card_busy,1824	.start_signal_voltage_switch = dw_mci_switch_voltage,1825	.prepare_hs400_tuning	= dw_mci_prepare_hs400_tuning,1826};1827 1828#ifdef CONFIG_FAULT_INJECTION1829static enum hrtimer_restart dw_mci_fault_timer(struct hrtimer *t)1830{1831	struct dw_mci *host = container_of(t, struct dw_mci, fault_timer);1832	unsigned long flags;1833 1834	spin_lock_irqsave(&host->irq_lock, flags);1835 1836	/*1837	 * Only inject an error if we haven't already got an error or data over1838	 * interrupt.1839	 */1840	if (!host->data_status) {1841		host->data_status = SDMMC_INT_DCRC;1842		set_bit(EVENT_DATA_ERROR, &host->pending_events);1843		queue_work(system_bh_wq, &host->bh_work);1844	}1845 1846	spin_unlock_irqrestore(&host->irq_lock, flags);1847 1848	return HRTIMER_NORESTART;1849}1850 1851static void dw_mci_start_fault_timer(struct dw_mci *host)1852{1853	struct mmc_data *data = host->data;1854 1855	if (!data || data->blocks <= 1)1856		return;1857 1858	if (!should_fail(&host->fail_data_crc, 1))1859		return;1860 1861	/*1862	 * Try to inject the error at random points during the data transfer.1863	 */1864	hrtimer_start(&host->fault_timer,1865		      ms_to_ktime(get_random_u32_below(25)),1866		      HRTIMER_MODE_REL);1867}1868 1869static void dw_mci_stop_fault_timer(struct dw_mci *host)1870{1871	hrtimer_cancel(&host->fault_timer);1872}1873 1874static void dw_mci_init_fault(struct dw_mci *host)1875{1876	host->fail_data_crc = (struct fault_attr) FAULT_ATTR_INITIALIZER;1877 1878	hrtimer_init(&host->fault_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);1879	host->fault_timer.function = dw_mci_fault_timer;1880}1881#else1882static void dw_mci_init_fault(struct dw_mci *host)1883{1884}1885 1886static void dw_mci_start_fault_timer(struct dw_mci *host)1887{1888}1889 1890static void dw_mci_stop_fault_timer(struct dw_mci *host)1891{1892}1893#endif1894 1895static void dw_mci_request_end(struct dw_mci *host, struct mmc_request *mrq)1896	__releases(&host->lock)1897	__acquires(&host->lock)1898{1899	struct dw_mci_slot *slot;1900	struct mmc_host	*prev_mmc = host->slot->mmc;1901 1902	WARN_ON(host->cmd || host->data);1903 1904	host->slot->mrq = NULL;1905	host->mrq = NULL;1906	if (!list_empty(&host->queue)) {1907		slot = list_entry(host->queue.next,1908				  struct dw_mci_slot, queue_node);1909		list_del(&slot->queue_node);1910		dev_vdbg(host->dev, "list not empty: %s is next\n",1911			 mmc_hostname(slot->mmc));1912		host->state = STATE_SENDING_CMD;1913		dw_mci_start_request(host, slot);1914	} else {1915		dev_vdbg(host->dev, "list empty\n");1916 1917		if (host->state == STATE_SENDING_CMD11)1918			host->state = STATE_WAITING_CMD11_DONE;1919		else1920			host->state = STATE_IDLE;1921	}1922 1923	spin_unlock(&host->lock);1924	mmc_request_done(prev_mmc, mrq);1925	spin_lock(&host->lock);1926}1927 1928static int dw_mci_command_complete(struct dw_mci *host, struct mmc_command *cmd)1929{1930	u32 status = host->cmd_status;1931 1932	host->cmd_status = 0;1933 1934	/* Read the response from the card (up to 16 bytes) */1935	if (cmd->flags & MMC_RSP_PRESENT) {1936		if (cmd->flags & MMC_RSP_136) {1937			cmd->resp[3] = mci_readl(host, RESP0);1938			cmd->resp[2] = mci_readl(host, RESP1);1939			cmd->resp[1] = mci_readl(host, RESP2);1940			cmd->resp[0] = mci_readl(host, RESP3);1941		} else {1942			cmd->resp[0] = mci_readl(host, RESP0);1943			cmd->resp[1] = 0;1944			cmd->resp[2] = 0;1945			cmd->resp[3] = 0;1946		}1947	}1948 1949	if (status & SDMMC_INT_RTO)1950		cmd->error = -ETIMEDOUT;1951	else if ((cmd->flags & MMC_RSP_CRC) && (status & SDMMC_INT_RCRC))1952		cmd->error = -EILSEQ;1953	else if (status & SDMMC_INT_RESP_ERR)1954		cmd->error = -EIO;1955	else1956		cmd->error = 0;1957 1958	return cmd->error;1959}1960 1961static int dw_mci_data_complete(struct dw_mci *host, struct mmc_data *data)1962{1963	u32 status = host->data_status;1964 1965	if (status & DW_MCI_DATA_ERROR_FLAGS) {1966		if (status & SDMMC_INT_DRTO) {1967			data->error = -ETIMEDOUT;1968		} else if (status & SDMMC_INT_DCRC) {1969			data->error = -EILSEQ;1970		} else if (status & SDMMC_INT_EBE) {1971			if (host->dir_status ==1972				DW_MCI_SEND_STATUS) {1973				/*1974				 * No data CRC status was returned.1975				 * The number of bytes transferred1976				 * will be exaggerated in PIO mode.1977				 */1978				data->bytes_xfered = 0;1979				data->error = -ETIMEDOUT;1980			} else if (host->dir_status ==1981					DW_MCI_RECV_STATUS) {1982				data->error = -EILSEQ;1983			}1984		} else {1985			/* SDMMC_INT_SBE is included */1986			data->error = -EILSEQ;1987		}1988 1989		dev_dbg(host->dev, "data error, status 0x%08x\n", status);1990 1991		/*1992		 * After an error, there may be data lingering1993		 * in the FIFO1994		 */1995		dw_mci_reset(host);1996	} else {1997		data->bytes_xfered = data->blocks * data->blksz;1998		data->error = 0;1999	}2000 2001	return data->error;2002}2003 2004static void dw_mci_set_drto(struct dw_mci *host)2005{2006	const struct dw_mci_drv_data *drv_data = host->drv_data;2007	unsigned int drto_clks;2008	unsigned int drto_div;2009	unsigned int drto_ms;2010	unsigned long irqflags;2011 2012	if (drv_data && drv_data->get_drto_clks)2013		drto_clks = drv_data->get_drto_clks(host);2014	else2015		drto_clks = mci_readl(host, TMOUT) >> 8;2016	drto_div = (mci_readl(host, CLKDIV) & 0xff) * 2;2017	if (drto_div == 0)2018		drto_div = 1;2019 2020	drto_ms = DIV_ROUND_UP_ULL((u64)MSEC_PER_SEC * drto_clks * drto_div,2021				   host->bus_hz);2022 2023	dev_dbg(host->dev, "drto_ms: %u\n", drto_ms);2024 2025	/* add a bit spare time */2026	drto_ms += 10;2027 2028	spin_lock_irqsave(&host->irq_lock, irqflags);2029	if (!test_bit(EVENT_DATA_COMPLETE, &host->pending_events))2030		mod_timer(&host->dto_timer,2031			  jiffies + msecs_to_jiffies(drto_ms));2032	spin_unlock_irqrestore(&host->irq_lock, irqflags);2033}2034 2035static bool dw_mci_clear_pending_cmd_complete(struct dw_mci *host)2036{2037	if (!test_bit(EVENT_CMD_COMPLETE, &host->pending_events))2038		return false;2039 2040	/*2041	 * Really be certain that the timer has stopped.  This is a bit of2042	 * paranoia and could only really happen if we had really bad2043	 * interrupt latency and the interrupt routine and timeout were2044	 * running concurrently so that the del_timer() in the interrupt2045	 * handler couldn't run.2046	 */2047	WARN_ON(del_timer_sync(&host->cto_timer));2048	clear_bit(EVENT_CMD_COMPLETE, &host->pending_events);2049 2050	return true;2051}2052 2053static bool dw_mci_clear_pending_data_complete(struct dw_mci *host)2054{2055	if (!test_bit(EVENT_DATA_COMPLETE, &host->pending_events))2056		return false;2057 2058	/* Extra paranoia just like dw_mci_clear_pending_cmd_complete() */2059	WARN_ON(del_timer_sync(&host->dto_timer));2060	clear_bit(EVENT_DATA_COMPLETE, &host->pending_events);2061 2062	return true;2063}2064 2065static void dw_mci_work_func(struct work_struct *t)2066{2067	struct dw_mci *host = from_work(host, t, bh_work);2068	struct mmc_data	*data;2069	struct mmc_command *cmd;2070	struct mmc_request *mrq;2071	enum dw_mci_state state;2072	enum dw_mci_state prev_state;2073	unsigned int err;2074 2075	spin_lock(&host->lock);2076 2077	state = host->state;2078	data = host->data;2079	mrq = host->mrq;2080 2081	do {2082		prev_state = state;2083 2084		switch (state) {2085		case STATE_IDLE:2086		case STATE_WAITING_CMD11_DONE:2087			break;2088 2089		case STATE_SENDING_CMD11:2090		case STATE_SENDING_CMD:2091			if (!dw_mci_clear_pending_cmd_complete(host))2092				break;2093 2094			cmd = host->cmd;2095			host->cmd = NULL;2096			set_bit(EVENT_CMD_COMPLETE, &host->completed_events);2097			err = dw_mci_command_complete(host, cmd);2098			if (cmd == mrq->sbc && !err) {2099				__dw_mci_start_request(host, host->slot,2100						       mrq->cmd);2101				goto unlock;2102			}2103 2104			if (cmd->data && err) {2105				/*2106				 * During UHS tuning sequence, sending the stop2107				 * command after the response CRC error would2108				 * throw the system into a confused state2109				 * causing all future tuning phases to report2110				 * failure.2111				 *2112				 * In such case controller will move into a data2113				 * transfer state after a response error or2114				 * response CRC error. Let's let that finish2115				 * before trying to send a stop, so we'll go to2116				 * STATE_SENDING_DATA.2117				 *2118				 * Although letting the data transfer take place2119				 * will waste a bit of time (we already know2120				 * the command was bad), it can't cause any2121				 * errors since it's possible it would have2122				 * taken place anyway if this bh work got2123				 * delayed. Allowing the transfer to take place2124				 * avoids races and keeps things simple.2125				 */2126				if (err != -ETIMEDOUT &&2127				    host->dir_status == DW_MCI_RECV_STATUS) {2128					state = STATE_SENDING_DATA;2129					continue;2130				}2131 2132				send_stop_abort(host, data);2133				dw_mci_stop_dma(host);2134				state = STATE_SENDING_STOP;2135				break;2136			}2137 2138			if (!cmd->data || err) {2139				dw_mci_request_end(host, mrq);2140				goto unlock;2141			}2142 2143			prev_state = state = STATE_SENDING_DATA;2144			fallthrough;2145 2146		case STATE_SENDING_DATA:2147			/*2148			 * We could get a data error and never a transfer2149			 * complete so we'd better check for it here.2150			 *2151			 * Note that we don't really care if we also got a2152			 * transfer complete; stopping the DMA and sending an2153			 * abort won't hurt.2154			 */2155			if (test_and_clear_bit(EVENT_DATA_ERROR,2156					       &host->pending_events)) {2157				if (!(host->data_status & (SDMMC_INT_DRTO |2158							   SDMMC_INT_EBE)))2159					send_stop_abort(host, data);2160				dw_mci_stop_dma(host);2161				state = STATE_DATA_ERROR;2162				break;2163			}2164 2165			if (!test_and_clear_bit(EVENT_XFER_COMPLETE,2166						&host->pending_events)) {2167				/*2168				 * If all data-related interrupts don't come2169				 * within the given time in reading data state.2170				 */2171				if (host->dir_status == DW_MCI_RECV_STATUS)2172					dw_mci_set_drto(host);2173				break;2174			}2175 2176			set_bit(EVENT_XFER_COMPLETE, &host->completed_events);2177 2178			/*2179			 * Handle an EVENT_DATA_ERROR that might have shown up2180			 * before the transfer completed.  This might not have2181			 * been caught by the check above because the interrupt2182			 * could have gone off between the previous check and2183			 * the check for transfer complete.2184			 *2185			 * Technically this ought not be needed assuming we2186			 * get a DATA_COMPLETE eventually (we'll notice the2187			 * error and end the request), but it shouldn't hurt.2188			 *2189			 * This has the advantage of sending the stop command.2190			 */2191			if (test_and_clear_bit(EVENT_DATA_ERROR,2192					       &host->pending_events)) {2193				if (!(host->data_status & (SDMMC_INT_DRTO |2194							   SDMMC_INT_EBE)))2195					send_stop_abort(host, data);2196				dw_mci_stop_dma(host);2197				state = STATE_DATA_ERROR;2198				break;2199			}2200			prev_state = state = STATE_DATA_BUSY;2201 2202			fallthrough;2203 2204		case STATE_DATA_BUSY:2205			if (!dw_mci_clear_pending_data_complete(host)) {2206				/*2207				 * If data error interrupt comes but data over2208				 * interrupt doesn't come within the given time.2209				 * in reading data state.2210				 */2211				if (host->dir_status == DW_MCI_RECV_STATUS)2212					dw_mci_set_drto(host);2213				break;2214			}2215 2216			dw_mci_stop_fault_timer(host);2217			host->data = NULL;2218			set_bit(EVENT_DATA_COMPLETE, &host->completed_events);2219			err = dw_mci_data_complete(host, data);2220 2221			if (!err) {2222				if (!data->stop || mrq->sbc) {2223					if (mrq->sbc && data->stop)2224						data->stop->error = 0;2225					dw_mci_request_end(host, mrq);2226					goto unlock;2227				}2228 2229				/* stop command for open-ended transfer*/2230				if (data->stop)2231					send_stop_abort(host, data);2232			} else {2233				/*2234				 * If we don't have a command complete now we'll2235				 * never get one since we just reset everything;2236				 * better end the request.2237				 *2238				 * If we do have a command complete we'll fall2239				 * through to the SENDING_STOP command and2240				 * everything will be peachy keen.2241				 */2242				if (!test_bit(EVENT_CMD_COMPLETE,2243					      &host->pending_events)) {2244					host->cmd = NULL;2245					dw_mci_request_end(host, mrq);2246					goto unlock;2247				}2248			}2249 2250			/*2251			 * If err has non-zero,2252			 * stop-abort command has been already issued.2253			 */2254			prev_state = state = STATE_SENDING_STOP;2255 2256			fallthrough;2257 2258		case STATE_SENDING_STOP:2259			if (!dw_mci_clear_pending_cmd_complete(host))2260				break;2261 2262			/* CMD error in data command */2263			if (mrq->cmd->error && mrq->data)2264				dw_mci_reset(host);2265 2266			dw_mci_stop_fault_timer(host);2267			host->cmd = NULL;2268			host->data = NULL;2269 2270			if (!mrq->sbc && mrq->stop)2271				dw_mci_command_complete(host, mrq->stop);2272			else2273				host->cmd_status = 0;2274 2275			dw_mci_request_end(host, mrq);2276			goto unlock;2277 2278		case STATE_DATA_ERROR:2279			if (!test_and_clear_bit(EVENT_XFER_COMPLETE,2280						&host->pending_events))2281				break;2282 2283			state = STATE_DATA_BUSY;2284			break;2285		}2286	} while (state != prev_state);2287 2288	host->state = state;2289unlock:2290	spin_unlock(&host->lock);2291 2292}2293 2294/* push final bytes to part_buf, only use during push */2295static void dw_mci_set_part_bytes(struct dw_mci *host, void *buf, int cnt)2296{2297	memcpy((void *)&host->part_buf, buf, cnt);2298	host->part_buf_count = cnt;2299}2300 2301/* append bytes to part_buf, only use during push */2302static int dw_mci_push_part_bytes(struct dw_mci *host, void *buf, int cnt)2303{2304	cnt = min(cnt, (1 << host->data_shift) - host->part_buf_count);2305	memcpy((void *)&host->part_buf + host->part_buf_count, buf, cnt);2306	host->part_buf_count += cnt;2307	return cnt;2308}2309 2310/* pull first bytes from part_buf, only use during pull */2311static int dw_mci_pull_part_bytes(struct dw_mci *host, void *buf, int cnt)2312{2313	cnt = min_t(int, cnt, host->part_buf_count);2314	if (cnt) {2315		memcpy(buf, (void *)&host->part_buf + host->part_buf_start,2316		       cnt);2317		host->part_buf_count -= cnt;2318		host->part_buf_start += cnt;2319	}2320	return cnt;2321}2322 2323/* pull final bytes from the part_buf, assuming it's just been filled */2324static void dw_mci_pull_final_bytes(struct dw_mci *host, void *buf, int cnt)2325{2326	memcpy(buf, &host->part_buf, cnt);2327	host->part_buf_start = cnt;2328	host->part_buf_count = (1 << host->data_shift) - cnt;2329}2330 2331static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt)2332{2333	struct mmc_data *data = host->data;2334	int init_cnt = cnt;2335 2336	/* try and push anything in the part_buf */2337	if (unlikely(host->part_buf_count)) {2338		int len = dw_mci_push_part_bytes(host, buf, cnt);2339 2340		buf += len;2341		cnt -= len;2342		if (host->part_buf_count == 2) {2343			mci_fifo_writew(host->fifo_reg, host->part_buf16);2344			host->part_buf_count = 0;2345		}2346	}2347#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS2348	if (unlikely((unsigned long)buf & 0x1)) {2349		while (cnt >= 2) {2350			u16 aligned_buf[64];2351			int len = min(cnt & -2, (int)sizeof(aligned_buf));2352			int items = len >> 1;2353			int i;2354			/* memcpy from input buffer into aligned buffer */2355			memcpy(aligned_buf, buf, len);2356			buf += len;2357			cnt -= len;2358			/* push data from aligned buffer into fifo */2359			for (i = 0; i < items; ++i)2360				mci_fifo_writew(host->fifo_reg, aligned_buf[i]);2361		}2362	} else2363#endif2364	{2365		u16 *pdata = buf;2366 2367		for (; cnt >= 2; cnt -= 2)2368			mci_fifo_writew(host->fifo_reg, *pdata++);2369		buf = pdata;2370	}2371	/* put anything remaining in the part_buf */2372	if (cnt) {2373		dw_mci_set_part_bytes(host, buf, cnt);2374		 /* Push data if we have reached the expected data length */2375		if ((data->bytes_xfered + init_cnt) ==2376		    (data->blksz * data->blocks))2377			mci_fifo_writew(host->fifo_reg, host->part_buf16);2378	}2379}2380 2381static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt)2382{2383#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS2384	if (unlikely((unsigned long)buf & 0x1)) {2385		while (cnt >= 2) {2386			/* pull data from fifo into aligned buffer */2387			u16 aligned_buf[64];2388			int len = min(cnt & -2, (int)sizeof(aligned_buf));2389			int items = len >> 1;2390			int i;2391 2392			for (i = 0; i < items; ++i)2393				aligned_buf[i] = mci_fifo_readw(host->fifo_reg);2394			/* memcpy from aligned buffer into output buffer */2395			memcpy(buf, aligned_buf, len);2396			buf += len;2397			cnt -= len;2398		}2399	} else2400#endif2401	{2402		u16 *pdata = buf;2403 2404		for (; cnt >= 2; cnt -= 2)2405			*pdata++ = mci_fifo_readw(host->fifo_reg);2406		buf = pdata;2407	}2408	if (cnt) {2409		host->part_buf16 = mci_fifo_readw(host->fifo_reg);2410		dw_mci_pull_final_bytes(host, buf, cnt);2411	}2412}2413 2414static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt)2415{2416	struct mmc_data *data = host->data;2417	int init_cnt = cnt;2418 2419	/* try and push anything in the part_buf */2420	if (unlikely(host->part_buf_count)) {2421		int len = dw_mci_push_part_bytes(host, buf, cnt);2422 2423		buf += len;2424		cnt -= len;2425		if (host->part_buf_count == 4) {2426			mci_fifo_writel(host->fifo_reg,	host->part_buf32);2427			host->part_buf_count = 0;2428		}2429	}2430#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS2431	if (unlikely((unsigned long)buf & 0x3)) {2432		while (cnt >= 4) {2433			u32 aligned_buf[32];2434			int len = min(cnt & -4, (int)sizeof(aligned_buf));2435			int items = len >> 2;2436			int i;2437			/* memcpy from input buffer into aligned buffer */2438			memcpy(aligned_buf, buf, len);2439			buf += len;2440			cnt -= len;2441			/* push data from aligned buffer into fifo */2442			for (i = 0; i < items; ++i)2443				mci_fifo_writel(host->fifo_reg,	aligned_buf[i]);2444		}2445	} else2446#endif2447	{2448		u32 *pdata = buf;2449 2450		for (; cnt >= 4; cnt -= 4)2451			mci_fifo_writel(host->fifo_reg, *pdata++);2452		buf = pdata;2453	}2454	/* put anything remaining in the part_buf */2455	if (cnt) {2456		dw_mci_set_part_bytes(host, buf, cnt);2457		 /* Push data if we have reached the expected data length */2458		if ((data->bytes_xfered + init_cnt) ==2459		    (data->blksz * data->blocks))2460			mci_fifo_writel(host->fifo_reg, host->part_buf32);2461	}2462}2463 2464static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt)2465{2466#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS2467	if (unlikely((unsigned long)buf & 0x3)) {2468		while (cnt >= 4) {2469			/* pull data from fifo into aligned buffer */2470			u32 aligned_buf[32];2471			int len = min(cnt & -4, (int)sizeof(aligned_buf));2472			int items = len >> 2;2473			int i;2474 2475			for (i = 0; i < items; ++i)2476				aligned_buf[i] = mci_fifo_readl(host->fifo_reg);2477			/* memcpy from aligned buffer into output buffer */2478			memcpy(buf, aligned_buf, len);2479			buf += len;2480			cnt -= len;2481		}2482	} else2483#endif2484	{2485		u32 *pdata = buf;2486 2487		for (; cnt >= 4; cnt -= 4)2488			*pdata++ = mci_fifo_readl(host->fifo_reg);2489		buf = pdata;2490	}2491	if (cnt) {2492		host->part_buf32 = mci_fifo_readl(host->fifo_reg);2493		dw_mci_pull_final_bytes(host, buf, cnt);2494	}2495}2496 2497static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt)2498{2499	struct mmc_data *data = host->data;2500	int init_cnt = cnt;2501 2502	/* try and push anything in the part_buf */2503	if (unlikely(host->part_buf_count)) {2504		int len = dw_mci_push_part_bytes(host, buf, cnt);2505 2506		buf += len;2507		cnt -= len;2508 2509		if (host->part_buf_count == 8) {2510			mci_fifo_writeq(host->fifo_reg,	host->part_buf);2511			host->part_buf_count = 0;2512		}2513	}2514#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS2515	if (unlikely((unsigned long)buf & 0x7)) {2516		while (cnt >= 8) {2517			u64 aligned_buf[16];2518			int len = min(cnt & -8, (int)sizeof(aligned_buf));2519			int items = len >> 3;2520			int i;2521			/* memcpy from input buffer into aligned buffer */2522			memcpy(aligned_buf, buf, len);2523			buf += len;2524			cnt -= len;2525			/* push data from aligned buffer into fifo */2526			for (i = 0; i < items; ++i)2527				mci_fifo_writeq(host->fifo_reg,	aligned_buf[i]);2528		}2529	} else2530#endif2531	{2532		u64 *pdata = buf;2533 2534		for (; cnt >= 8; cnt -= 8)2535			mci_fifo_writeq(host->fifo_reg, *pdata++);2536		buf = pdata;2537	}2538	/* put anything remaining in the part_buf */2539	if (cnt) {2540		dw_mci_set_part_bytes(host, buf, cnt);2541		/* Push data if we have reached the expected data length */2542		if ((data->bytes_xfered + init_cnt) ==2543		    (data->blksz * data->blocks))2544			mci_fifo_writeq(host->fifo_reg, host->part_buf);2545	}2546}2547 2548static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt)2549{2550#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS2551	if (unlikely((unsigned long)buf & 0x7)) {2552		while (cnt >= 8) {2553			/* pull data from fifo into aligned buffer */2554			u64 aligned_buf[16];2555			int len = min(cnt & -8, (int)sizeof(aligned_buf));2556			int items = len >> 3;2557			int i;2558 2559			for (i = 0; i < items; ++i)2560				aligned_buf[i] = mci_fifo_readq(host->fifo_reg);2561 2562			/* memcpy from aligned buffer into output buffer */2563			memcpy(buf, aligned_buf, len);2564			buf += len;2565			cnt -= len;2566		}2567	} else2568#endif2569	{2570		u64 *pdata = buf;2571 2572		for (; cnt >= 8; cnt -= 8)2573			*pdata++ = mci_fifo_readq(host->fifo_reg);2574		buf = pdata;2575	}2576	if (cnt) {2577		host->part_buf = mci_fifo_readq(host->fifo_reg);2578		dw_mci_pull_final_bytes(host, buf, cnt);2579	}2580}2581 2582static void dw_mci_pull_data(struct dw_mci *host, void *buf, int cnt)2583{2584	int len;2585 2586	/* get remaining partial bytes */2587	len = dw_mci_pull_part_bytes(host, buf, cnt);2588	if (unlikely(len == cnt))2589		return;2590	buf += len;2591	cnt -= len;2592 2593	/* get the rest of the data */2594	host->pull_data(host, buf, cnt);2595}2596 2597static void dw_mci_read_data_pio(struct dw_mci *host, bool dto)2598{2599	struct sg_mapping_iter *sg_miter = &host->sg_miter;2600	void *buf;2601	unsigned int offset;2602	struct mmc_data	*data = host->data;2603	int shift = host->data_shift;2604	u32 status;2605	unsigned int len;2606	unsigned int remain, fcnt;2607 2608	do {2609		if (!sg_miter_next(sg_miter))2610			goto done;2611 2612		host->sg = sg_miter->piter.sg;2613		buf = sg_miter->addr;2614		remain = sg_miter->length;2615		offset = 0;2616 2617		do {2618			fcnt = (SDMMC_GET_FCNT(mci_readl(host, STATUS))2619					<< shift) + host->part_buf_count;2620			len = min(remain, fcnt);2621			if (!len)2622				break;2623			dw_mci_pull_data(host, (void *)(buf + offset), len);2624			data->bytes_xfered += len;2625			offset += len;2626			remain -= len;2627		} while (remain);2628 2629		sg_miter->consumed = offset;2630		status = mci_readl(host, MINTSTS);2631		mci_writel(host, RINTSTS, SDMMC_INT_RXDR);2632	/* if the RXDR is ready read again */2633	} while ((status & SDMMC_INT_RXDR) ||2634		 (dto && SDMMC_GET_FCNT(mci_readl(host, STATUS))));2635 2636	if (!remain) {2637		if (!sg_miter_next(sg_miter))2638			goto done;2639		sg_miter->consumed = 0;2640	}2641	sg_miter_stop(sg_miter);2642	return;2643 2644done:2645	sg_miter_stop(sg_miter);2646	host->sg = NULL;2647	smp_wmb(); /* drain writebuffer */2648	set_bit(EVENT_XFER_COMPLETE, &host->pending_events);2649}2650 2651static void dw_mci_write_data_pio(struct dw_mci *host)2652{2653	struct sg_mapping_iter *sg_miter = &host->sg_miter;2654	void *buf;2655	unsigned int offset;2656	struct mmc_data	*data = host->data;2657	int shift = host->data_shift;2658	u32 status;2659	unsigned int len;2660	unsigned int fifo_depth = host->fifo_depth;2661	unsigned int remain, fcnt;2662 2663	do {2664		if (!sg_miter_next(sg_miter))2665			goto done;2666 2667		host->sg = sg_miter->piter.sg;2668		buf = sg_miter->addr;2669		remain = sg_miter->length;2670		offset = 0;2671 2672		do {2673			fcnt = ((fifo_depth -2674				 SDMMC_GET_FCNT(mci_readl(host, STATUS)))2675					<< shift) - host->part_buf_count;2676			len = min(remain, fcnt);2677			if (!len)2678				break;2679			host->push_data(host, (void *)(buf + offset), len);2680			data->bytes_xfered += len;2681			offset += len;2682			remain -= len;2683		} while (remain);2684 2685		sg_miter->consumed = offset;2686		status = mci_readl(host, MINTSTS);2687		mci_writel(host, RINTSTS, SDMMC_INT_TXDR);2688	} while (status & SDMMC_INT_TXDR); /* if TXDR write again */2689 2690	if (!remain) {2691		if (!sg_miter_next(sg_miter))2692			goto done;2693		sg_miter->consumed = 0;2694	}2695	sg_miter_stop(sg_miter);2696	return;2697 2698done:2699	sg_miter_stop(sg_miter);2700	host->sg = NULL;2701	smp_wmb(); /* drain writebuffer */2702	set_bit(EVENT_XFER_COMPLETE, &host->pending_events);2703}2704 2705static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status)2706{2707	del_timer(&host->cto_timer);2708 2709	if (!host->cmd_status)2710		host->cmd_status = status;2711 2712	smp_wmb(); /* drain writebuffer */2713 2714	set_bit(EVENT_CMD_COMPLETE, &host->pending_events);2715	queue_work(system_bh_wq, &host->bh_work);2716 2717	dw_mci_start_fault_timer(host);2718}2719 2720static void dw_mci_handle_cd(struct dw_mci *host)2721{2722	struct dw_mci_slot *slot = host->slot;2723 2724	mmc_detect_change(slot->mmc,2725		msecs_to_jiffies(host->pdata->detect_delay_ms));2726}2727 2728static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)2729{2730	struct dw_mci *host = dev_id;2731	u32 pending;2732	struct dw_mci_slot *slot = host->slot;2733 2734	pending = mci_readl(host, MINTSTS); /* read-only mask reg */2735 2736	if (pending) {2737		/* Check volt switch first, since it can look like an error */2738		if ((host->state == STATE_SENDING_CMD11) &&2739		    (pending & SDMMC_INT_VOLT_SWITCH)) {2740			mci_writel(host, RINTSTS, SDMMC_INT_VOLT_SWITCH);2741			pending &= ~SDMMC_INT_VOLT_SWITCH;2742 2743			/*2744			 * Hold the lock; we know cmd11_timer can't be kicked2745			 * off after the lock is released, so safe to delete.2746			 */2747			spin_lock(&host->irq_lock);2748			dw_mci_cmd_interrupt(host, pending);2749			spin_unlock(&host->irq_lock);2750 2751			del_timer(&host->cmd11_timer);2752		}2753 2754		if (pending & DW_MCI_CMD_ERROR_FLAGS) {2755			spin_lock(&host->irq_lock);2756 2757			del_timer(&host->cto_timer);2758			mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);2759			host->cmd_status = pending;2760			smp_wmb(); /* drain writebuffer */2761			set_bit(EVENT_CMD_COMPLETE, &host->pending_events);2762 2763			spin_unlock(&host->irq_lock);2764		}2765 2766		if (pending & DW_MCI_DATA_ERROR_FLAGS) {2767			spin_lock(&host->irq_lock);2768 2769			if (host->quirks & DW_MMC_QUIRK_EXTENDED_TMOUT)2770				del_timer(&host->dto_timer);2771 2772			/* if there is an error report DATA_ERROR */2773			mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);2774			host->data_status = pending;2775			smp_wmb(); /* drain writebuffer */2776			set_bit(EVENT_DATA_ERROR, &host->pending_events);2777 2778			if (host->quirks & DW_MMC_QUIRK_EXTENDED_TMOUT)2779				/* In case of error, we cannot expect a DTO */2780				set_bit(EVENT_DATA_COMPLETE,2781					&host->pending_events);2782 2783			queue_work(system_bh_wq, &host->bh_work);2784 2785			spin_unlock(&host->irq_lock);2786		}2787 2788		if (pending & SDMMC_INT_DATA_OVER) {2789			spin_lock(&host->irq_lock);2790 2791			del_timer(&host->dto_timer);2792 2793			mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER);2794			if (!host->data_status)2795				host->data_status = pending;2796			smp_wmb(); /* drain writebuffer */2797			if (host->dir_status == DW_MCI_RECV_STATUS) {2798				if (host->sg != NULL)2799					dw_mci_read_data_pio(host, true);2800			}2801			set_bit(EVENT_DATA_COMPLETE, &host->pending_events);2802			queue_work(system_bh_wq, &host->bh_work);2803 2804			spin_unlock(&host->irq_lock);2805		}2806 2807		if (pending & SDMMC_INT_RXDR) {2808			mci_writel(host, RINTSTS, SDMMC_INT_RXDR);2809			if (host->dir_status == DW_MCI_RECV_STATUS && host->sg)2810				dw_mci_read_data_pio(host, false);2811		}2812 2813		if (pending & SDMMC_INT_TXDR) {2814			mci_writel(host, RINTSTS, SDMMC_INT_TXDR);2815			if (host->dir_status == DW_MCI_SEND_STATUS && host->sg)2816				dw_mci_write_data_pio(host);2817		}2818 2819		if (pending & SDMMC_INT_CMD_DONE) {2820			spin_lock(&host->irq_lock);2821 2822			mci_writel(host, RINTSTS, SDMMC_INT_CMD_DONE);2823			dw_mci_cmd_interrupt(host, pending);2824 2825			spin_unlock(&host->irq_lock);2826		}2827 2828		if (pending & SDMMC_INT_CD) {2829			mci_writel(host, RINTSTS, SDMMC_INT_CD);2830			dw_mci_handle_cd(host);2831		}2832 2833		if (pending & SDMMC_INT_SDIO(slot->sdio_id)) {2834			mci_writel(host, RINTSTS,2835				   SDMMC_INT_SDIO(slot->sdio_id));2836			__dw_mci_enable_sdio_irq(slot, 0);2837			sdio_signal_irq(slot->mmc);2838		}2839 2840	}2841 2842	if (host->use_dma != TRANS_MODE_IDMAC)2843		return IRQ_HANDLED;2844 2845	/* Handle IDMA interrupts */2846	if (host->dma_64bit_address == 1) {2847		pending = mci_readl(host, IDSTS64);2848		if (pending & (SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI)) {2849			mci_writel(host, IDSTS64, SDMMC_IDMAC_INT_TI |2850							SDMMC_IDMAC_INT_RI);2851			mci_writel(host, IDSTS64, SDMMC_IDMAC_INT_NI);2852			if (!test_bit(EVENT_DATA_ERROR, &host->pending_events))2853				host->dma_ops->complete((void *)host);2854		}2855	} else {2856		pending = mci_readl(host, IDSTS);2857		if (pending & (SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI)) {2858			mci_writel(host, IDSTS, SDMMC_IDMAC_INT_TI |2859							SDMMC_IDMAC_INT_RI);2860			mci_writel(host, IDSTS, SDMMC_IDMAC_INT_NI);2861			if (!test_bit(EVENT_DATA_ERROR, &host->pending_events))2862				host->dma_ops->complete((void *)host);2863		}2864	}2865 2866	return IRQ_HANDLED;2867}2868 2869static int dw_mci_init_slot_caps(struct dw_mci_slot *slot)2870{2871	struct dw_mci *host = slot->host;2872	const struct dw_mci_drv_data *drv_data = host->drv_data;2873	struct mmc_host *mmc = slot->mmc;2874	int ctrl_id;2875 2876	if (host->pdata->caps)2877		mmc->caps = host->pdata->caps;2878 2879	if (host->pdata->pm_caps)2880		mmc->pm_caps = host->pdata->pm_caps;2881 2882	if (drv_data)2883		mmc->caps |= drv_data->common_caps;2884 2885	if (host->dev->of_node) {2886		ctrl_id = of_alias_get_id(host->dev->of_node, "mshc");2887		if (ctrl_id < 0)2888			ctrl_id = 0;2889	} else {2890		ctrl_id = to_platform_device(host->dev)->id;2891	}2892 2893	if (drv_data && drv_data->caps) {2894		if (ctrl_id >= drv_data->num_caps) {2895			dev_err(host->dev, "invalid controller id %d\n",2896				ctrl_id);2897			return -EINVAL;2898		}2899		mmc->caps |= drv_data->caps[ctrl_id];2900	}2901 2902	if (host->pdata->caps2)2903		mmc->caps2 = host->pdata->caps2;2904 2905	/* if host has set a minimum_freq, we should respect it */2906	if (host->minimum_speed)2907		mmc->f_min = host->minimum_speed;2908	else2909		mmc->f_min = DW_MCI_FREQ_MIN;2910 2911	if (!mmc->f_max)2912		mmc->f_max = DW_MCI_FREQ_MAX;2913 2914	/* Process SDIO IRQs through the sdio_irq_work. */2915	if (mmc->caps & MMC_CAP_SDIO_IRQ)2916		mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD;2917 2918	return 0;2919}2920 2921static int dw_mci_init_slot(struct dw_mci *host)2922{2923	struct mmc_host *mmc;2924	struct dw_mci_slot *slot;2925	int ret;2926 2927	mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev);2928	if (!mmc)2929		return -ENOMEM;2930 2931	slot = mmc_priv(mmc);2932	slot->id = 0;2933	slot->sdio_id = host->sdio_id0 + slot->id;2934	slot->mmc = mmc;2935	slot->host = host;2936	host->slot = slot;2937 2938	mmc->ops = &dw_mci_ops;2939 2940	/*if there are external regulators, get them*/2941	ret = mmc_regulator_get_supply(mmc);2942	if (ret)2943		goto err_host_allocated;2944 2945	if (!mmc->ocr_avail)2946		mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;2947 2948	ret = mmc_of_parse(mmc);2949	if (ret)2950		goto err_host_allocated;2951 2952	ret = dw_mci_init_slot_caps(slot);2953	if (ret)2954		goto err_host_allocated;2955 2956	/* Useful defaults if platform data is unset. */2957	if (host->use_dma == TRANS_MODE_IDMAC) {2958		mmc->max_segs = host->ring_size;2959		mmc->max_blk_size = 65535;2960		mmc->max_seg_size = 0x1000;2961		mmc->max_req_size = mmc->max_seg_size * host->ring_size;2962		mmc->max_blk_count = mmc->max_req_size / 512;2963	} else if (host->use_dma == TRANS_MODE_EDMAC) {2964		mmc->max_segs = 64;2965		mmc->max_blk_size = 65535;2966		mmc->max_blk_count = 65535;2967		mmc->max_req_size =2968				mmc->max_blk_size * mmc->max_blk_count;2969		mmc->max_seg_size = mmc->max_req_size;2970	} else {2971		/* TRANS_MODE_PIO */2972		mmc->max_segs = 64;2973		mmc->max_blk_size = 65535; /* BLKSIZ is 16 bits */2974		mmc->max_blk_count = 512;2975		mmc->max_req_size = mmc->max_blk_size *2976				    mmc->max_blk_count;2977		mmc->max_seg_size = mmc->max_req_size;2978	}2979 2980	dw_mci_get_cd(mmc);2981 2982	ret = mmc_add_host(mmc);2983	if (ret)2984		goto err_host_allocated;2985 2986#if defined(CONFIG_DEBUG_FS)2987	dw_mci_init_debugfs(slot);2988#endif2989 2990	return 0;2991 2992err_host_allocated:2993	mmc_free_host(mmc);2994	return ret;2995}2996 2997static void dw_mci_cleanup_slot(struct dw_mci_slot *slot)2998{2999	/* Debugfs stuff is cleaned up by mmc core */3000	mmc_remove_host(slot->mmc);3001	slot->host->slot = NULL;3002	mmc_free_host(slot->mmc);3003}3004 3005static void dw_mci_init_dma(struct dw_mci *host)3006{3007	int addr_config;3008	struct device *dev = host->dev;3009 3010	/*3011	* Check tansfer mode from HCON[17:16]3012	* Clear the ambiguous description of dw_mmc databook:3013	* 2b'00: No DMA Interface -> Actually means using Internal DMA block3014	* 2b'01: DesignWare DMA Interface -> Synopsys DW-DMA block3015	* 2b'10: Generic DMA Interface -> non-Synopsys generic DMA block3016	* 2b'11: Non DW DMA Interface -> pio only3017	* Compared to DesignWare DMA Interface, Generic DMA Interface has a3018	* simpler request/acknowledge handshake mechanism and both of them3019	* are regarded as external dma master for dw_mmc.3020	*/3021	host->use_dma = SDMMC_GET_TRANS_MODE(mci_readl(host, HCON));3022	if (host->use_dma == DMA_INTERFACE_IDMA) {3023		host->use_dma = TRANS_MODE_IDMAC;3024	} else if (host->use_dma == DMA_INTERFACE_DWDMA ||3025		   host->use_dma == DMA_INTERFACE_GDMA) {3026		host->use_dma = TRANS_MODE_EDMAC;3027	} else {3028		goto no_dma;3029	}3030 3031	/* Determine which DMA interface to use */3032	if (host->use_dma == TRANS_MODE_IDMAC) {3033		/*3034		* Check ADDR_CONFIG bit in HCON to find3035		* IDMAC address bus width3036		*/3037		addr_config = SDMMC_GET_ADDR_CONFIG(mci_readl(host, HCON));3038 3039		if (addr_config == 1) {3040			/* host supports IDMAC in 64-bit address mode */3041			host->dma_64bit_address = 1;3042			dev_info(host->dev,3043				 "IDMAC supports 64-bit address mode.\n");3044			if (!dma_set_mask(host->dev, DMA_BIT_MASK(64)))3045				dma_set_coherent_mask(host->dev,3046						      DMA_BIT_MASK(64));3047		} else {3048			/* host supports IDMAC in 32-bit address mode */3049			host->dma_64bit_address = 0;3050			dev_info(host->dev,3051				 "IDMAC supports 32-bit address mode.\n");3052		}3053 3054		/* Alloc memory for sg translation */3055		host->sg_cpu = dmam_alloc_coherent(host->dev,3056						   DESC_RING_BUF_SZ,3057						   &host->sg_dma, GFP_KERNEL);3058		if (!host->sg_cpu) {3059			dev_err(host->dev,3060				"%s: could not alloc DMA memory\n",3061				__func__);3062			goto no_dma;3063		}3064 3065		host->dma_ops = &dw_mci_idmac_ops;3066		dev_info(host->dev, "Using internal DMA controller.\n");3067	} else {3068		/* TRANS_MODE_EDMAC: check dma bindings again */3069		if ((device_property_string_array_count(dev, "dma-names") < 0) ||3070		    !device_property_present(dev, "dmas")) {3071			goto no_dma;3072		}3073		host->dma_ops = &dw_mci_edmac_ops;3074		dev_info(host->dev, "Using external DMA controller.\n");3075	}3076 3077	if (host->dma_ops->init && host->dma_ops->start &&3078	    host->dma_ops->stop && host->dma_ops->cleanup) {3079		if (host->dma_ops->init(host)) {3080			dev_err(host->dev, "%s: Unable to initialize DMA Controller.\n",3081				__func__);3082			goto no_dma;3083		}3084	} else {3085		dev_err(host->dev, "DMA initialization not found.\n");3086		goto no_dma;3087	}3088 3089	return;3090 3091no_dma:3092	dev_info(host->dev, "Using PIO mode.\n");3093	host->use_dma = TRANS_MODE_PIO;3094}3095 3096static void dw_mci_cmd11_timer(struct timer_list *t)3097{3098	struct dw_mci *host = from_timer(host, t, cmd11_timer);3099 3100	if (host->state != STATE_SENDING_CMD11) {3101		dev_warn(host->dev, "Unexpected CMD11 timeout\n");3102		return;3103	}3104 3105	host->cmd_status = SDMMC_INT_RTO;3106	set_bit(EVENT_CMD_COMPLETE, &host->pending_events);3107	queue_work(system_bh_wq, &host->bh_work);3108}3109 3110static void dw_mci_cto_timer(struct timer_list *t)3111{3112	struct dw_mci *host = from_timer(host, t, cto_timer);3113	unsigned long irqflags;3114	u32 pending;3115 3116	spin_lock_irqsave(&host->irq_lock, irqflags);3117 3118	/*3119	 * If somehow we have very bad interrupt latency it's remotely possible3120	 * that the timer could fire while the interrupt is still pending or3121	 * while the interrupt is midway through running.  Let's be paranoid3122	 * and detect those two cases.  Note that this is paranoia is somewhat3123	 * justified because in this function we don't actually cancel the3124	 * pending command in the controller--we just assume it will never come.3125	 */3126	pending = mci_readl(host, MINTSTS); /* read-only mask reg */3127	if (pending & (DW_MCI_CMD_ERROR_FLAGS | SDMMC_INT_CMD_DONE)) {3128		/* The interrupt should fire; no need to act but we can warn */3129		dev_warn(host->dev, "Unexpected interrupt latency\n");3130		goto exit;3131	}3132	if (test_bit(EVENT_CMD_COMPLETE, &host->pending_events)) {3133		/* Presumably interrupt handler couldn't delete the timer */3134		dev_warn(host->dev, "CTO timeout when already completed\n");3135		goto exit;3136	}3137 3138	/*3139	 * Continued paranoia to make sure we're in the state we expect.3140	 * This paranoia isn't really justified but it seems good to be safe.3141	 */3142	switch (host->state) {3143	case STATE_SENDING_CMD11:3144	case STATE_SENDING_CMD:3145	case STATE_SENDING_STOP:3146		/*3147		 * If CMD_DONE interrupt does NOT come in sending command3148		 * state, we should notify the driver to terminate current3149		 * transfer and report a command timeout to the core.3150		 */3151		host->cmd_status = SDMMC_INT_RTO;3152		set_bit(EVENT_CMD_COMPLETE, &host->pending_events);3153		queue_work(system_bh_wq, &host->bh_work);3154		break;3155	default:3156		dev_warn(host->dev, "Unexpected command timeout, state %d\n",3157			 host->state);3158		break;3159	}3160 3161exit:3162	spin_unlock_irqrestore(&host->irq_lock, irqflags);3163}3164 3165static void dw_mci_dto_timer(struct timer_list *t)3166{3167	struct dw_mci *host = from_timer(host, t, dto_timer);3168	unsigned long irqflags;3169	u32 pending;3170 3171	spin_lock_irqsave(&host->irq_lock, irqflags);3172 3173	/*3174	 * The DTO timer is much longer than the CTO timer, so it's even less3175	 * likely that we'll these cases, but it pays to be paranoid.3176	 */3177	pending = mci_readl(host, MINTSTS); /* read-only mask reg */3178	if (pending & SDMMC_INT_DATA_OVER) {3179		/* The interrupt should fire; no need to act but we can warn */3180		dev_warn(host->dev, "Unexpected data interrupt latency\n");3181		goto exit;3182	}3183	if (test_bit(EVENT_DATA_COMPLETE, &host->pending_events)) {3184		/* Presumably interrupt handler couldn't delete the timer */3185		dev_warn(host->dev, "DTO timeout when already completed\n");3186		goto exit;3187	}3188 3189	/*3190	 * Continued paranoia to make sure we're in the state we expect.3191	 * This paranoia isn't really justified but it seems good to be safe.3192	 */3193	switch (host->state) {3194	case STATE_SENDING_DATA:3195	case STATE_DATA_BUSY:3196		/*3197		 * If DTO interrupt does NOT come in sending data state,3198		 * we should notify the driver to terminate current transfer3199		 * and report a data timeout to the core.3200		 */3201		host->data_status = SDMMC_INT_DRTO;3202		set_bit(EVENT_DATA_ERROR, &host->pending_events);3203		set_bit(EVENT_DATA_COMPLETE, &host->pending_events);3204		queue_work(system_bh_wq, &host->bh_work);3205		break;3206	default:3207		dev_warn(host->dev, "Unexpected data timeout, state %d\n",3208			 host->state);3209		break;3210	}3211 3212exit:3213	spin_unlock_irqrestore(&host->irq_lock, irqflags);3214}3215 3216#ifdef CONFIG_OF3217static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)3218{3219	struct dw_mci_board *pdata;3220	struct device *dev = host->dev;3221	const struct dw_mci_drv_data *drv_data = host->drv_data;3222	int ret;3223	u32 clock_frequency;3224 3225	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);3226	if (!pdata)3227		return ERR_PTR(-ENOMEM);3228 3229	/* find reset controller when exist */3230	pdata->rstc = devm_reset_control_get_optional_exclusive(dev, "reset");3231	if (IS_ERR(pdata->rstc))3232		return ERR_CAST(pdata->rstc);3233 3234	if (device_property_read_u32(dev, "fifo-depth", &pdata->fifo_depth))3235		dev_info(dev,3236			 "fifo-depth property not found, using value of FIFOTH register as default\n");3237 3238	device_property_read_u32(dev, "card-detect-delay",3239				 &pdata->detect_delay_ms);3240 3241	device_property_read_u32(dev, "data-addr", &host->data_addr_override);3242 3243	if (device_property_present(dev, "fifo-watermark-aligned"))3244		host->wm_aligned = true;3245 3246	if (!device_property_read_u32(dev, "clock-frequency", &clock_frequency))3247		pdata->bus_hz = clock_frequency;3248 3249	if (drv_data && drv_data->parse_dt) {3250		ret = drv_data->parse_dt(host);3251		if (ret)3252			return ERR_PTR(ret);3253	}3254 3255	return pdata;3256}3257 3258#else /* CONFIG_OF */3259static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)3260{3261	return ERR_PTR(-EINVAL);3262}3263#endif /* CONFIG_OF */3264 3265static void dw_mci_enable_cd(struct dw_mci *host)3266{3267	unsigned long irqflags;3268	u32 temp;3269 3270	/*3271	 * No need for CD if all slots have a non-error GPIO3272	 * as well as broken card detection is found.3273	 */3274	if (host->slot->mmc->caps & MMC_CAP_NEEDS_POLL)3275		return;3276 3277	if (mmc_gpio_get_cd(host->slot->mmc) < 0) {3278		spin_lock_irqsave(&host->irq_lock, irqflags);3279		temp = mci_readl(host, INTMASK);3280		temp  |= SDMMC_INT_CD;3281		mci_writel(host, INTMASK, temp);3282		spin_unlock_irqrestore(&host->irq_lock, irqflags);3283	}3284}3285 3286int dw_mci_probe(struct dw_mci *host)3287{3288	const struct dw_mci_drv_data *drv_data = host->drv_data;3289	int width, i, ret = 0;3290	u32 fifo_size;3291 3292	if (!host->pdata) {3293		host->pdata = dw_mci_parse_dt(host);3294		if (IS_ERR(host->pdata))3295			return dev_err_probe(host->dev, PTR_ERR(host->pdata),3296					     "platform data not available\n");3297	}3298 3299	host->biu_clk = devm_clk_get(host->dev, "biu");3300	if (IS_ERR(host->biu_clk)) {3301		dev_dbg(host->dev, "biu clock not available\n");3302		ret = PTR_ERR(host->biu_clk);3303		if (ret == -EPROBE_DEFER)3304			return ret;3305 3306	} else {3307		ret = clk_prepare_enable(host->biu_clk);3308		if (ret) {3309			dev_err(host->dev, "failed to enable biu clock\n");3310			return ret;3311		}3312	}3313 3314	host->ciu_clk = devm_clk_get(host->dev, "ciu");3315	if (IS_ERR(host->ciu_clk)) {3316		dev_dbg(host->dev, "ciu clock not available\n");3317		ret = PTR_ERR(host->ciu_clk);3318		if (ret == -EPROBE_DEFER)3319			goto err_clk_biu;3320 3321		host->bus_hz = host->pdata->bus_hz;3322	} else {3323		ret = clk_prepare_enable(host->ciu_clk);3324		if (ret) {3325			dev_err(host->dev, "failed to enable ciu clock\n");3326			goto err_clk_biu;3327		}3328 3329		if (host->pdata->bus_hz) {3330			ret = clk_set_rate(host->ciu_clk, host->pdata->bus_hz);3331			if (ret)3332				dev_warn(host->dev,3333					 "Unable to set bus rate to %uHz\n",3334					 host->pdata->bus_hz);3335		}3336		host->bus_hz = clk_get_rate(host->ciu_clk);3337	}3338 3339	if (!host->bus_hz) {3340		dev_err(host->dev,3341			"Platform data must supply bus speed\n");3342		ret = -ENODEV;3343		goto err_clk_ciu;3344	}3345 3346	if (host->pdata->rstc) {3347		reset_control_assert(host->pdata->rstc);3348		usleep_range(10, 50);3349		reset_control_deassert(host->pdata->rstc);3350	}3351 3352	if (drv_data && drv_data->init) {3353		ret = drv_data->init(host);3354		if (ret) {3355			dev_err(host->dev,3356				"implementation specific init failed\n");3357			goto err_clk_ciu;3358		}3359	}3360 3361	timer_setup(&host->cmd11_timer, dw_mci_cmd11_timer, 0);3362	timer_setup(&host->cto_timer, dw_mci_cto_timer, 0);3363	timer_setup(&host->dto_timer, dw_mci_dto_timer, 0);3364 3365	spin_lock_init(&host->lock);3366	spin_lock_init(&host->irq_lock);3367	INIT_LIST_HEAD(&host->queue);3368 3369	dw_mci_init_fault(host);3370 3371	/*3372	 * Get the host data width - this assumes that HCON has been set with3373	 * the correct values.3374	 */3375	i = SDMMC_GET_HDATA_WIDTH(mci_readl(host, HCON));3376	if (!i) {3377		host->push_data = dw_mci_push_data16;3378		host->pull_data = dw_mci_pull_data16;3379		width = 16;3380		host->data_shift = 1;3381	} else if (i == 2) {3382		host->push_data = dw_mci_push_data64;3383		host->pull_data = dw_mci_pull_data64;3384		width = 64;3385		host->data_shift = 3;3386	} else {3387		/* Check for a reserved value, and warn if it is */3388		WARN((i != 1),3389		     "HCON reports a reserved host data width!\n"3390		     "Defaulting to 32-bit access.\n");3391		host->push_data = dw_mci_push_data32;3392		host->pull_data = dw_mci_pull_data32;3393		width = 32;3394		host->data_shift = 2;3395	}3396 3397	/* Reset all blocks */3398	if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_ALL_RESET_FLAGS)) {3399		ret = -ENODEV;3400		goto err_clk_ciu;3401	}3402 3403	host->dma_ops = host->pdata->dma_ops;3404	dw_mci_init_dma(host);3405 3406	/* Clear the interrupts for the host controller */3407	mci_writel(host, RINTSTS, 0xFFFFFFFF);3408	mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */3409 3410	/* Put in max timeout */3411	mci_writel(host, TMOUT, 0xFFFFFFFF);3412 3413	/*3414	 * FIFO threshold settings  RxMark  = fifo_size / 2 - 1,3415	 *                          Tx Mark = fifo_size / 2 DMA Size = 83416	 */3417	if (!host->pdata->fifo_depth) {3418		/*3419		 * Power-on value of RX_WMark is FIFO_DEPTH-1, but this may3420		 * have been overwritten by the bootloader, just like we're3421		 * about to do, so if you know the value for your hardware, you3422		 * should put it in the platform data.3423		 */3424		fifo_size = mci_readl(host, FIFOTH);3425		fifo_size = 1 + ((fifo_size >> 16) & 0xfff);3426	} else {3427		fifo_size = host->pdata->fifo_depth;3428	}3429	host->fifo_depth = fifo_size;3430	host->fifoth_val =3431		SDMMC_SET_FIFOTH(0x2, fifo_size / 2 - 1, fifo_size / 2);3432	mci_writel(host, FIFOTH, host->fifoth_val);3433 3434	/* disable clock to CIU */3435	mci_writel(host, CLKENA, 0);3436	mci_writel(host, CLKSRC, 0);3437 3438	/*3439	 * In 2.40a spec, Data offset is changed.3440	 * Need to check the version-id and set data-offset for DATA register.3441	 */3442	host->verid = SDMMC_GET_VERID(mci_readl(host, VERID));3443	dev_info(host->dev, "Version ID is %04x\n", host->verid);3444 3445	if (host->data_addr_override)3446		host->fifo_reg = host->regs + host->data_addr_override;3447	else if (host->verid < DW_MMC_240A)3448		host->fifo_reg = host->regs + DATA_OFFSET;3449	else3450		host->fifo_reg = host->regs + DATA_240A_OFFSET;3451 3452	INIT_WORK(&host->bh_work, dw_mci_work_func);3453	ret = devm_request_irq(host->dev, host->irq, dw_mci_interrupt,3454			       host->irq_flags, "dw-mci", host);3455	if (ret)3456		goto err_dmaunmap;3457 3458	/*3459	 * Enable interrupts for command done, data over, data empty,3460	 * receive ready and error such as transmit, receive timeout, crc error3461	 */3462	mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |3463		   SDMMC_INT_TXDR | SDMMC_INT_RXDR |3464		   DW_MCI_ERROR_FLAGS);3465	/* Enable mci interrupt */3466	mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE);3467 3468	dev_info(host->dev,3469		 "DW MMC controller at irq %d,%d bit host data width,%u deep fifo\n",3470		 host->irq, width, fifo_size);3471 3472	/* We need at least one slot to succeed */3473	ret = dw_mci_init_slot(host);3474	if (ret) {3475		dev_dbg(host->dev, "slot %d init failed\n", i);3476		goto err_dmaunmap;3477	}3478 3479	/* Now that slots are all setup, we can enable card detect */3480	dw_mci_enable_cd(host);3481 3482	return 0;3483 3484err_dmaunmap:3485	if (host->use_dma && host->dma_ops->exit)3486		host->dma_ops->exit(host);3487 3488	reset_control_assert(host->pdata->rstc);3489 3490err_clk_ciu:3491	clk_disable_unprepare(host->ciu_clk);3492 3493err_clk_biu:3494	clk_disable_unprepare(host->biu_clk);3495 3496	return ret;3497}3498EXPORT_SYMBOL(dw_mci_probe);3499 3500void dw_mci_remove(struct dw_mci *host)3501{3502	dev_dbg(host->dev, "remove slot\n");3503	if (host->slot)3504		dw_mci_cleanup_slot(host->slot);3505 3506	mci_writel(host, RINTSTS, 0xFFFFFFFF);3507	mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */3508 3509	/* disable clock to CIU */3510	mci_writel(host, CLKENA, 0);3511	mci_writel(host, CLKSRC, 0);3512 3513	if (host->use_dma && host->dma_ops->exit)3514		host->dma_ops->exit(host);3515 3516	reset_control_assert(host->pdata->rstc);3517 3518	clk_disable_unprepare(host->ciu_clk);3519	clk_disable_unprepare(host->biu_clk);3520}3521EXPORT_SYMBOL(dw_mci_remove);3522 3523 3524 3525#ifdef CONFIG_PM3526int dw_mci_runtime_suspend(struct device *dev)3527{3528	struct dw_mci *host = dev_get_drvdata(dev);3529 3530	if (host->use_dma && host->dma_ops->exit)3531		host->dma_ops->exit(host);3532 3533	clk_disable_unprepare(host->ciu_clk);3534 3535	if (host->slot &&3536	    (mmc_can_gpio_cd(host->slot->mmc) ||3537	     !mmc_card_is_removable(host->slot->mmc)))3538		clk_disable_unprepare(host->biu_clk);3539 3540	return 0;3541}3542EXPORT_SYMBOL(dw_mci_runtime_suspend);3543 3544int dw_mci_runtime_resume(struct device *dev)3545{3546	int ret = 0;3547	struct dw_mci *host = dev_get_drvdata(dev);3548 3549	if (host->slot &&3550	    (mmc_can_gpio_cd(host->slot->mmc) ||3551	     !mmc_card_is_removable(host->slot->mmc))) {3552		ret = clk_prepare_enable(host->biu_clk);3553		if (ret)3554			return ret;3555	}3556 3557	ret = clk_prepare_enable(host->ciu_clk);3558	if (ret)3559		goto err;3560 3561	if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_ALL_RESET_FLAGS)) {3562		clk_disable_unprepare(host->ciu_clk);3563		ret = -ENODEV;3564		goto err;3565	}3566 3567	if (host->use_dma && host->dma_ops->init)3568		host->dma_ops->init(host);3569 3570	/*3571	 * Restore the initial value at FIFOTH register3572	 * And Invalidate the prev_blksz with zero3573	 */3574	mci_writel(host, FIFOTH, host->fifoth_val);3575	host->prev_blksz = 0;3576 3577	/* Put in max timeout */3578	mci_writel(host, TMOUT, 0xFFFFFFFF);3579 3580	mci_writel(host, RINTSTS, 0xFFFFFFFF);3581	mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |3582		   SDMMC_INT_TXDR | SDMMC_INT_RXDR |3583		   DW_MCI_ERROR_FLAGS);3584	mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE);3585 3586 3587	if (host->slot && host->slot->mmc->pm_flags & MMC_PM_KEEP_POWER)3588		dw_mci_set_ios(host->slot->mmc, &host->slot->mmc->ios);3589 3590	/* Force setup bus to guarantee available clock output */3591	dw_mci_setup_bus(host->slot, true);3592 3593	/* Re-enable SDIO interrupts. */3594	if (sdio_irq_claimed(host->slot->mmc))3595		__dw_mci_enable_sdio_irq(host->slot, 1);3596 3597	/* Now that slots are all setup, we can enable card detect */3598	dw_mci_enable_cd(host);3599 3600	return 0;3601 3602err:3603	if (host->slot &&3604	    (mmc_can_gpio_cd(host->slot->mmc) ||3605	     !mmc_card_is_removable(host->slot->mmc)))3606		clk_disable_unprepare(host->biu_clk);3607 3608	return ret;3609}3610EXPORT_SYMBOL(dw_mci_runtime_resume);3611#endif /* CONFIG_PM */3612 3613static int __init dw_mci_init(void)3614{3615	pr_info("Synopsys Designware Multimedia Card Interface Driver\n");3616	return 0;3617}3618 3619static void __exit dw_mci_exit(void)3620{3621}3622 3623module_init(dw_mci_init);3624module_exit(dw_mci_exit);3625 3626MODULE_DESCRIPTION("DW Multimedia Card Interface driver");3627MODULE_AUTHOR("NXP Semiconductor VietNam");3628MODULE_AUTHOR("Imagination Technologies Ltd");3629MODULE_LICENSE("GPL v2");3630