spi-sh-msiof.c 38.5 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0
2
/*
3
 * SuperH MSIOF SPI Controller Interface
4 5
 *
 * Copyright (c) 2009 Magnus Damm
6 7
 * Copyright (C) 2014 Renesas Electronics Corporation
 * Copyright (C) 2014-2017 Glider bvba
8 9
 */

10 11 12
#include <linux/bitmap.h>
#include <linux/clk.h>
#include <linux/completion.h>
13
#include <linux/delay.h>
14 15
#include <linux/dma-mapping.h>
#include <linux/dmaengine.h>
16
#include <linux/err.h>
17
#include <linux/interrupt.h>
18
#include <linux/io.h>
19
#include <linux/iopoll.h>
20
#include <linux/kernel.h>
21
#include <linux/module.h>
22
#include <linux/of.h>
23
#include <linux/of_device.h>
24 25
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
26
#include <linux/sh_dma.h>
27

28
#include <linux/spi/sh_msiof.h>
29 30 31 32
#include <linux/spi/spi.h>

#include <asm/unaligned.h>

33
struct sh_msiof_chipdata {
34
	u32 bits_per_word_mask;
35 36
	u16 tx_fifo_size;
	u16 rx_fifo_size;
37
	u16 ctlr_flags;
38
	u16 min_div_pow;
39 40
};

41
struct sh_msiof_spi_priv {
42
	struct spi_controller *ctlr;
43 44 45 46 47
	void __iomem *mapbase;
	struct clk *clk;
	struct platform_device *pdev;
	struct sh_msiof_spi_info *info;
	struct completion done;
48
	struct completion done_txdma;
49 50
	unsigned int tx_fifo_size;
	unsigned int rx_fifo_size;
51
	unsigned int min_div_pow;
52 53 54 55
	void *tx_dma_page;
	void *rx_dma_page;
	dma_addr_t tx_dma_addr;
	dma_addr_t rx_dma_addr;
56 57
	bool native_cs_inited;
	bool native_cs_high;
58
	bool slave_aborted;
59 60
};

61 62
#define MAX_SS	3	/* Maximum number of native chip selects */

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
#define SITMDR1	0x00	/* Transmit Mode Register 1 */
#define SITMDR2	0x04	/* Transmit Mode Register 2 */
#define SITMDR3	0x08	/* Transmit Mode Register 3 */
#define SIRMDR1	0x10	/* Receive Mode Register 1 */
#define SIRMDR2	0x14	/* Receive Mode Register 2 */
#define SIRMDR3	0x18	/* Receive Mode Register 3 */
#define SITSCR	0x20	/* Transmit Clock Select Register */
#define SIRSCR	0x22	/* Receive Clock Select Register (SH, A1, APE6) */
#define SICTR	0x28	/* Control Register */
#define SIFCTR	0x30	/* FIFO Control Register */
#define SISTR	0x40	/* Status Register */
#define SIIER	0x44	/* Interrupt Enable Register */
#define SITDR1	0x48	/* Transmit Control Data Register 1 (SH, A1) */
#define SITDR2	0x4c	/* Transmit Control Data Register 2 (SH, A1) */
#define SITFDR	0x50	/* Transmit FIFO Data Register */
#define SIRDR1	0x58	/* Receive Control Data Register 1 (SH, A1) */
#define SIRDR2	0x5c	/* Receive Control Data Register 2 (SH, A1) */
#define SIRFDR	0x60	/* Receive FIFO Data Register */

/* SITMDR1 and SIRMDR1 */
#define SIMDR1_TRMD		BIT(31)		/* Transfer Mode (1 = Master mode) */
#define SIMDR1_SYNCMD_MASK	GENMASK(29, 28)	/* SYNC Mode */
#define SIMDR1_SYNCMD_SPI	(2 << 28)	/*   Level mode/SPI */
#define SIMDR1_SYNCMD_LR	(3 << 28)	/*   L/R mode */
#define SIMDR1_SYNCAC_SHIFT	25		/* Sync Polarity (1 = Active-low) */
#define SIMDR1_BITLSB_SHIFT	24		/* MSB/LSB First (1 = LSB first) */
#define SIMDR1_DTDL_SHIFT	20		/* Data Pin Bit Delay for MSIOF_SYNC */
#define SIMDR1_SYNCDL_SHIFT	16		/* Frame Sync Signal Timing Delay */
#define SIMDR1_FLD_MASK		GENMASK(3, 2)	/* Frame Sync Signal Interval (0-3) */
#define SIMDR1_FLD_SHIFT	2
#define SIMDR1_XXSTP		BIT(0)		/* Transmission/Reception Stop on FIFO */
/* SITMDR1 */
#define SITMDR1_PCON		BIT(30)		/* Transfer Signal Connection */
#define SITMDR1_SYNCCH_MASK	GENMASK(27, 26)	/* Sync Signal Channel Select */
#define SITMDR1_SYNCCH_SHIFT	26		/* 0=MSIOF_SYNC, 1=MSIOF_SS1, 2=MSIOF_SS2 */

/* SITMDR2 and SIRMDR2 */
#define SIMDR2_BITLEN1(i)	(((i) - 1) << 24) /* Data Size (8-32 bits) */
#define SIMDR2_WDLEN1(i)	(((i) - 1) << 16) /* Word Count (1-64/256 (SH, A1))) */
#define SIMDR2_GRPMASK1		BIT(0)		/* Group Output Mask 1 (SH, A1) */

/* SITSCR and SIRSCR */
#define SISCR_BRPS_MASK		GENMASK(12, 8)	/* Prescaler Setting (1-32) */
#define SISCR_BRPS(i)		(((i) - 1) << 8)
#define SISCR_BRDV_MASK		GENMASK(2, 0)	/* Baud Rate Generator's Division Ratio */
#define SISCR_BRDV_DIV_2	0
#define SISCR_BRDV_DIV_4	1
#define SISCR_BRDV_DIV_8	2
#define SISCR_BRDV_DIV_16	3
#define SISCR_BRDV_DIV_32	4
#define SISCR_BRDV_DIV_1	7

/* SICTR */
#define SICTR_TSCKIZ_MASK	GENMASK(31, 30)	/* Transmit Clock I/O Polarity Select */
#define SICTR_TSCKIZ_SCK	BIT(31)		/*   Disable SCK when TX disabled */
#define SICTR_TSCKIZ_POL_SHIFT	30		/*   Transmit Clock Polarity */
#define SICTR_RSCKIZ_MASK	GENMASK(29, 28) /* Receive Clock Polarity Select */
#define SICTR_RSCKIZ_SCK	BIT(29)		/*   Must match CTR_TSCKIZ_SCK */
#define SICTR_RSCKIZ_POL_SHIFT	28		/*   Receive Clock Polarity */
#define SICTR_TEDG_SHIFT	27		/* Transmit Timing (1 = falling edge) */
#define SICTR_REDG_SHIFT	26		/* Receive Timing (1 = falling edge) */
#define SICTR_TXDIZ_MASK	GENMASK(23, 22)	/* Pin Output When TX is Disabled */
#define SICTR_TXDIZ_LOW		(0 << 22)	/*   0 */
#define SICTR_TXDIZ_HIGH	(1 << 22)	/*   1 */
#define SICTR_TXDIZ_HIZ		(2 << 22)	/*   High-impedance */
#define SICTR_TSCKE		BIT(15)		/* Transmit Serial Clock Output Enable */
#define SICTR_TFSE		BIT(14)		/* Transmit Frame Sync Signal Output Enable */
#define SICTR_TXE		BIT(9)		/* Transmit Enable */
#define SICTR_RXE		BIT(8)		/* Receive Enable */
#define SICTR_TXRST		BIT(1)		/* Transmit Reset */
#define SICTR_RXRST		BIT(0)		/* Receive Reset */

