Linux Audio

Check our new training course

Loading...
v3.1
   1/*
   2 * Freescale SPI controller driver.
   3 *
   4 * Maintainer: Kumar Gala
   5 *
   6 * Copyright (C) 2006 Polycom, Inc.
   7 * Copyright 2010 Freescale Semiconductor, Inc.
   8 *
   9 * CPM SPI and QE buffer descriptors mode support:
  10 * Copyright (c) 2009  MontaVista Software, Inc.
  11 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
  12 *
 
 
 
 
  13 * This program is free software; you can redistribute  it and/or modify it
  14 * under  the terms of  the GNU General  Public License as published by the
  15 * Free Software Foundation;  either version 2 of the  License, or (at your
  16 * option) any later version.
  17 */
  18#include <linux/module.h>
  19#include <linux/types.h>
  20#include <linux/kernel.h>
  21#include <linux/interrupt.h>
  22#include <linux/delay.h>
  23#include <linux/irq.h>
  24#include <linux/spi/spi.h>
  25#include <linux/spi/spi_bitbang.h>
  26#include <linux/platform_device.h>
  27#include <linux/fsl_devices.h>
  28#include <linux/dma-mapping.h>
  29#include <linux/mm.h>
  30#include <linux/mutex.h>
  31#include <linux/of.h>
  32#include <linux/of_platform.h>
 
 
  33#include <linux/gpio.h>
  34#include <linux/of_gpio.h>
  35
  36#include <sysdev/fsl_soc.h>
  37#include <asm/cpm.h>
  38#include <asm/qe.h>
  39
  40#include "spi-fsl-lib.h"
 
 
  41
  42/* CPM1 and CPM2 are mutually exclusive. */
  43#ifdef CONFIG_CPM1
  44#include <asm/cpm1.h>
  45#define CPM_SPI_CMD mk_cr_cmd(CPM_CR_CH_SPI, 0)
  46#else
  47#include <asm/cpm2.h>
  48#define CPM_SPI_CMD mk_cr_cmd(CPM_CR_SPI_PAGE, CPM_CR_SPI_SBLOCK, 0, 0)
  49#endif
  50
  51/* SPI Controller registers */
  52struct fsl_spi_reg {
  53	u8 res1[0x20];
  54	__be32 mode;
  55	__be32 event;
  56	__be32 mask;
  57	__be32 command;
  58	__be32 transmit;
  59	__be32 receive;
  60};
  61
  62/* SPI Controller mode register definitions */
  63#define	SPMODE_LOOP		(1 << 30)
  64#define	SPMODE_CI_INACTIVEHIGH	(1 << 29)
  65#define	SPMODE_CP_BEGIN_EDGECLK	(1 << 28)
  66#define	SPMODE_DIV16		(1 << 27)
  67#define	SPMODE_REV		(1 << 26)
  68#define	SPMODE_MS		(1 << 25)
  69#define	SPMODE_ENABLE		(1 << 24)
  70#define	SPMODE_LEN(x)		((x) << 20)
  71#define	SPMODE_PM(x)		((x) << 16)
  72#define	SPMODE_OP		(1 << 14)
  73#define	SPMODE_CG(x)		((x) << 7)
  74
  75/*
  76 * Default for SPI Mode:
  77 *	SPI MODE 0 (inactive low, phase middle, MSB, 8-bit length, slow clk
  78 */
  79#define	SPMODE_INIT_VAL (SPMODE_CI_INACTIVEHIGH | SPMODE_DIV16 | SPMODE_REV | \
  80			 SPMODE_MS | SPMODE_LEN(7) | SPMODE_PM(0xf))
  81
  82/* SPIE register values */
  83#define	SPIE_NE		0x00000200	/* Not empty */
  84#define	SPIE_NF		0x00000100	/* Not full */
  85
  86/* SPIM register values */
  87#define	SPIM_NE		0x00000200	/* Not empty */
  88#define	SPIM_NF		0x00000100	/* Not full */
  89
  90#define	SPIE_TXB	0x00000200	/* Last char is written to tx fifo */
  91#define	SPIE_RXB	0x00000100	/* Last char is written to rx buf */
 
  92
  93/* SPCOM register values */
  94#define	SPCOM_STR	(1 << 23)	/* Start transmit */
 
 
 
 
 
 
 
 
 
 
  95
  96#define	SPI_PRAM_SIZE	0x100
  97#define	SPI_MRBLR	((unsigned int)PAGE_SIZE)
 
  98
  99static void *fsl_dummy_rx;
 100static DEFINE_MUTEX(fsl_dummy_rx_lock);
 101static int fsl_dummy_rx_refcnt;
 
 
 
 
 102
 103static void fsl_spi_change_mode(struct spi_device *spi)
 104{
 105	struct mpc8xxx_spi *mspi = spi_master_get_devdata(spi->master);
 106	struct spi_mpc8xxx_cs *cs = spi->controller_state;
 107	struct fsl_spi_reg *reg_base = mspi->reg_base;
 108	__be32 __iomem *mode = &reg_base->mode;
 109	unsigned long flags;
 110
 111	if (cs->hw_mode == mpc8xxx_spi_read_reg(mode))
 112		return;
 113
 114	/* Turn off IRQs locally to minimize time that SPI is disabled. */
 115	local_irq_save(flags);
 116
 117	/* Turn off SPI unit prior changing mode */
 118	mpc8xxx_spi_write_reg(mode, cs->hw_mode & ~SPMODE_ENABLE);
 119
 120	/* When in CPM mode, we need to reinit tx and rx. */
 121	if (mspi->flags & SPI_CPM_MODE) {
 122		if (mspi->flags & SPI_QE) {
 123			qe_issue_cmd(QE_INIT_TX_RX, mspi->subblock,
 124				     QE_CR_PROTOCOL_UNSPECIFIED, 0);
 125		} else {
 126			cpm_command(CPM_SPI_CMD, CPM_CR_INIT_TRX);
 127			if (mspi->flags & SPI_CPM1) {
 128				out_be16(&mspi->pram->rbptr,
 129					 in_be16(&mspi->pram->rbase));
 130				out_be16(&mspi->pram->tbptr,
 131					 in_be16(&mspi->pram->tbase));
 132			}
 133		}
 134	}
 135	mpc8xxx_spi_write_reg(mode, cs->hw_mode);
 136	local_irq_restore(flags);
 137}
 138
 139static void fsl_spi_chipselect(struct spi_device *spi, int value)
 140{
 141	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
 142	struct fsl_spi_platform_data *pdata = spi->dev.parent->platform_data;
 143	bool pol = spi->mode & SPI_CS_HIGH;
 144	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
 145
 
 
 146	if (value == BITBANG_CS_INACTIVE) {
 147		if (pdata->cs_control)
 148			pdata->cs_control(spi, !pol);
 149	}
 150
 151	if (value == BITBANG_CS_ACTIVE) {
 152		mpc8xxx_spi->rx_shift = cs->rx_shift;
 153		mpc8xxx_spi->tx_shift = cs->tx_shift;
 154		mpc8xxx_spi->get_rx = cs->get_rx;
 155		mpc8xxx_spi->get_tx = cs->get_tx;
 156
 157		fsl_spi_change_mode(spi);
 158
 159		if (pdata->cs_control)
 160			pdata->cs_control(spi, pol);
 161	}
 162}
 163
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 164static int mspi_apply_cpu_mode_quirks(struct spi_mpc8xxx_cs *cs,
 165				struct spi_device *spi,
 166				struct mpc8xxx_spi *mpc8xxx_spi,
 167				int bits_per_word)
 168{
 169	cs->rx_shift = 0;
 170	cs->tx_shift = 0;
 171	if (bits_per_word <= 8) {
 172		cs->get_rx = mpc8xxx_spi_rx_buf_u8;
 173		cs->get_tx = mpc8xxx_spi_tx_buf_u8;
 174		if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
 175			cs->rx_shift = 16;
 176			cs->tx_shift = 24;
 177		}
 178	} else if (bits_per_word <= 16) {
 179		cs->get_rx = mpc8xxx_spi_rx_buf_u16;
 180		cs->get_tx = mpc8xxx_spi_tx_buf_u16;
 181		if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
 182			cs->rx_shift = 16;
 183			cs->tx_shift = 16;
 184		}
 185	} else if (bits_per_word <= 32) {
 186		cs->get_rx = mpc8xxx_spi_rx_buf_u32;
 187		cs->get_tx = mpc8xxx_spi_tx_buf_u32;
 188	} else
 189		return -EINVAL;
 190
 191	if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE &&
 192	    spi->mode & SPI_LSB_FIRST) {
 193		cs->tx_shift = 0;
 194		if (bits_per_word <= 8)
 195			cs->rx_shift = 8;
 196		else
 197			cs->rx_shift = 0;
 198	}
 199	mpc8xxx_spi->rx_shift = cs->rx_shift;
 200	mpc8xxx_spi->tx_shift = cs->tx_shift;
 201	mpc8xxx_spi->get_rx = cs->get_rx;
 202	mpc8xxx_spi->get_tx = cs->get_tx;
 203
 204	return bits_per_word;
 205}
 206
 207static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs,
 208				struct spi_device *spi,
 209				int bits_per_word)
 210{
 211	/* QE uses Little Endian for words > 8
 212	 * so transform all words > 8 into 8 bits
 213	 * Unfortnatly that doesn't work for LSB so
 214	 * reject these for now */
 215	/* Note: 32 bits word, LSB works iff
 216	 * tfcr/rfcr is set to CPMFCR_GBL */
 217	if (spi->mode & SPI_LSB_FIRST &&
 218	    bits_per_word > 8)
 219		return -EINVAL;
 220	if (bits_per_word > 8)
 221		return 8; /* pretend its 8 bits */
 222	return bits_per_word;
 223}
 224
 225static int fsl_spi_setup_transfer(struct spi_device *spi,
 226					struct spi_transfer *t)
 227{
 228	struct mpc8xxx_spi *mpc8xxx_spi;
 229	int bits_per_word = 0;
 230	u8 pm;
 231	u32 hz = 0;
 232	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
 233
 234	mpc8xxx_spi = spi_master_get_devdata(spi->master);
 235
 236	if (t) {
 237		bits_per_word = t->bits_per_word;
 238		hz = t->speed_hz;
 239	}
 240
 241	/* spi_transfer level calls that work per-word */
 242	if (!bits_per_word)
 243		bits_per_word = spi->bits_per_word;
 244
 245	/* Make sure its a bit width we support [4..16, 32] */
 246	if ((bits_per_word < 4)
 247	    || ((bits_per_word > 16) && (bits_per_word != 32)))
 248		return -EINVAL;
 249
 250	if (!hz)
 251		hz = spi->max_speed_hz;
 252
 253	if (!(mpc8xxx_spi->flags & SPI_CPM_MODE))
 254		bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi,
 255							   mpc8xxx_spi,
 256							   bits_per_word);
 257	else if (mpc8xxx_spi->flags & SPI_QE)
 258		bits_per_word = mspi_apply_qe_mode_quirks(cs, spi,
 259							  bits_per_word);
 260
 261	if (bits_per_word < 0)
 262		return bits_per_word;
 263
 264	if (bits_per_word == 32)
 265		bits_per_word = 0;
 266	else
 267		bits_per_word = bits_per_word - 1;
 268
 269	/* mask out bits we are going to set */
 270	cs->hw_mode &= ~(SPMODE_LEN(0xF) | SPMODE_DIV16
 271				  | SPMODE_PM(0xF));
 272
 273	cs->hw_mode |= SPMODE_LEN(bits_per_word);
 274
 275	if ((mpc8xxx_spi->spibrg / hz) > 64) {
 276		cs->hw_mode |= SPMODE_DIV16;
 277		pm = (mpc8xxx_spi->spibrg - 1) / (hz * 64) + 1;
 278
 279		WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. "
 280			  "Will use %d Hz instead.\n", dev_name(&spi->dev),
 281			  hz, mpc8xxx_spi->spibrg / 1024);
 282		if (pm > 16)
 283			pm = 16;
 284	} else {
 285		pm = (mpc8xxx_spi->spibrg - 1) / (hz * 4) + 1;
 286	}
 287	if (pm)
 288		pm--;
 289
 290	cs->hw_mode |= SPMODE_PM(pm);
 291
 292	fsl_spi_change_mode(spi);
 293	return 0;
 294}
 295
 296static void fsl_spi_cpm_bufs_start(struct mpc8xxx_spi *mspi)
 297{
 298	struct cpm_buf_desc __iomem *tx_bd = mspi->tx_bd;
 299	struct cpm_buf_desc __iomem *rx_bd = mspi->rx_bd;
 300	unsigned int xfer_len = min(mspi->count, SPI_MRBLR);
 301	unsigned int xfer_ofs;
 302	struct fsl_spi_reg *reg_base = mspi->reg_base;
 303
 304	xfer_ofs = mspi->xfer_in_progress->len - mspi->count;
 305
 306	if (mspi->rx_dma == mspi->dma_dummy_rx)
 307		out_be32(&rx_bd->cbd_bufaddr, mspi->rx_dma);
 308	else
 309		out_be32(&rx_bd->cbd_bufaddr, mspi->rx_dma + xfer_ofs);
 310	out_be16(&rx_bd->cbd_datlen, 0);
 311	out_be16(&rx_bd->cbd_sc, BD_SC_EMPTY | BD_SC_INTRPT | BD_SC_WRAP);
 312
 313	if (mspi->tx_dma == mspi->dma_dummy_tx)
 314		out_be32(&tx_bd->cbd_bufaddr, mspi->tx_dma);
 315	else
 316		out_be32(&tx_bd->cbd_bufaddr, mspi->tx_dma + xfer_ofs);
 317	out_be16(&tx_bd->cbd_datlen, xfer_len);
 318	out_be16(&tx_bd->cbd_sc, BD_SC_READY | BD_SC_INTRPT | BD_SC_WRAP |
 319				 BD_SC_LAST);
 320
 321	/* start transfer */
 322	mpc8xxx_spi_write_reg(&reg_base->command, SPCOM_STR);
 323}
 324
 325static int fsl_spi_cpm_bufs(struct mpc8xxx_spi *mspi,
 326				struct spi_transfer *t, bool is_dma_mapped)
 327{
 328	struct device *dev = mspi->dev;
 329	struct fsl_spi_reg *reg_base = mspi->reg_base;
 330
 331	if (is_dma_mapped) {
 332		mspi->map_tx_dma = 0;
 333		mspi->map_rx_dma = 0;
 334	} else {
 335		mspi->map_tx_dma = 1;
 336		mspi->map_rx_dma = 1;
 337	}
 338
 339	if (!t->tx_buf) {
 340		mspi->tx_dma = mspi->dma_dummy_tx;
 341		mspi->map_tx_dma = 0;
 342	}
 343
 344	if (!t->rx_buf) {
 345		mspi->rx_dma = mspi->dma_dummy_rx;
 346		mspi->map_rx_dma = 0;
 347	}
 348
 349	if (mspi->map_tx_dma) {
 350		void *nonconst_tx = (void *)mspi->tx; /* shut up gcc */
 351
 352		mspi->tx_dma = dma_map_single(dev, nonconst_tx, t->len,
 353					      DMA_TO_DEVICE);
 354		if (dma_mapping_error(dev, mspi->tx_dma)) {
 355			dev_err(dev, "unable to map tx dma\n");
 356			return -ENOMEM;
 357		}
 358	} else if (t->tx_buf) {
 359		mspi->tx_dma = t->tx_dma;
 360	}
 361
 362	if (mspi->map_rx_dma) {
 363		mspi->rx_dma = dma_map_single(dev, mspi->rx, t->len,
 364					      DMA_FROM_DEVICE);
 365		if (dma_mapping_error(dev, mspi->rx_dma)) {
 366			dev_err(dev, "unable to map rx dma\n");
 367			goto err_rx_dma;
 368		}
 369	} else if (t->rx_buf) {
 370		mspi->rx_dma = t->rx_dma;
 371	}
 372
 373	/* enable rx ints */
 374	mpc8xxx_spi_write_reg(&reg_base->mask, SPIE_RXB);
 375
 376	mspi->xfer_in_progress = t;
 377	mspi->count = t->len;
 378
 379	/* start CPM transfers */
 380	fsl_spi_cpm_bufs_start(mspi);
 381
 382	return 0;
 383
 384err_rx_dma:
 385	if (mspi->map_tx_dma)
 386		dma_unmap_single(dev, mspi->tx_dma, t->len, DMA_TO_DEVICE);
 387	return -ENOMEM;
 388}
 389
 390static void fsl_spi_cpm_bufs_complete(struct mpc8xxx_spi *mspi)
 391{
 392	struct device *dev = mspi->dev;
 393	struct spi_transfer *t = mspi->xfer_in_progress;
 394
 395	if (mspi->map_tx_dma)
 396		dma_unmap_single(dev, mspi->tx_dma, t->len, DMA_TO_DEVICE);
 397	if (mspi->map_rx_dma)
 398		dma_unmap_single(dev, mspi->rx_dma, t->len, DMA_FROM_DEVICE);
 399	mspi->xfer_in_progress = NULL;
 400}
 401
 402static int fsl_spi_cpu_bufs(struct mpc8xxx_spi *mspi,
 403				struct spi_transfer *t, unsigned int len)
 404{
 405	u32 word;
 406	struct fsl_spi_reg *reg_base = mspi->reg_base;
 407
 408	mspi->count = len;
 409
 410	/* enable rx ints */
 411	mpc8xxx_spi_write_reg(&reg_base->mask, SPIM_NE);
 412
 413	/* transmit word */
 414	word = mspi->get_tx(mspi);
 415	mpc8xxx_spi_write_reg(&reg_base->transmit, word);
 416
 417	return 0;
 418}
 419
 420static int fsl_spi_bufs(struct spi_device *spi, struct spi_transfer *t,
 421			    bool is_dma_mapped)
 422{
 423	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
 424	struct fsl_spi_reg *reg_base;
 425	unsigned int len = t->len;
 426	u8 bits_per_word;
 427	int ret;
 428
 429	reg_base = mpc8xxx_spi->reg_base;
 430	bits_per_word = spi->bits_per_word;
 431	if (t->bits_per_word)
 432		bits_per_word = t->bits_per_word;
 433
 434	if (bits_per_word > 8) {
 435		/* invalid length? */
 436		if (len & 1)
 437			return -EINVAL;
 438		len /= 2;
 439	}
 440	if (bits_per_word > 16) {
 441		/* invalid length? */
 442		if (len & 1)
 443			return -EINVAL;
 444		len /= 2;
 445	}
 446
 447	mpc8xxx_spi->tx = t->tx_buf;
 448	mpc8xxx_spi->rx = t->rx_buf;
 449
 450	INIT_COMPLETION(mpc8xxx_spi->done);
 451
 452	if (mpc8xxx_spi->flags & SPI_CPM_MODE)
 453		ret = fsl_spi_cpm_bufs(mpc8xxx_spi, t, is_dma_mapped);
 454	else
 455		ret = fsl_spi_cpu_bufs(mpc8xxx_spi, t, len);
 456	if (ret)
 457		return ret;
 458
 459	wait_for_completion(&mpc8xxx_spi->done);
 460
 461	/* disable rx ints */
 462	mpc8xxx_spi_write_reg(&reg_base->mask, 0);
 463
 464	if (mpc8xxx_spi->flags & SPI_CPM_MODE)
 465		fsl_spi_cpm_bufs_complete(mpc8xxx_spi);
 466
 467	return mpc8xxx_spi->count;
 468}
 469
 470static void fsl_spi_do_one_msg(struct spi_message *m)
 471{
 472	struct spi_device *spi = m->spi;
 473	struct spi_transfer *t;
 474	unsigned int cs_change;
 475	const int nsecs = 50;
 476	int status;
 477
 478	cs_change = 1;
 479	status = 0;
 
 480	list_for_each_entry(t, &m->transfers, transfer_list) {
 481		if (t->bits_per_word || t->speed_hz) {
 482			/* Don't allow changes if CS is active */
 483			status = -EINVAL;
 
 
 
 
 
 484
 
 
 
 
 485			if (cs_change)
 486				status = fsl_spi_setup_transfer(spi, t);
 487			if (status < 0)
 488				break;
 489		}
 490
 491		if (cs_change) {
 492			fsl_spi_chipselect(spi, BITBANG_CS_ACTIVE);
 493			ndelay(nsecs);
 494		}
 495		cs_change = t->cs_change;
 496		if (t->len)
 497			status = fsl_spi_bufs(spi, t, m->is_dma_mapped);
 498		if (status) {
 499			status = -EMSGSIZE;
 500			break;
 501		}
 502		m->actual_length += t->len;
 503
 504		if (t->delay_usecs)
 505			udelay(t->delay_usecs);
 506
 507		if (cs_change) {
 508			ndelay(nsecs);
 509			fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE);
 510			ndelay(nsecs);
 511		}
 512	}
 513
 514	m->status = status;
 515	m->complete(m->context);
 
 516
 517	if (status || !cs_change) {
 518		ndelay(nsecs);
 519		fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE);
 520	}
 521
 522	fsl_spi_setup_transfer(spi, NULL);
 523}
 524
 525static int fsl_spi_setup(struct spi_device *spi)
 526{
 527	struct mpc8xxx_spi *mpc8xxx_spi;
 528	struct fsl_spi_reg *reg_base;
 529	int retval;
 530	u32 hw_mode;
 531	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
 532
 533	if (!spi->max_speed_hz)
 534		return -EINVAL;
 535
 536	if (!cs) {
 537		cs = kzalloc(sizeof *cs, GFP_KERNEL);
 538		if (!cs)
 539			return -ENOMEM;
 540		spi->controller_state = cs;
 541	}
 542	mpc8xxx_spi = spi_master_get_devdata(spi->master);
 543
 544	reg_base = mpc8xxx_spi->reg_base;
 545
 546	hw_mode = cs->hw_mode; /* Save original settings */
 547	cs->hw_mode = mpc8xxx_spi_read_reg(&reg_base->mode);
 548	/* mask out bits we are going to set */
 549	cs->hw_mode &= ~(SPMODE_CP_BEGIN_EDGECLK | SPMODE_CI_INACTIVEHIGH
 550			 | SPMODE_REV | SPMODE_LOOP);
 551
 552	if (spi->mode & SPI_CPHA)
 553		cs->hw_mode |= SPMODE_CP_BEGIN_EDGECLK;
 554	if (spi->mode & SPI_CPOL)
 555		cs->hw_mode |= SPMODE_CI_INACTIVEHIGH;
 556	if (!(spi->mode & SPI_LSB_FIRST))
 557		cs->hw_mode |= SPMODE_REV;
 558	if (spi->mode & SPI_LOOP)
 559		cs->hw_mode |= SPMODE_LOOP;
 560
 561	retval = fsl_spi_setup_transfer(spi, NULL);
 562	if (retval < 0) {
 563		cs->hw_mode = hw_mode; /* Restore settings */
 564		return retval;
 565	}
 566	return 0;
 567}
 568
 569static void fsl_spi_cpm_irq(struct mpc8xxx_spi *mspi, u32 events)
 570{
 571	u16 len;
 572	struct fsl_spi_reg *reg_base = mspi->reg_base;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 573
 574	dev_dbg(mspi->dev, "%s: bd datlen %d, count %d\n", __func__,
 575		in_be16(&mspi->rx_bd->cbd_datlen), mspi->count);
 576
 577	len = in_be16(&mspi->rx_bd->cbd_datlen);
 578	if (len > mspi->count) {
 579		WARN_ON(1);
 580		len = mspi->count;
 581	}
 582
 583	/* Clear the events */
 584	mpc8xxx_spi_write_reg(&reg_base->event, events);
 
 585
 586	mspi->count -= len;
 587	if (mspi->count)
 588		fsl_spi_cpm_bufs_start(mspi);
 589	else
 590		complete(&mspi->done);
 591}
 592
 593static void fsl_spi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events)
 594{
 595	struct fsl_spi_reg *reg_base = mspi->reg_base;
 596
 597	/* We need handle RX first */
 598	if (events & SPIE_NE) {
 599		u32 rx_data = mpc8xxx_spi_read_reg(&reg_base->receive);
 600
 601		if (mspi->rx)
 602			mspi->get_rx(rx_data, mspi);
 603	}
 604
 605	if ((events & SPIE_NF) == 0)
 606		/* spin until TX is done */
 607		while (((events =
 608			mpc8xxx_spi_read_reg(&reg_base->event)) &
 609						SPIE_NF) == 0)
 610			cpu_relax();
 611
 612	/* Clear the events */
 613	mpc8xxx_spi_write_reg(&reg_base->event, events);
 614
 615	mspi->count -= 1;
 616	if (mspi->count) {
 617		u32 word = mspi->get_tx(mspi);
 618
 619		mpc8xxx_spi_write_reg(&reg_base->transmit, word);
 620	} else {
 621		complete(&mspi->done);
 622	}
 623}
 624
 625static irqreturn_t fsl_spi_irq(s32 irq, void *context_data)
 626{
 627	struct mpc8xxx_spi *mspi = context_data;
 628	irqreturn_t ret = IRQ_NONE;
 629	u32 events;
 630	struct fsl_spi_reg *reg_base = mspi->reg_base;
 631
 632	/* Get interrupt events(tx/rx) */
 633	events = mpc8xxx_spi_read_reg(&reg_base->event);
 634	if (events)
 635		ret = IRQ_HANDLED;
 636
 637	dev_dbg(mspi->dev, "%s: events %x\n", __func__, events);
 638
 639	if (mspi->flags & SPI_CPM_MODE)
 640		fsl_spi_cpm_irq(mspi, events);
 641	else
 642		fsl_spi_cpu_irq(mspi, events);
 643
 644	return ret;
 645}
 646
 647static void *fsl_spi_alloc_dummy_rx(void)
 648{
 649	mutex_lock(&fsl_dummy_rx_lock);
 650
 651	if (!fsl_dummy_rx)
 652		fsl_dummy_rx = kmalloc(SPI_MRBLR, GFP_KERNEL);
 653	if (fsl_dummy_rx)
 654		fsl_dummy_rx_refcnt++;
 655
 656	mutex_unlock(&fsl_dummy_rx_lock);
 657
 658	return fsl_dummy_rx;
 659}
 660
 661static void fsl_spi_free_dummy_rx(void)
 662{
 663	mutex_lock(&fsl_dummy_rx_lock);
 664
 665	switch (fsl_dummy_rx_refcnt) {
 666	case 0:
 667		WARN_ON(1);
 668		break;
 669	case 1:
 670		kfree(fsl_dummy_rx);
 671		fsl_dummy_rx = NULL;
 672		/* fall through */
 673	default:
 674		fsl_dummy_rx_refcnt--;
 675		break;
 676	}
 677
 678	mutex_unlock(&fsl_dummy_rx_lock);
 679}
 680
 681static unsigned long fsl_spi_cpm_get_pram(struct mpc8xxx_spi *mspi)
 682{
 683	struct device *dev = mspi->dev;
 684	struct device_node *np = dev->of_node;
 685	const u32 *iprop;
 686	int size;
 687	void __iomem *spi_base;
 688	unsigned long pram_ofs = -ENOMEM;
 689
 690	/* Can't use of_address_to_resource(), QE muram isn't at 0. */
 691	iprop = of_get_property(np, "reg", &size);
 692
 693	/* QE with a fixed pram location? */
 694	if (mspi->flags & SPI_QE && iprop && size == sizeof(*iprop) * 4)
 695		return cpm_muram_alloc_fixed(iprop[2], SPI_PRAM_SIZE);
 696
 697	/* QE but with a dynamic pram location? */
 698	if (mspi->flags & SPI_QE) {
 699		pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
 700		qe_issue_cmd(QE_ASSIGN_PAGE_TO_DEVICE, mspi->subblock,
 701				QE_CR_PROTOCOL_UNSPECIFIED, pram_ofs);
 702		return pram_ofs;
 703	}
 704
 705	spi_base = of_iomap(np, 1);
 706	if (spi_base == NULL)
 707		return -EINVAL;
 708
 709	if (mspi->flags & SPI_CPM2) {
 710		pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
 711		out_be16(spi_base, pram_ofs);
 712	} else {
 713		struct spi_pram __iomem *pram = spi_base;
 714		u16 rpbase = in_be16(&pram->rpbase);
 715
 716		/* Microcode relocation patch applied? */
 717		if (rpbase)
 718			pram_ofs = rpbase;
 719		else {
 720			pram_ofs = cpm_muram_alloc(SPI_PRAM_SIZE, 64);
 721			out_be16(spi_base, pram_ofs);
 722		}
 723	}
 724
 725	iounmap(spi_base);
 726	return pram_ofs;
 727}
 728
 729static int fsl_spi_cpm_init(struct mpc8xxx_spi *mspi)
 730{
 731	struct device *dev = mspi->dev;
 732	struct device_node *np = dev->of_node;
 733	const u32 *iprop;
 734	int size;
 735	unsigned long pram_ofs;
 736	unsigned long bds_ofs;
 737
 738	if (!(mspi->flags & SPI_CPM_MODE))
 739		return 0;
 740
 741	if (!fsl_spi_alloc_dummy_rx())
 742		return -ENOMEM;
 
 
 743
 744	if (mspi->flags & SPI_QE) {
 745		iprop = of_get_property(np, "cell-index", &size);
 746		if (iprop && size == sizeof(*iprop))
 747			mspi->subblock = *iprop;
 748
 749		switch (mspi->subblock) {
 750		default:
 751			dev_warn(dev, "cell-index unspecified, assuming SPI1");
 752			/* fall through */
 753		case 0:
 754			mspi->subblock = QE_CR_SUBBLOCK_SPI1;
 755			break;
 756		case 1:
 757			mspi->subblock = QE_CR_SUBBLOCK_SPI2;
 758			break;
 759		}
 760	}
 761
 762	pram_ofs = fsl_spi_cpm_get_pram(mspi);
 763	if (IS_ERR_VALUE(pram_ofs)) {
 764		dev_err(dev, "can't allocate spi parameter ram\n");
 765		goto err_pram;
 766	}
 767
 768	bds_ofs = cpm_muram_alloc(sizeof(*mspi->tx_bd) +
 769				  sizeof(*mspi->rx_bd), 8);
 770	if (IS_ERR_VALUE(bds_ofs)) {
 771		dev_err(dev, "can't allocate bds\n");
 772		goto err_bds;
 773	}
 774
 775	mspi->dma_dummy_tx = dma_map_single(dev, empty_zero_page, PAGE_SIZE,
 776					    DMA_TO_DEVICE);
 777	if (dma_mapping_error(dev, mspi->dma_dummy_tx)) {
 778		dev_err(dev, "unable to map dummy tx buffer\n");
 779		goto err_dummy_tx;
 780	}
 781
 782	mspi->dma_dummy_rx = dma_map_single(dev, fsl_dummy_rx, SPI_MRBLR,
 783					    DMA_FROM_DEVICE);
 784	if (dma_mapping_error(dev, mspi->dma_dummy_rx)) {
 785		dev_err(dev, "unable to map dummy rx buffer\n");
 786		goto err_dummy_rx;
 787	}
 788
 789	mspi->pram = cpm_muram_addr(pram_ofs);
 790
 791	mspi->tx_bd = cpm_muram_addr(bds_ofs);
 792	mspi->rx_bd = cpm_muram_addr(bds_ofs + sizeof(*mspi->tx_bd));
 793
 794	/* Initialize parameter ram. */
 795	out_be16(&mspi->pram->tbase, cpm_muram_offset(mspi->tx_bd));
 796	out_be16(&mspi->pram->rbase, cpm_muram_offset(mspi->rx_bd));
 797	out_8(&mspi->pram->tfcr, CPMFCR_EB | CPMFCR_GBL);
 798	out_8(&mspi->pram->rfcr, CPMFCR_EB | CPMFCR_GBL);
 799	out_be16(&mspi->pram->mrblr, SPI_MRBLR);
 800	out_be32(&mspi->pram->rstate, 0);
 801	out_be32(&mspi->pram->rdp, 0);
 802	out_be16(&mspi->pram->rbptr, 0);
 803	out_be16(&mspi->pram->rbc, 0);
 804	out_be32(&mspi->pram->rxtmp, 0);
 805	out_be32(&mspi->pram->tstate, 0);
 806	out_be32(&mspi->pram->tdp, 0);
 807	out_be16(&mspi->pram->tbptr, 0);
 808	out_be16(&mspi->pram->tbc, 0);
 809	out_be32(&mspi->pram->txtmp, 0);
 810
 811	return 0;
 812
 813err_dummy_rx:
 814	dma_unmap_single(dev, mspi->dma_dummy_tx, PAGE_SIZE, DMA_TO_DEVICE);
 815err_dummy_tx:
 816	cpm_muram_free(bds_ofs);
 817err_bds:
 818	cpm_muram_free(pram_ofs);
 819err_pram:
 820	fsl_spi_free_dummy_rx();
 821	return -ENOMEM;
 822}
 823
 824static void fsl_spi_cpm_free(struct mpc8xxx_spi *mspi)
 825{
 826	struct device *dev = mspi->dev;
 827
 828	if (!(mspi->flags & SPI_CPM_MODE))
 829		return;
 830
 831	dma_unmap_single(dev, mspi->dma_dummy_rx, SPI_MRBLR, DMA_FROM_DEVICE);
 832	dma_unmap_single(dev, mspi->dma_dummy_tx, PAGE_SIZE, DMA_TO_DEVICE);
 833	cpm_muram_free(cpm_muram_offset(mspi->tx_bd));
 834	cpm_muram_free(cpm_muram_offset(mspi->pram));
 835	fsl_spi_free_dummy_rx();
 836}
 837
 838static void fsl_spi_remove(struct mpc8xxx_spi *mspi)
 839{
 840	iounmap(mspi->reg_base);
 841	fsl_spi_cpm_free(mspi);
 842}
 843
 844static struct spi_master * __devinit fsl_spi_probe(struct device *dev,
 845		struct resource *mem, unsigned int irq)
 846{
 847	struct fsl_spi_platform_data *pdata = dev->platform_data;
 848	struct spi_master *master;
 849	struct mpc8xxx_spi *mpc8xxx_spi;
 850	struct fsl_spi_reg *reg_base;
 851	u32 regval;
 852	int ret = 0;
 853
 854	master = spi_alloc_master(dev, sizeof(struct mpc8xxx_spi));
 855	if (master == NULL) {
 856		ret = -ENOMEM;
 857		goto err;
 858	}
 859
 860	dev_set_drvdata(dev, master);
 861
 862	ret = mpc8xxx_spi_probe(dev, mem, irq);
 863	if (ret)
 864		goto err_probe;
 865
 866	master->setup = fsl_spi_setup;
 
 867
 868	mpc8xxx_spi = spi_master_get_devdata(master);
 869	mpc8xxx_spi->spi_do_one_msg = fsl_spi_do_one_msg;
 870	mpc8xxx_spi->spi_remove = fsl_spi_remove;
 871
 
 872
 873	ret = fsl_spi_cpm_init(mpc8xxx_spi);
 874	if (ret)
 875		goto err_cpm_init;
 876
 877	if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
 878		mpc8xxx_spi->rx_shift = 16;
 879		mpc8xxx_spi->tx_shift = 24;
 880	}
 881
 882	mpc8xxx_spi->reg_base = ioremap(mem->start, resource_size(mem));
 883	if (mpc8xxx_spi->reg_base == NULL) {
 884		ret = -ENOMEM;
 885		goto err_ioremap;
 886	}
 887
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 888	/* Register for SPI Interrupt */
 889	ret = request_irq(mpc8xxx_spi->irq, fsl_spi_irq,
 890			  0, "fsl_spi", mpc8xxx_spi);
 891
 892	if (ret != 0)
 893		goto free_irq;
 894
 895	reg_base = mpc8xxx_spi->reg_base;
 896
 897	/* SPI controller initializations */
 898	mpc8xxx_spi_write_reg(&reg_base->mode, 0);
 899	mpc8xxx_spi_write_reg(&reg_base->mask, 0);
 900	mpc8xxx_spi_write_reg(&reg_base->command, 0);
 901	mpc8xxx_spi_write_reg(&reg_base->event, 0xffffffff);
 902
 903	/* Enable SPI interface */
 904	regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
 
 
 
 
 905	if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE)
 906		regval |= SPMODE_OP;
 907
 908	mpc8xxx_spi_write_reg(&reg_base->mode, regval);
 909
 910	ret = spi_register_master(master);
 911	if (ret < 0)
 912		goto unreg_master;
 913
 914	dev_info(dev, "at 0x%p (irq = %d), %s mode\n", reg_base,
 915		 mpc8xxx_spi->irq, mpc8xxx_spi_strmode(mpc8xxx_spi->flags));
 916
 917	return master;
 918
 919unreg_master:
 920	free_irq(mpc8xxx_spi->irq, mpc8xxx_spi);
 921free_irq:
 922	iounmap(mpc8xxx_spi->reg_base);
 923err_ioremap:
 924	fsl_spi_cpm_free(mpc8xxx_spi);
 925err_cpm_init:
 926err_probe:
 927	spi_master_put(master);
 928err:
 929	return ERR_PTR(ret);
 930}
 931
 932static void fsl_spi_cs_control(struct spi_device *spi, bool on)
 933{
 934	struct device *dev = spi->dev.parent;
 935	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
 
 936	u16 cs = spi->chip_select;
 937	int gpio = pinfo->gpios[cs];
 938	bool alow = pinfo->alow_flags[cs];
 939
 940	gpio_set_value(gpio, on ^ alow);
 941}
 942
 943static int of_fsl_spi_get_chipselects(struct device *dev)
 944{
 945	struct device_node *np = dev->of_node;
 946	struct fsl_spi_platform_data *pdata = dev->platform_data;
 947	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
 948	unsigned int ngpios;
 949	int i = 0;
 950	int ret;
 951
 952	ngpios = of_gpio_count(np);
 953	if (!ngpios) {
 954		/*
 955		 * SPI w/o chip-select line. One SPI device is still permitted
 956		 * though.
 957		 */
 958		pdata->max_chipselect = 1;
 959		return 0;
 960	}
 961
 962	pinfo->gpios = kmalloc(ngpios * sizeof(*pinfo->gpios), GFP_KERNEL);
 963	if (!pinfo->gpios)
 964		return -ENOMEM;
 965	memset(pinfo->gpios, -1, ngpios * sizeof(*pinfo->gpios));
 966
 967	pinfo->alow_flags = kzalloc(ngpios * sizeof(*pinfo->alow_flags),
 968				    GFP_KERNEL);
 969	if (!pinfo->alow_flags) {
 970		ret = -ENOMEM;
 971		goto err_alloc_flags;
 972	}
 973
 974	for (; i < ngpios; i++) {
 975		int gpio;
 976		enum of_gpio_flags flags;
 977
 978		gpio = of_get_gpio_flags(np, i, &flags);
 979		if (!gpio_is_valid(gpio)) {
 980			dev_err(dev, "invalid gpio #%d: %d\n", i, gpio);
 981			ret = gpio;
 982			goto err_loop;
 983		}
 984
 985		ret = gpio_request(gpio, dev_name(dev));
 986		if (ret) {
 987			dev_err(dev, "can't request gpio #%d: %d\n", i, ret);
 988			goto err_loop;
 989		}
 990
 991		pinfo->gpios[i] = gpio;
 992		pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW;
 993
 994		ret = gpio_direction_output(pinfo->gpios[i],
 995					    pinfo->alow_flags[i]);
 996		if (ret) {
 997			dev_err(dev, "can't set output direction for gpio "
 998				"#%d: %d\n", i, ret);
 999			goto err_loop;
1000		}
1001	}
1002
1003	pdata->max_chipselect = ngpios;
1004	pdata->cs_control = fsl_spi_cs_control;
1005
1006	return 0;
1007
1008err_loop:
1009	while (i >= 0) {
1010		if (gpio_is_valid(pinfo->gpios[i]))
1011			gpio_free(pinfo->gpios[i]);
1012		i--;
1013	}
1014
1015	kfree(pinfo->alow_flags);
1016	pinfo->alow_flags = NULL;
1017err_alloc_flags:
1018	kfree(pinfo->gpios);
1019	pinfo->gpios = NULL;
1020	return ret;
1021}
1022
1023static int of_fsl_spi_free_chipselects(struct device *dev)
1024{
1025	struct fsl_spi_platform_data *pdata = dev->platform_data;
1026	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
1027	int i;
1028
1029	if (!pinfo->gpios)
1030		return 0;
1031
1032	for (i = 0; i < pdata->max_chipselect; i++) {
1033		if (gpio_is_valid(pinfo->gpios[i]))
1034			gpio_free(pinfo->gpios[i]);
1035	}
1036
1037	kfree(pinfo->gpios);
1038	kfree(pinfo->alow_flags);
1039	return 0;
1040}
1041
1042static int __devinit of_fsl_spi_probe(struct platform_device *ofdev)
1043{
1044	struct device *dev = &ofdev->dev;
1045	struct device_node *np = ofdev->dev.of_node;
1046	struct spi_master *master;
1047	struct resource mem;
1048	struct resource irq;
1049	int ret = -ENOMEM;
1050
1051	ret = of_mpc8xxx_spi_probe(ofdev);
1052	if (ret)
1053		return ret;
1054
1055	ret = of_fsl_spi_get_chipselects(dev);
1056	if (ret)
1057		goto err;
 
 
 
1058
1059	ret = of_address_to_resource(np, 0, &mem);
1060	if (ret)
1061		goto err;
1062
1063	ret = of_irq_to_resource(np, 0, &irq);
1064	if (!ret) {
1065		ret = -EINVAL;
1066		goto err;
1067	}
1068
1069	master = fsl_spi_probe(dev, &mem, irq.start);
1070	if (IS_ERR(master)) {
1071		ret = PTR_ERR(master);
1072		goto err;
1073	}
1074
1075	return 0;
1076
1077err:
1078	of_fsl_spi_free_chipselects(dev);
 
1079	return ret;
1080}
1081
1082static int __devexit of_fsl_spi_remove(struct platform_device *ofdev)
1083{
 
 
1084	int ret;
1085
1086	ret = mpc8xxx_spi_remove(&ofdev->dev);
1087	if (ret)
1088		return ret;
1089	of_fsl_spi_free_chipselects(&ofdev->dev);
 
1090	return 0;
1091}
1092
1093static const struct of_device_id of_fsl_spi_match[] = {
1094	{ .compatible = "fsl,spi" },
1095	{}
1096};
1097MODULE_DEVICE_TABLE(of, of_fsl_spi_match);
1098
1099static struct platform_driver of_fsl_spi_driver = {
1100	.driver = {
1101		.name = "fsl_spi",
1102		.owner = THIS_MODULE,
1103		.of_match_table = of_fsl_spi_match,
1104	},
1105	.probe		= of_fsl_spi_probe,
1106	.remove		= __devexit_p(of_fsl_spi_remove),
1107};
1108
1109#ifdef CONFIG_MPC832x_RDB
1110/*
1111 * XXX XXX XXX
1112 * This is "legacy" platform driver, was used by the MPC8323E-RDB boards
1113 * only. The driver should go away soon, since newer MPC8323E-RDB's device
1114 * tree can work with OpenFirmware driver. But for now we support old trees
1115 * as well.
1116 */
1117static int __devinit plat_mpc8xxx_spi_probe(struct platform_device *pdev)
1118{
1119	struct resource *mem;
1120	int irq;
1121	struct spi_master *master;
1122
1123	if (!pdev->dev.platform_data)
1124		return -EINVAL;
1125
1126	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1127	if (!mem)
1128		return -EINVAL;
1129
1130	irq = platform_get_irq(pdev, 0);
1131	if (irq <= 0)
1132		return -EINVAL;
1133
1134	master = fsl_spi_probe(&pdev->dev, mem, irq);
1135	if (IS_ERR(master))
1136		return PTR_ERR(master);
1137	return 0;
1138}
1139
1140static int __devexit plat_mpc8xxx_spi_remove(struct platform_device *pdev)
1141{
1142	return mpc8xxx_spi_remove(&pdev->dev);
1143}
1144
1145MODULE_ALIAS("platform:mpc8xxx_spi");
1146static struct platform_driver mpc8xxx_spi_driver = {
1147	.probe = plat_mpc8xxx_spi_probe,
1148	.remove = __devexit_p(plat_mpc8xxx_spi_remove),
1149	.driver = {
1150		.name = "mpc8xxx_spi",
1151		.owner = THIS_MODULE,
1152	},
1153};
1154
1155static bool legacy_driver_failed;
1156
1157static void __init legacy_driver_register(void)
1158{
1159	legacy_driver_failed = platform_driver_register(&mpc8xxx_spi_driver);
1160}
1161
1162static void __exit legacy_driver_unregister(void)
1163{
1164	if (legacy_driver_failed)
1165		return;
1166	platform_driver_unregister(&mpc8xxx_spi_driver);
1167}
1168#else
1169static void __init legacy_driver_register(void) {}
1170static void __exit legacy_driver_unregister(void) {}
1171#endif /* CONFIG_MPC832x_RDB */
1172
1173static int __init fsl_spi_init(void)
1174{
1175	legacy_driver_register();
1176	return platform_driver_register(&of_fsl_spi_driver);
1177}
1178module_init(fsl_spi_init);
1179
1180static void __exit fsl_spi_exit(void)
1181{
1182	platform_driver_unregister(&of_fsl_spi_driver);
1183	legacy_driver_unregister();
1184}
1185module_exit(fsl_spi_exit);
1186
1187MODULE_AUTHOR("Kumar Gala");
1188MODULE_DESCRIPTION("Simple Freescale SPI Driver");
1189MODULE_LICENSE("GPL");
v3.15
  1/*
  2 * Freescale SPI controller driver.
  3 *
  4 * Maintainer: Kumar Gala
  5 *
  6 * Copyright (C) 2006 Polycom, Inc.
  7 * Copyright 2010 Freescale Semiconductor, Inc.
  8 *
  9 * CPM SPI and QE buffer descriptors mode support:
 10 * Copyright (c) 2009  MontaVista Software, Inc.
 11 * Author: Anton Vorontsov <avorontsov@ru.mvista.com>
 12 *
 13 * GRLIB support:
 14 * Copyright (c) 2012 Aeroflex Gaisler AB.
 15 * Author: Andreas Larsson <andreas@gaisler.com>
 16 *
 17 * This program is free software; you can redistribute  it and/or modify it
 18 * under  the terms of  the GNU General  Public License as published by the
 19 * Free Software Foundation;  either version 2 of the  License, or (at your
 20 * option) any later version.
 21 */
 22#include <linux/module.h>
 23#include <linux/types.h>
 24#include <linux/kernel.h>
 25#include <linux/interrupt.h>
 26#include <linux/delay.h>
 27#include <linux/irq.h>
 28#include <linux/spi/spi.h>
 29#include <linux/spi/spi_bitbang.h>
 30#include <linux/platform_device.h>
 31#include <linux/fsl_devices.h>
 32#include <linux/dma-mapping.h>
 33#include <linux/mm.h>
 34#include <linux/mutex.h>
 35#include <linux/of.h>
 36#include <linux/of_platform.h>
 37#include <linux/of_address.h>
 38#include <linux/of_irq.h>
 39#include <linux/gpio.h>
 40#include <linux/of_gpio.h>
 41
 
 
 
 
 42#include "spi-fsl-lib.h"
 43#include "spi-fsl-cpm.h"
 44#include "spi-fsl-spi.h"
 45
 46#define TYPE_FSL	0
 47#define TYPE_GRLIB	1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 48
 49struct fsl_spi_match_data {
 50	int type;
 51};
 52
 53static struct fsl_spi_match_data of_fsl_spi_fsl_config = {
 54	.type = TYPE_FSL,
 55};
 56
 57static struct fsl_spi_match_data of_fsl_spi_grlib_config = {
 58	.type = TYPE_GRLIB,
 59};
 60
 61static struct of_device_id of_fsl_spi_match[] = {
 62	{
 63		.compatible = "fsl,spi",
 64		.data = &of_fsl_spi_fsl_config,
 65	},
 66	{
 67		.compatible = "aeroflexgaisler,spictrl",
 68		.data = &of_fsl_spi_grlib_config,
 69	},
 70	{}
 71};
 72MODULE_DEVICE_TABLE(of, of_fsl_spi_match);
 73
 74static int fsl_spi_get_type(struct device *dev)
 75{
 76	const struct of_device_id *match;
 77
 78	if (dev->of_node) {
 79		match = of_match_node(of_fsl_spi_match, dev->of_node);
 80		if (match && match->data)
 81			return ((struct fsl_spi_match_data *)match->data)->type;
 82	}
 83	return TYPE_FSL;
 84}
 85
 86static void fsl_spi_change_mode(struct spi_device *spi)
 87{
 88	struct mpc8xxx_spi *mspi = spi_master_get_devdata(spi->master);
 89	struct spi_mpc8xxx_cs *cs = spi->controller_state;
 90	struct fsl_spi_reg *reg_base = mspi->reg_base;
 91	__be32 __iomem *mode = &reg_base->mode;
 92	unsigned long flags;
 93
 94	if (cs->hw_mode == mpc8xxx_spi_read_reg(mode))
 95		return;
 96
 97	/* Turn off IRQs locally to minimize time that SPI is disabled. */
 98	local_irq_save(flags);
 99
100	/* Turn off SPI unit prior changing mode */
101	mpc8xxx_spi_write_reg(mode, cs->hw_mode & ~SPMODE_ENABLE);
102
103	/* When in CPM mode, we need to reinit tx and rx. */
104	if (mspi->flags & SPI_CPM_MODE) {
105		fsl_spi_cpm_reinit_txrx(mspi);
 
 
 
 
 
 
 
 
 
 
 
106	}
107	mpc8xxx_spi_write_reg(mode, cs->hw_mode);
108	local_irq_restore(flags);
109}
110
111static void fsl_spi_chipselect(struct spi_device *spi, int value)
112{
113	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
114	struct fsl_spi_platform_data *pdata;
115	bool pol = spi->mode & SPI_CS_HIGH;
116	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
117
118	pdata = spi->dev.parent->parent->platform_data;
119
120	if (value == BITBANG_CS_INACTIVE) {
121		if (pdata->cs_control)
122			pdata->cs_control(spi, !pol);
123	}
124
125	if (value == BITBANG_CS_ACTIVE) {
126		mpc8xxx_spi->rx_shift = cs->rx_shift;
127		mpc8xxx_spi->tx_shift = cs->tx_shift;
128		mpc8xxx_spi->get_rx = cs->get_rx;
129		mpc8xxx_spi->get_tx = cs->get_tx;
130
131		fsl_spi_change_mode(spi);
132
133		if (pdata->cs_control)
134			pdata->cs_control(spi, pol);
135	}
136}
137
138static void fsl_spi_qe_cpu_set_shifts(u32 *rx_shift, u32 *tx_shift,
139				      int bits_per_word, int msb_first)
140{
141	*rx_shift = 0;
142	*tx_shift = 0;
143	if (msb_first) {
144		if (bits_per_word <= 8) {
145			*rx_shift = 16;
146			*tx_shift = 24;
147		} else if (bits_per_word <= 16) {
148			*rx_shift = 16;
149			*tx_shift = 16;
150		}
151	} else {
152		if (bits_per_word <= 8)
153			*rx_shift = 8;
154	}
155}
156
157static void fsl_spi_grlib_set_shifts(u32 *rx_shift, u32 *tx_shift,
158				     int bits_per_word, int msb_first)
159{
160	*rx_shift = 0;
161	*tx_shift = 0;
162	if (bits_per_word <= 16) {
163		if (msb_first) {
164			*rx_shift = 16; /* LSB in bit 16 */
165			*tx_shift = 32 - bits_per_word; /* MSB in bit 31 */
166		} else {
167			*rx_shift = 16 - bits_per_word; /* MSB in bit 15 */
168		}
169	}
170}
171
172static int mspi_apply_cpu_mode_quirks(struct spi_mpc8xxx_cs *cs,
173				struct spi_device *spi,
174				struct mpc8xxx_spi *mpc8xxx_spi,
175				int bits_per_word)
176{
177	cs->rx_shift = 0;
178	cs->tx_shift = 0;
179	if (bits_per_word <= 8) {
180		cs->get_rx = mpc8xxx_spi_rx_buf_u8;
181		cs->get_tx = mpc8xxx_spi_tx_buf_u8;
 
 
 
 
182	} else if (bits_per_word <= 16) {
183		cs->get_rx = mpc8xxx_spi_rx_buf_u16;
184		cs->get_tx = mpc8xxx_spi_tx_buf_u16;
 
 
 
 
185	} else if (bits_per_word <= 32) {
186		cs->get_rx = mpc8xxx_spi_rx_buf_u32;
187		cs->get_tx = mpc8xxx_spi_tx_buf_u32;
188	} else
189		return -EINVAL;
190
191	if (mpc8xxx_spi->set_shifts)
192		mpc8xxx_spi->set_shifts(&cs->rx_shift, &cs->tx_shift,
193					bits_per_word,
194					!(spi->mode & SPI_LSB_FIRST));
195
 
 
 
196	mpc8xxx_spi->rx_shift = cs->rx_shift;
197	mpc8xxx_spi->tx_shift = cs->tx_shift;
198	mpc8xxx_spi->get_rx = cs->get_rx;
199	mpc8xxx_spi->get_tx = cs->get_tx;
200
201	return bits_per_word;
202}
203
204static int mspi_apply_qe_mode_quirks(struct spi_mpc8xxx_cs *cs,
205				struct spi_device *spi,
206				int bits_per_word)
207{
208	/* QE uses Little Endian for words > 8
209	 * so transform all words > 8 into 8 bits
210	 * Unfortnatly that doesn't work for LSB so
211	 * reject these for now */
212	/* Note: 32 bits word, LSB works iff
213	 * tfcr/rfcr is set to CPMFCR_GBL */
214	if (spi->mode & SPI_LSB_FIRST &&
215	    bits_per_word > 8)
216		return -EINVAL;
217	if (bits_per_word > 8)
218		return 8; /* pretend its 8 bits */
219	return bits_per_word;
220}
221
222static int fsl_spi_setup_transfer(struct spi_device *spi,
223					struct spi_transfer *t)
224{
225	struct mpc8xxx_spi *mpc8xxx_spi;
226	int bits_per_word = 0;
227	u8 pm;
228	u32 hz = 0;
229	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
230
231	mpc8xxx_spi = spi_master_get_devdata(spi->master);
232
233	if (t) {
234		bits_per_word = t->bits_per_word;
235		hz = t->speed_hz;
236	}
237
238	/* spi_transfer level calls that work per-word */
239	if (!bits_per_word)
240		bits_per_word = spi->bits_per_word;
241
 
 
 
 
 
242	if (!hz)
243		hz = spi->max_speed_hz;
244
245	if (!(mpc8xxx_spi->flags & SPI_CPM_MODE))
246		bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi,
247							   mpc8xxx_spi,
248							   bits_per_word);
249	else if (mpc8xxx_spi->flags & SPI_QE)
250		bits_per_word = mspi_apply_qe_mode_quirks(cs, spi,
251							  bits_per_word);
252
253	if (bits_per_word < 0)
254		return bits_per_word;
255
256	if (bits_per_word == 32)
257		bits_per_word = 0;
258	else
259		bits_per_word = bits_per_word - 1;
260
261	/* mask out bits we are going to set */
262	cs->hw_mode &= ~(SPMODE_LEN(0xF) | SPMODE_DIV16
263				  | SPMODE_PM(0xF));
264
265	cs->hw_mode |= SPMODE_LEN(bits_per_word);
266
267	if ((mpc8xxx_spi->spibrg / hz) > 64) {
268		cs->hw_mode |= SPMODE_DIV16;
269		pm = (mpc8xxx_spi->spibrg - 1) / (hz * 64) + 1;
270
271		WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. "
272			  "Will use %d Hz instead.\n", dev_name(&spi->dev),
273			  hz, mpc8xxx_spi->spibrg / 1024);
274		if (pm > 16)
275			pm = 16;
276	} else {
277		pm = (mpc8xxx_spi->spibrg - 1) / (hz * 4) + 1;
278	}
279	if (pm)
280		pm--;
281
282	cs->hw_mode |= SPMODE_PM(pm);
283
284	fsl_spi_change_mode(spi);
285	return 0;
286}
287
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288static int fsl_spi_cpu_bufs(struct mpc8xxx_spi *mspi,
289				struct spi_transfer *t, unsigned int len)
290{
291	u32 word;
292	struct fsl_spi_reg *reg_base = mspi->reg_base;
293
294	mspi->count = len;
295
296	/* enable rx ints */
297	mpc8xxx_spi_write_reg(&reg_base->mask, SPIM_NE);
298
299	/* transmit word */
300	word = mspi->get_tx(mspi);
301	mpc8xxx_spi_write_reg(&reg_base->transmit, word);
302
303	return 0;
304}
305
306static int fsl_spi_bufs(struct spi_device *spi, struct spi_transfer *t,
307			    bool is_dma_mapped)
308{
309	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
310	struct fsl_spi_reg *reg_base;
311	unsigned int len = t->len;
312	u8 bits_per_word;
313	int ret;
314
315	reg_base = mpc8xxx_spi->reg_base;
316	bits_per_word = spi->bits_per_word;
317	if (t->bits_per_word)
318		bits_per_word = t->bits_per_word;
319
320	if (bits_per_word > 8) {
321		/* invalid length? */
322		if (len & 1)
323			return -EINVAL;
324		len /= 2;
325	}
326	if (bits_per_word > 16) {
327		/* invalid length? */
328		if (len & 1)
329			return -EINVAL;
330		len /= 2;
331	}
332
333	mpc8xxx_spi->tx = t->tx_buf;
334	mpc8xxx_spi->rx = t->rx_buf;
335
336	reinit_completion(&mpc8xxx_spi->done);
337
338	if (mpc8xxx_spi->flags & SPI_CPM_MODE)
339		ret = fsl_spi_cpm_bufs(mpc8xxx_spi, t, is_dma_mapped);
340	else
341		ret = fsl_spi_cpu_bufs(mpc8xxx_spi, t, len);
342	if (ret)
343		return ret;
344
345	wait_for_completion(&mpc8xxx_spi->done);
346
347	/* disable rx ints */
348	mpc8xxx_spi_write_reg(&reg_base->mask, 0);
349
350	if (mpc8xxx_spi->flags & SPI_CPM_MODE)
351		fsl_spi_cpm_bufs_complete(mpc8xxx_spi);
352
353	return mpc8xxx_spi->count;
354}
355
356static void fsl_spi_do_one_msg(struct spi_message *m)
357{
358	struct spi_device *spi = m->spi;
359	struct spi_transfer *t, *first;
360	unsigned int cs_change;
361	const int nsecs = 50;
362	int status;
363
364	/* Don't allow changes if CS is active */
365	first = list_first_entry(&m->transfers, struct spi_transfer,
366			transfer_list);
367	list_for_each_entry(t, &m->transfers, transfer_list) {
368		if ((first->bits_per_word != t->bits_per_word) ||
369			(first->speed_hz != t->speed_hz)) {
370			status = -EINVAL;
371			dev_err(&spi->dev,
372				"bits_per_word/speed_hz should be same for the same SPI transfer\n");
373			return;
374		}
375	}
376
377	cs_change = 1;
378	status = -EINVAL;
379	list_for_each_entry(t, &m->transfers, transfer_list) {
380		if (t->bits_per_word || t->speed_hz) {
381			if (cs_change)
382				status = fsl_spi_setup_transfer(spi, t);
383			if (status < 0)
384				break;
385		}
386
387		if (cs_change) {
388			fsl_spi_chipselect(spi, BITBANG_CS_ACTIVE);
389			ndelay(nsecs);
390		}
391		cs_change = t->cs_change;
392		if (t->len)
393			status = fsl_spi_bufs(spi, t, m->is_dma_mapped);
394		if (status) {
395			status = -EMSGSIZE;
396			break;
397		}
398		m->actual_length += t->len;
399
400		if (t->delay_usecs)
401			udelay(t->delay_usecs);
402
403		if (cs_change) {
404			ndelay(nsecs);
405			fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE);
406			ndelay(nsecs);
407		}
408	}
409
410	m->status = status;
411	if (m->complete)
412		m->complete(m->context);
413
414	if (status || !cs_change) {
415		ndelay(nsecs);
416		fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE);
417	}
418
419	fsl_spi_setup_transfer(spi, NULL);
420}
421
422static int fsl_spi_setup(struct spi_device *spi)
423{
424	struct mpc8xxx_spi *mpc8xxx_spi;
425	struct fsl_spi_reg *reg_base;
426	int retval;
427	u32 hw_mode;
428	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
429
430	if (!spi->max_speed_hz)
431		return -EINVAL;
432
433	if (!cs) {
434		cs = kzalloc(sizeof *cs, GFP_KERNEL);
435		if (!cs)
436			return -ENOMEM;
437		spi->controller_state = cs;
438	}
439	mpc8xxx_spi = spi_master_get_devdata(spi->master);
440
441	reg_base = mpc8xxx_spi->reg_base;
442
443	hw_mode = cs->hw_mode; /* Save original settings */
444	cs->hw_mode = mpc8xxx_spi_read_reg(&reg_base->mode);
445	/* mask out bits we are going to set */
446	cs->hw_mode &= ~(SPMODE_CP_BEGIN_EDGECLK | SPMODE_CI_INACTIVEHIGH
447			 | SPMODE_REV | SPMODE_LOOP);
448
449	if (spi->mode & SPI_CPHA)
450		cs->hw_mode |= SPMODE_CP_BEGIN_EDGECLK;
451	if (spi->mode & SPI_CPOL)
452		cs->hw_mode |= SPMODE_CI_INACTIVEHIGH;
453	if (!(spi->mode & SPI_LSB_FIRST))
454		cs->hw_mode |= SPMODE_REV;
455	if (spi->mode & SPI_LOOP)
456		cs->hw_mode |= SPMODE_LOOP;
457
458	retval = fsl_spi_setup_transfer(spi, NULL);
459	if (retval < 0) {
460		cs->hw_mode = hw_mode; /* Restore settings */
461		return retval;
462	}
 
 
463
464	if (mpc8xxx_spi->type == TYPE_GRLIB) {
465		if (gpio_is_valid(spi->cs_gpio)) {
466			int desel;
467
468			retval = gpio_request(spi->cs_gpio,
469					      dev_name(&spi->dev));
470			if (retval)
471				return retval;
472
473			desel = !(spi->mode & SPI_CS_HIGH);
474			retval = gpio_direction_output(spi->cs_gpio, desel);
475			if (retval) {
476				gpio_free(spi->cs_gpio);
477				return retval;
478			}
479		} else if (spi->cs_gpio != -ENOENT) {
480			if (spi->cs_gpio < 0)
481				return spi->cs_gpio;
482			return -EINVAL;
483		}
484		/* When spi->cs_gpio == -ENOENT, a hole in the phandle list
485		 * indicates to use native chipselect if present, or allow for
486		 * an always selected chip
487		 */
488	}
489
490	/* Initialize chipselect - might be active for SPI_CS_HIGH mode */
491	fsl_spi_chipselect(spi, BITBANG_CS_INACTIVE);
492
493	return 0;
494}
 
 
 
