52c17bff3c
This adds kernel support for the Pistachio SoC and the Marduk (Ci40) board which uses it. Much of the code for Pistachio has been upstreamed however some patches are still required to boot from the Marduk board: * spi bug fixes * dma bug fixes * pistachio internal clock tree bug fixes * spi-nand implementation * dts based mtd device naming scheme * dts backports and bug fixes Signed-off-by: Abhijit Mahajani <Abhijit.Mahajani@imgtec.com> Signed-off-by: Francois Berder <francois.berder@imgtec.com> Signed-off-by: Ian Pozella <Ian.Pozella@imgtec.com>
69 lines
2.6 KiB
Diff
69 lines
2.6 KiB
Diff
From 905ee06a9966113fe51d6bad1819759cb30fd0bd Mon Sep 17 00:00:00 2001
|
|
From: Ionela Voinescu <ionela.voinescu@imgtec.com>
|
|
Date: Tue, 9 Feb 2016 10:18:31 +0000
|
|
Subject: spi: img-spfi: use device 0 configuration for all devices
|
|
|
|
Given that we control the chip select line externally
|
|
we can use only one parameter register (device 0 parameter
|
|
register) and one set of configuration bits (port configuration
|
|
bits for device 0) for all devices (all chip select lines).
|
|
|
|
Signed-off-by: Ionela Voinescu <ionela.voinescu@imgtec.com>
|
|
---
|
|
drivers/spi/spi-img-spfi.c | 23 ++++++++++++++++-------
|
|
1 file changed, 16 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/drivers/spi/spi-img-spfi.c b/drivers/spi/spi-img-spfi.c
|
|
index 0d73d31..231b59c 100644
|
|
--- a/drivers/spi/spi-img-spfi.c
|
|
+++ b/drivers/spi/spi-img-spfi.c
|
|
@@ -437,18 +437,23 @@ static int img_spfi_prepare(struct spi_master *master, struct spi_message *msg)
|
|
struct img_spfi *spfi = spi_master_get_devdata(master);
|
|
u32 val;
|
|
|
|
+ /*
|
|
+ * The chip select line is controlled externally so
|
|
+ * we can use the CS0 configuration for all devices
|
|
+ */
|
|
val = spfi_readl(spfi, SPFI_PORT_STATE);
|
|
+
|
|
+ /* 0 for device selection */
|
|
val &= ~(SPFI_PORT_STATE_DEV_SEL_MASK <<
|
|
SPFI_PORT_STATE_DEV_SEL_SHIFT);
|
|
- val |= msg->spi->chip_select << SPFI_PORT_STATE_DEV_SEL_SHIFT;
|
|
if (msg->spi->mode & SPI_CPHA)
|
|
- val |= SPFI_PORT_STATE_CK_PHASE(msg->spi->chip_select);
|
|
+ val |= SPFI_PORT_STATE_CK_PHASE(0);
|
|
else
|
|
- val &= ~SPFI_PORT_STATE_CK_PHASE(msg->spi->chip_select);
|
|
+ val &= ~SPFI_PORT_STATE_CK_PHASE(0);
|
|
if (msg->spi->mode & SPI_CPOL)
|
|
- val |= SPFI_PORT_STATE_CK_POL(msg->spi->chip_select);
|
|
+ val |= SPFI_PORT_STATE_CK_POL(0);
|
|
else
|
|
- val &= ~SPFI_PORT_STATE_CK_POL(msg->spi->chip_select);
|
|
+ val &= ~SPFI_PORT_STATE_CK_POL(0);
|
|
spfi_writel(spfi, val, SPFI_PORT_STATE);
|
|
|
|
return 0;
|
|
@@ -548,11 +553,15 @@ static void img_spfi_config(struct spi_master *master, struct spi_device *spi,
|
|
div = DIV_ROUND_UP(clk_get_rate(spfi->spfi_clk), xfer->speed_hz);
|
|
div = clamp(512 / (1 << get_count_order(div)), 1, 128);
|
|
|
|
- val = spfi_readl(spfi, SPFI_DEVICE_PARAMETER(spi->chip_select));
|
|
+ /*
|
|
+ * The chip select line is controlled externally so
|
|
+ * we can use the CS0 parameters for all devices
|
|
+ */
|
|
+ val = spfi_readl(spfi, SPFI_DEVICE_PARAMETER(0));
|
|
val &= ~(SPFI_DEVICE_PARAMETER_BITCLK_MASK <<
|
|
SPFI_DEVICE_PARAMETER_BITCLK_SHIFT);
|
|
val |= div << SPFI_DEVICE_PARAMETER_BITCLK_SHIFT;
|
|
- spfi_writel(spfi, val, SPFI_DEVICE_PARAMETER(spi->chip_select));
|
|
+ spfi_writel(spfi, val, SPFI_DEVICE_PARAMETER(0));
|
|
|
|
if (!list_is_last(&xfer->transfer_list, &master->cur_msg->transfers) &&
|
|
/*
|
|
--
|
|
2.7.4
|
|
|