/* SIFCTR */
#define SIFCTR_TFWM_MASK	GENMASK(31, 29)	/* Transmit FIFO Watermark */
#define SIFCTR_TFWM_64		(0 << 29)	/*  Transfer Request when 64 empty stages */
#define SIFCTR_TFWM_32		(1 << 29)	/*  Transfer Request when 32 empty stages */
#define SIFCTR_TFWM_24		(2 << 29)	/*  Transfer Request when 24 empty stages */
#define SIFCTR_TFWM_16		(3 << 29)	/*  Transfer Request when 16 empty stages */
#define SIFCTR_TFWM_12		(4 << 29)	/*  Transfer Request when 12 empty stages */
#define SIFCTR_TFWM_8		(5 << 29)	/*  Transfer Request when 8 empty stages */
#define SIFCTR_TFWM_4		(6 << 29)	/*  Transfer Request when 4 empty stages */
#define SIFCTR_TFWM_1		(7 << 29)	/*  Transfer Request when 1 empty stage */
#define SIFCTR_TFUA_MASK	GENMASK(26, 20) /* Transmit FIFO Usable Area */
#define SIFCTR_TFUA_SHIFT	20
#define SIFCTR_TFUA(i)		((i) << SIFCTR_TFUA_SHIFT)
#define SIFCTR_RFWM_MASK	GENMASK(15, 13)	/* Receive FIFO Watermark */
#define SIFCTR_RFWM_1		(0 << 13)	/*  Transfer Request when 1 valid stages */
#define SIFCTR_RFWM_4		(1 << 13)	/*  Transfer Request when 4 valid stages */
#define SIFCTR_RFWM_8		(2 << 13)	/*  Transfer Request when 8 valid stages */
#define SIFCTR_RFWM_16		(3 << 13)	/*  Transfer Request when 16 valid stages */
#define SIFCTR_RFWM_32		(4 << 13)	/*  Transfer Request when 32 valid stages */
#define SIFCTR_RFWM_64		(5 << 13)	/*  Transfer Request when 64 valid stages */
#define SIFCTR_RFWM_128		(6 << 13)	/*  Transfer Request when 128 valid stages */
#define SIFCTR_RFWM_256		(7 << 13)	/*  Transfer Request when 256 valid stages */
#define SIFCTR_RFUA_MASK	GENMASK(12, 4)	/* Receive FIFO Usable Area (0x40 = full) */
#define SIFCTR_RFUA_SHIFT	4
#define SIFCTR_RFUA(i)		((i) << SIFCTR_RFUA_SHIFT)

/* SISTR */
#define SISTR_TFEMP		BIT(29) /* Transmit FIFO Empty */
#define SISTR_TDREQ		BIT(28) /* Transmit Data Transfer Request */
#define SISTR_TEOF		BIT(23) /* Frame Transmission End */
#define SISTR_TFSERR		BIT(21) /* Transmit Frame Synchronization Error */
#define SISTR_TFOVF		BIT(20) /* Transmit FIFO Overflow */
#define SISTR_TFUDF		BIT(19) /* Transmit FIFO Underflow */
#define SISTR_RFFUL		BIT(13) /* Receive FIFO Full */
#define SISTR_RDREQ		BIT(12) /* Receive Data Transfer Request */
#define SISTR_REOF		BIT(7)  /* Frame Reception End */
#define SISTR_RFSERR		BIT(5)  /* Receive Frame Synchronization Error */
#define SISTR_RFUDF		BIT(4)  /* Receive FIFO Underflow */
#define SISTR_RFOVF		BIT(3)  /* Receive FIFO Overflow */

/* SIIER */
#define SIIER_TDMAE		BIT(31) /* Transmit Data DMA Transfer Req. Enable */
#define SIIER_TFEMPE		BIT(29) /* Transmit FIFO Empty Enable */
#define SIIER_TDREQE		BIT(28) /* Transmit Data Transfer Request Enable */
#define SIIER_TEOFE		BIT(23) /* Frame Transmission End Enable */
#define SIIER_TFSERRE		BIT(21) /* Transmit Frame Sync Error Enable */
#define SIIER_TFOVFE		BIT(20) /* Transmit FIFO Overflow Enable */
#define SIIER_TFUDFE		BIT(19) /* Transmit FIFO Underflow Enable */
#define SIIER_RDMAE		BIT(15) /* Receive Data DMA Transfer Req. Enable */
#define SIIER_RFFULE		BIT(13) /* Receive FIFO Full Enable */
#define SIIER_RDREQE		BIT(12) /* Receive Data Transfer Request Enable */
#define SIIER_REOFE		BIT(7)  /* Frame Reception End Enable */
#define SIIER_RFSERRE		BIT(5)  /* Receive Frame Sync Error Enable */
#define SIIER_RFUDFE		BIT(4)  /* Receive FIFO Underflow Enable */
#define SIIER_RFOVFE		BIT(3)  /* Receive FIFO Overflow Enable */
190

191

192
static u32 sh_msiof_read(struct sh_msiof_spi_priv *p, int reg_offs)
193 194
{
	switch (reg_offs) {
195 196
	case SITSCR:
	case SIRSCR:
197 198 199 200 201 202 203
		return ioread16(p->mapbase + reg_offs);
	default:
		return ioread32(p->mapbase + reg_offs);
	}
}

static void sh_msiof_write(struct sh_msiof_spi_priv *p, int reg_offs,
204
			   u32 value)
205 206
{
	switch (reg_offs) {
207 208
	case SITSCR:
	case SIRSCR:
209 210 211 212 213 214 215 216 217
		iowrite16(value, p->mapbase + reg_offs);
		break;
	default:
		iowrite32(value, p->mapbase + reg_offs);
		break;
	}
}

static int sh_msiof_modify_ctr_wait(struct sh_msiof_spi_priv *p,
218
				    u32 clr, u32 set)
219
{
220 221
	u32 mask = clr | set;
	u32 data;
222

223
	data = sh_msiof_read(p, SICTR);
224 225
	data &= ~clr;
	data |= set;
226
	sh_msiof_write(p, SICTR, data);
227

228
	return readl_poll_timeout_atomic(p->mapbase + SICTR, data,
229
					 (data & mask) == set, 1, 100);
230 231 232 233 234 235 236
}

static irqreturn_t sh_msiof_spi_irq(int irq, void *data)
{
	struct sh_msiof_spi_priv *p = data;

	/* just disable the interrupt and wake up */
237
	sh_msiof_write(p, SIIER, 0);
238 239 240 241 242
	complete(&p->done);

	return IRQ_HANDLED;
}

243 244
static void sh_msiof_spi_reset_regs(struct sh_msiof_spi_priv *p)
{
245
	u32 mask = SICTR_TXRST | SICTR_RXRST;
246 247
	u32 data;

248
	data = sh_msiof_read(p, SICTR);
249
	data |= mask;
250
	sh_msiof_write(p, SICTR, data);
251

252
	readl_poll_timeout_atomic(p->mapbase + SICTR, data, !(data & mask), 1,
253 254 255
				  100);
}

256
static const u32 sh_msiof_spi_div_array[] = {
257 258
	SISCR_BRDV_DIV_1, SISCR_BRDV_DIV_2, SISCR_BRDV_DIV_4,
	SISCR_BRDV_DIV_8, SISCR_BRDV_DIV_16, SISCR_BRDV_DIV_32,
259 260 261
};

static void sh_msiof_spi_set_clk_regs(struct sh_msiof_spi_priv *p,
262
				      unsigned long parent_rate, u32 spi_hz)
