mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH] nios2: remove arch remains from drivers
@ 2023-06-29 20:13 Denis Orlov
  2023-06-30  8:57 ` Ian Abbott
  2023-07-03 13:21 ` Sascha Hauer
  0 siblings, 2 replies; 5+ messages in thread
From: Denis Orlov @ 2023-06-29 20:13 UTC (permalink / raw)
  To: barebox; +Cc: Denis Orlov

The architecture was removed back in the commit efccc13513, however some
drivers that were available exclusively for NIOS2 were left over. As it
has been impossible to compile those since then, it seems reasonable to
just get rid of them.

Signed-off-by: Denis Orlov <denorl2009@gmail.com>
---
 drivers/serial/Kconfig              |  10 --
 drivers/serial/Makefile             |   2 -
 drivers/serial/serial_altera.c      |  94 -----------
 drivers/serial/serial_altera_jtag.c |  99 ------------
 drivers/spi/Kconfig                 |   4 -
 drivers/spi/Makefile                |   1 -
 drivers/spi/altera_spi.c            | 236 ----------------------------
 7 files changed, 446 deletions(-)
 delete mode 100644 drivers/serial/serial_altera.c
 delete mode 100644 drivers/serial/serial_altera_jtag.c
 delete mode 100644 drivers/spi/altera_spi.c

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);
-- 
2.41.0




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] nios2: remove arch remains from drivers
  2023-06-29 20:13 [PATCH] nios2: remove arch remains from drivers Denis Orlov
@ 2023-06-30  8:57 ` Ian Abbott
  2023-06-30 18:55   ` Denis Orlov
  2023-07-03 13:21 ` Sascha Hauer
  1 sibling, 1 reply; 5+ messages in thread
From: Ian Abbott @ 2023-06-30  8:57 UTC (permalink / raw)
  To: barebox

On 29/06/2023 21:13, Denis Orlov wrote:
> The architecture was removed back in the commit efccc13513, however some
> drivers that were available exclusively for NIOS2 were left over. As it
> has been impossible to compile those since then, it seems reasonable to
> just get rid of them.
> 
> Signed-off-by: Denis Orlov <denorl2009@gmail.com>
> ---
>   drivers/serial/Kconfig              |  10 --
>   drivers/serial/Makefile             |   2 -
>   drivers/serial/serial_altera.c      |  94 -----------
>   drivers/serial/serial_altera_jtag.c |  99 ------------
>   drivers/spi/Kconfig                 |   4 -
>   drivers/spi/Makefile                |   1 -
>   drivers/spi/altera_spi.c            | 236 ----------------------------
>   7 files changed, 446 deletions(-)
>   delete mode 100644 drivers/serial/serial_altera.c
>   delete mode 100644 drivers/serial/serial_altera_jtag.c
>   delete mode 100644 drivers/spi/altera_spi.c

As a point of interest, none of those drivers should really depend on 
NIOS2.  They are usable on an ARM SoCFPGA system if the FPGA logic 
contains the corresponding Altera/Intel IP components.

Whether or not anyone needs them in barebox is another matter, but I 
have certainly used them in ARM SoCFPGA Linux systems booted from barebox.

-- 
-=( Ian Abbott <abbotti@mev.co.uk> || MEV Ltd. is a company  )=-
-=( registered in England & Wales.  Regd. number: 02862268.  )=-
-=( Regd. addr.: S11 & 12 Building 67, Europa Business Park, )=-
-=( Bird Hall Lane, STOCKPORT, SK3 0XA, UK. || www.mev.co.uk )=-




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] nios2: remove arch remains from drivers
  2023-06-30  8:57 ` Ian Abbott
@ 2023-06-30 18:55   ` Denis Orlov
  2023-07-03  8:43     ` Sascha Hauer
  0 siblings, 1 reply; 5+ messages in thread
From: Denis Orlov @ 2023-06-30 18:55 UTC (permalink / raw)
  To: Ian Abbott, barebox

On 6/30/23 11:57, Ian Abbott wrote:
> On 29/06/2023 21:13, Denis Orlov wrote:
>> The architecture was removed back in the commit efccc13513, however some
>> drivers that were available exclusively for NIOS2 were left over. As it
>> has been impossible to compile those since then, it seems reasonable to
>> just get rid of them.
>>
>> Signed-off-by: Denis Orlov <denorl2009@gmail.com>
>> ---
>>   drivers/serial/Kconfig              |  10 --
>>   drivers/serial/Makefile             |   2 -
>>   drivers/serial/serial_altera.c      |  94 -----------
>>   drivers/serial/serial_altera_jtag.c |  99 ------------
>>   drivers/spi/Kconfig                 |   4 -
>>   drivers/spi/Makefile                |   1 -
>>   drivers/spi/altera_spi.c            | 236 ----------------------------
>>   7 files changed, 446 deletions(-)
>>   delete mode 100644 drivers/serial/serial_altera.c
>>   delete mode 100644 drivers/serial/serial_altera_jtag.c
>>   delete mode 100644 drivers/spi/altera_spi.c
>
> As a point of interest, none of those drivers should really depend on NIOS2.  They are usable on an ARM SoCFPGA system if the FPGA logic contains the corresponding Altera/Intel IP components.
>
> Whether or not anyone needs them in barebox is another matter, but I have certainly used them in ARM SoCFPGA Linux systems booted from barebox.
>

