Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 734bb9a7 authored by Ludovic Desroches's avatar Ludovic Desroches Committed by Vinod Koul
Browse files

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: default avatarLudovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
parent cbb85e67
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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);