495
496static void fsl_spi_cleanup(struct spi_device *spi)
497{
498	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
499
500	if (mpc8xxx_spi->type == TYPE_GRLIB && gpio_is_valid(spi->cs_gpio))
501		gpio_free(spi->cs_gpio);
 
 
 
502}
503
504static void fsl_spi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events)
505{
506	struct fsl_spi_reg *reg_base = mspi->reg_base;
507
508	/* We need handle RX first */
509	if (events & SPIE_NE) {
510		u32 rx_data = mpc8xxx_spi_read_reg(&reg_base->receive);
511
512		if (mspi->rx)
513			mspi->get_rx(rx_data, mspi);
514	}
515
516	if ((events & SPIE_NF) == 0)
517		/* spin until TX is done */
518		while (((events =
519			mpc8xxx_spi_read_reg(&reg_base->event)) &
520						SPIE_NF) == 0)
521			cpu_relax();
522
523	/* Clear the events */
524	mpc8xxx_spi_write_reg(&reg_base->event, events);
525
526	mspi->count -= 1;
527	if (mspi->count) {
528		u32 word = mspi->get_tx(mspi);
529
530		mpc8xxx_spi_write_reg(&reg_base->transmit, word);
531	} else {
532		complete(&mspi->done);
533	}
534}
535
536static irqreturn_t fsl_spi_irq(s32 irq, void *context_data)
537{
538	struct mpc8xxx_spi *mspi = context_data;
539	irqreturn_t ret = IRQ_NONE;
540	u32 events;
541	struct fsl_spi_reg *reg_base = mspi->reg_base;
542
543	/* Get interrupt events(tx/rx) */
544	events = mpc8xxx_spi_read_reg(&reg_base->event);
545	if (events)
546		ret = IRQ_HANDLED;
547
548	dev_dbg(mspi->dev, "%s: events %x\n", __func__, events);
549
550	if (mspi->flags & SPI_CPM_MODE)
551		fsl_spi_cpm_irq(mspi, events);
552	else
553		fsl_spi_cpu_irq(mspi, events);
554
555	return ret;
556}
557
558static void fsl_spi_remove(struct mpc8xxx_spi *mspi)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
559{
560	iounmap(mspi->reg_base);
561	fsl_spi_cpm_free(mspi);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
562}
563
564static void fsl_spi_grlib_cs_control(struct spi_device *spi, bool on)
565{
566	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
567	struct fsl_spi_reg *reg_base = mpc8xxx_spi->reg_base;
568	u32 slvsel;
569	u16 cs = spi->chip_select;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
571	if (gpio_is_valid(spi->cs_gpio)) {
572		gpio_set_value(spi->cs_gpio, on);
573	} else if (cs < mpc8xxx_spi->native_chipselects) {
574		slvsel = mpc8xxx_spi_read_reg(&reg_base->slvsel);
575		slvsel = on ? (slvsel | (1 << cs)) : (slvsel & ~(1 << cs));
576		mpc8xxx_spi_write_reg(&reg_base->slvsel, slvsel);
 
577	}
 
 
 
578}
579
580static void fsl_spi_grlib_probe(struct device *dev)
581{
582	struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
583	struct spi_master *master = dev_get_drvdata(dev);
584	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
585	struct fsl_spi_reg *reg_base = mpc8xxx_spi->reg_base;
586	int mbits;
587	u32 capabilities;
588
589	capabilities = mpc8xxx_spi_read_reg(&reg_base->cap);
 
590
591	mpc8xxx_spi->set_shifts = fsl_spi_grlib_set_shifts;
592	mbits = SPCAP_MAXWLEN(capabilities);
593	if (mbits)
594		mpc8xxx_spi->max_bits_per_word = mbits + 1;
595
596	mpc8xxx_spi->native_chipselects = 0;
597	if (SPCAP_SSEN(capabilities)) {
598		mpc8xxx_spi->native_chipselects = SPCAP_SSSZ(capabilities);
599		mpc8xxx_spi_write_reg(&reg_base->slvsel, 0xffffffff);
 
 
 
 
 
 
 
 
 
 
 
 
600	}
601	master->num_chipselect = mpc8xxx_spi->native_chipselects;
602	pdata->cs_control = fsl_spi_grlib_cs_control;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603}
604
605static struct spi_master * fsl_spi_probe(struct device *dev,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
606		struct resource *mem, unsigned int irq)
607{
608	struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
609	struct spi_master *master;
610	struct mpc8xxx_spi *mpc8xxx_spi;
611	struct fsl_spi_reg *reg_base;
612	u32 regval;
613	int ret = 0;
614
615	master = spi_alloc_master(dev, sizeof(struct mpc8xxx_spi));
616	if (master == NULL) {
617		ret = -ENOMEM;
618		goto err;
619	}
620
621	dev_set_drvdata(dev, master);
622
623	ret = mpc8xxx_spi_probe(dev, mem, irq);
624	if (ret)
625		goto err_probe;
626
627	master->setup = fsl_spi_setup;
628	master->cleanup = fsl_spi_cleanup;
629
630	mpc8xxx_spi = spi_master_get_devdata(master);
631	mpc8xxx_spi->spi_do_one_msg = fsl_spi_do_one_msg;
632	mpc8xxx_spi->spi_remove = fsl_spi_remove;
633	mpc8xxx_spi->max_bits_per_word = 32;
634	mpc8xxx_spi->type = fsl_spi_get_type(dev);
635
636	ret = fsl_spi_cpm_init(mpc8xxx_spi);
637	if (ret)
638		goto err_cpm_init;
639
 
 
 
 
 
640	mpc8xxx_spi->reg_base = ioremap(mem->start, resource_size(mem));
641	if (mpc8xxx_spi->reg_base == NULL) {
642		ret = -ENOMEM;
643		goto err_ioremap;
644	}
645
646	if (mpc8xxx_spi->type == TYPE_GRLIB)
647		fsl_spi_grlib_probe(dev);
648
649	master->bits_per_word_mask =
650		(SPI_BPW_RANGE_MASK(4, 16) | SPI_BPW_MASK(32)) &
651		SPI_BPW_RANGE_MASK(1, mpc8xxx_spi->max_bits_per_word);
652
653	if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE)
654		mpc8xxx_spi->set_shifts = fsl_spi_qe_cpu_set_shifts;
655
656	if (mpc8xxx_spi->set_shifts)
657		/* 8 bits per word and MSB first */
658		mpc8xxx_spi->set_shifts(&mpc8xxx_spi->rx_shift,
659					&mpc8xxx_spi->tx_shift, 8, 1);
660
661	/* Register for SPI Interrupt */
662	ret = request_irq(mpc8xxx_spi->irq, fsl_spi_irq,
663			  0, "fsl_spi", mpc8xxx_spi);
664
665	if (ret != 0)
666		goto free_irq;
667
668	reg_base = mpc8xxx_spi->reg_base;
669
670	/* SPI controller initializations */
671	mpc8xxx_spi_write_reg(&reg_base->mode, 0);
672	mpc8xxx_spi_write_reg(&reg_base->mask, 0);
673	mpc8xxx_spi_write_reg(&reg_base->command, 0);
674	mpc8xxx_spi_write_reg(&reg_base->event, 0xffffffff);
675
676	/* Enable SPI interface */
677	regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
678	if (mpc8xxx_spi->max_bits_per_word < 8) {
679		regval &= ~SPMODE_LEN(0xF);
680		regval |= SPMODE_LEN(mpc8xxx_spi->max_bits_per_word - 1);
681	}
682	if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE)
683		regval |= SPMODE_OP;
684
685	mpc8xxx_spi_write_reg(&reg_base->mode, regval);
686
687	ret = spi_register_master(master);
688	if (ret < 0)
689		goto unreg_master;
690
691	dev_info(dev, "at 0x%p (irq = %d), %s mode\n", reg_base,
692		 mpc8xxx_spi->irq, mpc8xxx_spi_strmode(mpc8xxx_spi->flags));
693
694	return master;
695
696unreg_master:
697	free_irq(mpc8xxx_spi->irq, mpc8xxx_spi);
698free_irq:
699	iounmap(mpc8xxx_spi->reg_base);
700err_ioremap:
701	fsl_spi_cpm_free(mpc8xxx_spi);
702err_cpm_init:
703err_probe:
704	spi_master_put(master);
705err:
706	return ERR_PTR(ret);
707}
708
709static void fsl_spi_cs_control(struct spi_device *spi, bool on)
710{
711	struct device *dev = spi->dev.parent->parent;
712	struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
713	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
714	u16 cs = spi->chip_select;
715	int gpio = pinfo->gpios[cs];
716	bool alow = pinfo->alow_flags[cs];
717
718	gpio_set_value(gpio, on ^ alow);
719}
720
721static int of_fsl_spi_get_chipselects(struct device *dev)
722{
723	struct device_node *np = dev->of_node;
724	struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
725	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
726	int ngpios;
727	int i = 0;
728	int ret;
729
730	ngpios = of_gpio_count(np);
731	if (ngpios <= 0) {
732		/*
733		 * SPI w/o chip-select line. One SPI device is still permitted
734		 * though.
735		 */
736		pdata->max_chipselect = 1;
737		return 0;
738	}
739
740	pinfo->gpios = kmalloc(ngpios * sizeof(*pinfo->gpios), GFP_KERNEL);
741	if (!pinfo->gpios)
742		return -ENOMEM;
743	memset(pinfo->gpios, -1, ngpios * sizeof(*pinfo->gpios));
744
745	pinfo->alow_flags = kzalloc(ngpios * sizeof(*pinfo->alow_flags),
746				    GFP_KERNEL);
747	if (!pinfo->alow_flags) {
748		ret = -ENOMEM;
749		goto err_alloc_flags;
750	}
751
752	for (; i < ngpios; i++) {
753		int gpio;
754		enum of_gpio_flags flags;
755
756		gpio = of_get_gpio_flags(np, i, &flags);
757		if (!gpio_is_valid(gpio)) {
758			dev_err(dev, "invalid gpio #%d: %d\n", i, gpio);
759			ret = gpio;
760			goto err_loop;
761		}
762
763		ret = gpio_request(gpio, dev_name(dev));
764		if (ret) {
765			dev_err(dev, "can't request gpio #%d: %d\n", i, ret);
766			goto err_loop;
767		}
768
769		pinfo->gpios[i] = gpio;
770		pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW;
771
772		ret = gpio_direction_output(pinfo->gpios[i],
773					    pinfo->alow_flags[i]);
774		if (ret) {
775			dev_err(dev, "can't set output direction for gpio "
776				"#%d: %d\n", i, ret);
777			goto err_loop;
778		}
779	}
780
781	pdata->max_chipselect = ngpios;
782	pdata->cs_control = fsl_spi_cs_control;
783
784	return 0;
785
786err_loop:
787	while (i >= 0) {
788		if (gpio_is_valid(pinfo->gpios[i]))
789			gpio_free(pinfo->gpios[i]);
790		i--;
791	}
792
793	kfree(pinfo->alow_flags);
794	pinfo->alow_flags = NULL;
795err_alloc_flags:
796	kfree(pinfo->gpios);
797	pinfo->gpios = NULL;
798	return ret;
799}
800
801static int of_fsl_spi_free_chipselects(struct device *dev)
802{
803	struct fsl_spi_platform_data *pdata = dev_get_platdata(dev);
804	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
805	int i;
806
807	if (!pinfo->gpios)
808		return 0;
809
810	for (i = 0; i < pdata->max_chipselect; i++) {
811		if (gpio_is_valid(pinfo->gpios[i]))
812			gpio_free(pinfo->gpios[i]);
813	}
814
815	kfree(pinfo->gpios);
816	kfree(pinfo->alow_flags);
817	return 0;
818}
819
820static int of_fsl_spi_probe(struct platform_device *ofdev)
821{
822	struct device *dev = &ofdev->dev;
823	struct device_node *np = ofdev->dev.of_node;
824	struct spi_master *master;
825	struct resource mem;
826	int irq, type;
827	int ret = -ENOMEM;
828
829	ret = of_mpc8xxx_spi_probe(ofdev);
830	if (ret)
831		return ret;
832
833	type = fsl_spi_get_type(&ofdev->dev);
834	if (type == TYPE_FSL) {
835		ret = of_fsl_spi_get_chipselects(dev);
836		if (ret)
837			goto err;
838	}
839
840	ret = of_address_to_resource(np, 0, &mem);
841	if (ret)
842		goto err;
843
844	irq = irq_of_parse_and_map(np, 0);
845	if (!irq) {
846		ret = -EINVAL;
847		goto err;
848	}
849
850	master = fsl_spi_probe(dev, &mem, irq);
851	if (IS_ERR(master)) {
852		ret = PTR_ERR(master);
853		goto err;
854	}
855
856	return 0;
857
858err:
859	if (type == TYPE_FSL)
860		of_fsl_spi_free_chipselects(dev);
861	return ret;
862}
863
864static int of_fsl_spi_remove(struct platform_device *ofdev)
865{
866	struct spi_master *master = platform_get_drvdata(ofdev);
867	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(master);
868	int ret;
869
870	ret = mpc8xxx_spi_remove(&ofdev->dev);
871	if (ret)
872		return ret;
873	if (mpc8xxx_spi->type == TYPE_FSL)
874		of_fsl_spi_free_chipselects(&ofdev->dev);
875	return 0;
876}
877
 
 
 
 
 
 
878static struct platform_driver of_fsl_spi_driver = {
879	.driver = {
880		.name = "fsl_spi",
881		.owner = THIS_MODULE,
882		.of_match_table = of_fsl_spi_match,
883	},
884	.probe		= of_fsl_spi_probe,
885	.remove		= of_fsl_spi_remove,
886};
887
888#ifdef CONFIG_MPC832x_RDB
889/*
890 * XXX XXX XXX
891 * This is "legacy" platform driver, was used by the MPC8323E-RDB boards
892 * only. The driver should go away soon, since newer MPC8323E-RDB's device
893 * tree can work with OpenFirmware driver. But for now we support old trees
894 * as well.
895 */
896static int plat_mpc8xxx_spi_probe(struct platform_device *pdev)
897{
898	struct resource *mem;
899	int irq;
900	struct spi_master *master;
901
902	if (!dev_get_platdata(&pdev->dev))
903		return -EINVAL;
904
905	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
906	if (!mem)
907		return -EINVAL;
908
909	irq = platform_get_irq(pdev, 0);
910	if (irq <= 0)
911		return -EINVAL;
912
913	master = fsl_spi_probe(&pdev->dev, mem, irq);
914	return PTR_ERR_OR_ZERO(master);
 
 
915}
916
917static int plat_mpc8xxx_spi_remove(struct platform_device *pdev)
918{
919	return mpc8xxx_spi_remove(&pdev->dev);
920}
921
922MODULE_ALIAS("platform:mpc8xxx_spi");
923static struct platform_driver mpc8xxx_spi_driver = {
924	.probe = plat_mpc8xxx_spi_probe,
925	.remove = plat_mpc8xxx_spi_remove,
926	.driver = {
927		.name = "mpc8xxx_spi",
928		.owner = THIS_MODULE,
929	},
930};
931
932static bool legacy_driver_failed;
933
934static void __init legacy_driver_register(void)
935{
936	legacy_driver_failed = platform_driver_register(&mpc8xxx_spi_driver);
937}
938
939static void __exit legacy_driver_unregister(void)
940{
941	if (legacy_driver_failed)
942		return;
943	platform_driver_unregister(&mpc8xxx_spi_driver);
944}
945#else
946static void __init legacy_driver_register(void) {}
947static void __exit legacy_driver_unregister(void) {}
948#endif /* CONFIG_MPC832x_RDB */
949
950static int __init fsl_spi_init(void)
951{
952	legacy_driver_register();
953	return platform_driver_register(&of_fsl_spi_driver);
954}
955module_init(fsl_spi_init);
956
957static void __exit fsl_spi_exit(void)
958{
959	platform_driver_unregister(&of_fsl_spi_driver);
960	legacy_driver_unregister();
961}
962module_exit(fsl_spi_exit);
963
964MODULE_AUTHOR("Kumar Gala");
965MODULE_DESCRIPTION("Simple Freescale SPI Driver");
966MODULE_LICENSE("GPL");