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_PIPE_INDEX 0
|
||||||
#define TMC_ETR_BAM_NR_PIPES 2
|
#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_MAGIC_V2 (0x42445953)
|
||||||
#define TMC_REG_DUMP_VER (1)
|
#define TMC_REG_DUMP_VER (1)
|
||||||
|
|
||||||
|
@ -178,6 +179,7 @@ struct tmc_drvdata {
|
||||||
spinlock_t spinlock;
|
spinlock_t spinlock;
|
||||||
int read_count;
|
int read_count;
|
||||||
bool reading;
|
bool reading;
|
||||||
|
bool aborting;
|
||||||
char *buf;
|
char *buf;
|
||||||
dma_addr_t paddr;
|
dma_addr_t paddr;
|
||||||
void __iomem *vaddr;
|
void __iomem *vaddr;
|
||||||
|
@ -883,11 +885,15 @@ static void tmc_etb_dump_hw(struct tmc_drvdata *drvdata)
|
||||||
for (i = 0; i < memwords; i++) {
|
for (i = 0; i < memwords; i++) {
|
||||||
read_data = readl_relaxed(drvdata->base + TMC_RRD);
|
read_data = readl_relaxed(drvdata->base + TMC_RRD);
|
||||||
if (read_data == 0xFFFFFFFF)
|
if (read_data == 0xFFFFFFFF)
|
||||||
return;
|
goto out;
|
||||||
memcpy(bufp, &read_data, 4);
|
memcpy(bufp, &read_data, 4);
|
||||||
bufp += 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)
|
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;
|
unsigned long flags;
|
||||||
enum tmc_mode mode;
|
enum tmc_mode mode;
|
||||||
|
|
||||||
|
drvdata->aborting = true;
|
||||||
|
|
||||||
spin_lock_irqsave(&drvdata->spinlock, flags);
|
spin_lock_irqsave(&drvdata->spinlock, flags);
|
||||||
if (drvdata->reading)
|
if (drvdata->reading)
|
||||||
goto out0;
|
goto out0;
|
||||||
|
@ -1728,7 +1736,7 @@ static void __tmc_reg_dump(struct tmc_drvdata *drvdata)
|
||||||
|
|
||||||
if (!drvdata->reg_buf)
|
if (!drvdata->reg_buf)
|
||||||
return;
|
return;
|
||||||
else if (!drvdata->dump_reg)
|
else if (!drvdata->aborting && !drvdata->dump_reg)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
drvdata->reg_data.version = TMC_REG_DUMP_VER;
|
drvdata->reg_data.version = TMC_REG_DUMP_VER;
|
||||||
|
|
Loading…
Add table
Reference in a new issue