All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
@ 2015-12-10  5:55 Bhuvanchandra DV
  2015-12-10  7:15 ` Alexander Stein
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Bhuvanchandra DV @ 2015-12-10  5:55 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 | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
index 59a1143..39412c9 100644
--- a/drivers/spi/spi-fsl-dspi.c
+++ b/drivers/spi/spi-fsl-dspi.c
@@ -167,7 +167,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;
 }
@@ -257,7 +257,7 @@ static u32 dspi_data_to_pushr(struct fsl_dspi *dspi, int tx_word)
 
 	return	SPI_PUSHR_TXDATA(d16) |
 		SPI_PUSHR_PCS(dspi->cs) |
-		SPI_PUSHR_CTAS(dspi->cs) |
+		SPI_PUSHR_CTAS(0) |
 		SPI_PUSHR_CONT;
 }
 
@@ -290,7 +290,7 @@ static int dspi_eoq_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;
 		}
@@ -339,7 +339,7 @@ static int dspi_tcfq_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;
 	}
@@ -407,7 +407,7 @@ 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);
 
 		trans_mode = dspi->devtype_data->trans_mode;
@@ -566,7 +566,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),
+						   SPI_CTAR(0),
 						   SPI_FRAME_BITS_MASK,
 						   SPI_FRAME_BITS(16));
 				dspi->dataflags &= ~TRAN_STATE_WORD_ODD_NUM;
-- 
2.6.2


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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
  2015-12-10  5:55 [PATCH v2] spi-fsl-dspi: Fix CTAR Register access Bhuvanchandra DV
@ 2015-12-10  7:15 ` Alexander Stein
  2015-12-10  8:44     ` Bhuvanchandra DV
  2015-12-10 16:47 ` Stefan Agner
       [not found] ` <1449726930-7378-1-git-send-email-bhuvanchandra.dv-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org>
  2 siblings, 1 reply; 10+ messages in thread
From: Alexander Stein @ 2015-12-10  7:15 UTC (permalink / raw)
  To: linux-kernel; +Cc: Bhuvanchandra DV, broonie, stefan, linux-spi

On Thursday 10 December 2015 11:25:30, 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
> 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.

Shouldn't the information put into struct fsl_dspi_devtype_data how much CTAR and CS the actual implementation has available? E.g. LS1021A has 6 CS and 4 CTAR

Best regards,
Alexander
-- 
-----
Please note our closure period for Christmas vacation and turn of the year
We are closed from 21st December 2015 to 3rd January 2016
-----
Dipl.-Inf. Alexander Stein
SYS TEC electronic GmbH
alexander.stein@systec-electronic.com

Legal and Commercial Address:
Am Windrad 2
08468 Heinsdorfergrund
Germany

Office: +49 (0) 3765 38600-0
Fax:    +49 (0) 3765 38600-4100
 
Managing Directors:
	Director Technology/CEO: Dipl.-Phys. Siegmar Schmidt;
	Director Commercial Affairs/COO: Dipl. Ing. (FH) Armin von Collrepp
Commercial Registry:
	Amtsgericht Chemnitz, HRB 28082; USt.-Id Nr. DE150534010


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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
  2015-12-10  7:15 ` Alexander Stein
@ 2015-12-10  8:44     ` Bhuvanchandra DV
  0 siblings, 0 replies; 10+ messages in thread
From: Bhuvanchandra DV @ 2015-12-10  8:44 UTC (permalink / raw)
  To: Alexander Stein, linux-kernel; +Cc: broonie, stefan, linux-spi

On 12/10/2015 12:45 PM, Alexander Stein wrote:
> On Thursday 10 December 2015 11:25:30, 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
>> 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.
>
> Shouldn't the information put into struct fsl_dspi_devtype_data how much CTAR and CS the actual implementation has available? E.g. LS1021A has 6 CS and 4 CTAR

I guess still this will not help us when CS instance greater than CTAR 
instance is selected. Other point to consider here is we are writing the 
CTAR register before every access, so for us there is no additional 
advantage of using multiple CTAR registers.

>
> Best regards,
> Alexander
>

-- 
Best regards,
Bhuvan

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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
@ 2015-12-10  8:44     ` Bhuvanchandra DV
  0 siblings, 0 replies; 10+ messages in thread
From: Bhuvanchandra DV @ 2015-12-10  8:44 UTC (permalink / raw)
  To: Alexander Stein, linux-kernel-u79uwXL29TY76Z2rM5mHXA
  Cc: broonie-DgEjT+Ai2ygdnm+yROfE0A, stefan-XLVq0VzYD2Y,
	linux-spi-u79uwXL29TY76Z2rM5mHXA

