diff mbox series

[U-Boot,v3] spi: Zap mxs_spi driver-related code

Message ID 20190419065531.8286-1-jagan@amarulasolutions.com
State Superseded
Delegated to: Jagannadha Sutradharudu Teki
Headers show
Series [U-Boot,v3] spi: Zap mxs_spi driver-related code | expand

Commit Message

Jagan Teki April 19, 2019, 6:55 a.m. UTC
Dropped
- mxs_spi driver
- CONFIG_MXS_SPI

Dropped due to:
- no active updates
- no dm conversion
- multiple pings for asking dm-conversion
- no response for dm converted patch
- driver-model migration expiry

Cc: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
---
Changes for v3:
- rebase on master

 configs/bg0900_defconfig                |   1 -
 configs/mx28evk_auart_console_defconfig |   1 -
 configs/mx28evk_defconfig               |   1 -
 configs/mx28evk_nand_defconfig          |   1 -
 configs/mx28evk_spi_defconfig           |   1 -
 drivers/spi/Kconfig                     |   6 -
 drivers/spi/Makefile                    |   1 -
 drivers/spi/mxs_spi.c                   | 358 ------------------------
 8 files changed, 370 deletions(-)
 delete mode 100644 drivers/spi/mxs_spi.c

Comments

Marek Vasut April 19, 2019, 9:25 a.m. UTC | #1
On 4/19/19 8:55 AM, Jagan Teki wrote:
> Dropped
> - mxs_spi driver
> - CONFIG_MXS_SPI
> 
> Dropped due to:
> - no active updates
> - no dm conversion
> - multiple pings for asking dm-conversion

This is the first information I received ... sigh.
+CC Mans, he was working on this platform before.

> - no response for dm converted patch
> - driver-model migration expiry
> 
> Cc: Marek Vasut <marex@denx.de>
> Cc: Fabio Estevam <fabio.estevam@nxp.com>
> Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
> ---
> Changes for v3:
> - rebase on master
> 
>  configs/bg0900_defconfig                |   1 -
>  configs/mx28evk_auart_console_defconfig |   1 -
>  configs/mx28evk_defconfig               |   1 -
>  configs/mx28evk_nand_defconfig          |   1 -
>  configs/mx28evk_spi_defconfig           |   1 -
>  drivers/spi/Kconfig                     |   6 -
>  drivers/spi/Makefile                    |   1 -
>  drivers/spi/mxs_spi.c                   | 358 ------------------------
>  8 files changed, 370 deletions(-)
>  delete mode 100644 drivers/spi/mxs_spi.c
> 
> diff --git a/configs/bg0900_defconfig b/configs/bg0900_defconfig
> index 2c4d3e3d54..f8421ef304 100644
> --- a/configs/bg0900_defconfig
> +++ b/configs/bg0900_defconfig
> @@ -40,5 +40,4 @@ CONFIG_SPI_FLASH_STMICRO=y
>  CONFIG_MII=y
>  CONFIG_CONS_INDEX=0
>  CONFIG_SPI=y
> -CONFIG_MXS_SPI=y
>  CONFIG_OF_LIBFDT=y
> diff --git a/configs/mx28evk_auart_console_defconfig b/configs/mx28evk_auart_console_defconfig
> index c54b933e53..d976ea584c 100644
> --- a/configs/mx28evk_auart_console_defconfig
> +++ b/configs/mx28evk_auart_console_defconfig
> @@ -51,7 +51,6 @@ CONFIG_SPI_FLASH_SST=y
>  CONFIG_MII=y
>  CONFIG_CONS_INDEX=0
>  CONFIG_SPI=y
> -CONFIG_MXS_SPI=y
>  CONFIG_USB=y
>  CONFIG_USB_EHCI_HCD=y
>  CONFIG_USB_STORAGE=y
> diff --git a/configs/mx28evk_defconfig b/configs/mx28evk_defconfig
> index 187467d3db..40ab39ccf1 100644
> --- a/configs/mx28evk_defconfig
> +++ b/configs/mx28evk_defconfig
> @@ -51,7 +51,6 @@ CONFIG_SPI_FLASH_SST=y
>  CONFIG_MII=y
>  CONFIG_CONS_INDEX=0
>  CONFIG_SPI=y
> -CONFIG_MXS_SPI=y
>  CONFIG_USB=y
>  CONFIG_USB_EHCI_HCD=y
>  CONFIG_USB_STORAGE=y
> diff --git a/configs/mx28evk_nand_defconfig b/configs/mx28evk_nand_defconfig
> index 7d891e7934..0d2afbbdb0 100644
> --- a/configs/mx28evk_nand_defconfig
> +++ b/configs/mx28evk_nand_defconfig
> @@ -50,7 +50,6 @@ CONFIG_SPI_FLASH_SST=y
>  CONFIG_MII=y
>  CONFIG_CONS_INDEX=0
>  CONFIG_SPI=y
> -CONFIG_MXS_SPI=y
>  CONFIG_USB=y
>  CONFIG_USB_EHCI_HCD=y
>  CONFIG_USB_STORAGE=y
> diff --git a/configs/mx28evk_spi_defconfig b/configs/mx28evk_spi_defconfig
> index cb5b1b3b75..b9ea4934bb 100644
> --- a/configs/mx28evk_spi_defconfig
> +++ b/configs/mx28evk_spi_defconfig
> @@ -50,7 +50,6 @@ CONFIG_SPI_FLASH_SST=y
>  CONFIG_MII=y
>  CONFIG_CONS_INDEX=0
>  CONFIG_SPI=y
> -CONFIG_MXS_SPI=y
>  CONFIG_USB=y
>  CONFIG_USB_EHCI_HCD=y
>  CONFIG_USB_STORAGE=y
> diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
> index 7043b5c0f6..955da8db64 100644
> --- a/drivers/spi/Kconfig
> +++ b/drivers/spi/Kconfig
> @@ -370,12 +370,6 @@ config MXC_SPI
>  	  Enable the MXC SPI controller driver. This driver can be used
>  	  on various i.MX SoCs such as i.MX31/35/51/6/7.
>  
> -config MXS_SPI
> -	bool "MXS SPI Driver"
> -	help
> -	  Enable the MXS SPI controller driver. This driver can be used
> -	  on the i.MX23 and i.MX28 SoCs.
> -
>  config OMAP3_SPI
>  	bool "McSPI driver for OMAP"
>  	help
> diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
> index 25add2812d..055ef99dc9 100644
> --- a/drivers/spi/Makefile
> +++ b/drivers/spi/Makefile
> @@ -40,7 +40,6 @@ obj-$(CONFIG_MT7621_SPI) += mt7621_spi.o
>  obj-$(CONFIG_MSCC_BB_SPI) += mscc_bb_spi.o
>  obj-$(CONFIG_MVEBU_A3700_SPI) += mvebu_a3700_spi.o
>  obj-$(CONFIG_MXC_SPI) += mxc_spi.o
> -obj-$(CONFIG_MXS_SPI) += mxs_spi.o
>  obj-$(CONFIG_ATCSPI200_SPI) += atcspi200_spi.o
>  obj-$(CONFIG_OMAP3_SPI) += omap3_spi.o
>  obj-$(CONFIG_PIC32_SPI) += pic32_spi.o
> diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
> deleted file mode 100644
> index 5065e407f8..0000000000
> --- a/drivers/spi/mxs_spi.c
> +++ /dev/null
> @@ -1,358 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0+
> -/*
> - * Freescale i.MX28 SPI driver
> - *
> - * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
> - * on behalf of DENX Software Engineering GmbH
> - *
> - * NOTE: This driver only supports the SPI-controller chipselects,
> - *       GPIO driven chipselects are not supported.
> - */
> -
> -#include <common.h>
> -#include <malloc.h>
> -#include <memalign.h>
> -#include <spi.h>
> -#include <linux/errno.h>
> -#include <asm/io.h>
> -#include <asm/arch/clock.h>
> -#include <asm/arch/imx-regs.h>
> -#include <asm/arch/sys_proto.h>
> -#include <asm/mach-imx/dma.h>
> -
> -#define	MXS_SPI_MAX_TIMEOUT	1000000
> -#define	MXS_SPI_PORT_OFFSET	0x2000
> -#define MXS_SSP_CHIPSELECT_MASK		0x00300000
> -#define MXS_SSP_CHIPSELECT_SHIFT	20
> -
> -#define MXSSSP_SMALL_TRANSFER	512
> -
> -struct mxs_spi_slave {
> -	struct spi_slave	slave;
> -	uint32_t		max_khz;
> -	uint32_t		mode;
> -	struct mxs_ssp_regs	*regs;
> -};
> -
> -static inline struct mxs_spi_slave *to_mxs_slave(struct spi_slave *slave)
> -{
> -	return container_of(slave, struct mxs_spi_slave, slave);
> -}
> -
> -int spi_cs_is_valid(unsigned int bus, unsigned int cs)
> -{
> -	/* MXS SPI: 4 ports and 3 chip selects maximum */
> -	if (!mxs_ssp_bus_id_valid(bus) || cs > 2)
> -		return 0;
> -	else
> -		return 1;
> -}
> -
> -struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
> -				  unsigned int max_hz, unsigned int mode)
> -{
> -	struct mxs_spi_slave *mxs_slave;
> -
> -	if (!spi_cs_is_valid(bus, cs)) {
> -		printf("mxs_spi: invalid bus %d / chip select %d\n", bus, cs);
> -		return NULL;
> -	}
> -
> -	mxs_slave = spi_alloc_slave(struct mxs_spi_slave, bus, cs);
> -	if (!mxs_slave)
> -		return NULL;
> -
> -	if (mxs_dma_init_channel(MXS_DMA_CHANNEL_AHB_APBH_SSP0 + bus))
> -		goto err_init;
> -
> -	mxs_slave->max_khz = max_hz / 1000;
> -	mxs_slave->mode = mode;
> -	mxs_slave->regs = mxs_ssp_regs_by_bus(bus);
> -
> -	return &mxs_slave->slave;
> -
> -err_init:
> -	free(mxs_slave);
> -	return NULL;
> -}
> -
> -void spi_free_slave(struct spi_slave *slave)
> -{
> -	struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
> -	free(mxs_slave);
> -}
> -
> -int spi_claim_bus(struct spi_slave *slave)
> -{
> -	struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
> -	struct mxs_ssp_regs *ssp_regs = mxs_slave->regs;
> -	uint32_t reg = 0;
> -
> -	mxs_reset_block(&ssp_regs->hw_ssp_ctrl0_reg);
> -
> -	writel((slave->cs << MXS_SSP_CHIPSELECT_SHIFT) |
> -	       SSP_CTRL0_BUS_WIDTH_ONE_BIT,
> -	       &ssp_regs->hw_ssp_ctrl0);
> -
> -	reg = SSP_CTRL1_SSP_MODE_SPI | SSP_CTRL1_WORD_LENGTH_EIGHT_BITS;
> -	reg |= (mxs_slave->mode & SPI_CPOL) ? SSP_CTRL1_POLARITY : 0;
> -	reg |= (mxs_slave->mode & SPI_CPHA) ? SSP_CTRL1_PHASE : 0;
> -	writel(reg, &ssp_regs->hw_ssp_ctrl1);
> -
> -	writel(0, &ssp_regs->hw_ssp_cmd0);
> -
> -	mxs_set_ssp_busclock(slave->bus, mxs_slave->max_khz);
> -
> -	return 0;
> -}
> -
> -void spi_release_bus(struct spi_slave *slave)
> -{
> -}
> -
> -static void mxs_spi_start_xfer(struct mxs_ssp_regs *ssp_regs)
> -{
> -	writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_set);
> -	writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_clr);
> -}
> -
> -static void mxs_spi_end_xfer(struct mxs_ssp_regs *ssp_regs)
> -{
> -	writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_clr);
> -	writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_set);
> -}
> -
> -static int mxs_spi_xfer_pio(struct mxs_spi_slave *slave,
> -			char *data, int length, int write, unsigned long flags)
> -{
> -	struct mxs_ssp_regs *ssp_regs = slave->regs;
> -
> -	if (flags & SPI_XFER_BEGIN)
> -		mxs_spi_start_xfer(ssp_regs);
> -
> -	while (length--) {
> -		/* We transfer 1 byte */
> -#if defined(CONFIG_MX23)
> -		writel(SSP_CTRL0_XFER_COUNT_MASK, &ssp_regs->hw_ssp_ctrl0_clr);
> -		writel(1, &ssp_regs->hw_ssp_ctrl0_set);
> -#elif defined(CONFIG_MX28)
> -		writel(1, &ssp_regs->hw_ssp_xfer_size);
> -#endif
> -
> -		if ((flags & SPI_XFER_END) && !length)
> -			mxs_spi_end_xfer(ssp_regs);
> -
> -		if (write)
> -			writel(SSP_CTRL0_READ, &ssp_regs->hw_ssp_ctrl0_clr);
> -		else
> -			writel(SSP_CTRL0_READ, &ssp_regs->hw_ssp_ctrl0_set);
> -
> -		writel(SSP_CTRL0_RUN, &ssp_regs->hw_ssp_ctrl0_set);
> -
> -		if (mxs_wait_mask_set(&ssp_regs->hw_ssp_ctrl0_reg,
> -			SSP_CTRL0_RUN, MXS_SPI_MAX_TIMEOUT)) {
> -			printf("MXS SPI: Timeout waiting for start\n");
> -			return -ETIMEDOUT;
> -		}
> -
> -		if (write)
> -			writel(*data++, &ssp_regs->hw_ssp_data);
> -
> -		writel(SSP_CTRL0_DATA_XFER, &ssp_regs->hw_ssp_ctrl0_set);
> -
> -		if (!write) {
> -			if (mxs_wait_mask_clr(&ssp_regs->hw_ssp_status_reg,
> -				SSP_STATUS_FIFO_EMPTY, MXS_SPI_MAX_TIMEOUT)) {
> -				printf("MXS SPI: Timeout waiting for data\n");
> -				return -ETIMEDOUT;
> -			}
> -
> -			*data = readl(&ssp_regs->hw_ssp_data);
> -			data++;
> -		}
> -
> -		if (mxs_wait_mask_clr(&ssp_regs->hw_ssp_ctrl0_reg,
> -			SSP_CTRL0_RUN, MXS_SPI_MAX_TIMEOUT)) {
> -			printf("MXS SPI: Timeout waiting for finish\n");
> -			return -ETIMEDOUT;
> -		}
> -	}
> -
> -	return 0;
> -}
> -
> -static int mxs_spi_xfer_dma(struct mxs_spi_slave *slave,
> -			char *data, int length, int write, unsigned long flags)
> -{
> -	const int xfer_max_sz = 0xff00;
> -	const int desc_count = DIV_ROUND_UP(length, xfer_max_sz) + 1;
> -	struct mxs_ssp_regs *ssp_regs = slave->regs;
> -	struct mxs_dma_desc *dp;
> -	uint32_t ctrl0;
> -	uint32_t cache_data_count;
> -	const uint32_t dstart = (uint32_t)data;
> -	int dmach;
> -	int tl;
> -	int ret = 0;
> -
> -#if defined(CONFIG_MX23)
> -	const int mxs_spi_pio_words = 1;
> -#elif defined(CONFIG_MX28)
> -	const int mxs_spi_pio_words = 4;
> -#endif
> -
> -	ALLOC_CACHE_ALIGN_BUFFER(struct mxs_dma_desc, desc, desc_count);
> -
> -	memset(desc, 0, sizeof(struct mxs_dma_desc) * desc_count);
> -
> -	ctrl0 = readl(&ssp_regs->hw_ssp_ctrl0);
> -	ctrl0 |= SSP_CTRL0_DATA_XFER;
> -
> -	if (flags & SPI_XFER_BEGIN)
> -		ctrl0 |= SSP_CTRL0_LOCK_CS;
> -	if (!write)
> -		ctrl0 |= SSP_CTRL0_READ;
> -
> -	if (length % ARCH_DMA_MINALIGN)
> -		cache_data_count = roundup(length, ARCH_DMA_MINALIGN);
> -	else
> -		cache_data_count = length;
> -
> -	/* Flush data to DRAM so DMA can pick them up */
> -	if (write)
> -		flush_dcache_range(dstart, dstart + cache_data_count);
> -
> -	/* Invalidate the area, so no writeback into the RAM races with DMA */
> -	invalidate_dcache_range(dstart, dstart + cache_data_count);
> -
> -	dmach = MXS_DMA_CHANNEL_AHB_APBH_SSP0 + slave->slave.bus;
> -
> -	dp = desc;
> -	while (length) {
> -		dp->address = (dma_addr_t)dp;
> -		dp->cmd.address = (dma_addr_t)data;
> -
> -		/*
> -		 * This is correct, even though it does indeed look insane.
> -		 * I hereby have to, wholeheartedly, thank Freescale Inc.,
> -		 * for always inventing insane hardware and keeping me busy
> -		 * and employed ;-)
> -		 */
> -		if (write)
> -			dp->cmd.data = MXS_DMA_DESC_COMMAND_DMA_READ;
> -		else
> -			dp->cmd.data = MXS_DMA_DESC_COMMAND_DMA_WRITE;
> -
> -		/*
> -		 * The DMA controller can transfer large chunks (64kB) at
> -		 * time by setting the transfer length to 0. Setting tl to
> -		 * 0x10000 will overflow below and make .data contain 0.
> -		 * Otherwise, 0xff00 is the transfer maximum.
> -		 */
> -		if (length >= 0x10000)
> -			tl = 0x10000;
> -		else
> -			tl = min(length, xfer_max_sz);
> -
> -		dp->cmd.data |=
> -			((tl & 0xffff) << MXS_DMA_DESC_BYTES_OFFSET) |
> -			(mxs_spi_pio_words << MXS_DMA_DESC_PIO_WORDS_OFFSET) |
> -			MXS_DMA_DESC_HALT_ON_TERMINATE |
> -			MXS_DMA_DESC_TERMINATE_FLUSH;
> -
> -		data += tl;
> -		length -= tl;
> -
> -		if (!length) {
> -			dp->cmd.data |= MXS_DMA_DESC_IRQ | MXS_DMA_DESC_DEC_SEM;
> -
> -			if (flags & SPI_XFER_END) {
> -				ctrl0 &= ~SSP_CTRL0_LOCK_CS;
> -				ctrl0 |= SSP_CTRL0_IGNORE_CRC;
> -			}
> -		}
> -
> -		/*
> -		 * Write CTRL0, CMD0, CMD1 and XFER_SIZE registers in
> -		 * case of MX28, write only CTRL0 in case of MX23 due
> -		 * to the difference in register layout. It is utterly
> -		 * essential that the XFER_SIZE register is written on
> -		 * a per-descriptor basis with the same size as is the
> -		 * descriptor!
> -		 */
> -		dp->cmd.pio_words[0] = ctrl0;
> -#ifdef CONFIG_MX28
> -		dp->cmd.pio_words[1] = 0;
> -		dp->cmd.pio_words[2] = 0;
> -		dp->cmd.pio_words[3] = tl;
> -#endif
> -
> -		mxs_dma_desc_append(dmach, dp);
> -
> -		dp++;
> -	}
> -
> -	if (mxs_dma_go(dmach))
> -		ret = -EINVAL;
> -
> -	/* The data arrived into DRAM, invalidate cache over them */
> -	if (!write)
> -		invalidate_dcache_range(dstart, dstart + cache_data_count);
> -
> -	return ret;
> -}
> -
> -int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
> -		const void *dout, void *din, unsigned long flags)
> -{
> -	struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
> -	struct mxs_ssp_regs *ssp_regs = mxs_slave->regs;
> -	int len = bitlen / 8;
> -	char dummy;
> -	int write = 0;
> -	char *data = NULL;
> -	int dma = 1;
> -
> -	if (bitlen == 0) {
> -		if (flags & SPI_XFER_END) {
> -			din = (void *)&dummy;
> -			len = 1;
> -		} else
> -			return 0;
> -	}
> -
> -	/* Half-duplex only */
> -	if (din && dout)
> -		return -EINVAL;
> -	/* No data */
> -	if (!din && !dout)
> -		return 0;
> -
> -	if (dout) {
> -		data = (char *)dout;
> -		write = 1;
> -	} else if (din) {
> -		data = (char *)din;
> -		write = 0;
> -	}
> -
> -	/*
> -	 * Check for alignment, if the buffer is aligned, do DMA transfer,
> -	 * PIO otherwise. This is a temporary workaround until proper bounce
> -	 * buffer is in place.
> -	 */
> -	if (dma) {
> -		if (((uint32_t)data) & (ARCH_DMA_MINALIGN - 1))
> -			dma = 0;
> -		if (((uint32_t)len) & (ARCH_DMA_MINALIGN - 1))
> -			dma = 0;
> -	}
> -
> -	if (!dma || (len < MXSSSP_SMALL_TRANSFER)) {
> -		writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_clr);
> -		return mxs_spi_xfer_pio(mxs_slave, data, len, write, flags);
> -	} else {
> -		writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_set);
> -		return mxs_spi_xfer_dma(mxs_slave, data, len, write, flags);
> -	}
> -}
>
Tom Rini April 19, 2019, 12:42 p.m. UTC | #2
On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
> On 4/19/19 8:55 AM, Jagan Teki wrote:
> > Dropped
> > - mxs_spi driver
> > - CONFIG_MXS_SPI
> > 
> > Dropped due to:
> > - no active updates
> > - no dm conversion
> > - multiple pings for asking dm-conversion
> 
> This is the first information I received ... sigh.

Sigh, I thought you had seen this before and noted at the time that you
hadn't heard anything before then.

So, are the mx28 family boards something we still want to support?  I
assume there's going to be other things that need converting there too.
Marek Vasut April 19, 2019, 1:29 p.m. UTC | #3
On 4/19/19 2:42 PM, Tom Rini wrote:
> On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
>> On 4/19/19 8:55 AM, Jagan Teki wrote:
>>> Dropped
>>> - mxs_spi driver
>>> - CONFIG_MXS_SPI
>>>
>>> Dropped due to:
>>> - no active updates
>>> - no dm conversion
>>> - multiple pings for asking dm-conversion
>>
>> This is the first information I received ... sigh.
> 
> Sigh, I thought you had seen this before and noted at the time that you
> hadn't heard anything before then.
> 
> So, are the mx28 family boards something we still want to support?  I
> assume there's going to be other things that need converting there too.

I didn't see much MX28 activity recently myself, except for the thing
Mans was playing with.
Michael Nazzareno Trimarchi April 19, 2019, 1:32 p.m. UTC | #4
Hi Tom

On Fri, Apr 19, 2019 at 2:42 PM Tom Rini <trini@konsulko.com> wrote:
>
> On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
> > On 4/19/19 8:55 AM, Jagan Teki wrote:
> > > Dropped
> > > - mxs_spi driver
> > > - CONFIG_MXS_SPI
> > >
> > > Dropped due to:
> > > - no active updates
> > > - no dm conversion
> > > - multiple pings for asking dm-conversion
> >
> > This is the first information I received ... sigh.
>
> Sigh, I thought you had seen this before and noted at the time that you
> hadn't heard anything before then.
>
> So, are the mx28 family boards something we still want to support?  I
> assume there's going to be other things that need converting there too.

