Commit c072e113 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Greg Kroah-Hartman

dmaengine: dw: set polarity of handshake interface

Intel Quark UART uses DesignWare DMA IP. Though the DMA IP is connected in such
way that handshake interface uses inverted polarity. We have to provide a
possibility to set this in the DMA driver when configuring a channel.

Introduce a new member of custom slave configuration called 'hs_polarity' and
set active low polarity in case this value is 'true'.
Acked-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: default avatarBryan O'Donoghue <pure.logic@nexus-software.ie>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9217a5bf
...@@ -143,6 +143,7 @@ static void dwc_initialize(struct dw_dma_chan *dwc) ...@@ -143,6 +143,7 @@ static void dwc_initialize(struct dw_dma_chan *dwc)
struct dw_dma *dw = to_dw_dma(dwc->chan.device); struct dw_dma *dw = to_dw_dma(dwc->chan.device);
u32 cfghi = DWC_CFGH_FIFO_MODE; u32 cfghi = DWC_CFGH_FIFO_MODE;
u32 cfglo = DWC_CFGL_CH_PRIOR(dwc->priority); u32 cfglo = DWC_CFGL_CH_PRIOR(dwc->priority);
bool hs_polarity = dwc->dws.hs_polarity;
if (test_bit(DW_DMA_IS_INITIALIZED, &dwc->flags)) if (test_bit(DW_DMA_IS_INITIALIZED, &dwc->flags))
return; return;
...@@ -150,6 +151,9 @@ static void dwc_initialize(struct dw_dma_chan *dwc) ...@@ -150,6 +151,9 @@ static void dwc_initialize(struct dw_dma_chan *dwc)
cfghi |= DWC_CFGH_DST_PER(dwc->dws.dst_id); cfghi |= DWC_CFGH_DST_PER(dwc->dws.dst_id);
cfghi |= DWC_CFGH_SRC_PER(dwc->dws.src_id); cfghi |= DWC_CFGH_SRC_PER(dwc->dws.src_id);
/* Set polarity of handshake interface */
cfglo |= hs_polarity ? DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL : 0;
channel_writel(dwc, CFG_LO, cfglo); channel_writel(dwc, CFG_LO, cfglo);
channel_writel(dwc, CFG_HI, cfghi); channel_writel(dwc, CFG_HI, cfghi);
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* @dst_id: dst request line * @dst_id: dst request line
* @m_master: memory master for transfers on allocated channel * @m_master: memory master for transfers on allocated channel
* @p_master: peripheral master for transfers on allocated channel * @p_master: peripheral master for transfers on allocated channel
* @hs_polarity:set active low polarity of handshake interface
*/ */
struct dw_dma_slave { struct dw_dma_slave {
struct device *dma_dev; struct device *dma_dev;
...@@ -30,6 +31,7 @@ struct dw_dma_slave { ...@@ -30,6 +31,7 @@ struct dw_dma_slave {
u8 dst_id; u8 dst_id;
u8 m_master; u8 m_master;
u8 p_master; u8 p_master;
bool hs_polarity;
}; };
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment