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

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

Merge "mmc: cmdq_hci: Add tracing events for CQ mode."

parents f6dee550 6a3206b3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2511,6 +2511,7 @@ static int mmc_suspend(struct mmc_host *host)
	int err;
	ktime_t start = ktime_get();

	MMC_TRACE(host, "%s: Enter\n", __func__);
	err = _mmc_suspend(host, true);
	if (!err) {
		pm_runtime_disable(&host->card->dev);
@@ -2519,6 +2520,7 @@ static int mmc_suspend(struct mmc_host *host)

	trace_mmc_suspend(mmc_hostname(host), err,
			ktime_to_us(ktime_sub(ktime_get(), start)));
	MMC_TRACE(host, "%s: Exit err: %d\n", __func__, err);
	return err;
}

@@ -2594,6 +2596,7 @@ static int mmc_resume(struct mmc_host *host)
	int err = 0;
	ktime_t start = ktime_get();

	MMC_TRACE(host, "%s: Enter\n", __func__);
	if (!(host->caps & MMC_CAP_RUNTIME_RESUME)) {
		err = _mmc_resume(host);
		pm_runtime_set_active(&host->card->dev);
@@ -2603,7 +2606,7 @@ static int mmc_resume(struct mmc_host *host)

	trace_mmc_resume(mmc_hostname(host), err,
			ktime_to_us(ktime_sub(ktime_get(), start)));

	MMC_TRACE(host, "%s: Exit err: %d\n", __func__, err);
	return err;
}

+4 −0
Original line number Diff line number Diff line
@@ -1224,11 +1224,13 @@ static int mmc_sd_suspend(struct mmc_host *host)
{
	int err;

	MMC_TRACE(host, "%s: Enter\n", __func__);
	err = _mmc_sd_suspend(host);
	if (!err) {
		pm_runtime_disable(&host->card->dev);
		pm_runtime_set_suspended(&host->card->dev);
	}
	MMC_TRACE(host, "%s: Exit err: %d\n", __func__, err);

	return err;
}
@@ -1294,12 +1296,14 @@ static int mmc_sd_resume(struct mmc_host *host)
{
	int err = 0;

	MMC_TRACE(host, "%s: Enter\n", __func__);
	if (!(host->caps & MMC_CAP_RUNTIME_RESUME)) {
		err = _mmc_sd_resume(host);
		pm_runtime_set_active(&host->card->dev);
		pm_runtime_mark_last_busy(&host->card->dev);
	}
	pm_runtime_enable(&host->card->dev);
	MMC_TRACE(host, "%s: Exit err: %d\n", __func__, err);

	return err;
}
+4 −0
Original line number Diff line number Diff line
@@ -1036,6 +1036,7 @@ static int mmc_sdio_pre_suspend(struct mmc_host *host)
 */
static int mmc_sdio_suspend(struct mmc_host *host)
{
	MMC_TRACE(host, "%s: Enter\n", __func__);
	if (mmc_card_keep_power(host) && mmc_card_wake_sdio_irq(host)) {
		mmc_claim_host(host);
		sdio_disable_wide(host->card);
@@ -1046,6 +1047,7 @@ static int mmc_sdio_suspend(struct mmc_host *host)
		mmc_power_off(host);
	else if (host->ios.clock)
		mmc_gate_clock(host);
	MMC_TRACE(host, "%s: Exit\n", __func__);

	return 0;
}
@@ -1057,6 +1059,7 @@ static int mmc_sdio_resume(struct mmc_host *host)
	BUG_ON(!host);
	BUG_ON(!host->card);

	MMC_TRACE(host, "%s: Enter\n", __func__);
	/* Basic card reinitialization. */
	mmc_claim_host(host);

@@ -1108,6 +1111,7 @@ static int mmc_sdio_resume(struct mmc_host *host)

	host->pm_flags &= ~MMC_PM_KEEP_POWER;
	host->pm_flags &= ~MMC_PM_WAKE_SDIO_IRQ;
	MMC_TRACE(host, "%s: Exit err: %d\n", __func__, err);
	return err;
}