263
{
264
	unsigned long div;
265
	u32 brps, scr;
266
	unsigned int div_pow = p->min_div_pow;
267

268 269 270 271 272
	if (!spi_hz || !parent_rate) {
		WARN(1, "Invalid clock rate parameters %lu and %u\n",
		     parent_rate, spi_hz);
		return;
	}
273

274 275
	div = DIV_ROUND_UP(parent_rate, spi_hz);
	if (div <= 1024) {
276
		/* SISCR_BRDV_DIV_1 is valid only if BRPS is x 1/1 or x 1/2 */
277 278 279 280 281 282 283
		if (!div_pow && div <= 32 && div > 2)
			div_pow = 1;

		if (div_pow)
			brps = (div + 1) >> div_pow;
		else
			brps = div;
284

285 286 287 288 289 290 291 292 293
		for (; brps > 32; div_pow++)
			brps = (brps + 1) >> 1;
	} else {
		/* Set transfer rate composite divisor to 2^5 * 32 = 1024 */
		dev_err(&p->pdev->dev,
			"Requested SPI transfer rate %d is too low\n", spi_hz);
		div_pow = 5;
		brps = 32;
	}
294

295 296
	scr = sh_msiof_spi_div_array[div_pow] | SISCR_BRPS(brps);
	sh_msiof_write(p, SITSCR, scr);
297
	if (!(p->ctlr->flags & SPI_CONTROLLER_MUST_TX))
298
		sh_msiof_write(p, SIRSCR, scr);
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
static u32 sh_msiof_get_delay_bit(u32 dtdl_or_syncdl)
{
	/*
	 * DTDL/SYNCDL bit	: p->info->dtdl or p->info->syncdl
	 * b'000		: 0
	 * b'001		: 100
	 * b'010		: 200
	 * b'011 (SYNCDL only)	: 300
	 * b'101		: 50
	 * b'110		: 150
	 */
	if (dtdl_or_syncdl % 100)
		return dtdl_or_syncdl / 100 + 5;
	else
		return dtdl_or_syncdl / 100;
}

static u32 sh_msiof_spi_get_dtdl_and_syncdl(struct sh_msiof_spi_priv *p)
{
	u32 val;

	if (!p->info)
		return 0;

	/* check if DTDL and SYNCDL is allowed value */
	if (p->info->dtdl > 200 || p->info->syncdl > 300) {
		dev_warn(&p->pdev->dev, "DTDL or SYNCDL is too large\n");
		return 0;
	}

	/* check if the sum of DTDL and SYNCDL becomes an integer value  */
	if ((p->info->dtdl + p->info->syncdl) % 100) {
		dev_warn(&p->pdev->dev, "the sum of DTDL/SYNCDL is not good\n");
		return 0;
	}

337 338
	val = sh_msiof_get_delay_bit(p->info->dtdl) << SIMDR1_DTDL_SHIFT;
	val |= sh_msiof_get_delay_bit(p->info->syncdl) << SIMDR1_SYNCDL_SHIFT;
339 340 341 342

	return val;
}

343
static void sh_msiof_spi_set_pin_regs(struct sh_msiof_spi_priv *p, u32 ss,
344
				      u32 cpol, u32 cpha,
345
				      u32 tx_hi_z, u32 lsb_first, u32 cs_high)
346
{
347
	u32 tmp;
348 349 350
	int edge;

	/*
351 352 353 354 355
	 * CPOL CPHA     TSCKIZ RSCKIZ TEDG REDG
	 *    0    0         10     10    1    1
	 *    0    1         10     10    0    0
	 *    1    0         11     11    0    0
	 *    1    1         11     11    1    1
356
	 */
357 358 359
	tmp = SIMDR1_SYNCMD_SPI | 1 << SIMDR1_FLD_SHIFT | SIMDR1_XXSTP;
	tmp |= !cs_high << SIMDR1_SYNCAC_SHIFT;
	tmp |= lsb_first << SIMDR1_BITLSB_SHIFT;
360
	tmp |= sh_msiof_spi_get_dtdl_and_syncdl(p);
361
	if (spi_controller_is_slave(p->ctlr)) {
362
		sh_msiof_write(p, SITMDR1, tmp | SITMDR1_PCON);
363
	} else {
364 365 366
		sh_msiof_write(p, SITMDR1,
			       tmp | SIMDR1_TRMD | SITMDR1_PCON |
			       (ss < MAX_SS ? ss : 0) << SITMDR1_SYNCCH_SHIFT);
367
	}
368
	if (p->ctlr->flags & SPI_CONTROLLER_MUST_TX) {
369 370 371
		/* These bits are reserved if RX needs TX */
		tmp &= ~0x0000ffff;
	}
372
	sh_msiof_write(p, SIRMDR1, tmp);
373

374
	tmp = 0;
375 376
	tmp |= SICTR_TSCKIZ_SCK | cpol << SICTR_TSCKIZ_POL_SHIFT;
	tmp |= SICTR_RSCKIZ_SCK | cpol << SICTR_RSCKIZ_POL_SHIFT;
377

378
	edge = cpol ^ !cpha;
379

380 381 382 383
	tmp |= edge << SICTR_TEDG_SHIFT;
	tmp |= edge << SICTR_REDG_SHIFT;
	tmp |= tx_hi_z ? SICTR_TXDIZ_HIZ : SICTR_TXDIZ_LOW;
	sh_msiof_write(p, SICTR, tmp);
384 385 386 387
}

static void sh_msiof_spi_set_mode_regs(struct sh_msiof_spi_priv *p,
				       const void *tx_buf, void *rx_buf,
388
				       u32 bits, u32 words)
389
{
390
	u32 dr2 = SIMDR2_BITLEN1(bits) | SIMDR2_WDLEN1(words);
391

392
	if (tx_buf || (p->ctlr->flags & SPI_CONTROLLER_MUST_TX))
393
		sh_msiof_write(p, SITMDR2, dr2);
394
	else
395
		sh_msiof_write(p, SITMDR2, dr2 | SIMDR2_GRPMASK1);
396 397

	if (rx_buf)
398
		sh_msiof_write(p, SIRMDR2, dr2);
399 400 401 402
}

static void sh_msiof_reset_str(struct sh_msiof_spi_priv *p)
{
403 404
	sh_msiof_write(p, SISTR,
		       sh_msiof_read(p, SISTR) & ~(SISTR_TDREQ | SISTR_RDREQ));
405 406 407 408 409
}

static void sh_msiof_spi_write_fifo_8(struct sh_msiof_spi_priv *p,
				      const void *tx_buf, int words, int fs)
{
410
	const u8 *buf_8 = tx_buf;
411 412 413
	int k;

	for (k = 0; k < words; k++)
414
		sh_msiof_write(p, SITFDR, buf_8[k] << fs);
415 416 417 418 419
}

static void sh_msiof_spi_write_fifo_16(struct sh_msiof_spi_priv *p,
				       const void *tx_buf, int words, int fs)
{
420
	const u16 *buf_16 = tx_buf;
421 422 423
	int k;

	for (k = 0; k < words; k++)
424
		sh_msiof_write(p, SITFDR, buf_16[k] << fs);
425 426 427 428 429
}

static void sh_msiof_spi_write_fifo_16u(struct sh_msiof_spi_priv *p,
					const void *tx_buf, int words, int fs)
{
430
	const u16 *buf_16 = tx_buf;
431 432 433
	int k;

	for (k = 0; k < words; k++)
434
		sh_msiof_write(p, SITFDR, get_unaligned(&buf_16[k]) << fs);
435 436 437 438 439
}

static void sh_msiof_spi_write_fifo_32(struct sh_msiof_spi_priv *p,
				       const void *tx_buf, int words, int fs)
{
440
	const u32 *buf_32 = tx_buf;
441 442 443
	int k;

	for (k = 0; k < words; k++)
444
		sh_msiof_write(p, SITFDR, buf_32[k] << fs);
445 446 447 448 449
}

static void sh_msiof_spi_write_fifo_32u(struct sh_msiof_spi_priv *p,
					const void *tx_buf, int words, int fs)
{
450
	const u32 *buf_32 = tx_buf;
451 452 453
	int k;

	for (k = 0; k < words; k++)
454
		sh_msiof_write(p, SITFDR, get_unaligned(&buf_32[k]) << fs);
455 456
}

457 458 459 460 461 462 463
static void sh_msiof_spi_write_fifo_s32(struct sh_msiof_spi_priv *p,
					const void *tx_buf, int words, int fs)
{
	const u32 *buf_32 = tx_buf;
	int k;

	for (k = 0; k < words; k++)
464
		sh_msiof_write(p, SITFDR, swab32(buf_32[k] << fs));
465 466 467 468 469 470 471 472 473
}

static void sh_msiof_spi_write_fifo_s32u(struct sh_msiof_spi_priv *p,
					 const void *tx_buf, int words, int fs)
{
	const u32 *buf_32 = tx_buf;
	int k;

	for (k = 0; k < words; k++)
474
		sh_msiof_write(p, SITFDR, swab32(get_unaligned(&buf_32[k]) << fs));
475 476
}

477 478 479
static void sh_msiof_spi_read_fifo_8(struct sh_msiof_spi_priv *p,
				     void *rx_buf, int words, int fs)
{
480
	u8 *buf_8 = rx_buf;
481 482 483
	int k;

	for (k = 0; k < words; k++)
484
		buf_8[k] = sh_msiof_read(p, SIRFDR) >> fs;
485 486 487 488 489
}

static void sh_msiof_spi_read_fifo_16(struct sh_msiof_spi_priv *p,
				      void *rx_buf, int words, int fs)
{
490
	u16 *buf_16 = rx_buf;
491 492 493
	int k;

	for (k = 0; k < words; k++)
494
		buf_16[k] = sh_msiof_read(p, SIRFDR) >> fs;
495 496 497 498 499
}

static void sh_msiof_spi_read_fifo_16u(struct sh_msiof_spi_priv *p,
				       void *rx_buf, int words, int fs)
{
500
	u16 *buf_16 = rx_buf;
501 502 503
	int k;

	for (k = 0; k < words; k++)
504
		put_unaligned(sh_msiof_read(p, SIRFDR) >> fs, &buf_16[k]);
505 506 507 508 509
}

static void sh_msiof_spi_read_fifo_32(struct sh_msiof_spi_priv *p,
				      void *rx_buf, int words, int fs)
{
510
	u32 *buf_32 = rx_buf;
511 512 513
	int k;

	for (k = 0; k < words; k++)
514
		buf_32[k] = sh_msiof_read(p, SIRFDR) >> fs;
515 516 517 518 519
}

static void sh_msiof_spi_read_fifo_32u(struct sh_msiof_spi_priv *p,
				       void *rx_buf, int words, int fs)
{
520
	u32 *buf_32 = rx_buf;
521 522 523
	int k;

	for (k = 0; k < words; k++)
524
		put_unaligned(sh_msiof_read(p, SIRFDR) >> fs, &buf_32[k]);
525 526
}

527 528 529 530 531 532 533
static void sh_msiof_spi_read_fifo_s32(struct sh_msiof_spi_priv *p,
				       void *rx_buf, int words, int fs)
{
	u32 *buf_32 = rx_buf;
	int k;

	for (k = 0; k < words; k++)
534
		buf_32[k] = swab32(sh_msiof_read(p, SIRFDR) >> fs);
535 536 537 538 539 540 541 542 543
}

static void sh_msiof_spi_read_fifo_s32u(struct sh_msiof_spi_priv *p,
				       void *rx_buf, int words, int fs)
{
	u32 *buf_32 = rx_buf;
	int k;

	for (k = 0; k < words; k++)
544
		put_unaligned(swab32(sh_msiof_read(p, SIRFDR) >> fs), &buf_32[k]);
545 546
}

547
static int sh_msiof_spi_setup(struct spi_device *spi)
548
{
549 550
	struct sh_msiof_spi_priv *p =
		spi_controller_get_devdata(spi->controller);
551
	u32 clr, set, tmp;
552

553
	if (spi->cs_gpiod || spi_controller_is_slave(p->ctlr))
554
		return 0;
555

556 557 558
	if (p->native_cs_inited &&
	    (p->native_cs_high == !!(spi->mode & SPI_CS_HIGH)))
		return 0;
559

560
	/* Configure native chip select mode/polarity early */
561 562
	clr = SIMDR1_SYNCMD_MASK;
	set = SIMDR1_SYNCMD_SPI;
563
	if (spi->mode & SPI_CS_HIGH)
564
		clr |= BIT(SIMDR1_SYNCAC_SHIFT);
565
	else
566
		set |= BIT(SIMDR1_SYNCAC_SHIFT);
567
	pm_runtime_get_sync(&p->pdev->dev);
568 569 570 571
	tmp = sh_msiof_read(p, SITMDR1) & ~clr;
	sh_msiof_write(p, SITMDR1, tmp | set | SIMDR1_TRMD | SITMDR1_PCON);
	tmp = sh_msiof_read(p, SIRMDR1) & ~clr;
	sh_msiof_write(p, SIRMDR1, tmp | set);
572
	pm_runtime_put(&p->pdev->dev);
573 574
	p->native_cs_high = spi->mode & SPI_CS_HIGH;
	p->native_cs_inited = true;
575
	return 0;
576 577
}

578
static int sh_msiof_prepare_message(struct spi_controller *ctlr,
579
				    struct spi_message *msg)
580
{
581
	struct sh_msiof_spi_priv *p = spi_controller_get_devdata(ctlr);
582
	const struct spi_device *spi = msg->spi;
583
	u32 ss, cs_high;
584

585
	/* Configure pins before asserting CS */
586
	if (spi->cs_gpiod) {
587
		ss = ctlr->unused_native_cs;
588 589 590 591 592 593
		cs_high = p->native_cs_high;
	} else {
		ss = spi->chip_select;
		cs_high = !!(spi->mode & SPI_CS_HIGH);
	}
	sh_msiof_spi_set_pin_regs(p, ss, !!(spi->mode & SPI_CPOL),
594 595
				  !!(spi->mode & SPI_CPHA),
				  !!(spi->mode & SPI_3WIRE),
596
				  !!(spi->mode & SPI_LSB_FIRST), cs_high);
597
	return 0;
598 599
}

600 601
static int sh_msiof_spi_start(struct sh_msiof_spi_priv *p, void *rx_buf)
{
602
	bool slave = spi_controller_is_slave(p->ctlr);
603
	int ret = 0;
604 605

	/* setup clock and rx/tx signals */
606
	if (!slave)
607
		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TSCKE);
608
	if (rx_buf && !ret)
609
		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_RXE);
