Linux Audio

Check our new training course

Linux debugging, profiling, tracing and performance analysis training

Mar 24-27, 2025, special US time zones
Register
Loading...
   1/*
   2 * Shared part of driver for MMC/SDHC controller on Cavium OCTEON and
   3 * ThunderX SOCs.
   4 *
   5 * This file is subject to the terms and conditions of the GNU General Public
   6 * License.  See the file "COPYING" in the main directory of this archive
   7 * for more details.
   8 *
   9 * Copyright (C) 2012-2017 Cavium Inc.
  10 * Authors:
  11 *   David Daney <david.daney@cavium.com>
  12 *   Peter Swain <pswain@cavium.com>
  13 *   Steven J. Hill <steven.hill@cavium.com>
  14 *   Jan Glauber <jglauber@cavium.com>
  15 */
  16#include <linux/bitfield.h>
  17#include <linux/delay.h>
  18#include <linux/dma-direction.h>
  19#include <linux/dma-mapping.h>
  20#include <linux/gpio/consumer.h>
  21#include <linux/interrupt.h>
  22#include <linux/mmc/mmc.h>
  23#include <linux/mmc/slot-gpio.h>
  24#include <linux/module.h>
  25#include <linux/regulator/consumer.h>
  26#include <linux/scatterlist.h>
  27#include <linux/time.h>
  28
  29#include "cavium.h"
  30
  31const char *cvm_mmc_irq_names[] = {
  32	"MMC Buffer",
  33	"MMC Command",
  34	"MMC DMA",
  35	"MMC Command Error",
  36	"MMC DMA Error",
  37	"MMC Switch",
  38	"MMC Switch Error",
  39	"MMC DMA int Fifo",
  40	"MMC DMA int",
  41};
  42
  43/*
  44 * The Cavium MMC host hardware assumes that all commands have fixed
  45 * command and response types.  These are correct if MMC devices are
  46 * being used.  However, non-MMC devices like SD use command and
  47 * response types that are unexpected by the host hardware.
  48 *
  49 * The command and response types can be overridden by supplying an
  50 * XOR value that is applied to the type.  We calculate the XOR value
  51 * from the values in this table and the flags passed from the MMC
  52 * core.
  53 */
  54static struct cvm_mmc_cr_type cvm_mmc_cr_types[] = {
  55	{0, 0},		/* CMD0 */
  56	{0, 3},		/* CMD1 */
  57	{0, 2},		/* CMD2 */
  58	{0, 1},		/* CMD3 */
  59	{0, 0},		/* CMD4 */
  60	{0, 1},		/* CMD5 */
  61	{0, 1},		/* CMD6 */
  62	{0, 1},		/* CMD7 */
  63	{1, 1},		/* CMD8 */
  64	{0, 2},		/* CMD9 */
  65	{0, 2},		/* CMD10 */
  66	{1, 1},		/* CMD11 */
  67	{0, 1},		/* CMD12 */
  68	{0, 1},		/* CMD13 */
  69	{1, 1},		/* CMD14 */
  70	{0, 0},		/* CMD15 */
  71	{0, 1},		/* CMD16 */
  72	{1, 1},		/* CMD17 */
  73	{1, 1},		/* CMD18 */
  74	{3, 1},		/* CMD19 */
  75	{2, 1},		/* CMD20 */
  76	{0, 0},		/* CMD21 */
  77	{0, 0},		/* CMD22 */
  78	{0, 1},		/* CMD23 */
  79	{2, 1},		/* CMD24 */
  80	{2, 1},		/* CMD25 */
  81	{2, 1},		/* CMD26 */
  82	{2, 1},		/* CMD27 */
  83	{0, 1},		/* CMD28 */
  84	{0, 1},		/* CMD29 */
  85	{1, 1},		/* CMD30 */
  86	{1, 1},		/* CMD31 */
  87	{0, 0},		/* CMD32 */
  88	{0, 0},		/* CMD33 */
  89	{0, 0},		/* CMD34 */
  90	{0, 1},		/* CMD35 */
  91	{0, 1},		/* CMD36 */
  92	{0, 0},		/* CMD37 */
  93	{0, 1},		/* CMD38 */
  94	{0, 4},		/* CMD39 */
  95	{0, 5},		/* CMD40 */
  96	{0, 0},		/* CMD41 */
  97	{2, 1},		/* CMD42 */
  98	{0, 0},		/* CMD43 */
  99	{0, 0},		/* CMD44 */
 100	{0, 0},		/* CMD45 */
 101	{0, 0},		/* CMD46 */
 102	{0, 0},		/* CMD47 */
 103	{0, 0},		/* CMD48 */
 104	{0, 0},		/* CMD49 */
 105	{0, 0},		/* CMD50 */
 106	{0, 0},		/* CMD51 */
 107	{0, 0},		/* CMD52 */
 108	{0, 0},		/* CMD53 */
 109	{0, 0},		/* CMD54 */
 110	{0, 1},		/* CMD55 */
 111	{0xff, 0xff},	/* CMD56 */
 112	{0, 0},		/* CMD57 */
 113	{0, 0},		/* CMD58 */
 114	{0, 0},		/* CMD59 */
 115	{0, 0},		/* CMD60 */
 116	{0, 0},		/* CMD61 */
 117	{0, 0},		/* CMD62 */
 118	{0, 0}		/* CMD63 */
 119};
 120
 121static struct cvm_mmc_cr_mods cvm_mmc_get_cr_mods(struct mmc_command *cmd)
 122{
 123	struct cvm_mmc_cr_type *cr;
 124	u8 hardware_ctype, hardware_rtype;
 125	u8 desired_ctype = 0, desired_rtype = 0;
 126	struct cvm_mmc_cr_mods r;
 127
 128	cr = cvm_mmc_cr_types + (cmd->opcode & 0x3f);
 129	hardware_ctype = cr->ctype;
 130	hardware_rtype = cr->rtype;
 131	if (cmd->opcode == MMC_GEN_CMD)
 132		hardware_ctype = (cmd->arg & 1) ? 1 : 2;
 133
 134	switch (mmc_cmd_type(cmd)) {
 135	case MMC_CMD_ADTC:
 136		desired_ctype = (cmd->data->flags & MMC_DATA_WRITE) ? 2 : 1;
 137		break;
 138	case MMC_CMD_AC:
 139	case MMC_CMD_BC:
 140	case MMC_CMD_BCR:
 141		desired_ctype = 0;
 142		break;
 143	}
 144
 145	switch (mmc_resp_type(cmd)) {
 146	case MMC_RSP_NONE:
 147		desired_rtype = 0;
 148		break;
 149	case MMC_RSP_R1:/* MMC_RSP_R5, MMC_RSP_R6, MMC_RSP_R7 */
 150	case MMC_RSP_R1B:
 151		desired_rtype = 1;
 152		break;
 153	case MMC_RSP_R2:
 154		desired_rtype = 2;
 155		break;
 156	case MMC_RSP_R3: /* MMC_RSP_R4 */
 157		desired_rtype = 3;
 158		break;
 159	}
 160	r.ctype_xor = desired_ctype ^ hardware_ctype;
 161	r.rtype_xor = desired_rtype ^ hardware_rtype;
 162	return r;
 163}
 164
 165static void check_switch_errors(struct cvm_mmc_host *host)
 166{
 167	u64 emm_switch;
 168
 169	emm_switch = readq(host->base + MIO_EMM_SWITCH(host));
 170	if (emm_switch & MIO_EMM_SWITCH_ERR0)
 171		dev_err(host->dev, "Switch power class error\n");
 172	if (emm_switch & MIO_EMM_SWITCH_ERR1)
 173		dev_err(host->dev, "Switch hs timing error\n");
 174	if (emm_switch & MIO_EMM_SWITCH_ERR2)
 175		dev_err(host->dev, "Switch bus width error\n");
 176}
 177
 178static void clear_bus_id(u64 *reg)
 179{
 180	u64 bus_id_mask = GENMASK_ULL(61, 60);
 181
 182	*reg &= ~bus_id_mask;
 183}
 184
 185static void set_bus_id(u64 *reg, int bus_id)
 186{
 187	clear_bus_id(reg);
 188	*reg |= FIELD_PREP(GENMASK(61, 60), bus_id);
 189}
 190
 191static int get_bus_id(u64 reg)
 192{
 193	return FIELD_GET(GENMASK_ULL(61, 60), reg);
 194}
 195
 196/*
 197 * We never set the switch_exe bit since that would interfere
 198 * with the commands send by the MMC core.
 199 */
 200static void do_switch(struct cvm_mmc_host *host, u64 emm_switch)
 201{
 202	int retries = 100;
 203	u64 rsp_sts;
 204	int bus_id;
 205
 206	/*
 207	 * Modes setting only taken from slot 0. Work around that hardware
 208	 * issue by first switching to slot 0.
 209	 */
 210	bus_id = get_bus_id(emm_switch);
 211	clear_bus_id(&emm_switch);
 212	writeq(emm_switch, host->base + MIO_EMM_SWITCH(host));
 213
 214	set_bus_id(&emm_switch, bus_id);
 215	writeq(emm_switch, host->base + MIO_EMM_SWITCH(host));
 216
 217	/* wait for the switch to finish */
 218	do {
 219		rsp_sts = readq(host->base + MIO_EMM_RSP_STS(host));
 220		if (!(rsp_sts & MIO_EMM_RSP_STS_SWITCH_VAL))
 221			break;
 222		udelay(10);
 223	} while (--retries);
 224
 225	check_switch_errors(host);
 226}
 227
 228static bool switch_val_changed(struct cvm_mmc_slot *slot, u64 new_val)
 229{
 230	/* Match BUS_ID, HS_TIMING, BUS_WIDTH, POWER_CLASS, CLK_HI, CLK_LO */
 231	u64 match = 0x3001070fffffffffull;
 232
 233	return (slot->cached_switch & match) != (new_val & match);
 234}
 235
 236static void set_wdog(struct cvm_mmc_slot *slot, unsigned int ns)
 237{
 238	u64 timeout;
 239
 240	if (!slot->clock)
 241		return;
 242
 243	if (ns)
 244		timeout = (slot->clock * ns) / NSEC_PER_SEC;
 245	else
 246		timeout = (slot->clock * 850ull) / 1000ull;
 247	writeq(timeout, slot->host->base + MIO_EMM_WDOG(slot->host));
 248}
 249
 250static void cvm_mmc_reset_bus(struct cvm_mmc_slot *slot)
 251{
 252	struct cvm_mmc_host *host = slot->host;
 253	u64 emm_switch, wdog;
 254
 255	emm_switch = readq(slot->host->base + MIO_EMM_SWITCH(host));
 256	emm_switch &= ~(MIO_EMM_SWITCH_EXE | MIO_EMM_SWITCH_ERR0 |
 257			MIO_EMM_SWITCH_ERR1 | MIO_EMM_SWITCH_ERR2);
 258	set_bus_id(&emm_switch, slot->bus_id);
 259
 260	wdog = readq(slot->host->base + MIO_EMM_WDOG(host));
 261	do_switch(slot->host, emm_switch);
 262
 263	slot->cached_switch = emm_switch;
 264
 265	msleep(20);
 266
 267	writeq(wdog, slot->host->base + MIO_EMM_WDOG(host));
 268}
 269
 270/* Switch to another slot if needed */
 271static void cvm_mmc_switch_to(struct cvm_mmc_slot *slot)
 272{
 273	struct cvm_mmc_host *host = slot->host;
 274	struct cvm_mmc_slot *old_slot;
 275	u64 emm_sample, emm_switch;
 276
 277	if (slot->bus_id == host->last_slot)
 278		return;
 279
 280	if (host->last_slot >= 0 && host->slot[host->last_slot]) {
 281		old_slot = host->slot[host->last_slot];
 282		old_slot->cached_switch = readq(host->base + MIO_EMM_SWITCH(host));
 283		old_slot->cached_rca = readq(host->base + MIO_EMM_RCA(host));
 284	}
 285
 286	writeq(slot->cached_rca, host->base + MIO_EMM_RCA(host));
 287	emm_switch = slot->cached_switch;
 288	set_bus_id(&emm_switch, slot->bus_id);
 289	do_switch(host, emm_switch);
 290
 291	emm_sample = FIELD_PREP(MIO_EMM_SAMPLE_CMD_CNT, slot->cmd_cnt) |
 292		     FIELD_PREP(MIO_EMM_SAMPLE_DAT_CNT, slot->dat_cnt);
 293	writeq(emm_sample, host->base + MIO_EMM_SAMPLE(host));
 294
 295	host->last_slot = slot->bus_id;
 296}
 297
 298static void do_read(struct cvm_mmc_host *host, struct mmc_request *req,
 299		    u64 dbuf)
 300{
 301	struct sg_mapping_iter *smi = &host->smi;
 302	int data_len = req->data->blocks * req->data->blksz;
 303	int bytes_xfered, shift = -1;
 304	u64 dat = 0;
 305
 306	/* Auto inc from offset zero */
 307	writeq((0x10000 | (dbuf << 6)), host->base + MIO_EMM_BUF_IDX(host));
 308
 309	for (bytes_xfered = 0; bytes_xfered < data_len;) {
 310		if (smi->consumed >= smi->length) {
 311			if (!sg_miter_next(smi))
 312				break;
 313			smi->consumed = 0;
 314		}
 315
 316		if (shift < 0) {
 317			dat = readq(host->base + MIO_EMM_BUF_DAT(host));
 318			shift = 56;
 319		}
 320
 321		while (smi->consumed < smi->length && shift >= 0) {
 322			((u8 *)smi->addr)[smi->consumed] = (dat >> shift) & 0xff;
 323			bytes_xfered++;
 324			smi->consumed++;
 325			shift -= 8;
 326		}
 327	}
 328
 329	sg_miter_stop(smi);
 330	req->data->bytes_xfered = bytes_xfered;
 331	req->data->error = 0;
 332}
 333
 334static void do_write(struct mmc_request *req)
 335{
 336	req->data->bytes_xfered = req->data->blocks * req->data->blksz;
 337	req->data->error = 0;
 338}
 339
 340static void set_cmd_response(struct cvm_mmc_host *host, struct mmc_request *req,
 341			     u64 rsp_sts)
 342{
 343	u64 rsp_hi, rsp_lo;
 344
 345	if (!(rsp_sts & MIO_EMM_RSP_STS_RSP_VAL))
 346		return;
 347
 348	rsp_lo = readq(host->base + MIO_EMM_RSP_LO(host));
 349
 350	switch (FIELD_GET(MIO_EMM_RSP_STS_RSP_TYPE, rsp_sts)) {
 351	case 1:
 352	case 3:
 353		req->cmd->resp[0] = (rsp_lo >> 8) & 0xffffffff;
 354		req->cmd->resp[1] = 0;
 355		req->cmd->resp[2] = 0;
 356		req->cmd->resp[3] = 0;
 357		break;
 358	case 2:
 359		req->cmd->resp[3] = rsp_lo & 0xffffffff;
 360		req->cmd->resp[2] = (rsp_lo >> 32) & 0xffffffff;
 361		rsp_hi = readq(host->base + MIO_EMM_RSP_HI(host));
 362		req->cmd->resp[1] = rsp_hi & 0xffffffff;
 363		req->cmd->resp[0] = (rsp_hi >> 32) & 0xffffffff;
 364		break;
 365	}
 366}
 367
 368static int get_dma_dir(struct mmc_data *data)
 369{
 370	return (data->flags & MMC_DATA_WRITE) ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
 371}
 372
 373static int finish_dma_single(struct cvm_mmc_host *host, struct mmc_data *data)
 374{
 375	data->bytes_xfered = data->blocks * data->blksz;
 376	data->error = 0;
 377	dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data));
 378	return 1;
 379}
 380
 381static int finish_dma_sg(struct cvm_mmc_host *host, struct mmc_data *data)
 382{
 383	u64 fifo_cfg;
 384	int count;
 385
 386	/* Check if there are any pending requests left */
 387	fifo_cfg = readq(host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
 388	count = FIELD_GET(MIO_EMM_DMA_FIFO_CFG_COUNT, fifo_cfg);
 389	if (count)
 390		dev_err(host->dev, "%u requests still pending\n", count);
 391
 392	data->bytes_xfered = data->blocks * data->blksz;
 393	data->error = 0;
 394
 395	/* Clear and disable FIFO */
 396	writeq(BIT_ULL(16), host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
 397	dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data));
 398	return 1;
 399}
 400
 401static int finish_dma(struct cvm_mmc_host *host, struct mmc_data *data)
 402{
 403	if (host->use_sg && data->sg_len > 1)
 404		return finish_dma_sg(host, data);
 405	else
 406		return finish_dma_single(host, data);
 407}
 408
 409static int check_status(u64 rsp_sts)
 410{
 411	if (rsp_sts & MIO_EMM_RSP_STS_RSP_BAD_STS ||
 412	    rsp_sts & MIO_EMM_RSP_STS_RSP_CRC_ERR ||
 413	    rsp_sts & MIO_EMM_RSP_STS_BLK_CRC_ERR)
 414		return -EILSEQ;
 415	if (rsp_sts & MIO_EMM_RSP_STS_RSP_TIMEOUT ||
 416	    rsp_sts & MIO_EMM_RSP_STS_BLK_TIMEOUT)
 417		return -ETIMEDOUT;
 418	if (rsp_sts & MIO_EMM_RSP_STS_DBUF_ERR)
 419		return -EIO;
 420	return 0;
 421}
 422
 423/* Try to clean up failed DMA. */
 424static void cleanup_dma(struct cvm_mmc_host *host, u64 rsp_sts)
 425{
 426	u64 emm_dma;
 427
 428	emm_dma = readq(host->base + MIO_EMM_DMA(host));
 429	emm_dma |= FIELD_PREP(MIO_EMM_DMA_VAL, 1) |
 430		   FIELD_PREP(MIO_EMM_DMA_DAT_NULL, 1);
 431	set_bus_id(&emm_dma, get_bus_id(rsp_sts));
 432	writeq(emm_dma, host->base + MIO_EMM_DMA(host));
 433}
 434
 435irqreturn_t cvm_mmc_interrupt(int irq, void *dev_id)
 436{
 437	struct cvm_mmc_host *host = dev_id;
 438	struct mmc_request *req;
 439	u64 emm_int, rsp_sts;
 440	bool host_done;
 441
 442	if (host->need_irq_handler_lock)
 443		spin_lock(&host->irq_handler_lock);
 444	else
 445		__acquire(&host->irq_handler_lock);
 446
 447	/* Clear interrupt bits (write 1 clears ). */
 448	emm_int = readq(host->base + MIO_EMM_INT(host));
 449	writeq(emm_int, host->base + MIO_EMM_INT(host));
 450
 451	if (emm_int & MIO_EMM_INT_SWITCH_ERR)
 452		check_switch_errors(host);
 453
 454	req = host->current_req;
 455	if (!req)
 456		goto out;
 457
 458	rsp_sts = readq(host->base + MIO_EMM_RSP_STS(host));
 459	/*
 460	 * dma_val set means DMA is still in progress. Don't touch
 461	 * the request and wait for the interrupt indicating that
 462	 * the DMA is finished.
 463	 */
 464	if ((rsp_sts & MIO_EMM_RSP_STS_DMA_VAL) && host->dma_active)
 465		goto out;
 466
 467	if (!host->dma_active && req->data &&
 468	    (emm_int & MIO_EMM_INT_BUF_DONE)) {
 469		unsigned int type = (rsp_sts >> 7) & 3;
 470
 471		if (type == 1)
 472			do_read(host, req, rsp_sts & MIO_EMM_RSP_STS_DBUF);
 473		else if (type == 2)
 474			do_write(req);
 475	}
 476
 477	host_done = emm_int & MIO_EMM_INT_CMD_DONE ||
 478		    emm_int & MIO_EMM_INT_DMA_DONE ||
 479		    emm_int & MIO_EMM_INT_CMD_ERR  ||
 480		    emm_int & MIO_EMM_INT_DMA_ERR;
 481
 482	if (!(host_done && req->done))
 483		goto no_req_done;
 484
 485	req->cmd->error = check_status(rsp_sts);
 486
 487	if (host->dma_active && req->data)
 488		if (!finish_dma(host, req->data))
 489			goto no_req_done;
 490
 491	set_cmd_response(host, req, rsp_sts);
 492	if ((emm_int & MIO_EMM_INT_DMA_ERR) &&
 493	    (rsp_sts & MIO_EMM_RSP_STS_DMA_PEND))
 494		cleanup_dma(host, rsp_sts);
 495
 496	host->current_req = NULL;
 497	req->done(req);
 498
 499no_req_done:
 500	if (host->dmar_fixup_done)
 501		host->dmar_fixup_done(host);
 502	if (host_done)
 503		host->release_bus(host);
 504out:
 505	if (host->need_irq_handler_lock)
 506		spin_unlock(&host->irq_handler_lock);
 507	else
 508		__release(&host->irq_handler_lock);
 509	return IRQ_RETVAL(emm_int != 0);
 510}
 511
 512/*
 513 * Program DMA_CFG and if needed DMA_ADR.
 514 * Returns 0 on error, DMA address otherwise.
 515 */
 516static u64 prepare_dma_single(struct cvm_mmc_host *host, struct mmc_data *data)
 517{
 518	u64 dma_cfg, addr;
 519	int count, rw;
 520
 521	count = dma_map_sg(host->dev, data->sg, data->sg_len,
 522			   get_dma_dir(data));
 523	if (!count)
 524		return 0;
 525
 526	rw = (data->flags & MMC_DATA_WRITE) ? 1 : 0;
 527	dma_cfg = FIELD_PREP(MIO_EMM_DMA_CFG_EN, 1) |
 528		  FIELD_PREP(MIO_EMM_DMA_CFG_RW, rw);
 529#ifdef __LITTLE_ENDIAN
 530	dma_cfg |= FIELD_PREP(MIO_EMM_DMA_CFG_ENDIAN, 1);
 531#endif
 532	dma_cfg |= FIELD_PREP(MIO_EMM_DMA_CFG_SIZE,
 533			      (sg_dma_len(&data->sg[0]) / 8) - 1);
 534
 535	addr = sg_dma_address(&data->sg[0]);
 536	if (!host->big_dma_addr)
 537		dma_cfg |= FIELD_PREP(MIO_EMM_DMA_CFG_ADR, addr);
 538	writeq(dma_cfg, host->dma_base + MIO_EMM_DMA_CFG(host));
 539
 540	pr_debug("[%s] sg_dma_len: %u  total sg_elem: %d\n",
 541		 (rw) ? "W" : "R", sg_dma_len(&data->sg[0]), count);
 542
 543	if (host->big_dma_addr)
 544		writeq(addr, host->dma_base + MIO_EMM_DMA_ADR(host));
 545	return addr;
 546}
 547
 548/*
 549 * Queue complete sg list into the FIFO.
 550 * Returns 0 on error, 1 otherwise.
 551 */
 552static u64 prepare_dma_sg(struct cvm_mmc_host *host, struct mmc_data *data)
 553{
 554	struct scatterlist *sg;
 555	u64 fifo_cmd, addr;
 556	int count, i, rw;
 557
 558	count = dma_map_sg(host->dev, data->sg, data->sg_len,
 559			   get_dma_dir(data));
 560	if (!count)
 561		return 0;
 562	if (count > 16)
 563		goto error;
 564
 565	/* Enable FIFO by removing CLR bit */
 566	writeq(0, host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
 567
 568	for_each_sg(data->sg, sg, count, i) {
 569		/* Program DMA address */
 570		addr = sg_dma_address(sg);
 571		if (addr & 7)
 572			goto error;
 573		writeq(addr, host->dma_base + MIO_EMM_DMA_FIFO_ADR(host));
 574
 575		/*
 576		 * If we have scatter-gather support we also have an extra
 577		 * register for the DMA addr, so no need to check
 578		 * host->big_dma_addr here.
 579		 */
 580		rw = (data->flags & MMC_DATA_WRITE) ? 1 : 0;
 581		fifo_cmd = FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_RW, rw);
 582
 583		/* enable interrupts on the last element */
 584		fifo_cmd |= FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_INTDIS,
 585				       (i + 1 == count) ? 0 : 1);
 586
 587#ifdef __LITTLE_ENDIAN
 588		fifo_cmd |= FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_ENDIAN, 1);
 589#endif
 590		fifo_cmd |= FIELD_PREP(MIO_EMM_DMA_FIFO_CMD_SIZE,
 591				       sg_dma_len(sg) / 8 - 1);
 592		/*
 593		 * The write copies the address and the command to the FIFO
 594		 * and increments the FIFO's COUNT field.
 595		 */
 596		writeq(fifo_cmd, host->dma_base + MIO_EMM_DMA_FIFO_CMD(host));
 597		pr_debug("[%s] sg_dma_len: %u  sg_elem: %d/%d\n",
 598			 (rw) ? "W" : "R", sg_dma_len(sg), i, count);
 599	}
 600
 601	/*
 602	 * In difference to prepare_dma_single we don't return the
 603	 * address here, as it would not make sense for scatter-gather.
 604	 * The dma fixup is only required on models that don't support
 605	 * scatter-gather, so that is not a problem.
 606	 */
 607	return 1;
 608
 609error:
 610	WARN_ON_ONCE(1);
 611	dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data));
 612	/* Disable FIFO */
 613	writeq(BIT_ULL(16), host->dma_base + MIO_EMM_DMA_FIFO_CFG(host));
 614	return 0;
 615}
 616
 617static u64 prepare_dma(struct cvm_mmc_host *host, struct mmc_data *data)
 618{
 619	if (host->use_sg && data->sg_len > 1)
 620		return prepare_dma_sg(host, data);
 621	else
 622		return prepare_dma_single(host, data);
 623}
 624
 625static u64 prepare_ext_dma(struct mmc_host *mmc, struct mmc_request *mrq)
 626{
 627	struct cvm_mmc_slot *slot = mmc_priv(mmc);
 628	u64 emm_dma;
 629
 630	emm_dma = FIELD_PREP(MIO_EMM_DMA_VAL, 1) |
 631		  FIELD_PREP(MIO_EMM_DMA_SECTOR,
 632			     mmc_card_is_blockaddr(mmc->card) ? 1 : 0) |
 633		  FIELD_PREP(MIO_EMM_DMA_RW,
 634			     (mrq->data->flags & MMC_DATA_WRITE) ? 1 : 0) |
 635		  FIELD_PREP(MIO_EMM_DMA_BLOCK_CNT, mrq->data->blocks) |
 636		  FIELD_PREP(MIO_EMM_DMA_CARD_ADDR, mrq->cmd->arg);
 637	set_bus_id(&emm_dma, slot->bus_id);
 638
 639	if (mmc_card_mmc(mmc->card) || (mmc_card_sd(mmc->card) &&
 640	    (mmc->card->scr.cmds & SD_SCR_CMD23_SUPPORT)))
 641		emm_dma |= FIELD_PREP(MIO_EMM_DMA_MULTI, 1);
 642
 643	pr_debug("[%s] blocks: %u  multi: %d\n",
 644		(emm_dma & MIO_EMM_DMA_RW) ? "W" : "R",
 645		 mrq->data->blocks, (emm_dma & MIO_EMM_DMA_MULTI) ? 1 : 0);
 646	return emm_dma;
 647}
 648
 649static void cvm_mmc_dma_request(struct mmc_host *mmc,
 650				struct mmc_request *mrq)
 651{
 652	struct cvm_mmc_slot *slot = mmc_priv(mmc);
 653	struct cvm_mmc_host *host = slot->host;
 654	struct mmc_data *data;
 655	u64 emm_dma, addr;
 656
 657	if (!mrq->data || !mrq->data->sg || !mrq->data->sg_len ||
 658	    !mrq->stop || mrq->stop->opcode != MMC_STOP_TRANSMISSION) {
 659		dev_err(&mmc->card->dev, "Error: %s no data\n", __func__);
 660		goto error;
 661	}
 662
 663	cvm_mmc_switch_to(slot);
 664
 665	data = mrq->data;
 666	pr_debug("DMA request  blocks: %d  block_size: %d  total_size: %d\n",
 667		 data->blocks, data->blksz, data->blocks * data->blksz);
 668	if (data->timeout_ns)
 669		set_wdog(slot, data->timeout_ns);
 670
 671	WARN_ON(host->current_req);
 672	host->current_req = mrq;
 673
 674	emm_dma = prepare_ext_dma(mmc, mrq);
 675	addr = prepare_dma(host, data);
 676	if (!addr) {
 677		dev_err(host->dev, "prepare_dma failed\n");
 678		goto error;
 679	}
 680
 681	host->dma_active = true;
 682	host->int_enable(host, MIO_EMM_INT_CMD_ERR | MIO_EMM_INT_DMA_DONE |
 683			 MIO_EMM_INT_DMA_ERR);
 684
 685	if (host->dmar_fixup)
 686		host->dmar_fixup(host, mrq->cmd, data, addr);
 687
 688	/*
 689	 * If we have a valid SD card in the slot, we set the response
 690	 * bit mask to check for CRC errors and timeouts only.
 691	 * Otherwise, use the default power reset value.
 692	 */
 693	if (mmc_card_sd(mmc->card))
 694		writeq(0x00b00000ull, host->base + MIO_EMM_STS_MASK(host));
 695	else
 696		writeq(0xe4390080ull, host->base + MIO_EMM_STS_MASK(host));
 697	writeq(emm_dma, host->base + MIO_EMM_DMA(host));
 698	return;
 699
 700error:
 701	mrq->cmd->error = -EINVAL;
 702	if (mrq->done)
 703		mrq->done(mrq);
 704	host->release_bus(host);
 705}
 706
 707static void do_read_request(struct cvm_mmc_host *host, struct mmc_request *mrq)
 708{
 709	sg_miter_start(&host->smi, mrq->data->sg, mrq->data->sg_len,
 710		       SG_MITER_ATOMIC | SG_MITER_TO_SG);
 711}
 712
 713static void do_write_request(struct cvm_mmc_host *host, struct mmc_request *mrq)
 714{
 715	unsigned int data_len = mrq->data->blocks * mrq->data->blksz;
 716	struct sg_mapping_iter *smi = &host->smi;
 717	unsigned int bytes_xfered;
 718	int shift = 56;
 719	u64 dat = 0;
 720
 721	/* Copy data to the xmit buffer before issuing the command. */
 722	sg_miter_start(smi, mrq->data->sg, mrq->data->sg_len, SG_MITER_FROM_SG);
 723
 724	/* Auto inc from offset zero, dbuf zero */
 725	writeq(0x10000ull, host->base + MIO_EMM_BUF_IDX(host));
 726
 727	for (bytes_xfered = 0; bytes_xfered < data_len;) {
 728		if (smi->consumed >= smi->length) {
 729			if (!sg_miter_next(smi))
 730				break;
 731			smi->consumed = 0;
 732		}
 733
 734		while (smi->consumed < smi->length && shift >= 0) {
 735			dat |= (u64)((u8 *)smi->addr)[smi->consumed] << shift;
 736			bytes_xfered++;
 737			smi->consumed++;
 738			shift -= 8;
 739		}
 740
 741		if (shift < 0) {
 742			writeq(dat, host->base + MIO_EMM_BUF_DAT(host));
 743			shift = 56;
 744			dat = 0;
 745		}
 746	}
 747	sg_miter_stop(smi);
 748}
 749
 750static void cvm_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)
 751{
 752	struct cvm_mmc_slot *slot = mmc_priv(mmc);
 753	struct cvm_mmc_host *host = slot->host;
 754	struct mmc_command *cmd = mrq->cmd;
 755	struct cvm_mmc_cr_mods mods;
 756	u64 emm_cmd, rsp_sts;
 757	int retries = 100;
 758
 759	/*
 760	 * Note about locking:
 761	 * All MMC devices share the same bus and controller. Allow only a
 762	 * single user of the bootbus/MMC bus at a time. The lock is acquired
 763	 * on all entry points from the MMC layer.
 764	 *
 765	 * For requests the lock is only released after the completion
 766	 * interrupt!
 767	 */
 768	host->acquire_bus(host);
 769
 770	if (cmd->opcode == MMC_READ_MULTIPLE_BLOCK ||
 771	    cmd->opcode == MMC_WRITE_MULTIPLE_BLOCK)
 772		return cvm_mmc_dma_request(mmc, mrq);
 773
 774	cvm_mmc_switch_to(slot);
 775
 776	mods = cvm_mmc_get_cr_mods(cmd);
 777
 778	WARN_ON(host->current_req);
 779	host->current_req = mrq;
 780
 781	if (cmd->data) {
 782		if (cmd->data->flags & MMC_DATA_READ)
 783			do_read_request(host, mrq);
 784		else
 785			do_write_request(host, mrq);
 786
 787		if (cmd->data->timeout_ns)
 788			set_wdog(slot, cmd->data->timeout_ns);
 789	} else
 790		set_wdog(slot, 0);
 791
 792	host->dma_active = false;
 793	host->int_enable(host, MIO_EMM_INT_CMD_DONE | MIO_EMM_INT_CMD_ERR);
 794
 795	emm_cmd = FIELD_PREP(MIO_EMM_CMD_VAL, 1) |
 796		  FIELD_PREP(MIO_EMM_CMD_CTYPE_XOR, mods.ctype_xor) |
 797		  FIELD_PREP(MIO_EMM_CMD_RTYPE_XOR, mods.rtype_xor) |
 798		  FIELD_PREP(MIO_EMM_CMD_IDX, cmd->opcode) |
 799		  FIELD_PREP(MIO_EMM_CMD_ARG, cmd->arg);
 800	set_bus_id(&emm_cmd, slot->bus_id);
 801	if (cmd->data && mmc_cmd_type(cmd) == MMC_CMD_ADTC)
 802		emm_cmd |= FIELD_PREP(MIO_EMM_CMD_OFFSET,
 803				64 - ((cmd->data->blocks * cmd->data->blksz) / 8));
 804
 805	writeq(0, host->base + MIO_EMM_STS_MASK(host));
 806
 807retry:
 808	rsp_sts = readq(host->base + MIO_EMM_RSP_STS(host));
 809	if (rsp_sts & MIO_EMM_RSP_STS_DMA_VAL ||
 810	    rsp_sts & MIO_EMM_RSP_STS_CMD_VAL ||
 811	    rsp_sts & MIO_EMM_RSP_STS_SWITCH_VAL ||
 812	    rsp_sts & MIO_EMM_RSP_STS_DMA_PEND) {
 813		udelay(10);
 814		if (--retries)
 815			goto retry;
 816	}
 817	if (!retries)
 818		dev_err(host->dev, "Bad status: %llx before command write\n", rsp_sts);
 819	writeq(emm_cmd, host->base + MIO_EMM_CMD(host));
 820}
 821
 822static void cvm_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 823{
 824	struct cvm_mmc_slot *slot = mmc_priv(mmc);
 825	struct cvm_mmc_host *host = slot->host;
 826	int clk_period = 0, power_class = 10, bus_width = 0;
 827	u64 clock, emm_switch;
 828
 829	host->acquire_bus(host);
 830	cvm_mmc_switch_to(slot);
 831
 832	/* Set the power state */
 833	switch (ios->power_mode) {
 834	case MMC_POWER_ON:
 835		break;
 836
 837	case MMC_POWER_OFF:
 838		cvm_mmc_reset_bus(slot);
 839		if (host->global_pwr_gpiod)
 840			host->set_shared_power(host, 0);
 841		else if (!IS_ERR(mmc->supply.vmmc))
 842			mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);
 843		break;
 844
 845	case MMC_POWER_UP:
 846		if (host->global_pwr_gpiod)
 847			host->set_shared_power(host, 1);
 848		else if (!IS_ERR(mmc->supply.vmmc))
 849			mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, ios->vdd);
 850		break;
 851	}
 852
 853	/* Convert bus width to HW definition */
 854	switch (ios->bus_width) {
 855	case MMC_BUS_WIDTH_8:
 856		bus_width = 2;
 857		break;
 858	case MMC_BUS_WIDTH_4:
 859		bus_width = 1;
 860		break;
 861	case MMC_BUS_WIDTH_1:
 862		bus_width = 0;
 863		break;
 864	}
 865
 866	/* DDR is available for 4/8 bit bus width */
 867	if (ios->bus_width && ios->timing == MMC_TIMING_MMC_DDR52)
 868		bus_width |= 4;
 869
 870	/* Change the clock frequency. */
 871	clock = ios->clock;
 872	if (clock > 52000000)
 873		clock = 52000000;
 874	slot->clock = clock;
 875
 876	if (clock)
 877		clk_period = (host->sys_freq + clock - 1) / (2 * clock);
 878
 879	emm_switch = FIELD_PREP(MIO_EMM_SWITCH_HS_TIMING,
 880				(ios->timing == MMC_TIMING_MMC_HS)) |
 881		     FIELD_PREP(MIO_EMM_SWITCH_BUS_WIDTH, bus_width) |
 882		     FIELD_PREP(MIO_EMM_SWITCH_POWER_CLASS, power_class) |
 883		     FIELD_PREP(MIO_EMM_SWITCH_CLK_HI, clk_period) |
 884		     FIELD_PREP(MIO_EMM_SWITCH_CLK_LO, clk_period);
 885	set_bus_id(&emm_switch, slot->bus_id);
 886
 887	if (!switch_val_changed(slot, emm_switch))
 888		goto out;
 889
 890	set_wdog(slot, 0);
 891	do_switch(host, emm_switch);
 892	slot->cached_switch = emm_switch;
 893out:
 894	host->release_bus(host);
 895}
 896
 897static const struct mmc_host_ops cvm_mmc_ops = {
 898	.request        = cvm_mmc_request,
 899	.set_ios        = cvm_mmc_set_ios,
 900	.get_ro		= mmc_gpio_get_ro,
 901	.get_cd		= mmc_gpio_get_cd,
 902};
 903
 904static void cvm_mmc_set_clock(struct cvm_mmc_slot *slot, unsigned int clock)
 905{
 906	struct mmc_host *mmc = slot->mmc;
 907
 908	clock = min(clock, mmc->f_max);
 909	clock = max(clock, mmc->f_min);
 910	slot->clock = clock;
 911}
 912
 913static int cvm_mmc_init_lowlevel(struct cvm_mmc_slot *slot)
 914{
 915	struct cvm_mmc_host *host = slot->host;
 916	u64 emm_switch;
 917
 918	/* Enable this bus slot. */
 919	host->emm_cfg |= (1ull << slot->bus_id);
 920	writeq(host->emm_cfg, slot->host->base + MIO_EMM_CFG(host));
 921	udelay(10);
 922
 923	/* Program initial clock speed and power. */
 924	cvm_mmc_set_clock(slot, slot->mmc->f_min);
 925	emm_switch = FIELD_PREP(MIO_EMM_SWITCH_POWER_CLASS, 10);
 926	emm_switch |= FIELD_PREP(MIO_EMM_SWITCH_CLK_HI,
 927				 (host->sys_freq / slot->clock) / 2);
 928	emm_switch |= FIELD_PREP(MIO_EMM_SWITCH_CLK_LO,
 929				 (host->sys_freq / slot->clock) / 2);
 930
 931	/* Make the changes take effect on this bus slot. */
 932	set_bus_id(&emm_switch, slot->bus_id);
 933	do_switch(host, emm_switch);
 934
 935	slot->cached_switch = emm_switch;
 936
 937	/*
 938	 * Set watchdog timeout value and default reset value
 939	 * for the mask register. Finally, set the CARD_RCA
 940	 * bit so that we can get the card address relative
 941	 * to the CMD register for CMD7 transactions.
 942	 */
 943	set_wdog(slot, 0);
 944	writeq(0xe4390080ull, host->base + MIO_EMM_STS_MASK(host));
 945	writeq(1, host->base + MIO_EMM_RCA(host));
 946	return 0;
 947}
 948
 949static int cvm_mmc_of_parse(struct device *dev, struct cvm_mmc_slot *slot)
 950{
 951	u32 id, cmd_skew = 0, dat_skew = 0, bus_width = 0;
 952	struct device_node *node = dev->of_node;
 953	struct mmc_host *mmc = slot->mmc;
 954	u64 clock_period;
 955	int ret;
 956
 957	ret = of_property_read_u32(node, "reg", &id);
 958	if (ret) {
 959		dev_err(dev, "Missing or invalid reg property on %pOF\n", node);
 960		return ret;
 961	}
 962
 963	if (id >= CAVIUM_MAX_MMC || slot->host->slot[id]) {
 964		dev_err(dev, "Invalid reg property on %pOF\n", node);
 965		return -EINVAL;
 966	}
 967
 968	ret = mmc_regulator_get_supply(mmc);
 969	if (ret)
 970		return ret;
 971	/*
 972	 * Legacy Octeon firmware has no regulator entry, fall-back to
 973	 * a hard-coded voltage to get a sane OCR.
 974	 */
 975	if (IS_ERR(mmc->supply.vmmc))
 976		mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
 977
 978	/* Common MMC bindings */
 979	ret = mmc_of_parse(mmc);
 980	if (ret)
 981		return ret;
 982
 983	/* Set bus width */
 984	if (!(mmc->caps & (MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA))) {
 985		of_property_read_u32(node, "cavium,bus-max-width", &bus_width);
 986		if (bus_width == 8)
 987			mmc->caps |= MMC_CAP_8_BIT_DATA | MMC_CAP_4_BIT_DATA;
 988		else if (bus_width == 4)
 989			mmc->caps |= MMC_CAP_4_BIT_DATA;
 990	}
 991
 992	/* Set maximum and minimum frequency */
 993	if (!mmc->f_max)
 994		of_property_read_u32(node, "spi-max-frequency", &mmc->f_max);
 995	if (!mmc->f_max || mmc->f_max > 52000000)
 996		mmc->f_max = 52000000;
 997	mmc->f_min = 400000;
 998
 999	/* Sampling register settings, period in picoseconds */
1000	clock_period = 1000000000000ull / slot->host->sys_freq;
1001	of_property_read_u32(node, "cavium,cmd-clk-skew", &cmd_skew);
1002	of_property_read_u32(node, "cavium,dat-clk-skew", &dat_skew);
1003	slot->cmd_cnt = (cmd_skew + clock_period / 2) / clock_period;
1004	slot->dat_cnt = (dat_skew + clock_period / 2) / clock_period;
1005
1006	return id;
1007}
1008
1009int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host)
1010{
1011	struct cvm_mmc_slot *slot;
1012	struct mmc_host *mmc;
1013	int ret, id;
1014
1015	mmc = mmc_alloc_host(sizeof(struct cvm_mmc_slot), dev);
1016	if (!mmc)
1017		return -ENOMEM;
1018
1019	slot = mmc_priv(mmc);
1020	slot->mmc = mmc;
1021	slot->host = host;
1022
1023	ret = cvm_mmc_of_parse(dev, slot);
1024	if (ret < 0)
1025		goto error;
1026	id = ret;
1027
1028	/* Set up host parameters */
1029	mmc->ops = &cvm_mmc_ops;
1030
1031	/*
1032	 * We only have a 3.3v supply, we cannot support any
1033	 * of the UHS modes. We do support the high speed DDR
1034	 * modes up to 52MHz.
1035	 *
1036	 * Disable bounce buffers for max_segs = 1
1037	 */
1038	mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
1039		     MMC_CAP_CMD23 | MMC_CAP_POWER_OFF_CARD | MMC_CAP_3_3V_DDR;
1040
1041	if (host->use_sg)
1042		mmc->max_segs = 16;
1043	else
1044		mmc->max_segs = 1;
1045
1046	/* DMA size field can address up to 8 MB */
1047	mmc->max_seg_size = min_t(unsigned int, 8 * 1024 * 1024,
1048				  dma_get_max_seg_size(host->dev));
1049	mmc->max_req_size = mmc->max_seg_size;
1050	/* External DMA is in 512 byte blocks */
1051	mmc->max_blk_size = 512;
1052	/* DMA block count field is 15 bits */
1053	mmc->max_blk_count = 32767;
1054
1055	slot->clock = mmc->f_min;
1056	slot->bus_id = id;
1057	slot->cached_rca = 1;
1058
1059	host->acquire_bus(host);
1060	host->slot[id] = slot;
1061	cvm_mmc_switch_to(slot);
1062	cvm_mmc_init_lowlevel(slot);
1063	host->release_bus(host);
1064
1065	ret = mmc_add_host(mmc);
1066	if (ret) {
1067		dev_err(dev, "mmc_add_host() returned %d\n", ret);
1068		slot->host->slot[id] = NULL;
1069		goto error;
1070	}
1071	return 0;
1072
1073error:
1074	mmc_free_host(slot->mmc);
1075	return ret;
1076}
1077
1078int cvm_mmc_of_slot_remove(struct cvm_mmc_slot *slot)
1079{
1080	mmc_remove_host(slot->mmc);
1081	slot->host->slot[slot->bus_id] = NULL;
1082	mmc_free_host(slot->mmc);
1083	return 0;
1084}