From ce3d488fbe7c07b63edf1f67d26a9d43d584eaba Mon Sep 17 00:00:00 2001 From: Shashank Mittal Date: Tue, 23 Feb 2016 17:54:44 -0800 Subject: [PATCH] coresight-etm4x: add code to allocate memory for dump table Add code to allocate and register memory dump entry for dumping etm registers. Change-Id: I0487e1c0d4e0fffc5df1456d53567762d7b18d51 Signed-off-by: Shashank Mittal --- drivers/hwtracing/coresight/coresight-etm4x.c | 39 +++++++++++++++++++ drivers/hwtracing/coresight/coresight-etm4x.h | 3 ++ 2 files changed, 42 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c index 0773a9757649..bb9c934dc951 100644 --- a/drivers/hwtracing/coresight/coresight-etm4x.c +++ b/drivers/hwtracing/coresight/coresight-etm4x.c @@ -2548,6 +2548,41 @@ static void etm4_init_default_data(struct etmv4_drvdata *drvdata) drvdata->trcid = 0x1 + drvdata->cpu; } +static int etm4_set_reg_dump(struct etmv4_drvdata *drvdata) +{ + int ret; + void *baddr; + struct amba_device *adev; + struct resource *res; + struct device *dev = drvdata->dev; + struct msm_dump_entry dump_entry; + uint32_t size; + + adev = to_amba_device(dev); + if (!adev) + return -EINVAL; + + res = &adev->res; + size = resource_size(res); + + baddr = devm_kzalloc(dev, size, GFP_KERNEL); + if (!baddr) + return -ENOMEM; + + drvdata->reg_data.addr = virt_to_phys(baddr); + drvdata->reg_data.len = size; + + dump_entry.id = MSM_DUMP_DATA_ETM_REG + drvdata->cpu; + dump_entry.addr = virt_to_phys(&drvdata->reg_data); + + ret = msm_dump_data_register(MSM_DUMP_TABLE_APPS, + &dump_entry); + if (ret) + devm_kfree(dev, baddr); + + return ret; +} + static int etm4_late_init(struct etmv4_drvdata *drvdata) { int ret; @@ -2559,6 +2594,10 @@ static int etm4_late_init(struct etmv4_drvdata *drvdata) etm4_init_default_data(drvdata); + ret = etm4_set_reg_dump(drvdata); + if (ret) + dev_err(dev, "ETM REG dump setup failed. ret %d\n", ret); + desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL); if (!desc) return -ENOMEM; diff --git a/drivers/hwtracing/coresight/coresight-etm4x.h b/drivers/hwtracing/coresight/coresight-etm4x.h index c4ce5febe94a..f920793daa80 100644 --- a/drivers/hwtracing/coresight/coresight-etm4x.h +++ b/drivers/hwtracing/coresight/coresight-etm4x.h @@ -16,6 +16,7 @@ #include #include #include "coresight-priv.h" +#include /* * Device registers: @@ -283,6 +284,7 @@ * @ns_ex_level:In non-secure state, indicates whether instruction tracing is * supported for the corresponding Exception level. * @ext_inp: External input selection. + * @reg_data: MSM memory dump data */ struct etmv4_drvdata { void __iomem *base; @@ -371,6 +373,7 @@ struct etmv4_drvdata { u8 s_ex_level; u8 ns_ex_level; u32 ext_inp; + struct msm_dump_data reg_data; }; /* Address comparator access types */