Message ID | 1403094161-1061-1-git-send-email-akshay.s@samsung.com |
---|---|
State | Accepted |
Delegated to: | Minkyu Kang |
Headers | show |
On 18/06/14 21:22, Akshay Saraswat wrote: > SPI recieve and transfer code in exynos_spi driver has a logical bug. > We read data in a variable which can hold an integer. Then we assign > this integer 32 bit value to another variable which has data type uchar. > Latter represents a unit of our recieve buffer. Everytime when we write > a value to our recieve buffer we step ahead by 4 units when actually we > wrote to one unit. This results in the loss of 3 bytes out of every 4 > bytes recieved. This patch intends to fix this bug. > > Signed-off-by: Akshay Saraswat <akshay.s@samsung.com> > Acked-by: Simon Glass <sjg@chromium.org> > Tested-by: Simon Glass <sjg@chromium.org> > --- > Changes since v3: > - Rebased to top of Tree. > Changes since v2: > - Added "Acked-by" & "Tested-by". > - Changed assignment for *rxp. > Changes since v1: > - Added check for step. > > drivers/spi/exynos_spi.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > applied to u-boot-samsung. Thanks, Minkyu Kang.
diff --git a/drivers/spi/exynos_spi.c b/drivers/spi/exynos_spi.c index 4d5def2..c92276f 100644 --- a/drivers/spi/exynos_spi.c +++ b/drivers/spi/exynos_spi.c @@ -302,7 +302,10 @@ static int spi_rx_tx(struct exynos_spi_slave *spi_slave, int todo, } } else { if (rxp || stopping) { - *rxp = temp; + if (step == 4) + *(uint32_t *)rxp = temp; + else + *rxp = temp; rxp += step; } in_bytes -= step;