On 12/10/2015 12:45 PM, Alexander Stein wrote:
> On Thursday 10 December 2015 11:25:30, 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
>> 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.
>
> Shouldn't the information put into struct fsl_dspi_devtype_data how much CTAR and CS the actual implementation has available? E.g. LS1021A has 6 CS and 4 CTAR

I guess still this will not help us when CS instance greater than CTAR 
instance is selected. Other point to consider here is we are writing the 
CTAR register before every access, so for us there is no additional 
advantage of using multiple CTAR registers.

>
> Best regards,
> Alexander
>

-- 
Best regards,
Bhuvan
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
@ 2015-12-10  9:06       ` Alexander Stein
  0 siblings, 0 replies; 10+ messages in thread
From: Alexander Stein @ 2015-12-10  9:06 UTC (permalink / raw)
  To: bhuvanchandra.dv; +Cc: linux-kernel, broonie, stefan, linux-spi

On Thursday 10 December 2015 14:14:11, Bhuvanchandra DV wrote:
> On 12/10/2015 12:45 PM, Alexander Stein wrote:
> > On Thursday 10 December 2015 11:25:30, 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
> >> 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.
> >
> > Shouldn't the information put into struct fsl_dspi_devtype_data how much CTAR and CS the actual implementation has available? E.g. LS1021A has 6 CS and 4 CTAR
> 
> I guess still this will not help us when CS instance greater than CTAR 
> instance is selected. Other point to consider here is we are writing the 
> CTAR register before every access, so for us there is no additional 
> advantage of using multiple CTAR registers.

Please have a look at 5cc7b04740effa5cc0af53f434134b5859d58b73 which addresses this problem for the 4 CTAR and 6 CS case.
I'm unsure how multiple CTAR will help at all. But at the end the amount of CS seems to be different for different implementations. So this still needs to be added to fsl_dspi_devtype_data.

Best regards,
Alexander
-- 
-----
Please note our closure period for Christmas vacation and turn of the year
We are closed from 21st December 2015 to 3rd January 2016
-----
Dipl.-Inf. Alexander Stein
SYS TEC electronic GmbH
alexander.stein@systec-electronic.com

Legal and Commercial Address:
Am Windrad 2
08468 Heinsdorfergrund
Germany

Office: +49 (0) 3765 38600-0
Fax:    +49 (0) 3765 38600-4100
 
Managing Directors:
	Director Technology/CEO: Dipl.-Phys. Siegmar Schmidt;
	Director Commercial Affairs/COO: Dipl. Ing. (FH) Armin von Collrepp
Commercial Registry:
	Amtsgericht Chemnitz, HRB 28082; USt.-Id Nr. DE150534010


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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
@ 2015-12-10  9:06       ` Alexander Stein
  0 siblings, 0 replies; 10+ messages in thread
From: Alexander Stein @ 2015-12-10  9:06 UTC (permalink / raw)
  To: bhuvanchandra.dv-2KBjVHiyJgBBDgjK7y7TUQ
  Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, stefan-XLVq0VzYD2Y,
	linux-spi-u79uwXL29TY76Z2rM5mHXA

On Thursday 10 December 2015 14:14:11, Bhuvanchandra DV wrote:
> On 12/10/2015 12:45 PM, Alexander Stein wrote:
> > On Thursday 10 December 2015 11:25:30, 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
> >> 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.
> >
> > Shouldn't the information put into struct fsl_dspi_devtype_data how much CTAR and CS the actual implementation has available? E.g. LS1021A has 6 CS and 4 CTAR
> 
> I guess still this will not help us when CS instance greater than CTAR 
> instance is selected. Other point to consider here is we are writing the 
> CTAR register before every access, so for us there is no additional 
> advantage of using multiple CTAR registers.

Please have a look at 5cc7b04740effa5cc0af53f434134b5859d58b73 which addresses this problem for the 4 CTAR and 6 CS case.
I'm unsure how multiple CTAR will help at all. But at the end the amount of CS seems to be different for different implementations. So this still needs to be added to fsl_dspi_devtype_data.

Best regards,
Alexander
-- 
-----
Please note our closure period for Christmas vacation and turn of the year
We are closed from 21st December 2015 to 3rd January 2016
-----
Dipl.-Inf. Alexander Stein
SYS TEC electronic GmbH
alexander.stein-93q1YBGzJSMe9JSWTWOYM3xStJ4P+DSV@public.gmane.org

Legal and Commercial Address:
Am Windrad 2
08468 Heinsdorfergrund
Germany

Office: +49 (0) 3765 38600-0
Fax:    +49 (0) 3765 38600-4100
 
Managing Directors:
	Director Technology/CEO: Dipl.-Phys. Siegmar Schmidt;
	Director Commercial Affairs/COO: Dipl. Ing. (FH) Armin von Collrepp
