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

Commit b6f28b7b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "slimbus: msm: Deinit/Reinit BAM pipe after SSR"

parents 39a6d6a6 5f5f9ab8
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
@@ -185,11 +185,6 @@ static int dsp_ssr_notify_cb(struct notifier_block *n, unsigned long code,
		/* make sure autosuspend is not called until ADSP comes up*/
		pm_runtime_get_noresume(dev->dev);
		dev->state = MSM_CTRL_DOWN;
		/* disconnect BAM pipes */
		if (dev->use_rx_msgqs == MSM_MSGQ_ENABLED)
			dev->use_rx_msgqs = MSM_MSGQ_DOWN;
		if (dev->use_tx_msgqs == MSM_MSGQ_ENABLED)
			dev->use_tx_msgqs = MSM_MSGQ_DOWN;
		msm_slim_sps_exit(dev, false);
		ngd_adsp_down(dev);
		mutex_unlock(&dev->tx_lock);
@@ -717,9 +712,19 @@ static int ngd_bulk_wr(struct slim_controller *ctrl, u8 la, u8 mt, u8 mc,
	u32 *header;
	DECLARE_COMPLETION_ONSTACK(done);

	msm_slim_get_ctrl(dev);
	ret = msm_slim_get_ctrl(dev);
	mutex_lock(&dev->tx_lock);
	if (dev->state == MSM_CTRL_ASLEEP) {

	if ((pm_runtime_enabled(dev->dev) && ret < 0) ||
			dev->state == MSM_CTRL_DOWN) {
		SLIM_WARN(dev, "vote failed/SSR in-progress ret:%d, state:%d",
				ret, dev->state);
		pm_runtime_set_suspended(dev->dev);
		mutex_unlock(&dev->tx_lock);
		msm_slim_put_ctrl(dev);
		return -EREMOTEIO;
	}
	if (!pm_runtime_enabled(dev->dev) && dev->state == MSM_CTRL_ASLEEP) {
		mutex_unlock(&dev->tx_lock);
		ret = ngd_slim_runtime_resume(dev->dev);

@@ -1040,6 +1045,15 @@ static void ngd_slim_setup(struct msm_slim_ctrl *dev)
	u32 cfg = readl_relaxed(dev->base +
				 NGD_BASE(dev->ctrl.nr, dev->ver));
	if (dev->state == MSM_CTRL_DOWN) {
		/* if called after SSR, cleanup and re-assign */
		if (dev->use_tx_msgqs != MSM_MSGQ_RESET)
			msm_slim_deinit_ep(dev, &dev->tx_msgq,
					   &dev->use_tx_msgqs);

		if (dev->use_rx_msgqs != MSM_MSGQ_RESET)
			msm_slim_deinit_ep(dev, &dev->rx_msgq,
					   &dev->use_rx_msgqs);

		msm_slim_sps_init(dev, dev->bam_mem,
			NGD_BASE(dev->ctrl.nr,
			dev->ver) + NGD_STATUS, true);