mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 08:34:20 +08:00
soundwire: intel: introduce helper for link synchronization
After arming the synchronization, the SYNCGO field controls the hardware-based synchronization between links. Move the programming and wait for clear of SYNCGO to dedicated helper. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20200716150947.22119-5-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
02629e4548
commit
437e3289b5
@ -512,6 +512,31 @@ static void intel_shim_sync_arm(struct sdw_intel *sdw)
|
||||
mutex_unlock(sdw->link_res->shim_lock);
|
||||
}
|
||||
|
||||
static int intel_shim_sync_go_unlocked(struct sdw_intel *sdw)
|
||||
{
|
||||
void __iomem *shim = sdw->link_res->shim;
|
||||
u32 sync_reg;
|
||||
int ret;
|
||||
|
||||
/* Read SYNC register */
|
||||
sync_reg = intel_readl(shim, SDW_SHIM_SYNC);
|
||||
|
||||
/*
|
||||
* Set SyncGO bit to synchronously trigger a bank switch for
|
||||
* all the masters. A write to SYNCGO bit clears CMDSYNC bit for all
|
||||
* the Masters.
|
||||
*/
|
||||
sync_reg |= SDW_SHIM_SYNC_SYNCGO;
|
||||
|
||||
ret = intel_clear_bit(shim, SDW_SHIM_SYNC, sync_reg,
|
||||
SDW_SHIM_SYNC_SYNCGO);
|
||||
|
||||
if (ret < 0)
|
||||
dev_err(sdw->cdns.dev, "SyncGO clear failed: %d\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* PDI routines
|
||||
*/
|
||||
@ -763,15 +788,8 @@ static int intel_post_bank_switch(struct sdw_bus *bus)
|
||||
ret = 0;
|
||||
goto unlock;
|
||||
}
|
||||
/*
|
||||
* Set SyncGO bit to synchronously trigger a bank switch for
|
||||
* all the masters. A write to SYNCGO bit clears CMDSYNC bit for all
|
||||
* the Masters.
|
||||
*/
|
||||
sync_reg |= SDW_SHIM_SYNC_SYNCGO;
|
||||
|
||||
ret = intel_clear_bit(shim, SDW_SHIM_SYNC, sync_reg,
|
||||
SDW_SHIM_SYNC_SYNCGO);
|
||||
ret = intel_shim_sync_go_unlocked(sdw);
|
||||
unlock:
|
||||
mutex_unlock(sdw->link_res->shim_lock);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user