Commercial Registry:
	Amtsgericht Chemnitz, HRB 28082; USt.-Id Nr. DE150534010

--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
  2015-12-10  9:06       ` Alexander Stein
@ 2015-12-10 16:38         ` Stefan Agner
  -1 siblings, 0 replies; 10+ messages in thread
From: Stefan Agner @ 2015-12-10 16:38 UTC (permalink / raw)
  To: Alexander Stein; +Cc: bhuvanchandra.dv, linux-kernel, broonie, linux-spi

On 2015-12-10 01:06, Alexander Stein wrote:
> On Thursday 10 December 2015 14:14:11, Bhuvanchandra DV wrote:
>> On 12/10/2015 12:45 PM, Alexander Stein wrote:
>> > On Thursday 10 December 2015 11:25:30, 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
>> >> 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.
>> >
>> > Shouldn't the information put into struct fsl_dspi_devtype_data how much CTAR and CS the actual implementation has available? E.g. LS1021A has 6 CS and 4 CTAR
>>
>> I guess still this will not help us when CS instance greater than CTAR
>> instance is selected. Other point to consider here is we are writing the
>> CTAR register before every access, so for us there is no additional
>> advantage of using multiple CTAR registers.
> 
> Please have a look at 5cc7b04740effa5cc0af53f434134b5859d58b73 which
> addresses this problem for the 4 CTAR and 6 CS case.
> I'm unsure how multiple CTAR will help at all. But at the end the
> amount of CS seems to be different for different implementations. So
> this still needs to be added to fsl_dspi_devtype_data.

IMO the multiple CTAR registers are only really helpful for
bare-metal/microcontroller kind of application where you want to safe
every register write. The Kernel anyway writes the register before each
transfer, so there is no value making use of the multiple registers...

By just using the first CTAR, it is not required to have the amount of
CS around, the SPI frameowork takes care of assigning the CS, and that
is all what is needed...

--
Stefan

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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
@ 2015-12-10 16:38         ` Stefan Agner
  0 siblings, 0 replies; 10+ messages in thread
From: Stefan Agner @ 2015-12-10 16:38 UTC (permalink / raw)
  To: Alexander Stein
  Cc: bhuvanchandra.dv-2KBjVHiyJgBBDgjK7y7TUQ,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	broonie-DgEjT+Ai2ygdnm+yROfE0A, linux-spi-u79uwXL29TY76Z2rM5mHXA

On 2015-12-10 01:06, Alexander Stein wrote:
> On Thursday 10 December 2015 14:14:11, Bhuvanchandra DV wrote:
>> On 12/10/2015 12:45 PM, Alexander Stein wrote:
>> > On Thursday 10 December 2015 11:25:30, 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
>> >> 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.
>> >
>> > Shouldn't the information put into struct fsl_dspi_devtype_data how much CTAR and CS the actual implementation has available? E.g. LS1021A has 6 CS and 4 CTAR
>>
>> I guess still this will not help us when CS instance greater than CTAR
>> instance is selected. Other point to consider here is we are writing the
>> CTAR register before every access, so for us there is no additional
>> advantage of using multiple CTAR registers.
> 
> Please have a look at 5cc7b04740effa5cc0af53f434134b5859d58b73 which
> addresses this problem for the 4 CTAR and 6 CS case.
> I'm unsure how multiple CTAR will help at all. But at the end the
> amount of CS seems to be different for different implementations. So
> this still needs to be added to fsl_dspi_devtype_data.

IMO the multiple CTAR registers are only really helpful for
bare-metal/microcontroller kind of application where you want to safe
every register write. The Kernel anyway writes the register before each
transfer, so there is no value making use of the multiple registers...

By just using the first CTAR, it is not required to have the amount of
CS around, the SPI frameowork takes care of assigning the CS, and that
is all what is needed...

--
Stefan
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH v2] spi-fsl-dspi: Fix CTAR Register access
  2015-12-10  5:55 [PATCH v2] spi-fsl-dspi: Fix CTAR Register access Bhuvanchandra DV
  2015-12-10  7:15 ` Alexander Stein
@ 2015-12-10 16:47 ` Stefan Agner
       [not found] ` <1449726930-7378-1-git-send-email-bhuvanchandra.dv-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org>
  2 siblings, 0 replies; 10+ messages in thread
From: Stefan Agner @ 2015-12-10 16:47 UTC (permalink / raw)
  To: Bhuvanchandra DV; +Cc: broonie, linux-spi, linux-kernel

On 2015-12-09 21:55, 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
> 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.

This looks to me to be the easiest way to solve the issue for all DSPI
instances.

