spi-imx.c 38.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/*
 * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
 * Copyright (C) 2008 Juergen Beisert
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the
 * Free Software Foundation
 * 51 Franklin Street, Fifth Floor
 * Boston, MA  02110-1301, USA.
 */

#include <linux/clk.h>
#include <linux/completion.h>
#include <linux/delay.h>
R
Robin Gong 已提交
24 25
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
26 27 28 29 30 31 32 33
#include <linux/err.h>
#include <linux/gpio.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
34
#include <linux/slab.h>
35 36 37
#include <linux/spi/spi.h>
#include <linux/spi/spi_bitbang.h>
#include <linux/types.h>
38 39 40
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h>
41

R
Robin Gong 已提交
42
#include <linux/platform_data/dma-imx.h>
43
#include <linux/platform_data/spi-imx.h>
44 45 46 47 48 49 50 51 52 53 54 55 56

#define DRIVER_NAME "spi_imx"

#define MXC_CSPIRXDATA		0x00
#define MXC_CSPITXDATA		0x04
#define MXC_CSPICTRL		0x08
#define MXC_CSPIINT		0x0c
#define MXC_RESET		0x1c

/* generic defines to abstract from the different register layouts */
#define MXC_INT_RR	(1 << 0) /* Receive data ready interrupt */
#define MXC_INT_TE	(1 << 1) /* Transmit FIFO empty interrupt */

R
Robin Gong 已提交
57 58
/* The maximum  bytes that a sdma BD can transfer.*/
#define MAX_SDMA_BD_BYTES  (1 << 15)
59
#define MX51_ECSPI_CTRL_MAX_BURST	512
60

61
enum spi_imx_devtype {
62 63 64 65 66
	IMX1_CSPI,
	IMX21_CSPI,
	IMX27_CSPI,
	IMX31_CSPI,
	IMX35_CSPI,	/* CSPI on all i.mx except above */
67 68
	IMX51_ECSPI,	/* ECSPI on i.mx51 */
	IMX53_ECSPI,	/* ECSPI on i.mx53 and later */
69 70 71 72 73 74
};

struct spi_imx_data;

struct spi_imx_devtype_data {
	void (*intctrl)(struct spi_imx_data *, int);
75
	int (*config)(struct spi_device *);
76 77
	void (*trigger)(struct spi_imx_data *);
	int (*rx_available)(struct spi_imx_data *);
78
	void (*reset)(struct spi_imx_data *);
79 80
	bool has_dmamode;
	unsigned int fifo_size;
81
	bool dynamic_burst;
82
	enum spi_imx_devtype devtype;
83 84
};

85
struct spi_imx_data {
86
	struct spi_bitbang bitbang;
87
	struct device *dev;
88 89

	struct completion xfer_done;
90
	void __iomem *base;
91 92
	unsigned long base_phys;

93 94
	struct clk *clk_per;
	struct clk *clk_ipg;
95
	unsigned long spi_clk;
96
	unsigned int spi_bus_clk;
97

98 99
	unsigned int speed_hz;
	unsigned int bits_per_word;
100
	unsigned int spi_drctl;
101

102
	unsigned int count, remainder;
103 104
	void (*tx)(struct spi_imx_data *);
	void (*rx)(struct spi_imx_data *);
105 106 107
	void *rx_buf;
	const void *tx_buf;
	unsigned int txfifo; /* number of words pushed in tx FIFO */
108 109
	unsigned int dynamic_burst, read_u32;
	unsigned int word_mask;
110

R
Robin Gong 已提交
111 112
	/* DMA */
	bool usedma;
113
	u32 wml;
R
Robin Gong 已提交
114 115 116
	struct completion dma_rx_completion;
	struct completion dma_tx_completion;

117
	const struct spi_imx_devtype_data *devtype_data;
118 119
};

120 121 122 123 124 125 126 127 128 129
static inline int is_imx27_cspi(struct spi_imx_data *d)
{
	return d->devtype_data->devtype == IMX27_CSPI;
}

static inline int is_imx35_cspi(struct spi_imx_data *d)
{
	return d->devtype_data->devtype == IMX35_CSPI;
}

130 131 132 133 134
static inline int is_imx51_ecspi(struct spi_imx_data *d)
{
	return d->devtype_data->devtype == IMX51_ECSPI;
}

135 136 137 138 139
static inline int is_imx53_ecspi(struct spi_imx_data *d)
{
	return d->devtype_data->devtype == IMX53_ECSPI;
}

140
#define MXC_SPI_BUF_RX(type)						\
141
static void spi_imx_buf_rx_##type(struct spi_imx_data *spi_imx)		\
142
{									\
143
	unsigned int val = readl(spi_imx->base + MXC_CSPIRXDATA);	\
144
									\
145 146 147
	if (spi_imx->rx_buf) {						\
		*(type *)spi_imx->rx_buf = val;				\
		spi_imx->rx_buf += sizeof(type);			\
148 149 150 151
	}								\
}

#define MXC_SPI_BUF_TX(type)						\
152
static void spi_imx_buf_tx_##type(struct spi_imx_data *spi_imx)		\
153 154 155
{									\
	type val = 0;							\
									\
156 157 158
	if (spi_imx->tx_buf) {						\
		val = *(type *)spi_imx->tx_buf;				\
		spi_imx->tx_buf += sizeof(type);			\
159 160
	}								\
									\
161
	spi_imx->count -= sizeof(type);					\
162
									\
163
	writel(val, spi_imx->base + MXC_CSPITXDATA);			\
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
}

MXC_SPI_BUF_RX(u8)
MXC_SPI_BUF_TX(u8)
MXC_SPI_BUF_RX(u16)
MXC_SPI_BUF_TX(u16)
MXC_SPI_BUF_RX(u32)
MXC_SPI_BUF_TX(u32)

/* First entry is reserved, second entry is valid only if SDHC_SPIEN is set
 * (which is currently not the case in this driver)
 */
static int mxc_clkdivs[] = {0, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192,
	256, 384, 512, 768, 1024};

/* MX21, MX27 */
180
static unsigned int spi_imx_clkdiv_1(unsigned int fin,
181
		unsigned int fspi, unsigned int max, unsigned int *fres)
182
{
183
	int i;
184 185 186

	for (i = 2; i < max; i++)
		if (fspi * mxc_clkdivs[i] >= fin)
187
			break;
188

189 190
	*fres = fin / mxc_clkdivs[i];
	return i;
191 192
}

193
/* MX1, MX31, MX35, MX51 CSPI */
194
static unsigned int spi_imx_clkdiv_2(unsigned int fin,
195
		unsigned int fspi, unsigned int *fres)
196 197 198 199 200
{
	int i, div = 4;

	for (i = 0; i < 7; i++) {
		if (fspi * div >= fin)
201
			goto out;
202 203 204
		div <<= 1;
	}

205 206 207
out:
	*fres = fin / div;
	return i;
208 209
}

S
Sascha Hauer 已提交
210
static int spi_imx_bytes_per_word(const int bits_per_word)
211
{
S
Sascha Hauer 已提交
212
	return DIV_ROUND_UP(bits_per_word, BITS_PER_BYTE);
213 214
}

R
Robin Gong 已提交
215 216 217 218
static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi,
			 struct spi_transfer *transfer)
{
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
S
Sascha Hauer 已提交
219
	unsigned int bytes_per_word, i;
220 221 222 223

	if (!master->dma_rx)
		return false;

S
Sascha Hauer 已提交
224
	bytes_per_word = spi_imx_bytes_per_word(transfer->bits_per_word);
225

S
Sascha Hauer 已提交
226
	if (bytes_per_word != 1 && bytes_per_word != 2 && bytes_per_word != 4)
227 228
		return false;

229
	for (i = spi_imx->devtype_data->fifo_size / 2; i > 0; i--) {
S
Sascha Hauer 已提交
230
		if (!(transfer->len % (i * bytes_per_word)))
231 232
			break;
	}
233

234
	if (i == 0)
235
		return false;
R
Robin Gong 已提交
236

237
	spi_imx->wml = i;
238
	spi_imx->dynamic_burst = 0;
239

240
	return true;
R
Robin Gong 已提交
241 242
}

243 244 245
#define MX51_ECSPI_CTRL		0x08
#define MX51_ECSPI_CTRL_ENABLE		(1 <<  0)
#define MX51_ECSPI_CTRL_XCH		(1 <<  2)
R
Robin Gong 已提交
246
#define MX51_ECSPI_CTRL_SMC		(1 << 3)
247
#define MX51_ECSPI_CTRL_MODE_MASK	(0xf << 4)
248
#define MX51_ECSPI_CTRL_DRCTL(drctl)	((drctl) << 16)
249 250 251 252
#define MX51_ECSPI_CTRL_POSTDIV_OFFSET	8
#define MX51_ECSPI_CTRL_PREDIV_OFFSET	12
#define MX51_ECSPI_CTRL_CS(cs)		((cs) << 18)
#define MX51_ECSPI_CTRL_BL_OFFSET	20
253
#define MX51_ECSPI_CTRL_BL_MASK		(0xfff << 20)
254 255 256 257 258 259

#define MX51_ECSPI_CONFIG	0x0c
#define MX51_ECSPI_CONFIG_SCLKPHA(cs)	(1 << ((cs) +  0))
#define MX51_ECSPI_CONFIG_SCLKPOL(cs)	(1 << ((cs) +  4))
#define MX51_ECSPI_CONFIG_SBBCTRL(cs)	(1 << ((cs) +  8))
#define MX51_ECSPI_CONFIG_SSBPOL(cs)	(1 << ((cs) + 12))
260
#define MX51_ECSPI_CONFIG_SCLKCTL(cs)	(1 << ((cs) + 20))
261 262 263 264 265

#define MX51_ECSPI_INT		0x10
#define MX51_ECSPI_INT_TEEN		(1 <<  0)
#define MX51_ECSPI_INT_RREN		(1 <<  3)

R
Robin Gong 已提交
266
#define MX51_ECSPI_DMA      0x14
267 268 269
#define MX51_ECSPI_DMA_TX_WML(wml)	((wml) & 0x3f)
#define MX51_ECSPI_DMA_RX_WML(wml)	(((wml) & 0x3f) << 16)
#define MX51_ECSPI_DMA_RXT_WML(wml)	(((wml) & 0x3f) << 24)
R
Robin Gong 已提交
270

271 272 273
#define MX51_ECSPI_DMA_TEDEN		(1 << 7)
#define MX51_ECSPI_DMA_RXDEN		(1 << 23)
#define MX51_ECSPI_DMA_RXTDEN		(1 << 31)
R
Robin Gong 已提交
274

275 276
#define MX51_ECSPI_STAT		0x18
#define MX51_ECSPI_STAT_RR		(1 <<  3)
277

278 279 280
#define MX51_ECSPI_TESTREG	0x20
#define MX51_ECSPI_TESTREG_LBC	BIT(31)

281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376
static void spi_imx_buf_rx_swap_u32(struct spi_imx_data *spi_imx)
{
	unsigned int val = readl(spi_imx->base + MXC_CSPIRXDATA);
	unsigned int bytes_per_word;

	if (spi_imx->rx_buf) {
#ifdef __LITTLE_ENDIAN
		bytes_per_word = spi_imx_bytes_per_word(spi_imx->bits_per_word);
		if (bytes_per_word == 1)
			val = cpu_to_be32(val);
		else if (bytes_per_word == 2)
			val = (val << 16) | (val >> 16);
#endif
		val &= spi_imx->word_mask;
		*(u32 *)spi_imx->rx_buf = val;
		spi_imx->rx_buf += sizeof(u32);
	}
}

static void spi_imx_buf_rx_swap(struct spi_imx_data *spi_imx)
{
	unsigned int bytes_per_word;

	bytes_per_word = spi_imx_bytes_per_word(spi_imx->bits_per_word);
	if (spi_imx->read_u32) {
		spi_imx_buf_rx_swap_u32(spi_imx);
		return;
	}

	if (bytes_per_word == 1)
		spi_imx_buf_rx_u8(spi_imx);
	else if (bytes_per_word == 2)
		spi_imx_buf_rx_u16(spi_imx);
}

static void spi_imx_buf_tx_swap_u32(struct spi_imx_data *spi_imx)
{
	u32 val = 0;
	unsigned int bytes_per_word;

	if (spi_imx->tx_buf) {
		val = *(u32 *)spi_imx->tx_buf;
		val &= spi_imx->word_mask;
		spi_imx->tx_buf += sizeof(u32);
	}

	spi_imx->count -= sizeof(u32);
#ifdef __LITTLE_ENDIAN
	bytes_per_word = spi_imx_bytes_per_word(spi_imx->bits_per_word);

	if (bytes_per_word == 1)
		val = cpu_to_be32(val);
	else if (bytes_per_word == 2)
		val = (val << 16) | (val >> 16);
#endif
	writel(val, spi_imx->base + MXC_CSPITXDATA);
}

static void spi_imx_buf_tx_swap(struct spi_imx_data *spi_imx)
{
	u32 ctrl, val;
	unsigned int bytes_per_word;

	if (spi_imx->count == spi_imx->remainder) {
		ctrl = readl(spi_imx->base + MX51_ECSPI_CTRL);
		ctrl &= ~MX51_ECSPI_CTRL_BL_MASK;
		if (spi_imx->count > MX51_ECSPI_CTRL_MAX_BURST) {
			spi_imx->remainder = spi_imx->count %
					     MX51_ECSPI_CTRL_MAX_BURST;
			val = MX51_ECSPI_CTRL_MAX_BURST * 8 - 1;
		} else if (spi_imx->count >= sizeof(u32)) {
			spi_imx->remainder = spi_imx->count % sizeof(u32);
			val = (spi_imx->count - spi_imx->remainder) * 8 - 1;
		} else {
			spi_imx->remainder = 0;
			val = spi_imx->bits_per_word - 1;
			spi_imx->read_u32 = 0;
		}

		ctrl |= (val << MX51_ECSPI_CTRL_BL_OFFSET);
		writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);
	}

	if (spi_imx->count >= sizeof(u32)) {
		spi_imx_buf_tx_swap_u32(spi_imx);
		return;
	}

	bytes_per_word = spi_imx_bytes_per_word(spi_imx->bits_per_word);

	if (bytes_per_word == 1)
		spi_imx_buf_tx_u8(spi_imx);
	else if (bytes_per_word == 2)
		spi_imx_buf_tx_u16(spi_imx);
}

377
/* MX51 eCSPI */
378 379
static unsigned int mx51_ecspi_clkdiv(struct spi_imx_data *spi_imx,
				      unsigned int fspi, unsigned int *fres)
380 381 382 383 384 385
{
	/*
	 * there are two 4-bit dividers, the pre-divider divides by
	 * $pre, the post-divider by 2^$post
	 */
	unsigned int pre, post;
386
	unsigned int fin = spi_imx->spi_clk;
387 388 389 390 391 392 393 394 395 396 397 398

	if (unlikely(fspi > fin))
		return 0;

	post = fls(fin) - fls(fspi);
	if (fin > fspi << post)
		post++;

	/* now we have: (fin <= fspi << post) with post being minimal */

	post = max(4U, post) - 4;
	if (unlikely(post > 0xf)) {
399 400
		dev_err(spi_imx->dev, "cannot set clock freq: %u (base freq: %u)\n",
				fspi, fin);
401 402 403 404 405
		return 0xff;
	}

	pre = DIV_ROUND_UP(fin, fspi << post) - 1;

406
	dev_dbg(spi_imx->dev, "%s: fin: %u, fspi: %u, post: %u, pre: %u\n",
407
			__func__, fin, fspi, post, pre);
408 409 410 411

	/* Resulting frequency for the SCLK line. */
	*fres = (fin / (pre + 1)) >> post;

412 413
	return (pre << MX51_ECSPI_CTRL_PREDIV_OFFSET) |
		(post << MX51_ECSPI_CTRL_POSTDIV_OFFSET);
414 415
}