+30 −1
Original line number Diff line number Diff line
@@ -199,6 +199,14 @@ static void cmdq_dumpregs(struct cmdq_host *cq_host)
{
	struct mmc_host *mmc = cq_host->mmc;

	MMC_TRACE(mmc,
	"%s: 0x0C=0x%08x 0x10=0x%08x 0x14=0x%08x 0x18=0x%08x 0x28=0x%08x 0x2C=0x%08x 0x30=0x%08x 0x34=0x%08x 0x54=0x%08x 0x58=0x%08x 0x5C=0x%08x 0x48=0x%08x\n",
	__func__, cmdq_readl(cq_host, CQCTL), cmdq_readl(cq_host, CQIS),
	cmdq_readl(cq_host, CQISTE), cmdq_readl(cq_host, CQISGE),
	cmdq_readl(cq_host, CQTDBR), cmdq_readl(cq_host, CQTCN),
	cmdq_readl(cq_host, CQDQS), cmdq_readl(cq_host, CQDPT),
	cmdq_readl(cq_host, CQTERRI), cmdq_readl(cq_host, CQCRI),
	cmdq_readl(cq_host, CQCRA), cmdq_readl(cq_host, CQCRDCT));
	pr_err(DRV_NAME ": ========== REGISTER DUMP (%s)==========\n",
		mmc_hostname(mmc));

@@ -427,6 +435,7 @@ static int cmdq_enable(struct mmc_host *mmc)
pm_ref_count:
	cmdq_runtime_pm_put(cq_host);
out:
	MMC_TRACE(mmc, "%s: CQ enabled err: %d\n", __func__, err);
	return err;
}

@@ -444,6 +453,7 @@ static void cmdq_disable_nosync(struct mmc_host *mmc, bool soft)

	cq_host->enabled = false;
	mmc_host_set_cq_disable(mmc);
	MMC_TRACE(mmc, "%s: CQ disabled\n", __func__);
}

static void cmdq_disable(struct mmc_host *mmc, bool soft)
@@ -526,6 +536,12 @@ static void cmdq_prep_task_desc(struct mmc_request *mrq,
		REL_WRITE(!!(req_flags & REL_WR)) |
		BLK_COUNT(mrq->cmdq_req->data.blocks) |
		BLK_ADDR((u64)mrq->cmdq_req->blk_addr);

	MMC_TRACE(mrq->host,
		"%s: Task: 0x%08x | Args: 0x%08x | cnt: 0x%08x\n", __func__,
		lower_32_bits(*data),
		upper_32_bits(*data),
		mrq->cmdq_req->data.blocks);
}

static int cmdq_dma_map(struct mmc_host *host, struct mmc_request *mrq)
@@ -666,6 +682,11 @@ static void cmdq_prep_dcmd_desc(struct mmc_host *mmc,
	dataddr = (__le64 __force *)(desc + 4);
	dataddr[0] = cpu_to_le64((u64)mrq->cmd->arg);
	cmdq_log_task_desc_history(cq_host, *task_desc, true);
	MMC_TRACE(mrq->host,
		"%s: DCMD: Task: 0x%08x | Args: 0x%08x\n",
		__func__,
		lower_32_bits(*task_desc),
		upper_32_bits(*task_desc));
}

static void cmdq_pm_qos_vote(struct sdhci_host *host, struct mmc_request *mrq)
@@ -744,6 +765,7 @@ ring_doorbell:
		cmdq_dumpregs(cq_host);
		BUG_ON(1);
	}
	MMC_TRACE(mmc, "%s: tag: %d\n", __func__, tag);
	cmdq_writel(cq_host, 1 << tag, CQTDBR);
	/* Commit the doorbell write immediately */
	wmb();
@@ -786,6 +808,8 @@ irqreturn_t cmdq_irq(struct mmc_host *mmc, int err)

	if (!status && !err)
		return IRQ_NONE;
	MMC_TRACE(mmc, "%s: CQIS: 0x%x err: %d\n",
		__func__, status, err);

	if (err || (status & CQIS_RED)) {
		err_info = cmdq_readl(cq_host, CQTERRI);
@@ -921,6 +945,8 @@ skip_cqterri:
			/* complete the corresponding mrq */
			pr_debug("%s: completing tag -> %lu\n",
				 mmc_hostname(mmc), tag);
			MMC_TRACE(mmc, "%s: completing tag -> %lu\n",
				__func__, tag);
				cmdq_finish_data(mmc, tag);
		}
	}
@@ -998,6 +1024,8 @@ static int cmdq_halt(struct mmc_host *mmc, bool halt)
				retries--;
				continue;
			} else {
				MMC_TRACE(mmc, "%s: halt done , retries: %d\n",
					__func__, retries);
				/* halt done: re-enable legacy interrupts */
				if (cq_host->ops->clear_set_irqs)
					cq_host->ops->clear_set_irqs(mmc,
@@ -1015,6 +1043,7 @@ static int cmdq_halt(struct mmc_host *mmc, bool halt)
			cq_host->ops->set_data_timeout(mmc, 0xf);
		if (cq_host->ops->clear_set_irqs)
			cq_host->ops->clear_set_irqs(mmc, true);
		MMC_TRACE(mmc, "%s: unhalt done\n", __func__);
		cmdq_writel(cq_host, cmdq_readl(cq_host, CQCTL) & ~HALT,
			    CQCTL);
	}