mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
dmaengine: at_xdmac: introduce save_cc field
When suspending the device, read the channel configuration directly from the register instead of relying on a software snapshot, it will be safer. Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
This commit is contained in:
parent
cbb85e6726
commit
734bb9a7b3
@ -200,6 +200,7 @@ struct at_xdmac_chan {
|
||||
u8 memif; /* Memory Interface */
|
||||
u32 per_src_addr;
|
||||
u32 per_dst_addr;
|
||||
u32 save_cc;
|
||||
u32 save_cim;
|
||||
u32 save_cnda;
|
||||
u32 save_cndc;
|
||||
@ -1276,6 +1277,7 @@ static int atmel_xdmac_suspend(struct device *dev)
|
||||
list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) {
|
||||
struct at_xdmac_chan *atchan = to_at_xdmac_chan(chan);
|
||||
|
||||
atchan->save_cc = at_xdmac_chan_read(atchan, AT_XDMAC_CC);
|
||||
if (at_xdmac_chan_is_cyclic(atchan)) {
|
||||
if (!at_xdmac_chan_is_paused(atchan))
|
||||
at_xdmac_device_pause(chan);
|
||||
@ -1298,7 +1300,6 @@ static int atmel_xdmac_resume(struct device *dev)
|
||||
struct at_xdmac_chan *atchan;
|
||||
struct dma_chan *chan, *_chan;
|
||||
int i;
|
||||
u32 cfg;
|
||||
|
||||
clk_prepare_enable(atxdmac->clk);
|
||||
|
||||
@ -1313,8 +1314,7 @@ static int atmel_xdmac_resume(struct device *dev)
|
||||
at_xdmac_write(atxdmac, AT_XDMAC_GE, atxdmac->save_gs);
|
||||
list_for_each_entry_safe(chan, _chan, &atxdmac->dma.channels, device_node) {
|
||||
atchan = to_at_xdmac_chan(chan);
|
||||
cfg = atchan->cfg[AT_XDMAC_CUR_CFG];
|
||||
at_xdmac_chan_write(atchan, AT_XDMAC_CC, cfg);
|
||||
at_xdmac_chan_write(atchan, AT_XDMAC_CC, atchan->save_cc);
|
||||
if (at_xdmac_chan_is_cyclic(atchan)) {
|
||||
at_xdmac_chan_write(atchan, AT_XDMAC_CNDA, atchan->save_cnda);
|
||||
at_xdmac_chan_write(atchan, AT_XDMAC_CNDC, atchan->save_cndc);
|
||||
|
Loading…
Reference in New Issue
Block a user