416
static void mx51_ecspi_intctrl(struct spi_imx_data *spi_imx, int enable)
417 418 419 420
{
	unsigned val = 0;

	if (enable & MXC_INT_TE)
421
		val |= MX51_ECSPI_INT_TEEN;
422 423

	if (enable & MXC_INT_RR)
424
		val |= MX51_ECSPI_INT_RREN;
425

426
	writel(val, spi_imx->base + MX51_ECSPI_INT);
427 428
}

429
static void mx51_ecspi_trigger(struct spi_imx_data *spi_imx)
430
{
431
	u32 reg;
R
Robin Gong 已提交
432

433 434
	reg = readl(spi_imx->base + MX51_ECSPI_CTRL);
	reg |= MX51_ECSPI_CTRL_XCH;
435
	writel(reg, spi_imx->base + MX51_ECSPI_CTRL);
436 437
}

438
static int mx51_ecspi_config(struct spi_device *spi)
439
{
440
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
441
	u32 ctrl = MX51_ECSPI_CTRL_ENABLE;
442
	u32 clk = spi_imx->speed_hz, delay, reg;
443
	u32 cfg = readl(spi_imx->base + MX51_ECSPI_CONFIG);
444

445 446 447 448 449 450 451
	/*
	 * The hardware seems to have a race condition when changing modes. The
	 * current assumption is that the selection of the channel arrives
	 * earlier in the hardware than the mode bits when they are written at
	 * the same time.
	 * So set master mode for all channels as we do not support slave mode.
	 */
452
	ctrl |= MX51_ECSPI_CTRL_MODE_MASK;
453

454 455 456 457 458 459
	/*
	 * Enable SPI_RDY handling (falling edge/level triggered).
	 */
	if (spi->mode & SPI_READY)
		ctrl |= MX51_ECSPI_CTRL_DRCTL(spi_imx->spi_drctl);

460
	/* set clock speed */
461
	ctrl |= mx51_ecspi_clkdiv(spi_imx, spi_imx->speed_hz, &clk);
462
	spi_imx->spi_bus_clk = clk;
463 464

	/* set chip select to use */
465
	ctrl |= MX51_ECSPI_CTRL_CS(spi->chip_select);
466

467
	ctrl |= (spi_imx->bits_per_word - 1) << MX51_ECSPI_CTRL_BL_OFFSET;
468

469
	cfg |= MX51_ECSPI_CONFIG_SBBCTRL(spi->chip_select);
470

471
	if (spi->mode & SPI_CPHA)
472
		cfg |= MX51_ECSPI_CONFIG_SCLKPHA(spi->chip_select);
473
	else
474
		cfg &= ~MX51_ECSPI_CONFIG_SCLKPHA(spi->chip_select);
475

476
	if (spi->mode & SPI_CPOL) {
477 478
		cfg |= MX51_ECSPI_CONFIG_SCLKPOL(spi->chip_select);
		cfg |= MX51_ECSPI_CONFIG_SCLKCTL(spi->chip_select);
479
	} else {
480 481
		cfg &= ~MX51_ECSPI_CONFIG_SCLKPOL(spi->chip_select);
		cfg &= ~MX51_ECSPI_CONFIG_SCLKCTL(spi->chip_select);
482
	}
483
	if (spi->mode & SPI_CS_HIGH)
484
		cfg |= MX51_ECSPI_CONFIG_SSBPOL(spi->chip_select);
485
	else
486
		cfg &= ~MX51_ECSPI_CONFIG_SSBPOL(spi->chip_select);
487

488 489 490
	if (spi_imx->usedma)
		ctrl |= MX51_ECSPI_CTRL_SMC;

491 492 493
	/* CTRL register always go first to bring out controller from reset */
	writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);

494
	reg = readl(spi_imx->base + MX51_ECSPI_TESTREG);
495
	if (spi->mode & SPI_LOOP)
496 497 498 499 500
		reg |= MX51_ECSPI_TESTREG_LBC;
	else
		reg &= ~MX51_ECSPI_TESTREG_LBC;
	writel(reg, spi_imx->base + MX51_ECSPI_TESTREG);

501
	writel(cfg, spi_imx->base + MX51_ECSPI_CONFIG);
502

503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519
	/*
	 * Wait until the changes in the configuration register CONFIGREG
	 * propagate into the hardware. It takes exactly one tick of the
	 * SCLK clock, but we will wait two SCLK clock just to be sure. The
	 * effect of the delay it takes for the hardware to apply changes
	 * is noticable if the SCLK clock run very slow. In such a case, if
	 * the polarity of SCLK should be inverted, the GPIO ChipSelect might
	 * be asserted before the SCLK polarity changes, which would disrupt
	 * the SPI communication as the device on the other end would consider
	 * the change of SCLK polarity as a clock tick already.
	 */
	delay = (2 * 1000000) / clk;
	if (likely(delay < 10))	/* SCLK is faster than 100 kHz */
		udelay(delay);
	else			/* SCLK is _very_ slow */
		usleep_range(delay, delay + 10);

R
Robin Gong 已提交
520 521 522 523
	/*
	 * Configure the DMA register: setup the watermark
	 * and enable DMA request.
	 */
524

525 526 527
	writel(MX51_ECSPI_DMA_RX_WML(spi_imx->wml) |
		MX51_ECSPI_DMA_TX_WML(spi_imx->wml) |
		MX51_ECSPI_DMA_RXT_WML(spi_imx->wml) |
528 529
		MX51_ECSPI_DMA_TEDEN | MX51_ECSPI_DMA_RXDEN |
		MX51_ECSPI_DMA_RXTDEN, spi_imx->base + MX51_ECSPI_DMA);
R
Robin Gong 已提交
530

531 532 533
	return 0;
}

534
static int mx51_ecspi_rx_available(struct spi_imx_data *spi_imx)
535
{
536
	return readl(spi_imx->base + MX51_ECSPI_STAT) & MX51_ECSPI_STAT_RR;
537 538
}

539
static void mx51_ecspi_reset(struct spi_imx_data *spi_imx)
540 541
{
	/* drain receive buffer */
542
	while (mx51_ecspi_rx_available(spi_imx))
543 544 545
		readl(spi_imx->base + MXC_CSPIRXDATA);
}

546 547 548 549 550 551
#define MX31_INTREG_TEEN	(1 << 0)
#define MX31_INTREG_RREN	(1 << 3)

#define MX31_CSPICTRL_ENABLE	(1 << 0)
#define MX31_CSPICTRL_MASTER	(1 << 1)
#define MX31_CSPICTRL_XCH	(1 << 2)
M
Martin Kaiser 已提交
552
#define MX31_CSPICTRL_SMC	(1 << 3)
553 554 555 556 557 558 559 560 561 562
#define MX31_CSPICTRL_POL	(1 << 4)
#define MX31_CSPICTRL_PHA	(1 << 5)
#define MX31_CSPICTRL_SSCTL	(1 << 6)
#define MX31_CSPICTRL_SSPOL	(1 << 7)
#define MX31_CSPICTRL_BC_SHIFT	8
#define MX35_CSPICTRL_BL_SHIFT	20
#define MX31_CSPICTRL_CS_SHIFT	24
#define MX35_CSPICTRL_CS_SHIFT	12
#define MX31_CSPICTRL_DR_SHIFT	16

M
Martin Kaiser 已提交
563 564 565 566
#define MX31_CSPI_DMAREG	0x10
#define MX31_DMAREG_RH_DEN	(1<<4)
#define MX31_DMAREG_TH_DEN	(1<<1)

567 568 569
#define MX31_CSPISTATUS		0x14
#define MX31_STATUS_RR		(1 << 3)

570 571 572
#define MX31_CSPI_TESTREG	0x1C
#define MX31_TEST_LBC		(1 << 14)

573 574 575 576
/* These functions also work for the i.MX35, but be aware that
 * the i.MX35 has a slightly different register layout for bits
 * we do not use here.
 */
577
static void mx31_intctrl(struct spi_imx_data *spi_imx, int enable)
578 579 580 581 582 583 584 585
{
	unsigned int val = 0;

	if (enable & MXC_INT_TE)
		val |= MX31_INTREG_TEEN;
	if (enable & MXC_INT_RR)
		val |= MX31_INTREG_RREN;

586
	writel(val, spi_imx->base + MXC_CSPIINT);
587 588
}

589
static void mx31_trigger(struct spi_imx_data *spi_imx)
590 591 592
{
	unsigned int reg;

593
	reg = readl(spi_imx->base + MXC_CSPICTRL);
594
	reg |= MX31_CSPICTRL_XCH;
595
	writel(reg, spi_imx->base + MXC_CSPICTRL);
596 597
}

598
static int mx31_config(struct spi_device *spi)
599
{
600
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
601
	unsigned int reg = MX31_CSPICTRL_ENABLE | MX31_CSPICTRL_MASTER;
602
	unsigned int clk;
603

604
	reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, spi_imx->speed_hz, &clk) <<
605
		MX31_CSPICTRL_DR_SHIFT;
606
	spi_imx->spi_bus_clk = clk;
607

608
	if (is_imx35_cspi(spi_imx)) {
609
		reg |= (spi_imx->bits_per_word - 1) << MX35_CSPICTRL_BL_SHIFT;
610 611
		reg |= MX31_CSPICTRL_SSCTL;
	} else {
612
		reg |= (spi_imx->bits_per_word - 1) << MX31_CSPICTRL_BC_SHIFT;
613
	}
614

615
	if (spi->mode & SPI_CPHA)
616
		reg |= MX31_CSPICTRL_PHA;
617
	if (spi->mode & SPI_CPOL)
618
		reg |= MX31_CSPICTRL_POL;
619
	if (spi->mode & SPI_CS_HIGH)
620
		reg |= MX31_CSPICTRL_SSPOL;
621 622
	if (spi->cs_gpio < 0)
		reg |= (spi->cs_gpio + 32) <<
623 624
			(is_imx35_cspi(spi_imx) ? MX35_CSPICTRL_CS_SHIFT :
						  MX31_CSPICTRL_CS_SHIFT);
625

M
Martin Kaiser 已提交
626 627 628
	if (spi_imx->usedma)
		reg |= MX31_CSPICTRL_SMC;

629 630
	writel(reg, spi_imx->base + MXC_CSPICTRL);

631 632 633 634 635 636 637
	reg = readl(spi_imx->base + MX31_CSPI_TESTREG);
	if (spi->mode & SPI_LOOP)
		reg |= MX31_TEST_LBC;
	else
		reg &= ~MX31_TEST_LBC;
	writel(reg, spi_imx->base + MX31_CSPI_TESTREG);

M
Martin Kaiser 已提交
638 639 640 641 642 643 644
	if (spi_imx->usedma) {
		/* configure DMA requests when RXFIFO is half full and
		   when TXFIFO is half empty */
		writel(MX31_DMAREG_RH_DEN | MX31_DMAREG_TH_DEN,
			spi_imx->base + MX31_CSPI_DMAREG);
	}

645 646 647
	return 0;
}

648
static int mx31_rx_available(struct spi_imx_data *spi_imx)
649
{
650
	return readl(spi_imx->base + MX31_CSPISTATUS) & MX31_STATUS_RR;
651 652
}

653
static void mx31_reset(struct spi_imx_data *spi_imx)
654 655
{
	/* drain receive buffer */
656
	while (readl(spi_imx->base + MX31_CSPISTATUS) & MX31_STATUS_RR)
657 658 659
		readl(spi_imx->base + MXC_CSPIRXDATA);
}

660 661 662 663 664 665 666 667 668 669 670 671 672
#define MX21_INTREG_RR		(1 << 4)
#define MX21_INTREG_TEEN	(1 << 9)
#define MX21_INTREG_RREN	(1 << 13)

#define MX21_CSPICTRL_POL	(1 << 5)
#define MX21_CSPICTRL_PHA	(1 << 6)
#define MX21_CSPICTRL_SSPOL	(1 << 8)
#define MX21_CSPICTRL_XCH	(1 << 9)
#define MX21_CSPICTRL_ENABLE	(1 << 10)
#define MX21_CSPICTRL_MASTER	(1 << 11)
#define MX21_CSPICTRL_DR_SHIFT	14
#define MX21_CSPICTRL_CS_SHIFT	19

673
static void mx21_intctrl(struct spi_imx_data *spi_imx, int enable)
674 675 676 677
{
	unsigned int val = 0;

	if (enable & MXC_INT_TE)
678
		val |= MX21_INTREG_TEEN;
679
	if (enable & MXC_INT_RR)
680
		val |= MX21_INTREG_RREN;
681

682
	writel(val, spi_imx->base + MXC_CSPIINT);
683 684
}

685
static void mx21_trigger(struct spi_imx_data *spi_imx)
686 687 688
{
	unsigned int reg;

689
	reg = readl(spi_imx->base + MXC_CSPICTRL);
690
	reg |= MX21_CSPICTRL_XCH;
691
	writel(reg, spi_imx->base + MXC_CSPICTRL);
692 693
}

694
static int mx21_config(struct spi_device *spi)
695
{
696
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
697
	unsigned int reg = MX21_CSPICTRL_ENABLE | MX21_CSPICTRL_MASTER;
698
	unsigned int max = is_imx27_cspi(spi_imx) ? 16 : 18;
699 700
	unsigned int clk;

701
	reg |= spi_imx_clkdiv_1(spi_imx->spi_clk, spi_imx->speed_hz, max, &clk)
702 703
		<< MX21_CSPICTRL_DR_SHIFT;
	spi_imx->spi_bus_clk = clk;
704

705
	reg |= spi_imx->bits_per_word - 1;
706

707
	if (spi->mode & SPI_CPHA)
708
		reg |= MX21_CSPICTRL_PHA;
709
	if (spi->mode & SPI_CPOL)
710
		reg |= MX21_CSPICTRL_POL;
711
	if (spi->mode & SPI_CS_HIGH)
712
		reg |= MX21_CSPICTRL_SSPOL;
713 714
	if (spi->cs_gpio < 0)
		reg |= (spi->cs_gpio + 32) << MX21_CSPICTRL_CS_SHIFT;
715

716
	writel(reg, spi_imx->base + MXC_CSPICTRL);
717 718 719 720

	return 0;
}

721
static int mx21_rx_available(struct spi_imx_data *spi_imx)
722
{
723
	return readl(spi_imx->base + MXC_CSPIINT) & MX21_INTREG_RR;
724 725
}

726
static void mx21_reset(struct spi_imx_data *spi_imx)
727 728 729 730
{
	writel(1, spi_imx->base + MXC_RESET);
}

731 732 733 734 735 736 737 738 739 740 741
#define MX1_INTREG_RR		(1 << 3)
#define MX1_INTREG_TEEN		(1 << 8)
#define MX1_INTREG_RREN		(1 << 11)

#define MX1_CSPICTRL_POL	(1 << 4)
#define MX1_CSPICTRL_PHA	(1 << 5)
#define MX1_CSPICTRL_XCH	(1 << 8)
#define MX1_CSPICTRL_ENABLE	(1 << 9)
#define MX1_CSPICTRL_MASTER	(1 << 10)
#define MX1_CSPICTRL_DR_SHIFT	13

