@ -114,26 +114,16 @@ struct dw_spi_priv {
void * rx_end ;
} ;
static inline u32 dw_readl ( struct dw_spi_priv * priv , u32 offset )
static inline u32 dw_read ( struct dw_spi_priv * priv , u32 offset )
{
return __raw_readl ( priv - > regs + offset ) ;
}
static inline void dw_writel ( struct dw_spi_priv * priv , u32 offset , u32 val )
static inline void dw_write ( struct dw_spi_priv * priv , u32 offset , u32 val )
{
__raw_writel ( val , priv - > regs + offset ) ;
}
static inline u16 dw_readw ( struct dw_spi_priv * priv , u32 offset )
{
return __raw_readw ( priv - > regs + offset ) ;
}
static inline void dw_writew ( struct dw_spi_priv * priv , u32 offset , u16 val )
{
__raw_writew ( val , priv - > regs + offset ) ;
}
static int request_gpio_cs ( struct udevice * bus )
{
# if defined(CONFIG_DM_GPIO) && !defined(CONFIG_SPL_BUILD)
@ -179,14 +169,14 @@ static int dw_spi_ofdata_to_platdata(struct udevice *bus)
static inline void spi_enable_chip ( struct dw_spi_priv * priv , int enable )
{
dw_writel ( priv , DW_SPI_SSIENR , ( enable ? 1 : 0 ) ) ;
dw_write ( priv , DW_SPI_SSIENR , ( enable ? 1 : 0 ) ) ;
}
/* Restart the controller, disable all interrupts, clean rx fifo */
static void spi_hw_init ( struct dw_spi_priv * priv )
{
spi_enable_chip ( priv , 0 ) ;
dw_writel ( priv , DW_SPI_IMR , 0xff ) ;
dw_write ( priv , DW_SPI_IMR , 0xff ) ;
spi_enable_chip ( priv , 1 ) ;
/*
@ -197,13 +187,13 @@ static void spi_hw_init(struct dw_spi_priv *priv)
u32 fifo ;
for ( fifo = 1 ; fifo < 256 ; fifo + + ) {
dw_writew ( priv , DW_SPI_TXFLTR , fifo ) ;
if ( fifo ! = dw_readw ( priv , DW_SPI_TXFLTR ) )
dw_write ( priv , DW_SPI_TXFLTR , fifo ) ;
if ( fifo ! = dw_read ( priv , DW_SPI_TXFLTR ) )
break ;
}
priv - > fifo_len = ( fifo = = 1 ) ? 0 : fifo ;
dw_writew ( priv , DW_SPI_TXFLTR , 0 ) ;
dw_write ( priv , DW_SPI_TXFLTR , 0 ) ;
}
debug ( " %s: fifo_len=%d \n " , __func__ , priv - > fifo_len ) ;
}
@ -272,7 +262,7 @@ static inline u32 tx_max(struct dw_spi_priv *priv)
u32 tx_left , tx_room , rxtx_gap ;
tx_left = ( priv - > tx_end - priv - > tx ) / ( priv - > bits_per_word > > 3 ) ;
tx_room = priv - > fifo_len - dw_readw ( priv , DW_SPI_TXFLR ) ;
tx_room = priv - > fifo_len - dw_read ( priv , DW_SPI_TXFLR ) ;
/*
* Another concern is about the tx / rx mismatch , we
@ -293,7 +283,7 @@ static inline u32 rx_max(struct dw_spi_priv *priv)
{
u32 rx_left = ( priv - > rx_end - priv - > rx ) / ( priv - > bits_per_word > > 3 ) ;
return min_t ( u32 , rx_left , dw_readw ( priv , DW_SPI_RXFLR ) ) ;
return min_t ( u32 , rx_left , dw_read ( priv , DW_SPI_RXFLR ) ) ;
}
static void dw_writer ( struct dw_spi_priv * priv )
@ -309,7 +299,7 @@ static void dw_writer(struct dw_spi_priv *priv)
else
txw = * ( u16 * ) ( priv - > tx ) ;
}
dw_writew ( priv , DW_SPI_DR , txw ) ;
dw_write ( priv , DW_SPI_DR , txw ) ;
debug ( " %s: tx=0x%02x \n " , __func__ , txw ) ;
priv - > tx + = priv - > bits_per_word > > 3 ;
}
@ -321,7 +311,7 @@ static void dw_reader(struct dw_spi_priv *priv)
u16 rxw ;
while ( max - - ) {
rxw = dw_readw ( priv , DW_SPI_DR ) ;
rxw = dw_read ( priv , DW_SPI_DR ) ;
debug ( " %s: rx=0x%02x \n " , __func__ , rxw ) ;
/* Care about rx if the transfer's original "rx" is not null */
@ -410,8 +400,8 @@ static int dw_spi_xfer(struct udevice *dev, unsigned int bitlen,
debug ( " %s: cr0=%08x \n " , __func__ , cr0 ) ;
/* Reprogram cr0 only if changed */
if ( dw_readw ( priv , DW_SPI_CTRL0 ) ! = cr0 )
dw_writew ( priv , DW_SPI_CTRL0 , cr0 ) ;
if ( dw_read ( priv , DW_SPI_CTRL0 ) ! = cr0 )
dw_write ( priv , DW_SPI_CTRL0 , cr0 ) ;
/*
* Configure the desired SS ( slave select 0. . .3 ) in the controller
@ -419,7 +409,7 @@ static int dw_spi_xfer(struct udevice *dev, unsigned int bitlen,
* automatically . So no cs_activate ( ) etc is needed in this driver .
*/
cs = spi_chip_select ( dev ) ;
dw_writel ( priv , DW_SPI_SER , 1 < < cs ) ;
dw_write ( priv , DW_SPI_SER , 1 < < cs ) ;
/* Enable controller after writing control registers */
spi_enable_chip ( priv , 1 ) ;
@ -462,7 +452,7 @@ static int dw_spi_set_speed(struct udevice *bus, uint speed)
/* clk_div doesn't support odd number */
clk_div = priv - > bus_clk_rate / speed ;
clk_div = ( clk_div + 1 ) & 0xfffe ;
dw_writel ( priv , DW_SPI_BAUDR , clk_div ) ;
dw_write ( priv , DW_SPI_BAUDR , clk_div ) ;
/* Enable controller after writing control registers */
spi_enable_chip ( priv , 1 ) ;