diff options
-rw-r--r-- | drivers/serial/Kconfig | 10 | ||||
-rw-r--r-- | drivers/serial/Makefile | 2 | ||||
-rw-r--r-- | drivers/serial/serial_altera.c | 94 | ||||
-rw-r--r-- | drivers/serial/serial_altera_jtag.c | 99 | ||||
-rw-r--r-- | drivers/spi/Kconfig | 4 | ||||
-rw-r--r-- | drivers/spi/Makefile | 1 | ||||
-rw-r--r-- | drivers/spi/altera_spi.c | 236 |
7 files changed, 0 insertions, 446 deletions
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 7c9a46845a..77c827e436 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -71,16 +71,6 @@ config DRIVER_SERIAL_CLPS711X default y bool "CLPS711X serial driver" -config DRIVER_SERIAL_ALTERA - depends on NIOS2 - default y - bool "Altera serial driver" - -config DRIVER_SERIAL_ALTERA_JTAG - depends on NIOS2 - default n - bool "Altera JTAG serial driver" - config DRIVER_SERIAL_NS16550 default n bool "NS16550 serial driver" diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 5677dba631..bbc517f521 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile @@ -13,8 +13,6 @@ obj-$(CONFIG_DRIVER_SERIAL_NS16550) += serial_ns16550.o obj-$(CONFIG_DRIVER_SERIAL_NS16550_PCI) += serial_ns16550_pci.o obj-$(CONFIG_DRIVER_SERIAL_PL010) += serial_pl010.o obj-$(CONFIG_DRIVER_SERIAL_STM32) += serial_stm32.o -obj-$(CONFIG_DRIVER_SERIAL_ALTERA) += serial_altera.o -obj-$(CONFIG_DRIVER_SERIAL_ALTERA_JTAG) += serial_altera_jtag.o obj-$(CONFIG_DRIVER_SERIAL_PXA) += serial_pxa.o obj-$(CONFIG_DRIVER_SERIAL_OMAP4_USBBOOT) += serial_omap4_usbboot.o obj-$(CONFIG_DRIVER_SERIAL_AUART) += serial_auart.o diff --git a/drivers/serial/serial_altera.c b/drivers/serial/serial_altera.c deleted file mode 100644 index b13050cfbe..0000000000 --- a/drivers/serial/serial_altera.c +++ /dev/null @@ -1,94 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * (C) Copyright 2011, Franck JULLIEN, <elec4fun@gmail.com> - */ - -#include <common.h> -#include <driver.h> -#include <init.h> -#include <malloc.h> -#include <io.h> -#include <asm/nios2-io.h> - -struct altera_serial_priv { - struct console_device cdev; - void __iomem *regs; -}; - -static int altera_serial_setbaudrate(struct console_device *cdev, int baudrate) -{ - struct altera_serial_priv *priv = container_of(cdev, - struct altera_serial_priv, cdev); - - struct nios_uart *uart = priv->regs; - uint16_t div; - - div = (CPU_FREQ / baudrate) - 1; - writew(div, &uart->divisor); - - return 0; -} - -static void altera_serial_putc(struct console_device *cdev, char c) -{ - struct altera_serial_priv *priv = container_of(cdev, - struct altera_serial_priv, cdev); - - struct nios_uart *uart = priv->regs; - - while ((readw(&uart->status) & NIOS_UART_TRDY) == 0); - - writew(c, &uart->txdata); -} - -static int altera_serial_tstc(struct console_device *cdev) -{ - struct altera_serial_priv *priv = container_of(cdev, - struct altera_serial_priv, cdev); - - struct nios_uart *uart = priv->regs; - - return readw(&uart->status) & NIOS_UART_RRDY; -} - -static int altera_serial_getc(struct console_device *cdev) -{ - struct altera_serial_priv *priv = container_of(cdev, - struct altera_serial_priv, cdev); - - struct nios_uart *uart = priv->regs; - - while (altera_serial_tstc(cdev) == 0); - - return readw(&uart->rxdata) & 0x000000FF; -} - -static int altera_serial_probe(struct device *dev) -{ - struct resource *iores; - struct console_device *cdev; - struct altera_serial_priv *priv; - - priv = xzalloc(sizeof(*priv)); - cdev = &priv->cdev; - - iores = dev_request_mem_resource(dev, 0); - if (IS_ERR(iores)) - return PTR_ERR(iores); - priv->regs = IOMEM(iores->start); - cdev->dev = dev; - cdev->tstc = altera_serial_tstc; - cdev->putc = altera_serial_putc; - cdev->getc = altera_serial_getc; - cdev->setbrg = altera_serial_setbaudrate; - - console_register(cdev); - - return 0; -} - -static struct driver altera_serial_driver = { - .name = "altera_serial", - .probe = altera_serial_probe, -}; -console_platform_driver(altera_serial_driver); diff --git a/drivers/serial/serial_altera_jtag.c b/drivers/serial/serial_altera_jtag.c deleted file mode 100644 index ad278d1a61..0000000000 --- a/drivers/serial/serial_altera_jtag.c +++ /dev/null @@ -1,99 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * (C) Copyright 2004, Psyent Corporation <www.psyent.com> - * Scott McNutt <smcnutt@psyent.com> - * - * (C) Copyright 2011 - Franck JULLIEN <elec4fun@gmail.com> - */ - -#include <common.h> -#include <driver.h> -#include <init.h> -#include <malloc.h> -#include <io.h> -#include <asm/nios2-io.h> - -struct altera_serial_jtag_priv { - struct console_device cdev; - void __iomem *regs; -}; - - -static int altera_serial_jtag_setbaudrate(struct console_device *cdev, int baudrate) -{ - return 0; -} - -static void altera_serial_jtag_putc(struct console_device *cdev, char c) -{ - struct altera_serial_jtag_priv *priv = container_of(cdev, - struct altera_serial_jtag_priv, cdev); - - struct nios_jtag *jtag = priv->regs; - uint32_t st; - - while (1) { - st = readl(&jtag->control); - if (NIOS_JTAG_WSPACE(st)) - break; - } - - writel(c, &jtag->data); -} - -static int altera_serial_jtag_tstc(struct console_device *cdev) -{ - struct altera_serial_jtag_priv *priv = container_of(cdev, - struct altera_serial_jtag_priv, cdev); - - struct nios_jtag *jtag = priv->regs; - - return readl(&jtag->control) & NIOS_JTAG_RRDY; -} - -static int altera_serial_jtag_getc(struct console_device *cdev) -{ - struct altera_serial_jtag_priv *priv = container_of(cdev, - struct altera_serial_jtag_priv, cdev); - - struct nios_jtag *jtag = priv->regs; - uint32_t val; - - while (1) { - val = readl(&jtag->data); - if (val & NIOS_JTAG_RVALID) - break; - } - - return val & 0xFF; -} - -static int altera_serial_jtag_probe(struct device *dev) { - struct resource *iores; - - struct console_device *cdev; - struct altera_serial_jtag_priv *priv; - - priv = xzalloc(sizeof(*priv)); - cdev = &priv->cdev; - - iores = dev_request_mem_resource(dev, 0); - if (IS_ERR(iores)) - return PTR_ERR(iores); - priv->regs = IOMEM(iores->start); - cdev->dev = dev; - cdev->tstc = altera_serial_jtag_tstc; - cdev->putc = altera_serial_jtag_putc; - cdev->getc = altera_serial_jtag_getc; - cdev->setbrg = altera_serial_jtag_setbaudrate; - - console_register(cdev); - - return 0; -} - -static struct driver altera_serial_jtag_driver = { - .name = "altera_serial_jtag", - .probe = altera_serial_jtag_probe, -}; -console_platform_driver(altera_serial_jtag_driver); diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 8935feb97b..e37c7821fb 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -14,10 +14,6 @@ config SPI_MEM This extension is meant to simplify interaction with SPI memories by providing a high-level interface to send memory-like commands. -config DRIVER_SPI_ALTERA - bool "Altera SPI Master driver" - depends on NIOS2 - config DRIVER_SPI_ATH79 bool "Atheros AR71XX/AR724X/AR913X/AR933X SPI controller driver" depends on MACH_MIPS_ATH79 diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile index 3455eea869..68a8c4e675 100644 --- a/drivers/spi/Makefile +++ b/drivers/spi/Makefile @@ -8,7 +8,6 @@ obj-$(CONFIG_DRIVER_SPI_IMX) += imx_spi.o obj-$(CONFIG_DRIVER_SPI_LITEX_SPIFLASH) += litex_spiflash.o obj-$(CONFIG_DRIVER_SPI_MVEBU) += mvebu_spi.o obj-$(CONFIG_DRIVER_SPI_MXS) += mxs_spi.o -obj-$(CONFIG_DRIVER_SPI_ALTERA) += altera_spi.o obj-$(CONFIG_DRIVER_SPI_ATMEL) += atmel_spi.o obj-$(CONFIG_SPI_FSL_DSPI) += spi-fsl-dspi.o obj-$(CONFIG_SPI_ATMEL_QUADSPI) += atmel-quadspi.o diff --git a/drivers/spi/altera_spi.c b/drivers/spi/altera_spi.c deleted file mode 100644 index 50d77723da..0000000000 --- a/drivers/spi/altera_spi.c +++ /dev/null @@ -1,236 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * (C) Copyright 2011 - Franck JULLIEN <elec4fun@gmail.com> - */ - -#include <common.h> -#include <init.h> -#include <driver.h> -#include <spi/spi.h> -#include <io.h> -#include <asm/spi.h> -#include <asm/nios2-io.h> -#include <clock.h> - -static void altera_spi_cs_inactive(struct spi_device *spi); - -static int altera_spi_setup(struct spi_device *spi) -{ - struct spi_master *master = spi->master; - struct device spi_dev = spi->dev; - struct altera_spi *altera_spi = container_of(master, struct altera_spi, master); - - if (spi->bits_per_word != altera_spi->databits) { - dev_err(master->dev, " master doesn't support %d bits per word requested by %s\n", - spi->bits_per_word, spi_dev.name); - return -EINVAL; - } - - if ((spi->mode & (SPI_CPHA | SPI_CPOL)) != altera_spi->mode) { - dev_err(master->dev, " master doesn't support SPI_MODE%d requested by %s\n", - spi->mode & (SPI_CPHA | SPI_CPOL), spi_dev.name); - return -EINVAL; - } - - if (spi->max_speed_hz < altera_spi->speed) { - dev_err(master->dev, " frequency is too high for %s\n", spi_dev.name); - return -EINVAL; - } - - altera_spi_cs_inactive(spi); - - dev_dbg(master->dev, " mode 0x%08x, bits_per_word: %d, speed: %d\n", - spi->mode, spi->bits_per_word, altera_spi->speed); - - return 0; -} - - -static unsigned int altera_spi_xchg_single(struct altera_spi *altera_spi, unsigned int data) -{ - struct nios_spi *nios_spi = altera_spi->regs; - - while (!(readl(&nios_spi->status) & NIOS_SPI_TRDY)); - writel(data, &nios_spi->txdata); - - while (!(readl(&nios_spi->status) & NIOS_SPI_RRDY)); - - return readl(&nios_spi->rxdata); -} - -/* - * When using SPI_CS_HIGH devices, only one device is allowed to be - * connected to the Altera SPI master. This limitation is due to the - * emulation of an active high CS by writing 0 to the slaveselect register - * (this produce a '1' to all CS pins). - */ - -static void altera_spi_cs_active(struct spi_device *spi) -{ - struct altera_spi *altera_spi = container_of(spi->master, struct altera_spi, master); - struct nios_spi *nios_spi = altera_spi->regs; - uint32_t tmp; - - if (spi->mode & SPI_CS_HIGH) { - tmp = readw(&nios_spi->control); - writew(tmp & ~NIOS_SPI_SSO, &nios_spi->control); - writel(0, &nios_spi->slaveselect); - } else { - writel(1 << spi->chip_select, &nios_spi->slaveselect); - tmp = readl(&nios_spi->control); - writel(tmp | NIOS_SPI_SSO, &nios_spi->control); - } -} - -static void altera_spi_cs_inactive(struct spi_device *spi) -{ - struct altera_spi *altera_spi = container_of(spi->master, struct altera_spi, master); - struct nios_spi *nios_spi = altera_spi->regs; - uint32_t tmp; - - if (spi->mode & SPI_CS_HIGH) { - writel(1 << spi->chip_select, &nios_spi->slaveselect); - tmp = readl(&nios_spi->control); - writel(tmp | NIOS_SPI_SSO, &nios_spi->control); - } else { - tmp = readw(&nios_spi->control); - writew(tmp & ~NIOS_SPI_SSO, &nios_spi->control); - } -} - -static unsigned altera_spi_do_xfer(struct spi_device *spi, struct spi_transfer *t) -{ - struct altera_spi *altera_spi = container_of(spi->master, struct altera_spi, master); - int word_len; - unsigned retval = 0; - u32 txval; - u32 rxval; - - word_len = spi->bits_per_word; - - if (word_len <= 8) { - const u8 *txbuf = t->tx_buf; - u8 *rxbuf = t->rx_buf; - int i = 0; - - while (i < t->len) { - txval = txbuf ? txbuf[i] : 0; - rxval = altera_spi_xchg_single(altera_spi, txval); - if (rxbuf) - rxbuf[i] = rxval; - i++; - retval++; - } - } else if (word_len <= 16) { - const u16 *txbuf = t->tx_buf; - u16 *rxbuf = t->rx_buf; - int i = 0; - - while (i < t->len >> 1) { - txval = txbuf ? txbuf[i] : 0; - rxval = altera_spi_xchg_single(altera_spi, txval); - if (rxbuf) - rxbuf[i] = rxval; - i++; - retval += 2; - } - } else if (word_len <= 32) { - const u32 *txbuf = t->tx_buf; - u32 *rxbuf = t->rx_buf; - int i = 0; - - while (i < t->len >> 2) { - txval = txbuf ? txbuf[i] : 0; - rxval = altera_spi_xchg_single(altera_spi, txval); - if (rxbuf) - rxbuf[i] = rxval; - i++; - retval += 4; - } - } - - return retval; -} - -static int altera_spi_transfer(struct spi_device *spi, struct spi_message *mesg) -{ - struct altera_spi *altera_spi = container_of(spi->master, struct altera_spi, master); - struct nios_spi *nios_spi = altera_spi->regs; - struct spi_transfer *t; - unsigned int cs_change; - const int nsecs = 50; - - altera_spi_cs_active(spi); - - cs_change = 0; - - mesg->actual_length = 0; - - list_for_each_entry(t, &mesg->transfers, transfer_list) { - - if (cs_change) { - ndelay(nsecs); - altera_spi_cs_inactive(spi); - ndelay(nsecs); - altera_spi_cs_active(spi); - } - - cs_change = t->cs_change; - - mesg->actual_length += altera_spi_do_xfer(spi, t); - - if (cs_change) { - altera_spi_cs_active(spi); - } - } - - /* Wait the end of any pending transfer */ - while ((readl(&nios_spi->status) & NIOS_SPI_TMT) == 0); - - if (!cs_change) - altera_spi_cs_inactive(spi); - - return 0; -} - -static int altera_spi_probe(struct device *dev) -{ - struct resource *iores; - struct spi_master *master; - struct altera_spi *altera_spi; - struct spi_altera_master *pdata = dev->platform_data; - struct nios_spi *nios_spi; - - altera_spi = xzalloc(sizeof(*altera_spi)); - - master = &altera_spi->master; - master->dev = dev; - - master->setup = altera_spi_setup; - master->transfer = altera_spi_transfer; - master->num_chipselect = pdata->num_chipselect; - master->bus_num = pdata->bus_num; - - iores = dev_request_mem_resource(dev, 0); - if (IS_ERR(iores)) - return PTR_ERR(iores); - altera_spi->regs = IOMEM(iores->start); - - altera_spi->databits = pdata->databits; - altera_spi->speed = pdata->speed; - altera_spi->mode = pdata->spi_mode; - - nios_spi = altera_spi->regs; - writel(0, &nios_spi->slaveselect); - writel(0, &nios_spi->control); - - spi_register_master(master); - - return 0; -} - -static struct driver altera_spi_driver = { - .name = "altera_spi", - .probe = altera_spi_probe, -}; -device_platform_driver(altera_spi_driver); |