742
static void mx1_intctrl(struct spi_imx_data *spi_imx, int enable)
743 744 745 746 747 748 749 750
{
	unsigned int val = 0;

	if (enable & MXC_INT_TE)
		val |= MX1_INTREG_TEEN;
	if (enable & MXC_INT_RR)
		val |= MX1_INTREG_RREN;

751
	writel(val, spi_imx->base + MXC_CSPIINT);
752 753
}

754
static void mx1_trigger(struct spi_imx_data *spi_imx)
755 756 757
{
	unsigned int reg;

758
	reg = readl(spi_imx->base + MXC_CSPICTRL);
759
	reg |= MX1_CSPICTRL_XCH;
760
	writel(reg, spi_imx->base + MXC_CSPICTRL);
761 762
}

763
static int mx1_config(struct spi_device *spi)
764
{
765
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
766
	unsigned int reg = MX1_CSPICTRL_ENABLE | MX1_CSPICTRL_MASTER;
767
	unsigned int clk;
768

769
	reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, spi_imx->speed_hz, &clk) <<
770
		MX1_CSPICTRL_DR_SHIFT;
771 772
	spi_imx->spi_bus_clk = clk;

773
	reg |= spi_imx->bits_per_word - 1;
774

775
	if (spi->mode & SPI_CPHA)
776
		reg |= MX1_CSPICTRL_PHA;
777
	if (spi->mode & SPI_CPOL)
778 779
		reg |= MX1_CSPICTRL_POL;

780
	writel(reg, spi_imx->base + MXC_CSPICTRL);
781 782 783 784

	return 0;
}

785
static int mx1_rx_available(struct spi_imx_data *spi_imx)
786
{
787
	return readl(spi_imx->base + MXC_CSPIINT) & MX1_INTREG_RR;
788 789
}

790
static void mx1_reset(struct spi_imx_data *spi_imx)
791 792 793 794
{
	writel(1, spi_imx->base + MXC_RESET);
}

795 796 797 798 799 800
static struct spi_imx_devtype_data imx1_cspi_devtype_data = {
	.intctrl = mx1_intctrl,
	.config = mx1_config,
	.trigger = mx1_trigger,
	.rx_available = mx1_rx_available,
	.reset = mx1_reset,
801 802
	.fifo_size = 8,
	.has_dmamode = false,
803
	.dynamic_burst = false,
804 805 806 807 808 809 810 811 812
	.devtype = IMX1_CSPI,
};

static struct spi_imx_devtype_data imx21_cspi_devtype_data = {
	.intctrl = mx21_intctrl,
	.config = mx21_config,
	.trigger = mx21_trigger,
	.rx_available = mx21_rx_available,
	.reset = mx21_reset,
813 814
	.fifo_size = 8,
	.has_dmamode = false,
815
	.dynamic_burst = false,
816 817 818 819 820 821 822 823 824 825
	.devtype = IMX21_CSPI,
};

static struct spi_imx_devtype_data imx27_cspi_devtype_data = {
	/* i.mx27 cspi shares the functions with i.mx21 one */
	.intctrl = mx21_intctrl,
	.config = mx21_config,
	.trigger = mx21_trigger,
	.rx_available = mx21_rx_available,
	.reset = mx21_reset,
826 827
	.fifo_size = 8,
	.has_dmamode = false,
828
	.dynamic_burst = false,
829 830 831 832 833 834 835 836 837
	.devtype = IMX27_CSPI,
};

static struct spi_imx_devtype_data imx31_cspi_devtype_data = {
	.intctrl = mx31_intctrl,
	.config = mx31_config,
	.trigger = mx31_trigger,
	.rx_available = mx31_rx_available,
	.reset = mx31_reset,
838 839
	.fifo_size = 8,
	.has_dmamode = false,
840
	.dynamic_burst = false,
841 842 843 844 845 846 847 848 849 850
	.devtype = IMX31_CSPI,
};

static struct spi_imx_devtype_data imx35_cspi_devtype_data = {
	/* i.mx35 and later cspi shares the functions with i.mx31 one */
	.intctrl = mx31_intctrl,
	.config = mx31_config,
	.trigger = mx31_trigger,
	.rx_available = mx31_rx_available,
	.reset = mx31_reset,
851 852
	.fifo_size = 8,
	.has_dmamode = true,
853
	.dynamic_burst = false,
854 855 856 857 858 859 860 861 862
	.devtype = IMX35_CSPI,
};

static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {
	.intctrl = mx51_ecspi_intctrl,
	.config = mx51_ecspi_config,
	.trigger = mx51_ecspi_trigger,
	.rx_available = mx51_ecspi_rx_available,
	.reset = mx51_ecspi_reset,
863 864
	.fifo_size = 64,
	.has_dmamode = true,
865
	.dynamic_burst = true,
866 867 868
	.devtype = IMX51_ECSPI,
};

869 870 871 872 873 874 875 876 877 878 879
static struct spi_imx_devtype_data imx53_ecspi_devtype_data = {
	.intctrl = mx51_ecspi_intctrl,
	.config = mx51_ecspi_config,
	.trigger = mx51_ecspi_trigger,
	.rx_available = mx51_ecspi_rx_available,
	.reset = mx51_ecspi_reset,
	.fifo_size = 64,
	.has_dmamode = true,
	.devtype = IMX53_ECSPI,
};

880
static const struct platform_device_id spi_imx_devtype[] = {
881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898
	{
		.name = "imx1-cspi",
		.driver_data = (kernel_ulong_t) &imx1_cspi_devtype_data,
	}, {
		.name = "imx21-cspi",
		.driver_data = (kernel_ulong_t) &imx21_cspi_devtype_data,
	}, {
		.name = "imx27-cspi",
		.driver_data = (kernel_ulong_t) &imx27_cspi_devtype_data,
	}, {
		.name = "imx31-cspi",
		.driver_data = (kernel_ulong_t) &imx31_cspi_devtype_data,
	}, {
		.name = "imx35-cspi",
		.driver_data = (kernel_ulong_t) &imx35_cspi_devtype_data,
	}, {
		.name = "imx51-ecspi",
		.driver_data = (kernel_ulong_t) &imx51_ecspi_devtype_data,
899 900 901
	}, {
		.name = "imx53-ecspi",
		.driver_data = (kernel_ulong_t) &imx53_ecspi_devtype_data,
902 903 904
	}, {
		/* sentinel */
	}
905 906
};

907 908 909 910 911 912 913
static const struct of_device_id spi_imx_dt_ids[] = {
	{ .compatible = "fsl,imx1-cspi", .data = &imx1_cspi_devtype_data, },
	{ .compatible = "fsl,imx21-cspi", .data = &imx21_cspi_devtype_data, },
	{ .compatible = "fsl,imx27-cspi", .data = &imx27_cspi_devtype_data, },
	{ .compatible = "fsl,imx31-cspi", .data = &imx31_cspi_devtype_data, },
	{ .compatible = "fsl,imx35-cspi", .data = &imx35_cspi_devtype_data, },
	{ .compatible = "fsl,imx51-ecspi", .data = &imx51_ecspi_devtype_data, },
914
	{ .compatible = "fsl,imx53-ecspi", .data = &imx53_ecspi_devtype_data, },
915 916
	{ /* sentinel */ }
};
917
MODULE_DEVICE_TABLE(of, spi_imx_dt_ids);
918

919
static void spi_imx_chipselect(struct spi_device *spi, int is_active)
920
{
921 922
	int active = is_active != BITBANG_CS_INACTIVE;
	int dev_is_lowactive = !(spi->mode & SPI_CS_HIGH);
923

O
Oleksij Rempel 已提交
924 925 926
	if (spi->mode & SPI_NO_CS)
		return;

927
	if (!gpio_is_valid(spi->cs_gpio))
928 929
		return;

930
	gpio_set_value(spi->cs_gpio, dev_is_lowactive ^ active);
931 932
}

