public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] spi-fsl-dspi: Fix CTAR Register access
@ 2015-12-09  6:21 Bhuvanchandra DV
  2015-12-09 20:41 ` Mark Brown
  0 siblings, 1 reply; 3+ messages in thread
From: Bhuvanchandra DV @ 2015-12-09  6:21 UTC (permalink / raw)
  To: broonie; +Cc: stefan, linux-spi, linux-kernel, Bhuvanchandra DV

DSPI instances in Vybrid have a different amount of chip selects
and CTARs (Clock and transfer Attributes Register). In case of
DSPI1 we only have 2 CTAR registers and 4 CS. In present driver
implementation CTAR offset is derived from CS instance which will
lead to out of bound access if chip select instance is greater than
CTAR register instance, hence use single CTAR0 register for all CS
instances. Since we write the CTAR register anyway before each access,
there is no value in using the additional CTAR registers. Also one
should not program a value in CTAS for a CTAR register that is not
present, hence configure CTAS to use CTAR0.

Signed-off-by: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com>
---
 drivers/spi/spi-fsl-dspi.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
index 01fa95b..b21c3c0 100644
--- a/drivers/spi/spi-fsl-dspi.c
+++ b/drivers/spi/spi-fsl-dspi.c
@@ -138,7 +138,7 @@ static inline int is_double_byte_mode(struct fsl_dspi *dspi)
 {
 	unsigned int val;
 
-	regmap_read(dspi->regmap, SPI_CTAR(dspi->cs), &val);
+	regmap_read(dspi->regmap, SPI_CTAR(0), &val);
 
 	return ((val & SPI_FRAME_BITS_MASK) == SPI_FRAME_BITS(8)) ? 0 : 1;
 }
@@ -231,7 +231,7 @@ static int dspi_transfer_write(struct fsl_dspi *dspi)
 	 */
 	if (tx_word && (dspi->len == 1)) {
 		dspi->dataflags |= TRAN_STATE_WORD_ODD_NUM;
-		regmap_update_bits(dspi->regmap, SPI_CTAR(dspi->cs),
+		regmap_update_bits(dspi->regmap, SPI_CTAR(0),
 				SPI_FRAME_BITS_MASK, SPI_FRAME_BITS(8));
 		tx_word = 0;
 	}
@@ -250,7 +250,7 @@ static int dspi_transfer_write(struct fsl_dspi *dspi)
 
 			dspi_pushr = SPI_PUSHR_TXDATA(d16) |
 				SPI_PUSHR_PCS(dspi->cs) |
-				SPI_PUSHR_CTAS(dspi->cs) |
+				SPI_PUSHR_CTAS(0) |
 				SPI_PUSHR_CONT;
 
 			dspi->len -= 2;
@@ -265,7 +265,7 @@ static int dspi_transfer_write(struct fsl_dspi *dspi)
 
 			dspi_pushr = SPI_PUSHR_TXDATA(d8) |
 				SPI_PUSHR_PCS(dspi->cs) |
-				SPI_PUSHR_CTAS(dspi->cs) |
+				SPI_PUSHR_CTAS(0) |
 				SPI_PUSHR_CONT;
 
 			dspi->len--;
@@ -365,10 +365,10 @@ static int dspi_transfer_one_message(struct spi_master *master,
 		regmap_update_bits(dspi->regmap, SPI_MCR,
 				SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF,
 				SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF);
-		regmap_write(dspi->regmap, SPI_CTAR(dspi->cs),
+		regmap_write(dspi->regmap, SPI_CTAR(0),
 				dspi->cur_chip->ctar_val);
 		if (transfer->speed_hz)
-			regmap_write(dspi->regmap, SPI_CTAR(dspi->cs),
+			regmap_write(dspi->regmap, SPI_CTAR(0),
 					dspi->cur_chip->ctar_val);
 
 		regmap_write(dspi->regmap, SPI_RSER, SPI_RSER_EOQFE);
@@ -469,7 +469,7 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id)
 
 	if (!dspi->len) {
 		if (dspi->dataflags & TRAN_STATE_WORD_ODD_NUM)
-			regmap_update_bits(dspi->regmap, SPI_CTAR(dspi->cs),
+			regmap_update_bits(dspi->regmap, SPI_CTAR(0),
 			SPI_FRAME_BITS_MASK, SPI_FRAME_BITS(16));
 
 		dspi->waitflags = 1;
-- 
2.6.2


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

* Re: [PATCH] spi-fsl-dspi: Fix CTAR Register access
  2015-12-09  6:21 [PATCH] spi-fsl-dspi: Fix CTAR Register access Bhuvanchandra DV
@ 2015-12-09 20:41 ` Mark Brown
  2015-12-10  4:42   ` Bhuvanchandra DV
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Brown @ 2015-12-09 20:41 UTC (permalink / raw)
  To: Bhuvanchandra DV; +Cc: stefan, linux-spi, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 333 bytes --]

On Wed, Dec 09, 2015 at 11:51:39AM +0530, Bhuvanchandra DV wrote:
> DSPI instances in Vybrid have a different amount of chip selects
> and CTARs (Clock and transfer Attributes Register). In case of
> DSPI1 we only have 2 CTAR registers and 4 CS. In present driver

This doesn't apply against, current code - please check and resend.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

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

* Re: [PATCH] spi-fsl-dspi: Fix CTAR Register access
  2015-12-09 20:41 ` Mark Brown
@ 2015-12-10  4:42   ` Bhuvanchandra DV
  0 siblings, 0 replies; 3+ messages in thread
From: Bhuvanchandra DV @ 2015-12-10  4:42 UTC (permalink / raw)
  To: Mark Brown; +Cc: stefan, linux-spi, linux-kernel, Bhuvanchandra

On 12/10/2015 02:11 AM, Mark Brown wrote:
> On Wed, Dec 09, 2015 at 11:51:39AM +0530, Bhuvanchandra DV wrote:
>> DSPI instances in Vybrid have a different amount of chip selects
>> and CTARs (Clock and transfer Attributes Register). In case of
>> DSPI1 we only have 2 CTAR registers and 4 CS. In present driver
>
> This doesn't apply against, current code - please check and resend.

Will check and resend.

>

-- 
Best regards,
Bhuvan

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

end of thread, other threads:[~2015-12-10  4:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-09  6:21 [PATCH] spi-fsl-dspi: Fix CTAR Register access Bhuvanchandra DV
2015-12-09 20:41 ` Mark Brown
2015-12-10  4:42   ` Bhuvanchandra DV

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