610
	if (!ret)
611
		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TXE);
612 613

	/* start by setting frame bit */
614
	if (!ret && !slave)
615
		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TFSE);
616 617 618 619 620 621

	return ret;
}

static int sh_msiof_spi_stop(struct sh_msiof_spi_priv *p, void *rx_buf)
{
622
	bool slave = spi_controller_is_slave(p->ctlr);
623
	int ret = 0;
624 625

	/* shut down frame, rx/tx and clock signals */
626
	if (!slave)
627
		ret = sh_msiof_modify_ctr_wait(p, SICTR_TFSE, 0);
628
	if (!ret)
629
		ret = sh_msiof_modify_ctr_wait(p, SICTR_TXE, 0);
630
	if (rx_buf && !ret)
631
		ret = sh_msiof_modify_ctr_wait(p, SICTR_RXE, 0);
632
	if (!ret && !slave)
633
		ret = sh_msiof_modify_ctr_wait(p, SICTR_TSCKE, 0);
634 635 636 637

	return ret;
}

638
static int sh_msiof_slave_abort(struct spi_controller *ctlr)
639
{
640
	struct sh_msiof_spi_priv *p = spi_controller_get_devdata(ctlr);
641 642 643

	p->slave_aborted = true;
	complete(&p->done);
644
	complete(&p->done_txdma);
645 646 647
	return 0;
}

648 649
static int sh_msiof_wait_for_completion(struct sh_msiof_spi_priv *p,
					struct completion *x)
650
{
651
	if (spi_controller_is_slave(p->ctlr)) {
652
		if (wait_for_completion_interruptible(x) ||
653 654 655 656 657
		    p->slave_aborted) {
			dev_dbg(&p->pdev->dev, "interrupted\n");
			return -EINTR;
		}
	} else {
658
		if (!wait_for_completion_timeout(x, HZ)) {
659 660 661 662 663 664 665 666
			dev_err(&p->pdev->dev, "timeout\n");
			return -ETIMEDOUT;
		}
	}

	return 0;
}

667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686
static int sh_msiof_spi_txrx_once(struct sh_msiof_spi_priv *p,
				  void (*tx_fifo)(struct sh_msiof_spi_priv *,
						  const void *, int, int),
				  void (*rx_fifo)(struct sh_msiof_spi_priv *,
						  void *, int, int),
				  const void *tx_buf, void *rx_buf,
				  int words, int bits)
{
	int fifo_shift;
	int ret;

	/* limit maximum word transfer to rx/tx fifo size */
	if (tx_buf)
		words = min_t(int, words, p->tx_fifo_size);
	if (rx_buf)
		words = min_t(int, words, p->rx_fifo_size);

	/* the fifo contents need shifting */
	fifo_shift = 32 - bits;

687
	/* default FIFO watermarks for PIO */
688
	sh_msiof_write(p, SIFCTR, 0);
689

690 691
	/* setup msiof transfer mode registers */
	sh_msiof_spi_set_mode_regs(p, tx_buf, rx_buf, bits, words);
692
	sh_msiof_write(p, SIIER, SIIER_TEOFE | SIIER_REOFE);
693 694 695 696 697

	/* write tx fifo */
	if (tx_buf)
		tx_fifo(p, tx_buf, words, fifo_shift);

698
	reinit_completion(&p->done);
699
	p->slave_aborted = false;
700 701

	ret = sh_msiof_spi_start(p, rx_buf);
702 703
	if (ret) {
		dev_err(&p->pdev->dev, "failed to start hardware\n");
704
		goto stop_ier;
705 706 707
	}

	/* wait for tx fifo to be emptied / rx fifo to be filled */
708
	ret = sh_msiof_wait_for_completion(p, &p->done);
709
	if (ret)
710
		goto stop_reset;
711 712 713 714 715 716 717 718

	/* read rx fifo */
	if (rx_buf)
		rx_fifo(p, rx_buf, words, fifo_shift);

	/* clear status bits */
	sh_msiof_reset_str(p);

719
	ret = sh_msiof_spi_stop(p, rx_buf);
720 721
	if (ret) {
		dev_err(&p->pdev->dev, "failed to shut down hardware\n");
722
		return ret;
723 724 725 726
	}

	return words;

727 728 729 730
stop_reset:
	sh_msiof_reset_str(p);
	sh_msiof_spi_stop(p, rx_buf);
stop_ier:
731
	sh_msiof_write(p, SIIER, 0);
732 733 734
	return ret;
}

735 736
static void sh_msiof_dma_complete(void *arg)
{
737
	complete(arg);
738 739 740 741 742 743 744 745 746 747
}

