@ -27,8 +27,8 @@
struct dwc2_priv {
# ifdef CONFIG_DM_USB
uint8_t aligned_buffer [ DWC2_DATA_BUF_SIZE ] __aligned ( 8 ) ;
uint8_t status_buffer [ DWC2_STATUS_BUF_SIZE ] __aligned ( 8 ) ;
uint8_t aligned_buffer [ DWC2_DATA_BUF_SIZE ] __aligned ( ARCH_DMA_MINALIGN ) ;
uint8_t status_buffer [ DWC2_STATUS_BUF_SIZE ] __aligned ( ARCH_DMA_MINALIGN ) ;
# else
uint8_t * aligned_buffer ;
uint8_t * status_buffer ;
@ -39,9 +39,11 @@ struct dwc2_priv {
} ;
# ifndef CONFIG_DM_USB
/* We need doubleword-aligned buffers for DMA transfers */
DEFINE_ALIGN_BUFFER ( uint8_t , aligned_buffer_addr , DWC2_DATA_BUF_SIZE , 8 ) ;
DEFINE_ALIGN_BUFFER ( uint8_t , status_buffer_addr , DWC2_STATUS_BUF_SIZE , 8 ) ;
/* We need cacheline-aligned buffers for DMA transfers and dcache support */
DEFINE_ALIGN_BUFFER ( uint8_t , aligned_buffer_addr , DWC2_DATA_BUF_SIZE ,
ARCH_DMA_MINALIGN ) ;
DEFINE_ALIGN_BUFFER ( uint8_t , status_buffer_addr , DWC2_STATUS_BUF_SIZE ,
ARCH_DMA_MINALIGN ) ;
static struct dwc2_priv local ;
# endif
@ -821,8 +823,11 @@ int chunk_msg(struct dwc2_priv *priv, struct usb_device *dev,
& hc_regs - > hctsiz ) ;
if ( ! in ) {
memcpy ( priv - > aligned_buffer , ( char * ) buffer + done ,
len ) ;
memcpy ( priv - > aligned_buffer , ( char * ) buffer + done , len ) ;
flush_dcache_range ( ( unsigned long ) priv - > aligned_buffer ,
( unsigned long ) ( ( void * ) priv - > aligned_buffer +
roundup ( len , ARCH_DMA_MINALIGN ) ) ) ;
}
writel ( phys_to_bus ( ( unsigned long ) priv - > aligned_buffer ) ,
@ -840,6 +845,11 @@ int chunk_msg(struct dwc2_priv *priv, struct usb_device *dev,
if ( in ) {
xfer_len - = sub ;
invalidate_dcache_range ( ( unsigned long ) priv - > aligned_buffer ,
( unsigned long ) ( ( void * ) priv - > aligned_buffer +
roundup ( xfer_len , ARCH_DMA_MINALIGN ) ) ) ;
memcpy ( buffer + done , priv - > aligned_buffer , xfer_len ) ;
if ( sub )
stop_transfer = 1 ;