at_xdmac update for generic slave capabilities
Subsystems (2)
cover at_xdmac update for generic slave capabilities
Hi,
Please add this update of the at_xdmac driver to the "Implement generic slave capabilities retrieval" set of patches.
Tell me if something missing.
Ludovic Desroches (2):
dmaengine: at_xdmac: correct destination abbreviation
dmaengine: at_xdmac: split device_control
drivers/dma/at_xdmac.c | 96 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 38 deletions(-)
Signature · 1 line
2.0.3
PATCH 1/2 dmaengine: at_xdmac: correct destination abbreviation
TODO
--- drivers/dma/at_xdmac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/dma/at_xdmac.c +1 -1
@@ -1229,7 +1229,7 @@ static int at_xdmac_device_slave_caps(struct dma_chan *dchan, { caps->src_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; - caps->dstn_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; + caps->dst_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; caps->directions =BIT (DMA_DEV_TO_MEM ) |BIT (DMA_MEM_TO_DEV ); caps->cmd_pause = true; caps->cmd_terminate = true;
Signature · 1 line
2.0.3
PATCH 1/2 dmaengine: at_xdmac: correct destination abbreviation
Quoted 1 line · Ludovic Desroches
TODO
No commit message since it will be merge into Maxime's patch :p
Quoted 22 lines
Signed-off-by Ludovic Desroches <[email protected]>--- drivers/dma/at_xdmac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/dma/at_xdmac.c +1
-1@@ -1229,7 +1229,7 @@ static int at_xdmac_device_slave_caps(struct dma_chan *dchan, { caps->src_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; - caps->dstn_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; + caps->dst_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; caps->directions =BIT (DMA_DEV_TO_MEM ) |BIT (DMA_MEM_TO_DEV ); caps->cmd_pause = true; caps->cmd_terminate = true;Signature · 1 line
2.0.3
PATCH 1/2 dmaengine: at_xdmac: correct destination abbreviation
In reply to Ludovic DesrochesQuoted 3 lines · Ludovic Desroches
TODO
Signed-off-by Ludovic Desroches <[email protected]>
Folded in the relevant patch, thanks!
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141113/16ab32b2/attachment.sig>
PATCH 2/2 dmaengine: at_xdmac: split device_control
In reply to Ludovic DesrochesUse newly introduced callbacks.
--- drivers/dma/at_xdmac.c | 94 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 37 deletions(-)
drivers/dma/at_xdmac.c +57 -37
@@ -1107,58 +1107,75 @@ static void at_xdmac_issue_pending(struct dma_chan *chan)return ; } -static int at_xdmac_control (struct dma_chan *chan,enum dma_ctrl_cmd cmd, -unsigned long arg) +static int at_xdmac_device_config (struct dma_chan *chan, +struct dma_slave_config *config) +{ +struct at_xdmac_chan *atchan =to_at_xdmac_chan (chan); +int ret; + +dev_dbg (chan2dev (chan),"%s\n" , __func__); + +spin_lock_bh (&atchan->lock); + ret =at_xdmac_set_slave_config (chan, config); +spin_unlock_bh (&atchan->lock); + +return ret; +} + +static int at_xdmac_device_pause (struct dma_chan *chan) { -struct at_xdmac_desc *desc, *_desc;struct at_xdmac_chan *atchan =to_at_xdmac_chan (chan);struct at_xdmac *atxdmac =to_at_xdmac (atchan->chan.device); -int ret =0 ; -dev_dbg (chan2dev (chan),"%s: cmd=%d\n" , __func__, cmd); +dev_dbg (chan2dev (chan),"%s\n" , __func__);spin_lock_bh (&atchan->lock); +at_xdmac_write (atxdmac,AT_XDMAC_GRWS , atchan->mask); +set_bit (AT_XDMAC_CHAN_IS_PAUSED , &atchan->status); +spin_unlock_bh (&atchan->lock); -switch (cmd) { -case DMA_PAUSE : -at_xdmac_write (atxdmac,AT_XDMAC_GRWS , atchan->mask); -set_bit (AT_XDMAC_CHAN_IS_PAUSED , &atchan->status); -break ; +return 0 ; +} -case DMA_RESUME : -if (!at_xdmac_chan_is_paused (atchan)) -break ; +static int at_xdmac_device_resume (struct dma_chan *chan) +{ +struct at_xdmac_chan *atchan =to_at_xdmac_chan (chan); +struct at_xdmac *atxdmac =to_at_xdmac (atchan->chan.device); -at_xdmac_write (atxdmac,AT_XDMAC_GRWR , atchan->mask); -clear_bit (AT_XDMAC_CHAN_IS_PAUSED , &atchan->status); -break ; +dev_dbg (chan2dev (chan),"%s\n" , __func__); -case DMA_TERMINATE_ALL : -at_xdmac_write (atxdmac,AT_XDMAC_GD , atchan->mask); -while (at_xdmac_read (atxdmac,AT_XDMAC_GS ) & atchan->mask) -cpu_relax (); +spin_lock_bh (&atchan->lock); +if (!at_xdmac_chan_is_paused (atchan)) +return 0 ; -/* Cancel all pending transfers. */ -list_for_each_entry_safe (desc, _desc, &atchan->xfers_list, xfer_node) -at_xdmac_remove_xfer (atchan, desc); +at_xdmac_write (atxdmac,AT_XDMAC_GRWR , atchan->mask); +clear_bit (AT_XDMAC_CHAN_IS_PAUSED , &atchan->status); +spin_unlock_bh (&atchan->lock); + +return 0 ; +} + +static int at_xdmac_device_terminate_all (struct dma_chan *chan) +{ +struct at_xdmac_desc *desc, *_desc; +struct at_xdmac_chan *atchan =to_at_xdmac_chan (chan); +struct at_xdmac *atxdmac =to_at_xdmac (atchan->chan.device); -clear_bit (AT_XDMAC_CHAN_IS_CYCLIC , &atchan->status); -break ; +dev_dbg (chan2dev (chan),"%s\n" , __func__); -case DMA_SLAVE_CONFIG : - ret =at_xdmac_set_slave_config (chan, - (struct dma_slave_config *)arg); -break ; +spin_lock_bh (&atchan->lock); +at_xdmac_write (atxdmac,AT_XDMAC_GD , atchan->mask); +while (at_xdmac_read (atxdmac,AT_XDMAC_GS ) & atchan->mask) +cpu_relax (); -default : -dev_err (chan2dev (chan), -"unmanaged or unknown dma control cmd: %d\n" , cmd); - ret = -ENXIO ; - } +/* Cancel all pending transfers. */ +list_for_each_entry_safe (desc, _desc, &atchan->xfers_list, xfer_node) +at_xdmac_remove_xfer (atchan, desc); +clear_bit (AT_XDMAC_CHAN_IS_CYCLIC , &atchan->status);spin_unlock_bh (&atchan->lock); -return ret; +return 0 ; }static int at_xdmac_alloc_chan_resources (struct dma_chan *chan)
@@ -1270,7 +1287,7 @@ static int atmel_xdmac_suspend(struct device *dev)if (at_xdmac_chan_is_cyclic (atchan)) {if (!at_xdmac_chan_is_paused (atchan)) -at_xdmac_control (chan,DMA_PAUSE ,0 ); +at_xdmac_device_pause (chan); atchan->save_cim =at_xdmac_chan_read (atchan,AT_XDMAC_CIM ); atchan->save_cnda =at_xdmac_chan_read (atchan,AT_XDMAC_CNDA ); atchan->save_cndc =at_xdmac_chan_read (atchan,AT_XDMAC_CNDC );
@@ -1407,7 +1424,10 @@ static int at_xdmac_probe(struct platform_device *pdev) atxdmac->dma.device_prep_dma_cyclic = at_xdmac_prep_dma_cyclic; atxdmac->dma.device_prep_dma_memcpy = at_xdmac_prep_dma_memcpy; atxdmac->dma.device_prep_slave_sg = at_xdmac_prep_slave_sg; - atxdmac->dma.device_control = at_xdmac_control; + atxdmac->dma.device_config = at_xdmac_device_config; + atxdmac->dma.device_pause = at_xdmac_device_pause; + atxdmac->dma.device_resume = at_xdmac_device_resume; + atxdmac->dma.device_terminate_all = at_xdmac_device_terminate_all; atxdmac->dma.device_slave_caps = at_xdmac_device_slave_caps;/* Disable all chans and interrupts. */
Signature · 1 line
2.0.3
PATCH 2/2 dmaengine: at_xdmac: split device_control
Quoted 3 lines · Ludovic Desroches
Use newly introduced callbacks.
Signed-off-by Ludovic Desroches <[email protected]>
Taken in my serie, thanks!
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141113/2d4981d0/attachment.sig>
PATCH 1/1 dmaengine: at_xdmac: Declare slave capabilities for the generic code
In reply to Ludovic DesrochesNow that the generic slave caps code can make use of the device assigned capabilities, instead of relying on a callback to be implemented.
Make use of this code.
--- drivers/dma/at_xdmac.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-)
drivers/dma/at_xdmac.c +11 -22
@@ -174,6 +174,13 @@#define AT_XDMAC_MAX_CHAN 0x20 +#define AT_XDMAC_DMA_BUSWIDTHS \ + (BIT(DMA_SLAVE_BUSWIDTH_UNDEFINED) |\ + BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) |\ + BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) |\ + BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) |\ + BIT(DMA_SLAVE_BUSWIDTH_8_BYTES)) +enum atc_status {AT_XDMAC_CHAN_IS_CYCLIC =0 ,AT_XDMAC_CHAN_IS_PAUSED ,
@@ -1234,27 +1241,6 @@ static void at_xdmac_free_chan_resources(struct dma_chan *chan)return ; } -#define AT_XDMAC_DMA_BUSWIDTHS \ - (BIT(DMA_SLAVE_BUSWIDTH_UNDEFINED) |\ - BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) |\ - BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) |\ - BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) |\ - BIT(DMA_SLAVE_BUSWIDTH_8_BYTES)) - -static int at_xdmac_device_slave_caps (struct dma_chan *dchan, -struct dma_slave_caps *caps) -{ - - caps->src_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; - caps->dst_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; - caps->directions =BIT (DMA_DEV_TO_MEM ) |BIT (DMA_MEM_TO_DEV ); - caps->cmd_pause = true; - caps->cmd_terminate = true; - caps->residue_granularity =DMA_RESIDUE_GRANULARITY_BURST ; - -return 0 ; -} -#ifdef CONFIG_PM static int atmel_xdmac_prepare (struct device *dev) {
@@ -1428,7 +1414,10 @@ static int at_xdmac_probe(struct platform_device *pdev) atxdmac->dma.device_pause = at_xdmac_device_pause; atxdmac->dma.device_resume = at_xdmac_device_resume; atxdmac->dma.device_terminate_all = at_xdmac_device_terminate_all; - atxdmac->dma.device_slave_caps = at_xdmac_device_slave_caps; + atxdmac->dma.src_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; + atxdmac->dma.dst_addr_widths =AT_XDMAC_DMA_BUSWIDTHS ; + atxdmac->dma.directions =BIT (DMA_DEV_TO_MEM ) |BIT (DMA_MEM_TO_DEV ); + atxdmac->dma.residue_granularity =DMA_RESIDUE_GRANULARITY_BURST ;/* Disable all chans and interrupts. */ at_xdmac_off (atxdmac);
Signature · 1 line
2.0.3
Maxime Ripard
AppliedPATCH 1/1 dmaengine: at_xdmac: Declare slave capabilities for the generic code
Quoted 6 lines · Ludovic Desroches
Now that the generic slave caps code can make use of the device assigned capabilities, instead of relying on a callback to be implemented.
Make use of this code.
Signed-off-by Ludovic Desroches <[email protected]>
Merged into my serie, thanks!
Maxime
Signature · 10 lines
Maxime Ripard, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141113/d653425b/attachment.sig>