Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1275311 > unrolled thread
| Started by | Ludovic Desroches <ludovic.desroches@atmel.com> |
|---|---|
| First post | 2015-11-23 14:10 +0100 |
| Last post | 2015-11-23 15:50 +0100 |
| Articles | 4 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 1/2] dmaengine: at_xdmac: fix macro typo Ludovic Desroches <ludovic.desroches@atmel.com> - 2015-11-23 14:10 +0100
[PATCH 2/2] dmaengine: at_xdmac: fix spurious flag status for mem2mem transfers Ludovic Desroches <ludovic.desroches@atmel.com> - 2015-11-23 14:20 +0100
Re: [PATCH 2/2] dmaengine: at_xdmac: fix spurious flag status for mem2mem transfers Nicolas Ferre <nicolas.ferre@atmel.com> - 2015-11-23 15:50 +0100
Re: [PATCH 1/2] dmaengine: at_xdmac: fix macro typo Nicolas Ferre <nicolas.ferre@atmel.com> - 2015-11-23 15:50 +0100
| From | Ludovic Desroches <ludovic.desroches@atmel.com> |
|---|---|
| Date | 2015-11-23 14:10 +0100 |
| Subject | [PATCH 1/2] dmaengine: at_xdmac: fix macro typo |
| Message-ID | <qxZ2z-29g-37@gated-at.bofh.it> |
Fix typo in a macro which was not used until now. It explains why there is no error at compilation time. Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> Fixes: e1f7c9eee707 "dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver" Cc: stable@vger.kernel.org # 3.19 and later --- drivers/dma/at_xdmac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c index 7f039de..d09277f 100644 --- a/drivers/dma/at_xdmac.c +++ b/drivers/dma/at_xdmac.c @@ -156,7 +156,7 @@ #define AT_XDMAC_CC_WRIP (0x1 << 23) /* Write in Progress (read only) */ #define AT_XDMAC_CC_WRIP_DONE (0x0 << 23) #define AT_XDMAC_CC_WRIP_IN_PROGRESS (0x1 << 23) -#define AT_XDMAC_CC_PERID(i) (0x7f & (h) << 24) /* Channel Peripheral Identifier */ +#define AT_XDMAC_CC_PERID(i) (0x7f & (i) << 24) /* Channel Peripheral Identifier */ #define AT_XDMAC_CDS_MSP 0x2C /* Channel Data Stride Memory Set Pattern */ #define AT_XDMAC_CSUS 0x30 /* Channel Source Microblock Stride */ #define AT_XDMAC_CDUS 0x34 /* Channel Destination Microblock Stride */ -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Ludovic Desroches <ludovic.desroches@atmel.com> |
|---|---|
| Date | 2015-11-23 14:20 +0100 |
| Subject | [PATCH 2/2] dmaengine: at_xdmac: fix spurious flag status for mem2mem transfers |
| Message-ID | <qxZce-2dc-11@gated-at.bofh.it> |
| In reply to | #1275311 |
When setting the channel configuration register, the perid field is not set to 0 since it is useless for mem2mem transfers. Unfortunately, a device has 0 as perid. It could cause spurious flags status because the controller could mix some events from the two channels. For that reason, use the highest perid value for mem2mem transfers since it doesn't match the perid of other devices. Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> --- drivers/dma/at_xdmac.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c index d09277f..b90e62f 100644 --- a/drivers/dma/at_xdmac.c +++ b/drivers/dma/at_xdmac.c @@ -863,8 +863,12 @@ at_xdmac_interleaved_queue_desc(struct dma_chan *chan, * access. Hopefully we can access DDR through both ports (at least on * SAMA5D4x), so we can use the same interface for source and dest, * that solves the fact we don't know the direction. + * ERRATA: Even if useless for memory transfers, the PERID has to not + * match the one of another channel. If not, it could lead to spurious + * flag status. */ - u32 chan_cc = AT_XDMAC_CC_DIF(0) + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) + | AT_XDMAC_CC_DIF(0) | AT_XDMAC_CC_SIF(0) | AT_XDMAC_CC_MBSIZE_SIXTEEN | AT_XDMAC_CC_TYPE_MEM_TRAN; @@ -1039,8 +1043,12 @@ at_xdmac_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, * access DDR through both ports (at least on SAMA5D4x), so we can use * the same interface for source and dest, that solves the fact we * don't know the direction. + * ERRATA: Even if useless for memory transfers, the PERID has to not + * match the one of another channel. If not, it could lead to spurious + * flag status. */ - u32 chan_cc = AT_XDMAC_CC_DAM_INCREMENTED_AM + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) + | AT_XDMAC_CC_DAM_INCREMENTED_AM | AT_XDMAC_CC_SAM_INCREMENTED_AM | AT_XDMAC_CC_DIF(0) | AT_XDMAC_CC_SIF(0) @@ -1140,8 +1148,12 @@ static struct at_xdmac_desc *at_xdmac_memset_create_desc(struct dma_chan *chan, * access. Hopefully we can access DDR through both ports (at least on * SAMA5D4x), so we can use the same interface for source and dest, * that solves the fact we don't know the direction. + * ERRATA: Even if useless for memory transfers, the PERID has to not + * match the one of another channel. If not, it could lead to spurious + * flag status. */ - u32 chan_cc = AT_XDMAC_CC_DAM_UBS_AM + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) + | AT_XDMAC_CC_DAM_UBS_AM | AT_XDMAC_CC_SAM_INCREMENTED_AM | AT_XDMAC_CC_DIF(0) | AT_XDMAC_CC_SIF(0) -- 2.5.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Nicolas Ferre <nicolas.ferre@atmel.com> |
|---|---|
| Date | 2015-11-23 15:50 +0100 |
| Subject | Re: [PATCH 2/2] dmaengine: at_xdmac: fix spurious flag status for mem2mem transfers |
| Message-ID | <qy0Bj-35s-9@gated-at.bofh.it> |
| In reply to | #1275322 |
Le 23/11/2015 14:09, Ludovic Desroches a écrit : > When setting the channel configuration register, the perid field is not > set to 0 since it is useless for mem2mem transfers. Unfortunately, a > device has 0 as perid. It could cause spurious flags status because > the controller could mix some events from the two channels. > For that reason, use the highest perid value for mem2mem transfers since it > doesn't match the perid of other devices. > > Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> Indeed: thanks Ludovic: Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> > --- > drivers/dma/at_xdmac.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) > > diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c > index d09277f..b90e62f 100644 > --- a/drivers/dma/at_xdmac.c > +++ b/drivers/dma/at_xdmac.c > @@ -863,8 +863,12 @@ at_xdmac_interleaved_queue_desc(struct dma_chan *chan, > * access. Hopefully we can access DDR through both ports (at least on > * SAMA5D4x), so we can use the same interface for source and dest, > * that solves the fact we don't know the direction. > + * ERRATA: Even if useless for memory transfers, the PERID has to not > + * match the one of another channel. If not, it could lead to spurious > + * flag status. > */ > - u32 chan_cc = AT_XDMAC_CC_DIF(0) > + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) > + | AT_XDMAC_CC_DIF(0) > | AT_XDMAC_CC_SIF(0) > | AT_XDMAC_CC_MBSIZE_SIXTEEN > | AT_XDMAC_CC_TYPE_MEM_TRAN; > @@ -1039,8 +1043,12 @@ at_xdmac_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, > * access DDR through both ports (at least on SAMA5D4x), so we can use > * the same interface for source and dest, that solves the fact we > * don't know the direction. > + * ERRATA: Even if useless for memory transfers, the PERID has to not > + * match the one of another channel. If not, it could lead to spurious > + * flag status. > */ > - u32 chan_cc = AT_XDMAC_CC_DAM_INCREMENTED_AM > + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) > + | AT_XDMAC_CC_DAM_INCREMENTED_AM > | AT_XDMAC_CC_SAM_INCREMENTED_AM > | AT_XDMAC_CC_DIF(0) > | AT_XDMAC_CC_SIF(0) > @@ -1140,8 +1148,12 @@ static struct at_xdmac_desc *at_xdmac_memset_create_desc(struct dma_chan *chan, > * access. Hopefully we can access DDR through both ports (at least on > * SAMA5D4x), so we can use the same interface for source and dest, > * that solves the fact we don't know the direction. > + * ERRATA: Even if useless for memory transfers, the PERID has to not > + * match the one of another channel. If not, it could lead to spurious > + * flag status. > */ > - u32 chan_cc = AT_XDMAC_CC_DAM_UBS_AM > + u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) > + | AT_XDMAC_CC_DAM_UBS_AM > | AT_XDMAC_CC_SAM_INCREMENTED_AM > | AT_XDMAC_CC_DIF(0) > | AT_XDMAC_CC_SIF(0) > -- Nicolas Ferre -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Nicolas Ferre <nicolas.ferre@atmel.com> |
|---|---|
| Date | 2015-11-23 15:50 +0100 |
| Message-ID | <qy0Bk-35s-19@gated-at.bofh.it> |
| In reply to | #1275311 |
Le 23/11/2015 14:09, Ludovic Desroches a écrit : > Fix typo in a macro which was not used until now. It explains why there > is no error at compilation time. > > Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> > Fixes: e1f7c9eee707 "dmaengine: at_xdmac: creation of the atmel eXtended > DMA Controller driver" > Cc: stable@vger.kernel.org # 3.19 and later Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> > --- > drivers/dma/at_xdmac.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c > index 7f039de..d09277f 100644 > --- a/drivers/dma/at_xdmac.c > +++ b/drivers/dma/at_xdmac.c > @@ -156,7 +156,7 @@ > #define AT_XDMAC_CC_WRIP (0x1 << 23) /* Write in Progress (read only) */ > #define AT_XDMAC_CC_WRIP_DONE (0x0 << 23) > #define AT_XDMAC_CC_WRIP_IN_PROGRESS (0x1 << 23) > -#define AT_XDMAC_CC_PERID(i) (0x7f & (h) << 24) /* Channel Peripheral Identifier */ > +#define AT_XDMAC_CC_PERID(i) (0x7f & (i) << 24) /* Channel Peripheral Identifier */ > #define AT_XDMAC_CDS_MSP 0x2C /* Channel Data Stride Memory Set Pattern */ > #define AT_XDMAC_CSUS 0x30 /* Channel Source Microblock Stride */ > #define AT_XDMAC_CDUS 0x34 /* Channel Destination Microblock Stride */ > -- Nicolas Ferre -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web