dmaengine: at_xdmac: fix for chan conf simplification
Subsystems (2)
PATCH 1/1 dmaengine: at_xdmac: fix for chan conf simplification
When simplificating the channel configuration, the cyclic case has been forgotten. It leads to use bad configuration causing many bugs.
--- drivers/dma/at_xdmac.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/dma/at_xdmac.c +3 -4
@@ -664,7 +664,6 @@ at_xdmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,struct at_xdmac_desc *first =NULL , *prev =NULL ;unsigned int periods = buf_len / period_len;int i; -u32 cfg; dev_dbg(chan2dev(chan), "%s: buf_addr=%pad, buf_len=%zd, period_len=%zd, dir=%s, flags=0x%lx\n", __func__, &buf_addr, buf_len, period_len,
@@ -700,17 +699,17 @@ at_xdmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,if (direction ==DMA_DEV_TO_MEM ) { desc->lld.mbr_sa = atchan->per_src_addr; desc->lld.mbr_da = buf_addr + i * period_len; - cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG ]; + desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG ]; }else { desc->lld.mbr_sa = buf_addr + i * period_len; desc->lld.mbr_da = atchan->per_dst_addr; - cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG ]; + desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG ]; } desc->lld.mbr_ubc =AT_XDMAC_MBR_UBC_NDV1 |AT_XDMAC_MBR_UBC_NDEN |AT_XDMAC_MBR_UBC_NSEN |AT_XDMAC_MBR_UBC_NDE - | period_len >>at_xdmac_get_dwidth (cfg); + | period_len >>at_xdmac_get_dwidth (desc->lld.mbr_cfg); dev_dbg(chan2dev(chan), "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x\n",
Signature · 1 line
2.2.0
PATCH 1/1 dmaengine: at_xdmac: fix for chan conf simplification
Le 12/02/2015 16:30, Ludovic Desroches a ?crit :
Quoted 4 lines
When simplificating the channel configuration, the cyclic case has been forgotten. It leads to use bad configuration causing many bugs.
Signed-off-by Ludovic Desroches <[email protected]>
Oh, yes indeed, pretty important:
Bye,
Quoted 38 lines
--- drivers/dma/at_xdmac.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)drivers/dma/at_xdmac.c +3
-4@@ -664,7 +664,6 @@ at_xdmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,struct at_xdmac_desc *first =NULL , *prev =NULL ;unsigned int periods = buf_len / period_len;int i; -u32 cfg; dev_dbg(chan2dev(chan), "%s: buf_addr=%pad, buf_len=%zd, period_len=%zd, dir=%s, flags=0x%lx\n", __func__, &buf_addr, buf_len, period_len,@@ -700,17 +699,17 @@ at_xdmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,if (direction ==DMA_DEV_TO_MEM ) { desc->lld.mbr_sa = atchan->per_src_addr; desc->lld.mbr_da = buf_addr + i * period_len; - cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG ]; + desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG ]; }else { desc->lld.mbr_sa = buf_addr + i * period_len; desc->lld.mbr_da = atchan->per_dst_addr; - cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG ]; + desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG ]; } desc->lld.mbr_ubc =AT_XDMAC_MBR_UBC_NDV1 |AT_XDMAC_MBR_UBC_NDEN |AT_XDMAC_MBR_UBC_NSEN |AT_XDMAC_MBR_UBC_NDE - | period_len >>at_xdmac_get_dwidth (cfg); + | period_len >>at_xdmac_get_dwidth (desc->lld.mbr_cfg); dev_dbg(chan2dev(chan), "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x\n",
Signature · 1 line
Nicolas Ferre
PATCH 1/1 dmaengine: at_xdmac: fix for chan conf simplification
Le 12/02/2015 16:33, Nicolas Ferre a ?crit :
Quoted 8 lines
Le 12/02/2015 16:30, Ludovic Desroches a ?crit :
Quoted 4 lines
When simplificating the channel configuration, the cyclic case has been forgotten. It leads to use bad configuration causing many bugs.
Signed-off-by Ludovic Desroches <[email protected]>Oh, yes indeed, pretty important:
Acked-by Nicolas Ferre <[email protected]>
Vinod,
Can we have this fix in 4.0 please?
Bye,
Quoted 40 lines
Quoted 38 lines
--- drivers/dma/at_xdmac.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)drivers/dma/at_xdmac.c +3
-4@@ -664,7 +664,6 @@ at_xdmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,struct at_xdmac_desc *first =NULL , *prev =NULL ;unsigned int periods = buf_len / period_len;int i; -u32 cfg; dev_dbg(chan2dev(chan), "%s: buf_addr=%pad, buf_len=%zd, period_len=%zd, dir=%s, flags=0x%lx\n", __func__, &buf_addr, buf_len, period_len,@@ -700,17 +699,17 @@ at_xdmac_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf_addr,if (direction ==DMA_DEV_TO_MEM ) { desc->lld.mbr_sa = atchan->per_src_addr; desc->lld.mbr_da = buf_addr + i * period_len; - cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG ]; + desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_DEV_TO_MEM_CFG ]; }else { desc->lld.mbr_sa = buf_addr + i * period_len; desc->lld.mbr_da = atchan->per_dst_addr; - cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG ]; + desc->lld.mbr_cfg = atchan->cfg[AT_XDMAC_MEM_TO_DEV_CFG ]; } desc->lld.mbr_ubc =AT_XDMAC_MBR_UBC_NDV1 |AT_XDMAC_MBR_UBC_NDEN |AT_XDMAC_MBR_UBC_NSEN |AT_XDMAC_MBR_UBC_NDE - | period_len >>at_xdmac_get_dwidth (cfg); + | period_len >>at_xdmac_get_dwidth (desc->lld.mbr_cfg); dev_dbg(chan2dev(chan), "%s: lld: mbr_sa=%pad, mbr_da=%pad, mbr_ubc=0x%08x\n",
Signature · 1 line
Nicolas Ferre
Vinod Koul
AppliedPATCH 1/1 dmaengine: at_xdmac: fix for chan conf simplification
In reply to Ludovic DesrochesQuoted 2 lines · Ludovic Desroches
When simplificating the channel configuration, the cyclic case has been forgotten. It leads to use bad configuration causing many bugs.
Applied, thanks
Signature · 1 line
~Vinod