I have one mx28 long term support. We have added spl support and
booting. Can you please
wait to drop it?

Michael
>
> --
> Tom
>
Marek Vasut April 19, 2019, 1:37 p.m. UTC | #5
On 4/19/19 3:29 PM, Marek Vasut wrote:
> On 4/19/19 2:42 PM, Tom Rini wrote:
>> On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
>>> On 4/19/19 8:55 AM, Jagan Teki wrote:
>>>> Dropped
>>>> - mxs_spi driver
>>>> - CONFIG_MXS_SPI
>>>>
>>>> Dropped due to:
>>>> - no active updates
>>>> - no dm conversion
>>>> - multiple pings for asking dm-conversion
>>>
>>> This is the first information I received ... sigh.
>>
>> Sigh, I thought you had seen this before and noted at the time that you
>> hadn't heard anything before then.
>>
>> So, are the mx28 family boards something we still want to support?  I
>> assume there's going to be other things that need converting there too.
> 
> I didn't see much MX28 activity recently myself, except for the thing
> Mans was playing with.

Oh and regarding the conversion, yes, a lot of MXS stuff will need
conversion.
Tom Rini April 21, 2019, 6:41 p.m. UTC | #6
On Fri, Apr 19, 2019 at 03:32:55PM +0200, Michael Nazzareno Trimarchi wrote:
> Hi Tom
> 
> On Fri, Apr 19, 2019 at 2:42 PM Tom Rini <trini@konsulko.com> wrote:
> >
> > On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
> > > On 4/19/19 8:55 AM, Jagan Teki wrote:
> > > > Dropped
> > > > - mxs_spi driver
> > > > - CONFIG_MXS_SPI
> > > >
> > > > Dropped due to:
> > > > - no active updates
> > > > - no dm conversion
> > > > - multiple pings for asking dm-conversion
> > >
> > > This is the first information I received ... sigh.
> >
> > Sigh, I thought you had seen this before and noted at the time that you
> > hadn't heard anything before then.
> >
> > So, are the mx28 family boards something we still want to support?  I
> > assume there's going to be other things that need converting there too.
> 
> I have one mx28 long term support. We have added spl support and
> booting. Can you please
> wait to drop it?

