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

Commit a3aeb030 authored by Satyajit Desai's avatar Satyajit Desai
Browse files

coresight-tmc-etr: Fix to correct the size of buf read in sg



The size of data to be read from the buffer is dependent on the
position of the read-write pointer. In scatter-gather mode there
is no straight forward relation between the two. This change
addresses the issue where we are incorrectly using the linear
relation and end up with an invalid buffer size.

Change-Id: I2d73af7ebb3680c0a39ae8b7ec7efb59a319dd78
Signed-off-by: default avatarSatyajit Desai <sadesai@codeaurora.org>
parent 80c8b0a4
Loading
Loading
Loading
Loading
+11 −16
Original line number Diff line number Diff line
@@ -465,6 +465,7 @@ static void tmc_etr_dump_hw(struct tmc_drvdata *drvdata)
	rwp = readl_relaxed(drvdata->base + TMC_RWP);
	val = readl_relaxed(drvdata->base + TMC_STS);

	if (drvdata->memtype == TMC_ETR_MEM_TYPE_CONTIG) {
		/*
		 * Adjust the buffer to point to the beginning of the trace data
		 * and update the available trace data.
@@ -476,13 +477,6 @@ static void tmc_etr_dump_hw(struct tmc_drvdata *drvdata)
			drvdata->buf = drvdata->vaddr;
			drvdata->len = rwp - drvdata->paddr;
		}

	if (drvdata->memtype == TMC_ETR_MEM_TYPE_CONTIG) {
		/* How much memory do we still have */
		if (val & BIT(0))
			drvdata->buf = drvdata->vaddr + rwp - drvdata->paddr;
		else
			drvdata->buf = drvdata->vaddr;
	} else {
		/*
		 * Reset these variables before computing since we
@@ -490,8 +484,9 @@ static void tmc_etr_dump_hw(struct tmc_drvdata *drvdata)
		 */
		drvdata->sg_blk_num = 0;
		drvdata->delta_bottom = 0;
		drvdata->len = drvdata->size;

		if (val & BIT(0))
		if (val & TMC_STS_FULL)
			tmc_etr_sg_rwp_pos(drvdata, rwp);
		else
			drvdata->buf = drvdata->vaddr;