Hmm, maybe those drivers should rather depend on ARCH_SOCFPGA then? Would be great if someone tested them in barebox running on a SoCFPGA. Otherwise, they are just rotting in the source tree, with no actual usage.

Regards,
Denis




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] nios2: remove arch remains from drivers
  2023-06-30 18:55   ` Denis Orlov
@ 2023-07-03  8:43     ` Sascha Hauer
  0 siblings, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2023-07-03  8:43 UTC (permalink / raw)
  To: Denis Orlov; +Cc: Ian Abbott, barebox

On Fri, Jun 30, 2023 at 09:55:29PM +0300, Denis Orlov wrote:
> On 6/30/23 11:57, Ian Abbott wrote:
> > On 29/06/2023 21:13, Denis Orlov wrote:
> >> The architecture was removed back in the commit efccc13513, however some
> >> drivers that were available exclusively for NIOS2 were left over. As it
> >> has been impossible to compile those since then, it seems reasonable to
> >> just get rid of them.
> >>
> >> Signed-off-by: Denis Orlov <denorl2009@gmail.com>
> >> ---
> >>   drivers/serial/Kconfig              |  10 --
> >>   drivers/serial/Makefile             |   2 -
> >>   drivers/serial/serial_altera.c      |  94 -----------
> >>   drivers/serial/serial_altera_jtag.c |  99 ------------
> >>   drivers/spi/Kconfig                 |   4 -
> >>   drivers/spi/Makefile                |   1 -
> >>   drivers/spi/altera_spi.c            | 236 ----------------------------
> >>   7 files changed, 446 deletions(-)
> >>   delete mode 100644 drivers/serial/serial_altera.c
> >>   delete mode 100644 drivers/serial/serial_altera_jtag.c
> >>   delete mode 100644 drivers/spi/altera_spi.c
> >
> > As a point of interest, none of those drivers should really depend on NIOS2.  They are usable on an ARM SoCFPGA system if the FPGA logic contains the corresponding Altera/Intel IP components.
> >
> > Whether or not anyone needs them in barebox is another matter, but I have certainly used them in ARM SoCFPGA Linux systems booted from barebox.
> >
> 
> Hmm, maybe those drivers should rather depend on ARCH_SOCFPGA then?
> Would be great if someone tested them in barebox running on a SoCFPGA.
> Otherwise, they are just rotting in the source tree, with no actual
> usage.

To make them usable on SoCFPGA the drivers would at least need device
tree probing support. drivers/serial/serial_altera.c needs a CPU_FREQ
define for baudrate setting. This would have to be replaced with clk
support. I think we can remove them from the tree for now and add them
back in a fresh state once somebody needs them.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] nios2: remove arch remains from drivers
  2023-06-29 20:13 [PATCH] nios2: remove arch remains from drivers Denis Orlov
  2023-06-30  8:57 ` Ian Abbott
@ 2023-07-03 13:21 ` Sascha Hauer
  1 sibling, 0 replies; 5+ messages in thread
From: Sascha Hauer @ 2023-07-03 13:21 UTC (permalink / raw)
  To: Denis Orlov; +Cc: barebox

On Thu, Jun 29, 2023 at 11:13:45PM +0300, Denis Orlov wrote:
> The architecture was removed back in the commit efccc13513, however some
> drivers that were available exclusively for NIOS2 were left over. As it
> has been impossible to compile those since then, it seems reasonable to
> just get rid of them.
> 
> Signed-off-by: Denis Orlov <denorl2009@gmail.com>
> ---
>  drivers/serial/Kconfig              |  10 --
>  drivers/serial/Makefile             |   2 -
>  drivers/serial/serial_altera.c      |  94 -----------
>  drivers/serial/serial_altera_jtag.c |  99 ------------
>  drivers/spi/Kconfig                 |   4 -
>  drivers/spi/Makefile                |   1 -
>  drivers/spi/altera_spi.c            | 236 ----------------------------
>  7 files changed, 446 deletions(-)
>  delete mode 100644 drivers/serial/serial_altera.c
>  delete mode 100644 drivers/serial/serial_altera_jtag.c
>  delete mode 100644 drivers/spi/altera_spi.c

Applied, thanks

Sascha

> 
> 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);
> -- 
> 2.41.0
> 
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-07-03 13:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-29 20:13 [PATCH] nios2: remove arch remains from drivers Denis Orlov
2023-06-30  8:57 ` Ian Abbott
2023-06-30 18:55   ` Denis Orlov
2023-07-03  8:43     ` Sascha Hauer
2023-07-03 13:21 ` Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox