@ -30,7 +30,6 @@
# include <linux/errno.h>
# include <linux/errno.h>
# include <wait_bit.h>
# include <wait_bit.h>
# include <spi.h>
# include <spi.h>
# include <bouncebuf.h>
# include "cadence_qspi.h"
# include "cadence_qspi.h"
# define CQSPI_REG_POLL_US 1 /* 1us */
# define CQSPI_REG_POLL_US 1 /* 1us */
@ -722,17 +721,6 @@ int cadence_qspi_apb_indirect_write_execute(struct cadence_spi_platdata *plat,
unsigned int remaining = n_tx ;
unsigned int remaining = n_tx ;
unsigned int write_bytes ;
unsigned int write_bytes ;
int ret ;
int ret ;
struct bounce_buffer bb ;
u8 * bb_txbuf ;
/*
* Handle non - 4 - byte aligned accesses via bounce buffer to
* avoid data abort .
*/
ret = bounce_buffer_start ( & bb , ( void * ) txbuf , n_tx , GEN_BB_READ ) ;
if ( ret )
return ret ;
bb_txbuf = bb . bounce_buffer ;
/* Configure the indirect read transfer bytes */
/* Configure the indirect read transfer bytes */
writel ( n_tx , plat - > regbase + CQSPI_REG_INDIRECTWRBYTES ) ;
writel ( n_tx , plat - > regbase + CQSPI_REG_INDIRECTWRBYTES ) ;
@ -743,11 +731,11 @@ int cadence_qspi_apb_indirect_write_execute(struct cadence_spi_platdata *plat,
while ( remaining > 0 ) {
while ( remaining > 0 ) {
write_bytes = remaining > page_size ? page_size : remaining ;
write_bytes = remaining > page_size ? page_size : remaining ;
writesl ( plat - > ahbbase , bb_txbuf , write_bytes > > 2 ) ;
/* Handle non-4-byte aligned access to avoid data abort. */
if ( write_bytes % 4 )
if ( ( ( uintptr_t ) txbuf % 4 ) | | ( write_bytes % 4 ) )
writesb ( plat - > ahbbase ,
writesb ( plat - > ahbbase , txbuf , write_bytes ) ;
bb_txbuf + rounddown ( write_bytes , 4 ) ,
else
write_bytes % 4 ) ;
writesl ( plat - > ahbbase , txbuf , write_bytes > > 2 ) ;
ret = wait_for_bit_le32 ( plat - > regbase + CQSPI_REG_SDRAMLEVEL ,
ret = wait_for_bit_le32 ( plat - > regbase + CQSPI_REG_SDRAMLEVEL ,
CQSPI_REG_SDRAMLEVEL_WR_MASK < <
CQSPI_REG_SDRAMLEVEL_WR_MASK < <
@ -757,7 +745,7 @@ int cadence_qspi_apb_indirect_write_execute(struct cadence_spi_platdata *plat,
goto failwr ;
goto failwr ;
}
}
bb_ txbuf + = write_bytes ;
txbuf + = write_bytes ;
remaining - = write_bytes ;
remaining - = write_bytes ;
}
}
@ -768,7 +756,6 @@ int cadence_qspi_apb_indirect_write_execute(struct cadence_spi_platdata *plat,
printf ( " Indirect write completion error (%i) \n " , ret ) ;
printf ( " Indirect write completion error (%i) \n " , ret ) ;
goto failwr ;
goto failwr ;
}
}
bounce_buffer_stop ( & bb ) ;
/* Clear indirect completion status */
/* Clear indirect completion status */
writel ( CQSPI_REG_INDIRECTWR_DONE ,
writel ( CQSPI_REG_INDIRECTWR_DONE ,
@ -779,7 +766,6 @@ failwr:
/* Cancel the indirect write */
/* Cancel the indirect write */
writel ( CQSPI_REG_INDIRECTWR_CANCEL ,
writel ( CQSPI_REG_INDIRECTWR_CANCEL ,
plat - > regbase + CQSPI_REG_INDIRECTWR ) ;
plat - > regbase + CQSPI_REG_INDIRECTWR ) ;
bounce_buffer_stop ( & bb ) ;
return ret ;
return ret ;
}
}