I have no problem with actively maintained platforms regardless of age.
If you're willing to maintain things, that's great.  Perhaps have a
conversion with Marek about taking over the mx28 and related stuff,
keeping the relevant-to-you boards functional and up to date?  Thanks!
Marek Vasut April 21, 2019, 7:02 p.m. UTC | #7
On 4/21/19 8:41 PM, Tom Rini wrote:
> On Fri, Apr 19, 2019 at 03:32:55PM +0200, Michael Nazzareno Trimarchi wrote:
>> Hi Tom
>>
>> On Fri, Apr 19, 2019 at 2:42 PM Tom Rini <trini@konsulko.com> wrote:
>>>
>>> On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
>>>> On 4/19/19 8:55 AM, Jagan Teki wrote:
>>>>> Dropped
>>>>> - mxs_spi driver
>>>>> - CONFIG_MXS_SPI
>>>>>
>>>>> Dropped due to:
>>>>> - no active updates
>>>>> - no dm conversion
>>>>> - multiple pings for asking dm-conversion
>>>>
>>>> This is the first information I received ... sigh.
>>>
>>> Sigh, I thought you had seen this before and noted at the time that you
>>> hadn't heard anything before then.
>>>
>>> So, are the mx28 family boards something we still want to support?  I
>>> assume there's going to be other things that need converting there too.
>>
>> I have one mx28 long term support. We have added spl support and
>> booting. Can you please
>> wait to drop it?
> 
> I have no problem with actively maintained platforms regardless of age.
> If you're willing to maintain things, that's great.  Perhaps have a
> conversion with Marek about taking over the mx28 and related stuff,
> keeping the relevant-to-you boards functional and up to date?  Thanks!

Fine by me.
Jagan Teki April 24, 2019, 6:49 a.m. UTC | #8
On Mon, Apr 22, 2019 at 12:11 AM Tom Rini <trini@konsulko.com> wrote:
>
> On Fri, Apr 19, 2019 at 03:32:55PM +0200, Michael Nazzareno Trimarchi wrote:
> > Hi Tom
> >
> > On Fri, Apr 19, 2019 at 2:42 PM Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
> > > > On 4/19/19 8:55 AM, Jagan Teki wrote:
> > > > > Dropped
> > > > > - mxs_spi driver
> > > > > - CONFIG_MXS_SPI
> > > > >
> > > > > Dropped due to:
> > > > > - no active updates
> > > > > - no dm conversion
> > > > > - multiple pings for asking dm-conversion
> > > >
> > > > This is the first information I received ... sigh.
> > >
> > > Sigh, I thought you had seen this before and noted at the time that you
> > > hadn't heard anything before then.
> > >
> > > So, are the mx28 family boards something we still want to support?  I
> > > assume there's going to be other things that need converting there too.
> >
> > I have one mx28 long term support. We have added spl support and
> > booting. Can you please
> > wait to drop it?
>
> I have no problem with actively maintained platforms regardless of age.
> If you're willing to maintain things, that's great.  Perhaps have a
> conversion with Marek about taking over the mx28 and related stuff,
> keeping the relevant-to-you boards functional and up to date?  Thanks!

We (Akash) tried multiple iterations about the dm-conversion and look
like it is failed to conclude. if someone or akash can come up with
next version, it would be good.

[1] https://patchwork.ozlabs.org/patch/1087964/
Michael Nazzareno Trimarchi April 24, 2019, 9:44 a.m. UTC | #9
Hi



On Wed., 24 Apr. 2019, 11:14 am Måns Rullgård, <mans@denx.de> wrote:

> Michael Nazzareno Trimarchi <michael@amarulasolutions.com> writes:
>
> > Hi Tom
> >
> > On Fri, Apr 19, 2019 at 2:42 PM Tom Rini <trini@konsulko.com> wrote:
> >>
> >> On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
> >> > On 4/19/19 8:55 AM, Jagan Teki wrote:
> >> > > Dropped
> >> > > - mxs_spi driver
> >> > > - CONFIG_MXS_SPI
> >> > >
> >> > > Dropped due to:
> >> > > - no active updates
> >> > > - no dm conversion
> >> > > - multiple pings for asking dm-conversion
> >> >
> >> > This is the first information I received ... sigh.
> >>
> >> Sigh, I thought you had seen this before and noted at the time that you
> >> hadn't heard anything before then.
> >>
> >> So, are the mx28 family boards something we still want to support?  I
> >> assume there's going to be other things that need converting there too.
> >
> > I have one mx28 long term support. We have added spl support and
> > booting.
>
> Something other than the SPL support in mainline u-boot?
>
> > Can you please wait to drop it?
>
> As much as I'd like to see the mx28 chip vanish, I think it's too soon
> to be dropping support for it.
>

We have a long term support on some hardware. We will upload our board. No
it's not different but we are interested in it

Michael