static int sh_msiof_dma_once(struct sh_msiof_spi_priv *p, const void *tx,
			     void *rx, unsigned int len)
{
	u32 ier_bits = 0;
	struct dma_async_tx_descriptor *desc_tx = NULL, *desc_rx = NULL;
	dma_cookie_t cookie;
	int ret;

748
	/* First prepare and submit the DMA request(s), as this may fail */
749
	if (rx) {
750
		ier_bits |= SIIER_RDREQE | SIIER_RDMAE;
751
		desc_rx = dmaengine_prep_slave_single(p->ctlr->dma_rx,
752
					p->rx_dma_addr, len, DMA_DEV_TO_MEM,
753
					DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
754 755
		if (!desc_rx)
			return -EAGAIN;
756 757

		desc_rx->callback = sh_msiof_dma_complete;
758
		desc_rx->callback_param = &p->done;
759
		cookie = dmaengine_submit(desc_rx);
760 761
		if (dma_submit_error(cookie))
			return cookie;
762 763 764
	}

	if (tx) {
765
		ier_bits |= SIIER_TDREQE | SIIER_TDMAE;
766
		dma_sync_single_for_device(p->ctlr->dma_tx->device->dev,
767
					   p->tx_dma_addr, len, DMA_TO_DEVICE);
768
		desc_tx = dmaengine_prep_slave_single(p->ctlr->dma_tx,
769
					p->tx_dma_addr, len, DMA_MEM_TO_DEV,
770 771 772 773 774 775
					DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
		if (!desc_tx) {
			ret = -EAGAIN;
			goto no_dma_tx;
		}

776 777
		desc_tx->callback = sh_msiof_dma_complete;
		desc_tx->callback_param = &p->done_txdma;
778 779 780
		cookie = dmaengine_submit(desc_tx);
		if (dma_submit_error(cookie)) {
			ret = cookie;
781
			goto no_dma_tx;
782 783 784
		}
	}

785
	/* 1 stage FIFO watermarks for DMA */
786
	sh_msiof_write(p, SIFCTR, SIFCTR_TFWM_1 | SIFCTR_RFWM_1);
787 788 789 790

	/* setup msiof transfer mode registers (32-bit words) */
	sh_msiof_spi_set_mode_regs(p, tx, rx, 32, len / 4);

791
	sh_msiof_write(p, SIIER, ier_bits);
792 793

	reinit_completion(&p->done);
794 795
	if (tx)
		reinit_completion(&p->done_txdma);
796
	p->slave_aborted = false;
797 798 799

	/* Now start DMA */
	if (rx)
800
		dma_async_issue_pending(p->ctlr->dma_rx);
801
	if (tx)
802
		dma_async_issue_pending(p->ctlr->dma_tx);
803

804 805 806
	ret = sh_msiof_spi_start(p, rx);
	if (ret) {
		dev_err(&p->pdev->dev, "failed to start hardware\n");
807
		goto stop_dma;
808 809
	}

810 811 812 813 814 815
	if (tx) {
		/* wait for tx DMA completion */
		ret = sh_msiof_wait_for_completion(p, &p->done_txdma);
		if (ret)
			goto stop_reset;
	}
816

817 818 819 820 821
	if (rx) {
		/* wait for rx DMA completion */
		ret = sh_msiof_wait_for_completion(p, &p->done);
		if (ret)
			goto stop_reset;
822

823
		sh_msiof_write(p, SIIER, 0);
824
	} else {
825
		/* wait for tx fifo to be emptied */
826
		sh_msiof_write(p, SIIER, SIIER_TEOFE);
827
		ret = sh_msiof_wait_for_completion(p, &p->done);
828 829 830 831
		if (ret)
			goto stop_reset;
	}

832 833 834 835 836 837 838 839 840 841
	/* clear status bits */
	sh_msiof_reset_str(p);

	ret = sh_msiof_spi_stop(p, rx);
	if (ret) {
		dev_err(&p->pdev->dev, "failed to shut down hardware\n");
		return ret;
	}

	if (rx)
842 843
		dma_sync_single_for_cpu(p->ctlr->dma_rx->device->dev,
					p->rx_dma_addr, len, DMA_FROM_DEVICE);
844 845 846 847 848 849

	return 0;

stop_reset:
	sh_msiof_reset_str(p);
	sh_msiof_spi_stop(p, rx);
850
stop_dma:
851
	if (tx)
852
		dmaengine_terminate_all(p->ctlr->dma_tx);
853
no_dma_tx:
854
	if (rx)
855
		dmaengine_terminate_all(p->ctlr->dma_rx);
856
	sh_msiof_write(p, SIIER, 0);
857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
	return ret;
}

static void copy_bswap32(u32 *dst, const u32 *src, unsigned int words)
{
	/* src or dst can be unaligned, but not both */
	if ((unsigned long)src & 3) {
		while (words--) {
			*dst++ = swab32(get_unaligned(src));
			src++;
		}
	} else if ((unsigned long)dst & 3) {
		while (words--) {
			put_unaligned(swab32(*src++), dst);
			dst++;
		}
	} else {
		while (words--)
			*dst++ = swab32(*src++);
	}
}

static void copy_wswap32(u32 *dst, const u32 *src, unsigned int words)
{
	/* src or dst can be unaligned, but not both */
	if ((unsigned long)src & 3) {
		while (words--) {
			*dst++ = swahw32(get_unaligned(src));
			src++;
		}
	} else if ((unsigned long)dst & 3) {
		while (words--) {
			put_unaligned(swahw32(*src++), dst);
			dst++;
		}
	} else {
		while (words--)
			*dst++ = swahw32(*src++);
	}
}

static void copy_plain32(u32 *dst, const u32 *src, unsigned int words)
{
	memcpy(dst, src, words * 4);
}

903
static int sh_msiof_transfer_one(struct spi_controller *ctlr,
904 905
				 struct spi_device *spi,
				 struct spi_transfer *t)
906
{
907
	struct sh_msiof_spi_priv *p = spi_controller_get_devdata(ctlr);
908
	void (*copy32)(u32 *, const u32 *, unsigned int);
909 910
	void (*tx_fifo)(struct sh_msiof_spi_priv *, const void *, int, int);
	void (*rx_fifo)(struct sh_msiof_spi_priv *, void *, int, int);
911 912 913 914 915 916
	const void *tx_buf = t->tx_buf;
	void *rx_buf = t->rx_buf;
	unsigned int len = t->len;
	unsigned int bits = t->bits_per_word;
	unsigned int bytes_per_word;
	unsigned int words;
917
	int n;
918
	bool swab;
919 920
	int ret;

921 922 923
	/* reset registers */
	sh_msiof_spi_reset_regs(p);

924
	/* setup clocks (clock already enabled in chipselect()) */
925
	if (!spi_controller_is_slave(p->ctlr))
926
		sh_msiof_spi_set_clk_regs(p, clk_get_rate(p->clk), t->speed_hz);
927

928
	while (ctlr->dma_tx && len > 15) {
929 930 931 932
		/*
		 *  DMA supports 32-bit words only, hence pack 8-bit and 16-bit
		 *  words, with byte resp. word swapping.
		 */
933 934 935
		unsigned int l = 0;

		if (tx_buf)
936
			l = min(round_down(len, 4), p->tx_fifo_size * 4);
937
		if (rx_buf)
938
			l = min(round_down(len, 4), p->rx_fifo_size * 4);
939 940 941 942 943 944 945 946 947 948 949

		if (bits <= 8) {
			copy32 = copy_bswap32;
		} else if (bits <= 16) {
			copy32 = copy_wswap32;
		} else {
			copy32 = copy_plain32;
		}

		if (tx_buf)
			copy32(p->tx_dma_page, tx_buf, l / 4);
950

951
		ret = sh_msiof_dma_once(p, tx_buf, rx_buf, l);
952
		if (ret == -EAGAIN) {
953 954
			dev_warn_once(&p->pdev->dev,
				"DMA not available, falling back to PIO\n");
955 956
			break;
		}
957 958 959 960 961 962 963 964 965 966 967 968 969 970
		if (ret)
			return ret;

		if (rx_buf) {
			copy32(rx_buf, p->rx_dma_page, l / 4);
			rx_buf += l;
		}
		if (tx_buf)
			tx_buf += l;

		len -= l;
		if (!len)
			return 0;
	}
971

972
	if (bits <= 8 && len > 15) {
973 974 975 976 977 978
		bits = 32;
		swab = true;
	} else {
		swab = false;
	}

979 980 981 982 983 984 985
	/* setup bytes per word and fifo read/write functions */
	if (bits <= 8) {
		bytes_per_word = 1;
		tx_fifo = sh_msiof_spi_write_fifo_8;
		rx_fifo = sh_msiof_spi_read_fifo_8;
	} else if (bits <= 16) {
		bytes_per_word = 2;
986
		if ((unsigned long)tx_buf & 0x01)
987 988 989 990
			tx_fifo = sh_msiof_spi_write_fifo_16u;
		else
			tx_fifo = sh_msiof_spi_write_fifo_16;

991
		if ((unsigned long)rx_buf & 0x01)
992 993 994
			rx_fifo = sh_msiof_spi_read_fifo_16u;
		else
			rx_fifo = sh_msiof_spi_read_fifo_16;
995 996
	} else if (swab) {
		bytes_per_word = 4;
997
		if ((unsigned long)tx_buf & 0x03)
998 999 1000 1001
			tx_fifo = sh_msiof_spi_write_fifo_s32u;
		else
			tx_fifo = sh_msiof_spi_write_fifo_s32;

1002
		if ((unsigned long)rx_buf & 0x03)
1003 1004 1005
			rx_fifo = sh_msiof_spi_read_fifo_s32u;
		else
			rx_fifo = sh_msiof_spi_read_fifo_s32;
1006 1007
	} else {
		bytes_per_word = 4;
1008
		if ((unsigned long)tx_buf & 0x03)
1009 1010 1011 1012
			tx_fifo = sh_msiof_spi_write_fifo_32u;
		else
			tx_fifo = sh_msiof_spi_write_fifo_32;

1013
		if ((unsigned long)rx_buf & 0x03)
1014 1015 1016 1017 1018 1019
			rx_fifo = sh_msiof_spi_read_fifo_32u;
		else
			rx_fifo = sh_msiof_spi_read_fifo_32;
	}

	/* transfer in fifo sized chunks */
1020 1021 1022 1023
	words = len / bytes_per_word;

	while (words > 0) {
		n = sh_msiof_spi_txrx_once(p, tx_fifo, rx_fifo, tx_buf, rx_buf,
1024 1025
					   words, bits);
		if (n < 0)
1026
			return n;
1027

1028 1029 1030 1031
		if (tx_buf)
			tx_buf += n * bytes_per_word;
		if (rx_buf)
			rx_buf += n * bytes_per_word;
1032
		words -= n;
1033 1034 1035 1036 1037 1038 1039 1040

		if (words == 0 && (len % bytes_per_word)) {
			words = len % bytes_per_word;
			bits = t->bits_per_word;
			bytes_per_word = 1;
			tx_fifo = sh_msiof_spi_write_fifo_8;
			rx_fifo = sh_msiof_spi_read_fifo_8;
		}
1041 1042 1043 1044 1045
	}

	return 0;
}

1046
static const struct sh_msiof_chipdata sh_data = {
1047
	.bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 32),
1048 1049
	.tx_fifo_size = 64,
	.rx_fifo_size = 64,
1050
	.ctlr_flags = 0,
1051
	.min_div_pow = 0,
1052 1053 1054
};

static const struct sh_msiof_chipdata rcar_gen2_data = {
1055 1056
	.bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16) |
			      SPI_BPW_MASK(24) | SPI_BPW_MASK(32),
1057 1058
	.tx_fifo_size = 64,
	.rx_fifo_size = 64,
1059
	.ctlr_flags = SPI_CONTROLLER_MUST_TX,
1060
	.min_div_pow = 0,
1061 1062
};

1063
static const struct sh_msiof_chipdata rcar_gen3_data = {
1064 1065
	.bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16) |
			      SPI_BPW_MASK(24) | SPI_BPW_MASK(32),
