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

Commit 4a762739 authored by Shashank Mittal's avatar Shashank Mittal
Browse files

coresight-tmc: save TMC registers during abort



TMC abort needs to save TMC registers so that TMC data can be extracted
from device crash dumps.

Change-Id: I4339e84dc62e589e0f4d341e8143b1cd94a9cbe2
Signed-off-by: default avatarShashank Mittal <mittals@codeaurora.org>
parent d2afad6a
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@
#define TMC_ETR_BAM_PIPE_INDEX	0
#define TMC_ETR_BAM_NR_PIPES	2

#define TMC_ETFETB_DUMP_MAGIC_V2	(0x42445953)
#define TMC_REG_DUMP_MAGIC_V2		(0x42445953)
#define TMC_REG_DUMP_VER		(1)

@@ -178,6 +179,7 @@ struct tmc_drvdata {
	spinlock_t		spinlock;
	int			read_count;
	bool			reading;
	bool			aborting;
	char			*buf;
	dma_addr_t		paddr;
	void __iomem		*vaddr;
@@ -883,11 +885,15 @@ static void tmc_etb_dump_hw(struct tmc_drvdata *drvdata)
		for (i = 0; i < memwords; i++) {
			read_data = readl_relaxed(drvdata->base + TMC_RRD);
			if (read_data == 0xFFFFFFFF)
				return;
				goto out;
			memcpy(bufp, &read_data, 4);
			bufp += 4;
		}
	}

out:
	if (drvdata->aborting)
		drvdata->buf_data.magic = TMC_ETFETB_DUMP_MAGIC_V2;
}

static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata)
@@ -1070,6 +1076,8 @@ static void tmc_abort(struct coresight_device *csdev)
	unsigned long flags;
	enum tmc_mode mode;

	drvdata->aborting = true;

	spin_lock_irqsave(&drvdata->spinlock, flags);
	if (drvdata->reading)
		goto out0;
@@ -1728,7 +1736,7 @@ static void __tmc_reg_dump(struct tmc_drvdata *drvdata)

	if (!drvdata->reg_buf)
		return;
	else if (!drvdata->dump_reg)
	else if (!drvdata->aborting && !drvdata->dump_reg)
		return;

	drvdata->reg_data.version = TMC_REG_DUMP_VER;