933
static void spi_imx_push(struct spi_imx_data *spi_imx)
934
{
935
	while (spi_imx->txfifo < spi_imx->devtype_data->fifo_size) {
936
		if (!spi_imx->count)
937
			break;
938 939
		if (spi_imx->txfifo && (spi_imx->count == spi_imx->remainder))
			break;
940 941
		spi_imx->tx(spi_imx);
		spi_imx->txfifo++;
942 943
	}

944
	spi_imx->devtype_data->trigger(spi_imx);
945 946
}

947
static irqreturn_t spi_imx_isr(int irq, void *dev_id)
948
{
949
	struct spi_imx_data *spi_imx = dev_id;
950

951
	while (spi_imx->devtype_data->rx_available(spi_imx)) {
952 953
		spi_imx->rx(spi_imx);
		spi_imx->txfifo--;
954 955
	}

956 957
	if (spi_imx->count) {
		spi_imx_push(spi_imx);
958 959 960
		return IRQ_HANDLED;
	}

961
	if (spi_imx->txfifo) {
962 963 964
		/* No data left to push, but still waiting for rx data,
		 * enable receive data available interrupt.
		 */
965
		spi_imx->devtype_data->intctrl(
966
				spi_imx, MXC_INT_RR);
967 968 969
		return IRQ_HANDLED;
	}

970
	spi_imx->devtype_data->intctrl(spi_imx, 0);
971
	complete(&spi_imx->xfer_done);
972 973 974 975

	return IRQ_HANDLED;
}

976
static int spi_imx_dma_configure(struct spi_master *master)
977 978 979 980 981 982
{
	int ret;
	enum dma_slave_buswidth buswidth;
	struct dma_slave_config rx = {}, tx = {};
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);

983
	switch (spi_imx_bytes_per_word(spi_imx->bits_per_word)) {
984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019
	case 4:
		buswidth = DMA_SLAVE_BUSWIDTH_4_BYTES;
		break;
	case 2:
		buswidth = DMA_SLAVE_BUSWIDTH_2_BYTES;
		break;
	case 1:
		buswidth = DMA_SLAVE_BUSWIDTH_1_BYTE;
		break;
	default:
		return -EINVAL;
	}

	tx.direction = DMA_MEM_TO_DEV;
	tx.dst_addr = spi_imx->base_phys + MXC_CSPITXDATA;
	tx.dst_addr_width = buswidth;
	tx.dst_maxburst = spi_imx->wml;
	ret = dmaengine_slave_config(master->dma_tx, &tx);
	if (ret) {
		dev_err(spi_imx->dev, "TX dma configuration failed with %d\n", ret);
		return ret;
	}

	rx.direction = DMA_DEV_TO_MEM;
	rx.src_addr = spi_imx->base_phys + MXC_CSPIRXDATA;
	rx.src_addr_width = buswidth;
	rx.src_maxburst = spi_imx->wml;
	ret = dmaengine_slave_config(master->dma_rx, &rx);
	if (ret) {
		dev_err(spi_imx->dev, "RX dma configuration failed with %d\n", ret);
		return ret;
	}

	return 0;
}

1020
static int spi_imx_setupxfer(struct spi_device *spi,
1021 1022
				 struct spi_transfer *t)
{
1023
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
1024
	int ret;
1025

1026 1027 1028
	if (!t)
		return 0;

1029 1030
	spi_imx->bits_per_word = t->bits_per_word;
	spi_imx->speed_hz  = t->speed_hz;
1031

1032
	/* Initialize the functions for transfer */
1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052
	if (spi_imx->devtype_data->dynamic_burst) {
		u32 mask;

		spi_imx->dynamic_burst = 0;
		spi_imx->remainder = 0;
		spi_imx->read_u32  = 1;

		mask = (1 << spi_imx->bits_per_word) - 1;
		spi_imx->rx = spi_imx_buf_rx_swap;
		spi_imx->tx = spi_imx_buf_tx_swap;
		spi_imx->dynamic_burst = 1;
		spi_imx->remainder = t->len;

		if (spi_imx->bits_per_word <= 8)
			spi_imx->word_mask = mask << 24 | mask << 16
					     | mask << 8 | mask;
		else if (spi_imx->bits_per_word <= 16)
			spi_imx->word_mask = mask << 16 | mask;
		else
			spi_imx->word_mask = mask;
1053
	} else {
1054 1055 1056 1057 1058 1059 1060 1061 1062 1063
		if (spi_imx->bits_per_word <= 8) {
			spi_imx->rx = spi_imx_buf_rx_u8;
			spi_imx->tx = spi_imx_buf_tx_u8;
		} else if (spi_imx->bits_per_word <= 16) {
			spi_imx->rx = spi_imx_buf_rx_u16;
			spi_imx->tx = spi_imx_buf_tx_u16;
		} else {
			spi_imx->rx = spi_imx_buf_rx_u32;
			spi_imx->tx = spi_imx_buf_tx_u32;
		}
1064
	}
1065

1066 1067 1068 1069 1070
	if (spi_imx_can_dma(spi_imx->bitbang.master, spi, t))
		spi_imx->usedma = 1;
	else
		spi_imx->usedma = 0;

1071
	if (spi_imx->usedma) {
1072
		ret = spi_imx_dma_configure(spi->master);
1073 1074 1075 1076
		if (ret)
			return ret;
	}

1077
	spi_imx->devtype_data->config(spi);
1078 1079 1080 1081

	return 0;
}

R
Robin Gong 已提交
1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097
static void spi_imx_sdma_exit(struct spi_imx_data *spi_imx)
{
	struct spi_master *master = spi_imx->bitbang.master;

	if (master->dma_rx) {
		dma_release_channel(master->dma_rx);
		master->dma_rx = NULL;
	}

	if (master->dma_tx) {
		dma_release_channel(master->dma_tx);
		master->dma_tx = NULL;
	}
}

static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
1098
			     struct spi_master *master)
R
Robin Gong 已提交
1099 1100 1101
{
	int ret;

R
Robin Gong 已提交
1102 1103 1104 1105
	/* use pio mode for i.mx6dl chip TKT238285 */
	if (of_machine_is_compatible("fsl,imx6dl"))
		return 0;

1106
	spi_imx->wml = spi_imx->devtype_data->fifo_size / 2;
1107

R
Robin Gong 已提交
1108
	/* Prepare for TX DMA: */
1109 1110 1111 1112 1113
	master->dma_tx = dma_request_slave_channel_reason(dev, "tx");
	if (IS_ERR(master->dma_tx)) {
		ret = PTR_ERR(master->dma_tx);
		dev_dbg(dev, "can't get the TX DMA channel, error %d!\n", ret);
		master->dma_tx = NULL;
R
Robin Gong 已提交
1114 1115 1116 1117
		goto err;
	}

	/* Prepare for RX : */
1118 1119 1120 1121 1122
	master->dma_rx = dma_request_slave_channel_reason(dev, "rx");
	if (IS_ERR(master->dma_rx)) {
		ret = PTR_ERR(master->dma_rx);
		dev_dbg(dev, "can't get the RX DMA channel, error %d\n", ret);
		master->dma_rx = NULL;
R
Robin Gong 已提交
1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152
		goto err;
	}

	init_completion(&spi_imx->dma_rx_completion);
	init_completion(&spi_imx->dma_tx_completion);
	master->can_dma = spi_imx_can_dma;
	master->max_dma_len = MAX_SDMA_BD_BYTES;
	spi_imx->bitbang.master->flags = SPI_MASTER_MUST_RX |
					 SPI_MASTER_MUST_TX;

	return 0;
err:
	spi_imx_sdma_exit(spi_imx);
	return ret;
}

static void spi_imx_dma_rx_callback(void *cookie)
{
	struct spi_imx_data *spi_imx = (struct spi_imx_data *)cookie;

	complete(&spi_imx->dma_rx_completion);
}