1066
	.tx_fifo_size = 64,
1067
	.rx_fifo_size = 64,
1068
	.ctlr_flags = SPI_CONTROLLER_MUST_TX,
1069
	.min_div_pow = 1,
1070 1071 1072 1073
};

static const struct of_device_id sh_msiof_match[] = {
	{ .compatible = "renesas,sh-mobile-msiof", .data = &sh_data },
1074 1075
	{ .compatible = "renesas,msiof-r8a7743",   .data = &rcar_gen2_data },
	{ .compatible = "renesas,msiof-r8a7745",   .data = &rcar_gen2_data },
1076 1077 1078 1079 1080 1081 1082 1083
	{ .compatible = "renesas,msiof-r8a7790",   .data = &rcar_gen2_data },
	{ .compatible = "renesas,msiof-r8a7791",   .data = &rcar_gen2_data },
	{ .compatible = "renesas,msiof-r8a7792",   .data = &rcar_gen2_data },
	{ .compatible = "renesas,msiof-r8a7793",   .data = &rcar_gen2_data },
	{ .compatible = "renesas,msiof-r8a7794",   .data = &rcar_gen2_data },
	{ .compatible = "renesas,rcar-gen2-msiof", .data = &rcar_gen2_data },
	{ .compatible = "renesas,msiof-r8a7796",   .data = &rcar_gen3_data },
	{ .compatible = "renesas,rcar-gen3-msiof", .data = &rcar_gen3_data },
1084
	{ .compatible = "renesas,sh-msiof",        .data = &sh_data }, /* Deprecated */
1085 1086 1087 1088
	{},
};
MODULE_DEVICE_TABLE(of, sh_msiof_match);

1089 1090 1091 1092 1093
#ifdef CONFIG_OF
static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
{
	struct sh_msiof_spi_info *info;
	struct device_node *np = dev->of_node;
1094
	u32 num_cs = 1;
1095 1096

	info = devm_kzalloc(dev, sizeof(struct sh_msiof_spi_info), GFP_KERNEL);
1097
	if (!info)
1098 1099
		return NULL;

1100 1101 1102
	info->mode = of_property_read_bool(np, "spi-slave") ? MSIOF_SPI_SLAVE
							    : MSIOF_SPI_MASTER;

1103
	/* Parse the MSIOF properties */
1104 1105
	if (info->mode == MSIOF_SPI_MASTER)
		of_property_read_u32(np, "num-cs", &num_cs);
1106 1107 1108 1109
	of_property_read_u32(np, "renesas,tx-fifo-size",
					&info->tx_fifo_override);
	of_property_read_u32(np, "renesas,rx-fifo-size",
					&info->rx_fifo_override);
1110 1111
	of_property_read_u32(np, "renesas,dtdl", &info->dtdl);
	of_property_read_u32(np, "renesas,syncdl", &info->syncdl);
1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123

	info->num_chipselect = num_cs;

	return info;
}
#else
static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
{
	return NULL;
}
#endif

1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134
static struct dma_chan *sh_msiof_request_dma_chan(struct device *dev,
	enum dma_transfer_direction dir, unsigned int id, dma_addr_t port_addr)
{
	dma_cap_mask_t mask;
	struct dma_chan *chan;
	struct dma_slave_config cfg;
	int ret;

	dma_cap_zero(mask);
	dma_cap_set(DMA_SLAVE, mask);

1135 1136 1137
	chan = dma_request_slave_channel_compat(mask, shdma_chan_filter,
				(void *)(unsigned long)id, dev,
				dir == DMA_MEM_TO_DEV ? "tx" : "rx");
1138
	if (!chan) {
1139
		dev_warn(dev, "dma_request_slave_channel_compat failed\n");
1140 1141 1142 1143 1144
		return NULL;
	}

	memset(&cfg, 0, sizeof(cfg));
	cfg.direction = dir;
1145
	if (dir == DMA_MEM_TO_DEV) {
1146
		cfg.dst_addr = port_addr;
1147 1148
		cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
	} else {
1149
		cfg.src_addr = port_addr;
1150 1151
		cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
	}
1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166

	ret = dmaengine_slave_config(chan, &cfg);
	if (ret) {
		dev_warn(dev, "dmaengine_slave_config failed %d\n", ret);
		dma_release_channel(chan);
		return NULL;
	}

	return chan;
}

static int sh_msiof_request_dma(struct sh_msiof_spi_priv *p)
{
	struct platform_device *pdev = p->pdev;
	struct device *dev = &pdev->dev;
1167
	const struct sh_msiof_spi_info *info = p->info;
1168
	unsigned int dma_tx_id, dma_rx_id;
1169
	const struct resource *res;
1170
	struct spi_controller *ctlr;
1171
	struct device *tx_dev, *rx_dev;
1172

1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183
	if (dev->of_node) {
		/* In the OF case we will get the slave IDs from the DT */
		dma_tx_id = 0;
		dma_rx_id = 0;
	} else if (info && info->dma_tx_id && info->dma_rx_id) {
		dma_tx_id = info->dma_tx_id;
		dma_rx_id = info->dma_rx_id;
	} else {
		/* The driver assumes no error */
		return 0;
	}
1184 1185 1186 1187 1188 1189

	/* The DMA engine uses the second register set, if present */
	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
	if (!res)
		res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

1190 1191
	ctlr = p->ctlr;
	ctlr->dma_tx = sh_msiof_request_dma_chan(dev, DMA_MEM_TO_DEV,
1192
						 dma_tx_id, res->start + SITFDR);
1193
	if (!ctlr->dma_tx)
1194 1195
		return -ENODEV;

1196
	ctlr->dma_rx = sh_msiof_request_dma_chan(dev, DMA_DEV_TO_MEM,
1197
						 dma_rx_id, res->start + SIRFDR);
1198
	if (!ctlr->dma_rx)
1199 1200 1201 1202 1203 1204 1205 1206 1207 1208
		goto free_tx_chan;

	p->tx_dma_page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
	if (!p->tx_dma_page)
		goto free_rx_chan;

	p->rx_dma_page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
	if (!p->rx_dma_page)
		goto free_tx_page;

1209
	tx_dev = ctlr->dma_tx->device->dev;
1210
	p->tx_dma_addr = dma_map_single(tx_dev, p->tx_dma_page, PAGE_SIZE,
1211
					DMA_TO_DEVICE);
1212
	if (dma_mapping_error(tx_dev, p->tx_dma_addr))
1213 1214
		goto free_rx_page;

1215
	rx_dev = ctlr->dma_rx->device->dev;
1216
	p->rx_dma_addr = dma_map_single(rx_dev, p->rx_dma_page, PAGE_SIZE,
1217
					DMA_FROM_DEVICE);
1218
	if (dma_mapping_error(rx_dev, p->rx_dma_addr))
1219 1220 1221 1222 1223 1224
		goto unmap_tx_page;

	dev_info(dev, "DMA available");
	return 0;

unmap_tx_page:
1225
	dma_unmap_single(tx_dev, p->tx_dma_addr, PAGE_SIZE, DMA_TO_DEVICE);
1226 1227 1228 1229 1230
free_rx_page:
	free_page((unsigned long)p->rx_dma_page);
free_tx_page:
	free_page((unsigned long)p->tx_dma_page);
free_rx_chan:
1231
	dma_release_channel(ctlr->dma_rx);
1232
free_tx_chan:
1233 1234
	dma_release_channel(ctlr->dma_tx);
	ctlr->dma_tx = NULL;
1235 1236 1237 1238 1239
	return -ENODEV;
}