> --
> Måns Rullgård
>
Tom Rini April 24, 2019, 11:50 a.m. UTC | #10
On Wed, Apr 24, 2019 at 11:44:24AM +0200, Michael Nazzareno Trimarchi wrote:
> Hi
> 
> 
> 
> On Wed., 24 Apr. 2019, 11:14 am Måns Rullgård, <mans@denx.de> wrote:
> 
> > Michael Nazzareno Trimarchi <michael@amarulasolutions.com> writes:
> >
> > > Hi Tom
> > >
> > > On Fri, Apr 19, 2019 at 2:42 PM Tom Rini <trini@konsulko.com> wrote:
> > >>
> > >> On Fri, Apr 19, 2019 at 11:25:47AM +0200, Marek Vasut wrote:
> > >> > On 4/19/19 8:55 AM, Jagan Teki wrote:
> > >> > > Dropped
> > >> > > - mxs_spi driver
> > >> > > - CONFIG_MXS_SPI
> > >> > >
> > >> > > Dropped due to:
> > >> > > - no active updates
> > >> > > - no dm conversion
> > >> > > - multiple pings for asking dm-conversion
> > >> >
> > >> > This is the first information I received ... sigh.
> > >>
> > >> Sigh, I thought you had seen this before and noted at the time that you
> > >> hadn't heard anything before then.
> > >>
> > >> So, are the mx28 family boards something we still want to support?  I
> > >> assume there's going to be other things that need converting there too.
> > >
> > > I have one mx28 long term support. We have added spl support and
> > > booting.
> >
> > Something other than the SPL support in mainline u-boot?
> >
> > > Can you please wait to drop it?
> >
> > As much as I'd like to see the mx28 chip vanish, I think it's too soon
> > to be dropping support for it.
> >
> 
> We have a long term support on some hardware. We will upload our board. No
> it's not different but we are interested in it

Great!  Because we need people willing to maintain the code if we're not
going to drop it.  Thanks again!
diff mbox series

Patch

diff --git a/configs/bg0900_defconfig b/configs/bg0900_defconfig
index 2c4d3e3d54..f8421ef304 100644
--- a/configs/bg0900_defconfig
+++ b/configs/bg0900_defconfig
@@ -40,5 +40,4 @@  CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_MII=y
 CONFIG_CONS_INDEX=0
 CONFIG_SPI=y
-CONFIG_MXS_SPI=y
 CONFIG_OF_LIBFDT=y
diff --git a/configs/mx28evk_auart_console_defconfig b/configs/mx28evk_auart_console_defconfig
index c54b933e53..d976ea584c 100644
--- a/configs/mx28evk_auart_console_defconfig
+++ b/configs/mx28evk_auart_console_defconfig
@@ -51,7 +51,6 @@  CONFIG_SPI_FLASH_SST=y
 CONFIG_MII=y
 CONFIG_CONS_INDEX=0
 CONFIG_SPI=y
-CONFIG_MXS_SPI=y
 CONFIG_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_STORAGE=y
diff --git a/configs/mx28evk_defconfig b/configs/mx28evk_defconfig
index 187467d3db..40ab39ccf1 100644
--- a/configs/mx28evk_defconfig
+++ b/configs/mx28evk_defconfig
@@ -51,7 +51,6 @@  CONFIG_SPI_FLASH_SST=y
 CONFIG_MII=y
 CONFIG_CONS_INDEX=0
 CONFIG_SPI=y
-CONFIG_MXS_SPI=y
 CONFIG_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_STORAGE=y
diff --git a/configs/mx28evk_nand_defconfig b/configs/mx28evk_nand_defconfig
index 7d891e7934..0d2afbbdb0 100644
--- a/configs/mx28evk_nand_defconfig
+++ b/configs/mx28evk_nand_defconfig
@@ -50,7 +50,6 @@  CONFIG_SPI_FLASH_SST=y
 CONFIG_MII=y
 CONFIG_CONS_INDEX=0
 CONFIG_SPI=y
-CONFIG_MXS_SPI=y
 CONFIG_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_STORAGE=y
diff --git a/configs/mx28evk_spi_defconfig b/configs/mx28evk_spi_defconfig
index cb5b1b3b75..b9ea4934bb 100644
--- a/configs/mx28evk_spi_defconfig
+++ b/configs/mx28evk_spi_defconfig
@@ -50,7 +50,6 @@  CONFIG_SPI_FLASH_SST=y
 CONFIG_MII=y
 CONFIG_CONS_INDEX=0
 CONFIG_SPI=y
-CONFIG_MXS_SPI=y
 CONFIG_USB=y
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_STORAGE=y
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index 7043b5c0f6..955da8db64 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -370,12 +370,6 @@  config MXC_SPI
 	  Enable the MXC SPI controller driver. This driver can be used
 	  on various i.MX SoCs such as i.MX31/35/51/6/7.
 
-config MXS_SPI
-	bool "MXS SPI Driver"
-	help
-	  Enable the MXS SPI controller driver. This driver can be used
-	  on the i.MX23 and i.MX28 SoCs.
-
 config OMAP3_SPI
 	bool "McSPI driver for OMAP"
 	help
diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index 25add2812d..055ef99dc9 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -40,7 +40,6 @@  obj-$(CONFIG_MT7621_SPI) += mt7621_spi.o
 obj-$(CONFIG_MSCC_BB_SPI) += mscc_bb_spi.o
 obj-$(CONFIG_MVEBU_A3700_SPI) += mvebu_a3700_spi.o
 obj-$(CONFIG_MXC_SPI) += mxc_spi.o
-obj-$(CONFIG_MXS_SPI) += mxs_spi.o
 obj-$(CONFIG_ATCSPI200_SPI) += atcspi200_spi.o
 obj-$(CONFIG_OMAP3_SPI) += omap3_spi.o
 obj-$(CONFIG_PIC32_SPI) += pic32_spi.o
diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
deleted file mode 100644
index 5065e407f8..0000000000
--- a/drivers/spi/mxs_spi.c
+++ /dev/null
@@ -1,358 +0,0 @@ 
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Freescale i.MX28 SPI driver
- *
- * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
- * on behalf of DENX Software Engineering GmbH
- *
- * NOTE: This driver only supports the SPI-controller chipselects,
- *       GPIO driven chipselects are not supported.
- */
-
-#include <common.h>
-#include <malloc.h>
-#include <memalign.h>
-#include <spi.h>
-#include <linux/errno.h>
-#include <asm/io.h>
-#include <asm/arch/clock.h>
-#include <asm/arch/imx-regs.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/mach-imx/dma.h>
-
-#define	MXS_SPI_MAX_TIMEOUT	1000000
-#define	MXS_SPI_PORT_OFFSET	0x2000
-#define MXS_SSP_CHIPSELECT_MASK		0x00300000
-#define MXS_SSP_CHIPSELECT_SHIFT	20
-
-#define MXSSSP_SMALL_TRANSFER	512
-
-struct mxs_spi_slave {
-	struct spi_slave	slave;
-	uint32_t		max_khz;
-	uint32_t		mode;
-	struct mxs_ssp_regs	*regs;
-};
-
-static inline struct mxs_spi_slave *to_mxs_slave(struct spi_slave *slave)
-{
-	return container_of(slave, struct mxs_spi_slave, slave);
-}
-
-int spi_cs_is_valid(unsigned int bus, unsigned int cs)
-{
-	/* MXS SPI: 4 ports and 3 chip selects maximum */
-	if (!mxs_ssp_bus_id_valid(bus) || cs > 2)
-		return 0;
-	else
-		return 1;
-}
-
-struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
-				  unsigned int max_hz, unsigned int mode)
-{
-	struct mxs_spi_slave *mxs_slave;
-
-	if (!spi_cs_is_valid(bus, cs)) {
-		printf("mxs_spi: invalid bus %d / chip select %d\n", bus, cs);
-		return NULL;
-	}
-
-	mxs_slave = spi_alloc_slave(struct mxs_spi_slave, bus, cs);
-	if (!mxs_slave)
-		return NULL;
-
-	if (mxs_dma_init_channel(MXS_DMA_CHANNEL_AHB_APBH_SSP0 + bus))
-		goto err_init;
-
-	mxs_slave->max_khz = max_hz / 1000;
-	mxs_slave->mode = mode;
-	mxs_slave->regs = mxs_ssp_regs_by_bus(bus);
-
-	return &mxs_slave->slave;
-
-err_init:
-	free(mxs_slave);
-	return NULL;
-}
-
-void spi_free_slave(struct spi_slave *slave)
-{
-	struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
-	free(mxs_slave);
-}
-
-int spi_claim_bus(struct spi_slave *slave)
-{
-	struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
-	struct mxs_ssp_regs *ssp_regs = mxs_slave->regs;
-	uint32_t reg = 0;
-
-	mxs_reset_block(&ssp_regs->hw_ssp_ctrl0_reg);
-
-	writel((slave->cs << MXS_SSP_CHIPSELECT_SHIFT) |
-	       SSP_CTRL0_BUS_WIDTH_ONE_BIT,
-	       &ssp_regs->hw_ssp_ctrl0);
-
-	reg = SSP_CTRL1_SSP_MODE_SPI | SSP_CTRL1_WORD_LENGTH_EIGHT_BITS;
-	reg |= (mxs_slave->mode & SPI_CPOL) ? SSP_CTRL1_POLARITY : 0;
-	reg |= (mxs_slave->mode & SPI_CPHA) ? SSP_CTRL1_PHASE : 0;
-	writel(reg, &ssp_regs->hw_ssp_ctrl1);
-
-	writel(0, &ssp_regs->hw_ssp_cmd0);
-
-	mxs_set_ssp_busclock(slave->bus, mxs_slave->max_khz);
-
-	return 0;
-}
-
-void spi_release_bus(struct spi_slave *slave)
-{
-}
-
-static void mxs_spi_start_xfer(struct mxs_ssp_regs *ssp_regs)
-{
-	writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_set);
-	writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_clr);
-}
-
-static void mxs_spi_end_xfer(struct mxs_ssp_regs *ssp_regs)
-{
-	writel(SSP_CTRL0_LOCK_CS, &ssp_regs->hw_ssp_ctrl0_clr);
-	writel(SSP_CTRL0_IGNORE_CRC, &ssp_regs->hw_ssp_ctrl0_set);
-}
-
-static int mxs_spi_xfer_pio(struct mxs_spi_slave *slave,
-			char *data, int length, int write, unsigned long flags)
-{
-	struct mxs_ssp_regs *ssp_regs = slave->regs;
-
-	if (flags & SPI_XFER_BEGIN)
-		mxs_spi_start_xfer(ssp_regs);
-
-	while (length--) {
-		/* We transfer 1 byte */
-#if defined(CONFIG_MX23)
-		writel(SSP_CTRL0_XFER_COUNT_MASK, &ssp_regs->hw_ssp_ctrl0_clr);
-		writel(1, &ssp_regs->hw_ssp_ctrl0_set);
-#elif defined(CONFIG_MX28)
-		writel(1, &ssp_regs->hw_ssp_xfer_size);
-#endif
-
-		if ((flags & SPI_XFER_END) && !length)
-			mxs_spi_end_xfer(ssp_regs);
-
-		if (write)
-			writel(SSP_CTRL0_READ, &ssp_regs->hw_ssp_ctrl0_clr);
-		else
-			writel(SSP_CTRL0_READ, &ssp_regs->hw_ssp_ctrl0_set);
-
-		writel(SSP_CTRL0_RUN, &ssp_regs->hw_ssp_ctrl0_set);
-
-		if (mxs_wait_mask_set(&ssp_regs->hw_ssp_ctrl0_reg,
-			SSP_CTRL0_RUN, MXS_SPI_MAX_TIMEOUT)) {
-			printf("MXS SPI: Timeout waiting for start\n");
-			return -ETIMEDOUT;
-		}
-
-		if (write)
-			writel(*data++, &ssp_regs->hw_ssp_data);
-
-		writel(SSP_CTRL0_DATA_XFER, &ssp_regs->hw_ssp_ctrl0_set);
-
-		if (!write) {
-			if (mxs_wait_mask_clr(&ssp_regs->hw_ssp_status_reg,
-				SSP_STATUS_FIFO_EMPTY, MXS_SPI_MAX_TIMEOUT)) {
-				printf("MXS SPI: Timeout waiting for data\n");
-				return -ETIMEDOUT;
-			}
-
-			*data = readl(&ssp_regs->hw_ssp_data);
-			data++;
-		}
-
-		if (mxs_wait_mask_clr(&ssp_regs->hw_ssp_ctrl0_reg,
-			SSP_CTRL0_RUN, MXS_SPI_MAX_TIMEOUT)) {
-			printf("MXS SPI: Timeout waiting for finish\n");
-			return -ETIMEDOUT;
-		}
-	}
-
-	return 0;
-}
-
-static int mxs_spi_xfer_dma(struct mxs_spi_slave *slave,
-			char *data, int length, int write, unsigned long flags)
-{
-	const int xfer_max_sz = 0xff00;
-	const int desc_count = DIV_ROUND_UP(length, xfer_max_sz) + 1;
-	struct mxs_ssp_regs *ssp_regs = slave->regs;
-	struct mxs_dma_desc *dp;
-	uint32_t ctrl0;
-	uint32_t cache_data_count;
-	const uint32_t dstart = (uint32_t)data;
-	int dmach;
-	int tl;
-	int ret = 0;
-
-#if defined(CONFIG_MX23)
-	const int mxs_spi_pio_words = 1;
-#elif defined(CONFIG_MX28)
-	const int mxs_spi_pio_words = 4;
-#endif
-
-	ALLOC_CACHE_ALIGN_BUFFER(struct mxs_dma_desc, desc, desc_count);
-
-	memset(desc, 0, sizeof(struct mxs_dma_desc) * desc_count);
-
-	ctrl0 = readl(&ssp_regs->hw_ssp_ctrl0);
-	ctrl0 |= SSP_CTRL0_DATA_XFER;
-
-	if (flags & SPI_XFER_BEGIN)
-		ctrl0 |= SSP_CTRL0_LOCK_CS;
-	if (!write)
-		ctrl0 |= SSP_CTRL0_READ;
-
-	if (length % ARCH_DMA_MINALIGN)
-		cache_data_count = roundup(length, ARCH_DMA_MINALIGN);
-	else
-		cache_data_count = length;
-
-	/* Flush data to DRAM so DMA can pick them up */
-	if (write)
-		flush_dcache_range(dstart, dstart + cache_data_count);
-
-	/* Invalidate the area, so no writeback into the RAM races with DMA */
-	invalidate_dcache_range(dstart, dstart + cache_data_count);
-
-	dmach = MXS_DMA_CHANNEL_AHB_APBH_SSP0 + slave->slave.bus;
-
-	dp = desc;
-	while (length) {
-		dp->address = (dma_addr_t)dp;
-		dp->cmd.address = (dma_addr_t)data;
-
-		/*
-		 * This is correct, even though it does indeed look insane.
-		 * I hereby have to, wholeheartedly, thank Freescale Inc.,
-		 * for always inventing insane hardware and keeping me busy
-		 * and employed ;-)
-		 */
-		if (write)
-			dp->cmd.data = MXS_DMA_DESC_COMMAND_DMA_READ;
-		else
-			dp->cmd.data = MXS_DMA_DESC_COMMAND_DMA_WRITE;
-
-		/*
-		 * The DMA controller can transfer large chunks (64kB) at
-		 * time by setting the transfer length to 0. Setting tl to
-		 * 0x10000 will overflow below and make .data contain 0.
-		 * Otherwise, 0xff00 is the transfer maximum.
-		 */
-		if (length >= 0x10000)
-			tl = 0x10000;
-		else
-			tl = min(length, xfer_max_sz);
-
-		dp->cmd.data |=
-			((tl & 0xffff) << MXS_DMA_DESC_BYTES_OFFSET) |
-			(mxs_spi_pio_words << MXS_DMA_DESC_PIO_WORDS_OFFSET) |
-			MXS_DMA_DESC_HALT_ON_TERMINATE |
-			MXS_DMA_DESC_TERMINATE_FLUSH;
-
-		data += tl;
-		length -= tl;
-
-		if (!length) {
-			dp->cmd.data |= MXS_DMA_DESC_IRQ | MXS_DMA_DESC_DEC_SEM;
-
-			if (flags & SPI_XFER_END) {
-				ctrl0 &= ~SSP_CTRL0_LOCK_CS;
-				ctrl0 |= SSP_CTRL0_IGNORE_CRC;
-			}
-		}
-
-		/*
-		 * Write CTRL0, CMD0, CMD1 and XFER_SIZE registers in
-		 * case of MX28, write only CTRL0 in case of MX23 due
-		 * to the difference in register layout. It is utterly
-		 * essential that the XFER_SIZE register is written on
-		 * a per-descriptor basis with the same size as is the
-		 * descriptor!
-		 */
-		dp->cmd.pio_words[0] = ctrl0;
-#ifdef CONFIG_MX28
-		dp->cmd.pio_words[1] = 0;
-		dp->cmd.pio_words[2] = 0;
-		dp->cmd.pio_words[3] = tl;
-#endif
-
-		mxs_dma_desc_append(dmach, dp);
-
-		dp++;
-	}
-
-	if (mxs_dma_go(dmach))
-		ret = -EINVAL;
-
-	/* The data arrived into DRAM, invalidate cache over them */
-	if (!write)
-		invalidate_dcache_range(dstart, dstart + cache_data_count);
-
-	return ret;
-}
-
-int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
-		const void *dout, void *din, unsigned long flags)
-{
-	struct mxs_spi_slave *mxs_slave = to_mxs_slave(slave);
-	struct mxs_ssp_regs *ssp_regs = mxs_slave->regs;
-	int len = bitlen / 8;
-	char dummy;
-	int write = 0;
-	char *data = NULL;
-	int dma = 1;
-
-	if (bitlen == 0) {
-		if (flags & SPI_XFER_END) {
-			din = (void *)&dummy;
-			len = 1;
-		} else
-			return 0;
-	}
-
-	/* Half-duplex only */
-	if (din && dout)
-		return -EINVAL;
-	/* No data */
-	if (!din && !dout)
-		return 0;
-
-	if (dout) {
-		data = (char *)dout;
-		write = 1;
-	} else if (din) {
-		data = (char *)din;
-		write = 0;
-	}
-
-	/*
-	 * Check for alignment, if the buffer is aligned, do DMA transfer,
-	 * PIO otherwise. This is a temporary workaround until proper bounce
-	 * buffer is in place.
-	 */
-	if (dma) {
-		if (((uint32_t)data) & (ARCH_DMA_MINALIGN - 1))
-			dma = 0;
-		if (((uint32_t)len) & (ARCH_DMA_MINALIGN - 1))
-			dma = 0;
-	}
-
-	if (!dma || (len < MXSSSP_SMALL_TRANSFER)) {
-		writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_clr);
-		return mxs_spi_xfer_pio(mxs_slave, data, len, write, flags);
-	} else {
-		writel(SSP_CTRL1_DMA_ENABLE, &ssp_regs->hw_ssp_ctrl1_set);
-		return mxs_spi_xfer_dma(mxs_slave, data, len, write, flags);
-	}
-}