Acked-by: Stefan Agner <stefan@agner.ch>

> 
> Signed-off-by: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com>
> ---
>  drivers/spi/spi-fsl-dspi.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
> index 59a1143..39412c9 100644
> --- a/drivers/spi/spi-fsl-dspi.c
> +++ b/drivers/spi/spi-fsl-dspi.c
> @@ -167,7 +167,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;
>  }
> @@ -257,7 +257,7 @@ static u32 dspi_data_to_pushr(struct fsl_dspi
> *dspi, int tx_word)
>  
>  	return	SPI_PUSHR_TXDATA(d16) |
>  		SPI_PUSHR_PCS(dspi->cs) |
> -		SPI_PUSHR_CTAS(dspi->cs) |
> +		SPI_PUSHR_CTAS(0) |
>  		SPI_PUSHR_CONT;
>  }
>  
> @@ -290,7 +290,7 @@ static int dspi_eoq_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;
>  		}
> @@ -339,7 +339,7 @@ static int dspi_tcfq_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;
>  	}
> @@ -407,7 +407,7 @@ 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);
>  
>  		trans_mode = dspi->devtype_data->trans_mode;
> @@ -566,7 +566,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),
> +						   SPI_CTAR(0),
>  						   SPI_FRAME_BITS_MASK,
>  						   SPI_FRAME_BITS(16));
>  				dspi->dataflags &= ~TRAN_STATE_WORD_ODD_NUM;

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

* Applied "spi-fsl-dspi: Fix CTAR Register access" to the spi tree
       [not found] ` <1449726930-7378-1-git-send-email-bhuvanchandra.dv-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org>
@ 2015-12-12 23:08   ` Mark Brown
  0 siblings, 0 replies; 10+ messages in thread
From: Mark Brown @ 2015-12-12 23:08 UTC (permalink / raw)
  To: Bhuvanchandra DV, Stefan Agner, Mark Brown
  Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA

The patch

   spi-fsl-dspi: Fix CTAR Register access

has been applied to the spi tree at

   git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git 

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.  

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

>From ef22d1604c622d24ded69f40d40c3c6d83f71156 Mon Sep 17 00:00:00 2001
From: Bhuvanchandra DV <bhuvanchandra.dv-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org>
Date: Thu, 10 Dec 2015 11:25:30 +0530
Subject: [PATCH] spi-fsl-dspi: Fix CTAR Register access

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-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org>
Acked-by: Stefan Agner <stefan-XLVq0VzYD2Y@public.gmane.org>
Signed-off-by: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
---
 drivers/spi/spi-fsl-dspi.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
index 59a1143..39412c9 100644
--- a/drivers/spi/spi-fsl-dspi.c
+++ b/drivers/spi/spi-fsl-dspi.c
@@ -167,7 +167,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;
 }
@@ -257,7 +257,7 @@ static u32 dspi_data_to_pushr(struct fsl_dspi *dspi, int tx_word)
 
 	return	SPI_PUSHR_TXDATA(d16) |
 		SPI_PUSHR_PCS(dspi->cs) |
-		SPI_PUSHR_CTAS(dspi->cs) |
+		SPI_PUSHR_CTAS(0) |
 		SPI_PUSHR_CONT;
 }
 
@@ -290,7 +290,7 @@ static int dspi_eoq_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;
 		}
@@ -339,7 +339,7 @@ static int dspi_tcfq_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;
 	}
@@ -407,7 +407,7 @@ 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);
 
 		trans_mode = dspi->devtype_data->trans_mode;
@@ -566,7 +566,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),
+						   SPI_CTAR(0),
 						   SPI_FRAME_BITS_MASK,
 						   SPI_FRAME_BITS(16));
 				dspi->dataflags &= ~TRAN_STATE_WORD_ODD_NUM;
-- 
2.6.4

--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

end of thread, other threads:[~2015-12-12 23:08 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-10  5:55 [PATCH v2] spi-fsl-dspi: Fix CTAR Register access Bhuvanchandra DV
2015-12-10  7:15 ` Alexander Stein
2015-12-10  8:44   ` Bhuvanchandra DV
2015-12-10  8:44     ` Bhuvanchandra DV
2015-12-10  9:06     ` Alexander Stein
2015-12-10  9:06       ` Alexander Stein
2015-12-10 16:38       ` Stefan Agner
2015-12-10 16:38         ` Stefan Agner
2015-12-10 16:47 ` Stefan Agner
     [not found] ` <1449726930-7378-1-git-send-email-bhuvanchandra.dv-2KBjVHiyJgBBDgjK7y7TUQ@public.gmane.org>
2015-12-12 23:08   ` Applied "spi-fsl-dspi: Fix CTAR Register access" to the spi tree Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.