static void sh_msiof_release_dma(struct sh_msiof_spi_priv *p)
{
1240
	struct spi_controller *ctlr = p->ctlr;
1241

1242
	if (!ctlr->dma_tx)
1243 1244
		return;

1245 1246 1247 1248
	dma_unmap_single(ctlr->dma_rx->device->dev, p->rx_dma_addr, PAGE_SIZE,
			 DMA_FROM_DEVICE);
	dma_unmap_single(ctlr->dma_tx->device->dev, p->tx_dma_addr, PAGE_SIZE,
			 DMA_TO_DEVICE);
1249 1250
	free_page((unsigned long)p->rx_dma_page);
	free_page((unsigned long)p->tx_dma_page);
1251 1252
	dma_release_channel(ctlr->dma_rx);
	dma_release_channel(ctlr->dma_tx);
1253 1254
}

1255 1256
static int sh_msiof_spi_probe(struct platform_device *pdev)
{
1257
	struct spi_controller *ctlr;
1258
	const struct sh_msiof_chipdata *chipdata;
1259
	struct sh_msiof_spi_info *info;
1260 1261 1262 1263
	struct sh_msiof_spi_priv *p;
	int i;
	int ret;

1264 1265
	chipdata = of_device_get_match_data(&pdev->dev);
	if (chipdata) {
1266
		info = sh_msiof_spi_parse_dt(&pdev->dev);
1267
	} else {
1268
		chipdata = (const void *)pdev->id_entry->driver_data;
1269
		info = dev_get_platdata(&pdev->dev);
1270
	}
1271

1272
	if (!info) {
1273
		dev_err(&pdev->dev, "failed to obtain device info\n");
1274
		return -ENXIO;
1275 1276
	}

1277
	if (info->mode == MSIOF_SPI_SLAVE)
1278 1279
		ctlr = spi_alloc_slave(&pdev->dev,
				       sizeof(struct sh_msiof_spi_priv));
1280
	else
1281 1282 1283
		ctlr = spi_alloc_master(&pdev->dev,
					sizeof(struct sh_msiof_spi_priv));
	if (ctlr == NULL)
1284 1285
		return -ENOMEM;

1286
	p = spi_controller_get_devdata(ctlr);
1287 1288

	platform_set_drvdata(pdev, p);
1289
	p->ctlr = ctlr;
1290
	p->info = info;
1291
	p->min_div_pow = chipdata->min_div_pow;
1292

1293
	init_completion(&p->done);
1294
	init_completion(&p->done_txdma);
1295

1296
	p->clk = devm_clk_get(&pdev->dev, NULL);
1297
	if (IS_ERR(p->clk)) {
1298
		dev_err(&pdev->dev, "cannot get clock\n");
1299 1300 1301 1302 1303
		ret = PTR_ERR(p->clk);
		goto err1;
	}

	i = platform_get_irq(pdev, 0);
1304
	if (i < 0) {
1305
		ret = i;
1306
		goto err1;
1307
	}
1308

1309
	p->mapbase = devm_platform_ioremap_resource(pdev, 0);
1310 1311 1312
	if (IS_ERR(p->mapbase)) {
		ret = PTR_ERR(p->mapbase);
		goto err1;
1313 1314
	}

1315 1316
	ret = devm_request_irq(&pdev->dev, i, sh_msiof_spi_irq, 0,
			       dev_name(&pdev->dev), p);
1317 1318
	if (ret) {
		dev_err(&pdev->dev, "unable to request irq\n");
1319
		goto err1;
1320 1321 1322 1323 1324 1325
	}

	p->pdev = pdev;
	pm_runtime_enable(&pdev->dev);

	/* Platform data may override FIFO sizes */
1326 1327
	p->tx_fifo_size = chipdata->tx_fifo_size;
	p->rx_fifo_size = chipdata->rx_fifo_size;
1328 1329 1330 1331 1332
	if (p->info->tx_fifo_override)
		p->tx_fifo_size = p->info->tx_fifo_override;
	if (p->info->rx_fifo_override)
		p->rx_fifo_size = p->info->rx_fifo_override;

1333 1334 1335 1336 1337
	/* init controller code */
	ctlr->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
	ctlr->mode_bits |= SPI_LSB_FIRST | SPI_3WIRE;
	ctlr->flags = chipdata->ctlr_flags;
	ctlr->bus_num = pdev->id;
1338
	ctlr->num_chipselect = p->info->num_chipselect;
1339 1340 1341 1342
	ctlr->dev.of_node = pdev->dev.of_node;
	ctlr->setup = sh_msiof_spi_setup;
	ctlr->prepare_message = sh_msiof_prepare_message;
	ctlr->slave_abort = sh_msiof_slave_abort;
1343
	ctlr->bits_per_word_mask = chipdata->bits_per_word_mask;
1344 1345
	ctlr->auto_runtime_pm = true;
	ctlr->transfer_one = sh_msiof_transfer_one;
1346
	ctlr->use_gpio_descriptors = true;
1347
	ctlr->max_native_cs = MAX_SS;
1348

1349 1350 1351 1352
	ret = sh_msiof_request_dma(p);
	if (ret < 0)
		dev_warn(&pdev->dev, "DMA not available, using PIO\n");

1353
	ret = devm_spi_register_controller(&pdev->dev, ctlr);
1354
	if (ret < 0) {
1355
		dev_err(&pdev->dev, "devm_spi_register_controller error.\n");
1356 1357
		goto err2;
	}
1358

1359
	return 0;
1360

1361
 err2:
1362
	sh_msiof_release_dma(p);
1363 1364
	pm_runtime_disable(&pdev->dev);
 err1:
1365
	spi_controller_put(ctlr);
1366 1367 1368 1369 1370
	return ret;
}

static int sh_msiof_spi_remove(struct platform_device *pdev)
{
1371 1372 1373
	struct sh_msiof_spi_priv *p = platform_get_drvdata(pdev);

	sh_msiof_release_dma(p);
1374 1375
	pm_runtime_disable(&pdev->dev);
	return 0;
1376 1377
}

1378
static const struct platform_device_id spi_driver_ids[] = {
1379
	{ "spi_sh_msiof",	(kernel_ulong_t)&sh_data },
1380 1381
	{},
};
1382
MODULE_DEVICE_TABLE(platform, spi_driver_ids);
1383

1384 1385 1386
#ifdef CONFIG_PM_SLEEP
static int sh_msiof_spi_suspend(struct device *dev)
{
1387
	struct sh_msiof_spi_priv *p = dev_get_drvdata(dev);
1388

1389
	return spi_controller_suspend(p->ctlr);
1390 1391 1392 1393
}

static int sh_msiof_spi_resume(struct device *dev)
{
1394
	struct sh_msiof_spi_priv *p = dev_get_drvdata(dev);
1395

1396
	return spi_controller_resume(p->ctlr);
1397 1398 1399 1400
}

static SIMPLE_DEV_PM_OPS(sh_msiof_spi_pm_ops, sh_msiof_spi_suspend,
			 sh_msiof_spi_resume);
1401
#define DEV_PM_OPS	(&sh_msiof_spi_pm_ops)
1402 1403 1404 1405
#else
#define DEV_PM_OPS	NULL
#endif /* CONFIG_PM_SLEEP */

1406 1407 1408
static struct platform_driver sh_msiof_spi_drv = {
	.probe		= sh_msiof_spi_probe,
	.remove		= sh_msiof_spi_remove,
1409
	.id_table	= spi_driver_ids,
1410 1411
	.driver		= {
		.name		= "spi_sh_msiof",
1412
		.pm		= DEV_PM_OPS,
1413
		.of_match_table = of_match_ptr(sh_msiof_match),
1414 1415
	},
};
1416
module_platform_driver(sh_msiof_spi_drv);
1417

1418
MODULE_DESCRIPTION("SuperH MSIOF SPI Controller Interface Driver");
1419 1420 1421
MODULE_AUTHOR("Magnus Damm");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:spi_sh_msiof");