static void spi_imx_dma_tx_callback(void *cookie)
{
	struct spi_imx_data *spi_imx = (struct spi_imx_data *)cookie;

	complete(&spi_imx->dma_tx_completion);
}

1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166
static int spi_imx_calculate_timeout(struct spi_imx_data *spi_imx, int size)
{
	unsigned long timeout = 0;

	/* Time with actual data transfer and CS change delay related to HW */
	timeout = (8 + 4) * size / spi_imx->spi_bus_clk;

	/* Add extra second for scheduler related activities */
	timeout += 1;

	/* Double calculated timeout */
	return msecs_to_jiffies(2 * timeout * MSEC_PER_SEC);
}

R
Robin Gong 已提交
1167 1168 1169
static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
				struct spi_transfer *transfer)
{
1170
	struct dma_async_tx_descriptor *desc_tx, *desc_rx;
1171
	unsigned long transfer_timeout;
1172
	unsigned long timeout;
R
Robin Gong 已提交
1173 1174 1175
	struct spi_master *master = spi_imx->bitbang.master;
	struct sg_table *tx = &transfer->tx_sg, *rx = &transfer->rx_sg;

1176 1177 1178 1179 1180 1181 1182 1183 1184
	/*
	 * The TX DMA setup starts the transfer, so make sure RX is configured
	 * before TX.
	 */
	desc_rx = dmaengine_prep_slave_sg(master->dma_rx,
				rx->sgl, rx->nents, DMA_DEV_TO_MEM,
				DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
	if (!desc_rx)
		return -EINVAL;
R
Robin Gong 已提交
1185

1186 1187 1188 1189 1190
	desc_rx->callback = spi_imx_dma_rx_callback;
	desc_rx->callback_param = (void *)spi_imx;
	dmaengine_submit(desc_rx);
	reinit_completion(&spi_imx->dma_rx_completion);
	dma_async_issue_pending(master->dma_rx);
R
Robin Gong 已提交
1191

1192 1193 1194 1195 1196 1197
	desc_tx = dmaengine_prep_slave_sg(master->dma_tx,
				tx->sgl, tx->nents, DMA_MEM_TO_DEV,
				DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
	if (!desc_tx) {
		dmaengine_terminate_all(master->dma_tx);
		return -EINVAL;
R
Robin Gong 已提交
1198 1199
	}

1200 1201 1202
	desc_tx->callback = spi_imx_dma_tx_callback;
	desc_tx->callback_param = (void *)spi_imx;
	dmaengine_submit(desc_tx);
R
Robin Gong 已提交
1203
	reinit_completion(&spi_imx->dma_tx_completion);
1204
	dma_async_issue_pending(master->dma_tx);
R
Robin Gong 已提交
1205

1206 1207
	transfer_timeout = spi_imx_calculate_timeout(spi_imx, transfer->len);

R
Robin Gong 已提交
1208
	/* Wait SDMA to finish the data transfer.*/
1209
	timeout = wait_for_completion_timeout(&spi_imx->dma_tx_completion,
1210
						transfer_timeout);
1211
	if (!timeout) {
1212
		dev_err(spi_imx->dev, "I/O Error in DMA TX\n");
R
Robin Gong 已提交
1213
		dmaengine_terminate_all(master->dma_tx);
1214
		dmaengine_terminate_all(master->dma_rx);
1215
		return -ETIMEDOUT;
R
Robin Gong 已提交
1216 1217
	}

1218 1219 1220 1221 1222 1223 1224 1225
	timeout = wait_for_completion_timeout(&spi_imx->dma_rx_completion,
					      transfer_timeout);
	if (!timeout) {
		dev_err(&master->dev, "I/O Error in DMA RX\n");
		spi_imx->devtype_data->reset(spi_imx);
		dmaengine_terminate_all(master->dma_rx);
		return -ETIMEDOUT;
	}
R
Robin Gong 已提交
1226

1227
	return transfer->len;
R
Robin Gong 已提交
1228 1229 1230
}

static int spi_imx_pio_transfer(struct spi_device *spi,
1231 1232
				struct spi_transfer *transfer)
{
1233
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
1234 1235
	unsigned long transfer_timeout;
	unsigned long timeout;
1236

1237 1238 1239 1240
	spi_imx->tx_buf = transfer->tx_buf;
	spi_imx->rx_buf = transfer->rx_buf;
	spi_imx->count = transfer->len;
	spi_imx->txfifo = 0;
1241

1242
	reinit_completion(&spi_imx->xfer_done);
1243

1244
	spi_imx_push(spi_imx);
1245

1246
	spi_imx->devtype_data->intctrl(spi_imx, MXC_INT_TE);
1247

1248 1249 1250 1251 1252 1253 1254 1255 1256
	transfer_timeout = spi_imx_calculate_timeout(spi_imx, transfer->len);

	timeout = wait_for_completion_timeout(&spi_imx->xfer_done,
					      transfer_timeout);
	if (!timeout) {
		dev_err(&spi->dev, "I/O Error in PIO\n");
		spi_imx->devtype_data->reset(spi_imx);
		return -ETIMEDOUT;
	}
1257 1258 1259 1260

	return transfer->len;
}

R
Robin Gong 已提交
1261 1262 1263 1264 1265
static int spi_imx_transfer(struct spi_device *spi,
				struct spi_transfer *transfer)
{
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);

1266
	if (spi_imx->usedma)
S
Sascha Hauer 已提交
1267
		return spi_imx_dma_transfer(spi_imx, transfer);
1268 1269
	else
		return spi_imx_pio_transfer(spi, transfer);
R
Robin Gong 已提交
1270 1271
}

1272
static int spi_imx_setup(struct spi_device *spi)
1273
{
1274
	dev_dbg(&spi->dev, "%s: mode %d, %u bpw, %d hz\n", __func__,
1275 1276
		 spi->mode, spi->bits_per_word, spi->max_speed_hz);

O
Oleksij Rempel 已提交
1277 1278 1279
	if (spi->mode & SPI_NO_CS)
		return 0;

1280 1281 1282
	if (gpio_is_valid(spi->cs_gpio))
		gpio_direction_output(spi->cs_gpio,
				      spi->mode & SPI_CS_HIGH ? 0 : 1);
1283

1284
	spi_imx_chipselect(spi, BITBANG_CS_INACTIVE);
1285 1286 1287 1288

	return 0;
}

1289
static void spi_imx_cleanup(struct spi_device *spi)
1290 1291 1292
{
}

1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321
static int
spi_imx_prepare_message(struct spi_master *master, struct spi_message *msg)
{
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
	int ret;

	ret = clk_enable(spi_imx->clk_per);
	if (ret)
		return ret;

	ret = clk_enable(spi_imx->clk_ipg);
	if (ret) {
		clk_disable(spi_imx->clk_per);
		return ret;
	}

	return 0;
}

static int
spi_imx_unprepare_message(struct spi_master *master, struct spi_message *msg)
{
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);

	clk_disable(spi_imx->clk_ipg);
	clk_disable(spi_imx->clk_per);
	return 0;
}

1322
static int spi_imx_probe(struct platform_device *pdev)
1323
{
1324 1325 1326 1327 1328
	struct device_node *np = pdev->dev.of_node;
	const struct of_device_id *of_id =
			of_match_device(spi_imx_dt_ids, &pdev->dev);
	struct spi_imx_master *mxc_platform_info =
			dev_get_platdata(&pdev->dev);
1329
	struct spi_master *master;
1330
	struct spi_imx_data *spi_imx;
1331
	struct resource *res;
1332
	int i, ret, irq, spi_drctl;
1333

1334
	if (!np && !mxc_platform_info) {
1335 1336 1337 1338
		dev_err(&pdev->dev, "can't get the platform data\n");
		return -EINVAL;
	}

1339
	master = spi_alloc_master(&pdev->dev, sizeof(struct spi_imx_data));
1340 1341 1342
	if (!master)
		return -ENOMEM;

1343 1344 1345 1346 1347 1348
	ret = of_property_read_u32(np, "fsl,spi-rdy-drctl", &spi_drctl);
	if ((ret < 0) || (spi_drctl >= 0x3)) {
		/* '11' is reserved */
		spi_drctl = 0;
	}

1349 1350
	platform_set_drvdata(pdev, master);

1351
	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
1352
	master->bus_num = np ? -1 : pdev->id;
1353

1354
	spi_imx = spi_master_get_devdata(master);
1355
	spi_imx->bitbang.master = master;
1356
	spi_imx->dev = &pdev->dev;
1357

1358 1359 1360
	spi_imx->devtype_data = of_id ? of_id->data :
		(struct spi_imx_devtype_data *)pdev->id_entry->driver_data;

1361 1362 1363 1364 1365 1366
	if (mxc_platform_info) {
		master->num_chipselect = mxc_platform_info->num_chipselect;
		master->cs_gpios = devm_kzalloc(&master->dev,
			sizeof(int) * master->num_chipselect, GFP_KERNEL);
		if (!master->cs_gpios)
			return -ENOMEM;
1367

1368 1369 1370
		for (i = 0; i < master->num_chipselect; i++)
			master->cs_gpios[i] = mxc_platform_info->chipselect[i];
 	}
1371

1372 1373 1374 1375 1376
	spi_imx->bitbang.chipselect = spi_imx_chipselect;
	spi_imx->bitbang.setup_transfer = spi_imx_setupxfer;
	spi_imx->bitbang.txrx_bufs = spi_imx_transfer;
	spi_imx->bitbang.master->setup = spi_imx_setup;
	spi_imx->bitbang.master->cleanup = spi_imx_cleanup;
1377 1378
	spi_imx->bitbang.master->prepare_message = spi_imx_prepare_message;
	spi_imx->bitbang.master->unprepare_message = spi_imx_unprepare_message;
O
Oleksij Rempel 已提交
1379 1380
	spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
					     | SPI_NO_CS;
1381 1382
	if (is_imx35_cspi(spi_imx) || is_imx51_ecspi(spi_imx) ||
	    is_imx53_ecspi(spi_imx))
1383 1384 1385
		spi_imx->bitbang.master->mode_bits |= SPI_LOOP | SPI_READY;

	spi_imx->spi_drctl = spi_drctl;
1386

1387
	init_completion(&spi_imx->xfer_done);
1388 1389

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
F
Fabio Estevam 已提交
1390 1391 1392 1393
	spi_imx->base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(spi_imx->base)) {
		ret = PTR_ERR(spi_imx->base);
		goto out_master_put;
1394
	}
1395
	spi_imx->base_phys = res->start;
1396

1397 1398 1399
	irq = platform_get_irq(pdev, 0);
	if (irq < 0) {
		ret = irq;
F
Fabio Estevam 已提交
1400
		goto out_master_put;
1401 1402
	}

1403
	ret = devm_request_irq(&pdev->dev, irq, spi_imx_isr, 0,
1404
			       dev_name(&pdev->dev), spi_imx);
1405
	if (ret) {
1406
		dev_err(&pdev->dev, "can't get irq%d: %d\n", irq, ret);
F
Fabio Estevam 已提交
1407
		goto out_master_put;
1408 1409
	}

1410 1411 1412
	spi_imx->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
	if (IS_ERR(spi_imx->clk_ipg)) {
		ret = PTR_ERR(spi_imx->clk_ipg);
F
Fabio Estevam 已提交
1413
		goto out_master_put;
1414 1415
	}

1416 1417 1418
	spi_imx->clk_per = devm_clk_get(&pdev->dev, "per");
	if (IS_ERR(spi_imx->clk_per)) {
		ret = PTR_ERR(spi_imx->clk_per);
F
Fabio Estevam 已提交
1419
		goto out_master_put;
1420 1421
	}

1422 1423 1424 1425 1426 1427 1428
	ret = clk_prepare_enable(spi_imx->clk_per);
	if (ret)
		goto out_master_put;

	ret = clk_prepare_enable(spi_imx->clk_ipg);
	if (ret)
		goto out_put_per;
1429 1430

	spi_imx->spi_clk = clk_get_rate(spi_imx->clk_per);
R
Robin Gong 已提交
1431
	/*
M
Martin Kaiser 已提交
1432 1433
	 * Only validated on i.mx35 and i.mx6 now, can remove the constraint
	 * if validated on other chips.
R
Robin Gong 已提交
1434
	 */
1435
	if (spi_imx->devtype_data->has_dmamode) {
1436
		ret = spi_imx_sdma_init(&pdev->dev, spi_imx, master);
1437 1438 1439
		if (ret == -EPROBE_DEFER)
			goto out_clk_put;

1440 1441 1442 1443
		if (ret < 0)
			dev_err(&pdev->dev, "dma setup error %d, use pio\n",
				ret);
	}
1444

1445
	spi_imx->devtype_data->reset(spi_imx);
1446

1447
	spi_imx->devtype_data->intctrl(spi_imx, 0);
1448

1449
	master->dev.of_node = pdev->dev.of_node;
1450
	ret = spi_bitbang_start(&spi_imx->bitbang);
1451 1452 1453 1454 1455
	if (ret) {
		dev_err(&pdev->dev, "bitbang start failed with %d\n", ret);
		goto out_clk_put;
	}

1456 1457
	if (!master->cs_gpios) {
		dev_err(&pdev->dev, "No CS GPIOs available\n");
1458
		ret = -EINVAL;
1459 1460 1461
		goto out_clk_put;
	}

1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474
	for (i = 0; i < master->num_chipselect; i++) {
		if (!gpio_is_valid(master->cs_gpios[i]))
			continue;

		ret = devm_gpio_request(&pdev->dev, master->cs_gpios[i],
					DRIVER_NAME);
		if (ret) {
			dev_err(&pdev->dev, "Can't get CS GPIO %i\n",
				master->cs_gpios[i]);
			goto out_clk_put;
		}
	}

1475 1476
	dev_info(&pdev->dev, "probed\n");

1477 1478
	clk_disable(spi_imx->clk_ipg);
	clk_disable(spi_imx->clk_per);
1479 1480 1481
	return ret;

out_clk_put:
1482
	clk_disable_unprepare(spi_imx->clk_ipg);
1483 1484
out_put_per:
	clk_disable_unprepare(spi_imx->clk_per);
F
Fabio Estevam 已提交
1485
out_master_put:
1486
	spi_master_put(master);
F
Fabio Estevam 已提交
1487

1488 1489 1490
	return ret;
}

1491
static int spi_imx_remove(struct platform_device *pdev)
1492 1493
{
	struct spi_master *master = platform_get_drvdata(pdev);
1494
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
1495

1496
	spi_bitbang_stop(&spi_imx->bitbang);
1497

1498
	writel(0, spi_imx->base + MXC_CSPICTRL);
1499 1500
	clk_unprepare(spi_imx->clk_ipg);
	clk_unprepare(spi_imx->clk_per);
R
Robin Gong 已提交
1501
	spi_imx_sdma_exit(spi_imx);
1502 1503 1504 1505 1506
	spi_master_put(master);

	return 0;
}

1507
static struct platform_driver spi_imx_driver = {
1508 1509
	.driver = {
		   .name = DRIVER_NAME,
1510
		   .of_match_table = spi_imx_dt_ids,
1511
		   },
1512
	.id_table = spi_imx_devtype,
1513
	.probe = spi_imx_probe,
1514
	.remove = spi_imx_remove,
1515
};
1516
module_platform_driver(spi_imx_driver);
1517 1518 1519 1520

MODULE_DESCRIPTION("SPI Master Controller driver");
MODULE_AUTHOR("Sascha Hauer, Pengutronix");
MODULE_LICENSE("GPL");
F
Fabio Estevam 已提交
1521
MODULE_ALIAS("platform:" DRIVER_NAME);