]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
spi: zynq_qspi: Read only one byte at a time from txbuf
authorSiva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
Fri, 19 Jan 2018 06:17:56 +0000 (11:47 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Wed, 31 Jan 2018 12:15:49 +0000 (13:15 +0100)
Read only one byte at a time from txbuf as txbuf may not be
aligned and accessing more than a byte at a time may cause
alignment issues. This fixes the issue of data abort exception
while writing to flash device.

Signed-off-by: Siva Durga Prasad Paladugu <sivadur@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/spi/zynq_qspi.c

index 12cba4a6b9a5f4f24eea76ef5b6eb5bef49bb38e..e81fe913f02f1d2224dc5a1d725cb5c1f04297fe 100644 (file)
@@ -461,13 +461,17 @@ static void zynq_qspi_copy_write_data(struct  zynq_qspi_priv *priv,
                        *data |= 0xFFFFFF00;
                        break;
                case 2:
-                       *data = *((u16 *)priv->txbuf);
-                       priv->txbuf += 2;
+                       *data = *((u8 *)priv->txbuf);
+                       priv->txbuf += 1;
+                       *data |= (*((u8 *)priv->txbuf) << 8);
+                       priv->txbuf += 1;
                        *data |= 0xFFFF0000;
                        break;
                case 3:
-                       *data = *((u16 *)priv->txbuf);
-                       priv->txbuf += 2;
+                       *data = *((u8 *)priv->txbuf);
+                       priv->txbuf += 1;
+                       *data |= (*((u8 *)priv->txbuf) << 8);
+                       priv->txbuf += 1;
                        *data |= (*((u8 *)priv->txbuf) << 16);
                        priv->txbuf += 1;
                        *data |= 0xFF000000;