* [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c
@ 2010-01-17 11:06 Magnus Lilja
2010-01-17 23:02 ` Wolfgang Denk
2010-02-07 18:43 ` Tom
0 siblings, 2 replies; 5+ messages in thread
From: Magnus Lilja @ 2010-01-17 11:06 UTC (permalink / raw)
To: u-boot
Commit f9b6a1575d9f1ca192e4cb60e547aa66f08baa3f, "i.MX31: fix SPI
driver for shorter than 32 bit" broke 32 bit transfers. This patch
makes single 32 bit transfer work again.
Transfer lengths that are known not to work will abort and print
an error message.
Tested on i.MX31 Litekit and i.MX31 PDK using 32 bit transfers to
the MC13783/ATLAS chip (using the 'date' command).
Signed-off-by: Magnus Lilja <lilja.magnus@gmail.com>
---
As discussed on the mailing list, Guennadi Liakhovetski thinks that
all transfers > 16 bits are broken. This patch fixes the 32 bit case
and makes sure the user is notified if a broken bitlength is used.
drivers/spi/mxc_spi.c | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c
index fad9840..93c2bd7 100644
--- a/drivers/spi/mxc_spi.c
+++ b/drivers/spi/mxc_spi.c
@@ -131,6 +131,13 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
return 1;
}
+ /* This driver is currently partly broken, alert the user */
+ if (bitlen > 16 && bitlen != 32) {
+ printf("Error: SPI transfer with bitlen=%d is broken.\n",
+ bitlen);
+ return 1;
+ }
+
for (i = 0, in_l = (u32 *)din, out_l = (u32 *)dout;
i < n_blks;
i++, in_l++, out_l++, bitlen -= 32) {
@@ -142,6 +149,8 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
*(u8 *)din = data;
else if (bitlen < 17)
*(u16 *)din = data;
+ else
+ *in_l = data;
}
}
--
1.5.6
^ permalink raw reply related [flat|nested] 5+ messages in thread* [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c
2010-01-17 11:06 [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c Magnus Lilja
@ 2010-01-17 23:02 ` Wolfgang Denk
2010-01-23 17:08 ` Magnus Lilja
2010-02-07 18:43 ` Tom
1 sibling, 1 reply; 5+ messages in thread
From: Wolfgang Denk @ 2010-01-17 23:02 UTC (permalink / raw)
To: u-boot
Dear Feng,
can you please take care of this?
In message <1263726375-4929-1-git-send-email-lilja.magnus@gmail.com> Magnus Lilja wrote:
> Commit f9b6a1575d9f1ca192e4cb60e547aa66f08baa3f, "i.MX31: fix SPI
> driver for shorter than 32 bit" broke 32 bit transfers. This patch
> makes single 32 bit transfer work again.
>
> Transfer lengths that are known not to work will abort and print
> an error message.
>
> Tested on i.MX31 Litekit and i.MX31 PDK using 32 bit transfers to
> the MC13783/ATLAS chip (using the 'date' command).
>
> Signed-off-by: Magnus Lilja <lilja.magnus@gmail.com>
> ---
>
> As discussed on the mailing list, Guennadi Liakhovetski thinks that
> all transfers > 16 bits are broken. This patch fixes the 32 bit case
> and makes sure the user is notified if a broken bitlength is used.
>
> drivers/spi/mxc_spi.c | 9 +++++++++
> 1 files changed, 9 insertions(+), 0 deletions(-)
Acked-by: Wolfgang Denk <wd@denx.de>
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
A secure program has to be robust: it must be able to deal with
conditions that "can't happen", whether user input, program error or
library/etc. This is basic damage control. Buffer overflow errors
have nothing to do with security, but everything with stupidity.
-- Wietse Venema in <5cnqm3$8r9@spike.porcupine.org>
^ permalink raw reply [flat|nested] 5+ messages in thread* [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c
2010-01-17 23:02 ` Wolfgang Denk
@ 2010-01-23 17:08 ` Magnus Lilja
0 siblings, 0 replies; 5+ messages in thread
From: Magnus Lilja @ 2010-01-23 17:08 UTC (permalink / raw)
To: u-boot
Dear Feng and Tom,
Is this in a queue somewhere to be merged? If not, could you please apply this and make a pull request for it?
Bset regards, Magnus Lilja
Wolfgang Denk skrev:
> Dear Feng,
>
> can you please take care of this?
>
> In message <1263726375-4929-1-git-send-email-lilja.magnus@gmail.com> Magnus Lilja wrote:
>> Commit f9b6a1575d9f1ca192e4cb60e547aa66f08baa3f, "i.MX31: fix SPI
>> driver for shorter than 32 bit" broke 32 bit transfers. This patch
>> makes single 32 bit transfer work again.
>>
>> Transfer lengths that are known not to work will abort and print
>> an error message.
>>
>> Tested on i.MX31 Litekit and i.MX31 PDK using 32 bit transfers to
>> the MC13783/ATLAS chip (using the 'date' command).
>>
>> Signed-off-by: Magnus Lilja <lilja.magnus@gmail.com>
>> ---
>>
>> As discussed on the mailing list, Guennadi Liakhovetski thinks that
>> all transfers > 16 bits are broken. This patch fixes the 32 bit case
>> and makes sure the user is notified if a broken bitlength is used.
>>
>> drivers/spi/mxc_spi.c | 9 +++++++++
>> 1 files changed, 9 insertions(+), 0 deletions(-)
>
> Acked-by: Wolfgang Denk <wd@denx.de>
>
> Best regards,
>
> Wolfgang Denk
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c
2010-01-17 11:06 [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c Magnus Lilja
2010-01-17 23:02 ` Wolfgang Denk
@ 2010-02-07 18:43 ` Tom
2010-02-08 20:06 ` Magnus Lilja
1 sibling, 1 reply; 5+ messages in thread
From: Tom @ 2010-02-07 18:43 UTC (permalink / raw)
To: u-boot
Magnus Lilja wrote:
> Commit f9b6a1575d9f1ca192e4cb60e547aa66f08baa3f, "i.MX31: fix SPI
> driver for shorter than 32 bit" broke 32 bit transfers. This patch
> makes single 32 bit transfer work again.
>
> Transfer lengths that are known not to work will abort and print
> an error message.
>
> Tested on i.MX31 Litekit and i.MX31 PDK using 32 bit transfers to
> the MC13783/ATLAS chip (using the 'date' command).
>
> Signed-off-by: Magnus Lilja <lilja.magnus@gmail.com>
> ---
>
> As discussed on the mailing list, Guennadi Liakhovetski thinks that
> all transfers > 16 bits are broken. This patch fixes the 32 bit case
> and makes sure the user is notified if a broken bitlength is used.
>
> drivers/spi/mxc_spi.c | 9 +++++++++
> 1 files changed, 9 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c
> index fad9840..93c2bd7 100644
> --- a/drivers/spi/mxc_spi.c
> +++ b/drivers/spi/mxc_spi.c
> @@ -131,6 +131,13 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
> return 1;
> }
>
> + /* This driver is currently partly broken, alert the user */
> + if (bitlen > 16 && bitlen != 32) {
I believe this check can be improved
The transfer loops over 32 bit blks.
so bitlen that are multiples of 32 should work.
so
bitlen != 32
can change to
(bitlen % 32)
Tom
> + printf("Error: SPI transfer with bitlen=%d is broken.\n",
> + bitlen);
> + return 1;
> + }
> +
> for (i = 0, in_l = (u32 *)din, out_l = (u32 *)dout;
> i < n_blks;
> i++, in_l++, out_l++, bitlen -= 32) {
> @@ -142,6 +149,8 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
> *(u8 *)din = data;
> else if (bitlen < 17)
> *(u16 *)din = data;
> + else
> + *in_l = data;
> }
> }
>
^ permalink raw reply [flat|nested] 5+ messages in thread* [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c
2010-02-07 18:43 ` Tom
@ 2010-02-08 20:06 ` Magnus Lilja
0 siblings, 0 replies; 5+ messages in thread
From: Magnus Lilja @ 2010-02-08 20:06 UTC (permalink / raw)
To: u-boot
Tom skrev:
> Magnus Lilja wrote:
>> Commit f9b6a1575d9f1ca192e4cb60e547aa66f08baa3f, "i.MX31: fix SPI
>> driver for shorter than 32 bit" broke 32 bit transfers. This patch
>> makes single 32 bit transfer work again.
>>
>> Transfer lengths that are known not to work will abort and print
>> an error message.
>>
>> Tested on i.MX31 Litekit and i.MX31 PDK using 32 bit transfers to
>> the MC13783/ATLAS chip (using the 'date' command).
>>
>> Signed-off-by: Magnus Lilja <lilja.magnus@gmail.com>
>> ---
>>
>> As discussed on the mailing list, Guennadi Liakhovetski thinks that
>> all transfers > 16 bits are broken. This patch fixes the 32 bit case
>> and makes sure the user is notified if a broken bitlength is used.
>>
>> drivers/spi/mxc_spi.c | 9 +++++++++
>> 1 files changed, 9 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c
>> index fad9840..93c2bd7 100644
>> --- a/drivers/spi/mxc_spi.c
>> +++ b/drivers/spi/mxc_spi.c
>> @@ -131,6 +131,13 @@ int spi_xfer(struct spi_slave *slave, unsigned
>> int bitlen, const void *dout,
>> return 1;
>> }
>>
>> + /* This driver is currently partly broken, alert the user */
>> + if (bitlen > 16 && bitlen != 32) {
>
> I believe this check can be improved
> The transfer loops over 32 bit blks.
> so bitlen that are multiples of 32 should work.
> so
>
> bitlen != 32
>
> can change to
>
> (bitlen % 32)
Patch updated, but I want to test it first. Having tftp problems at the moment with my newly re-installed machine, will post new version as soon as possible.
Regards/Magnus
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-02-08 20:06 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-17 11:06 [U-Boot] [PATCH v2] SPI: Fix 32 bit transfers in mxc_spi.c Magnus Lilja
2010-01-17 23:02 ` Wolfgang Denk
2010-01-23 17:08 ` Magnus Lilja
2010-02-07 18:43 ` Tom
2010-02-08 20:06 ` Magnus Lilja
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox