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: Shashank Mittal <mittals@codeaurora.org>
This commit is contained in:
parent
d2afad6a90
commit
4a76273947
1 changed files with 10 additions and 2 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue