diff options
author | Arve Hjønnevåg <arve@android.com> | 2012-04-02 20:18:56 -0700 |
---|---|---|
committer | Frank Li <Frank.Li@freescale.com> | 2012-09-26 13:24:45 +0800 |
commit | 8449220d6931f572f20f62a20b745949c65d1a7b (patch) | |
tree | fa90297ff1e7c87bab98e7114446eb0d51e868a2 /arch/arm/kernel | |
parent | ac58d07866bea0dfab35a7520388b46d81e92340 (diff) | |
download | linux-8449220d6931f572f20f62a20b745949c65d1a7b.tar.gz |
ARM: etm: Check arch version and disable data tracing for ptm
Change-Id: If2cb7928d0711f48348443d882a12416be9c5910
Signed-off-by: Arve Hjønnevåg <arve@android.com>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/etm.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/arch/arm/kernel/etm.c b/arch/arm/kernel/etm.c index 845287bd4ba2..9cdbb6d2a4e1 100644 --- a/arch/arm/kernel/etm.c +++ b/arch/arm/kernel/etm.c @@ -723,6 +723,9 @@ static int __devinit etm_probe(struct amba_device *dev, const struct amba_id *id int ret = 0; void __iomem **new_regs; int new_count; + u32 etmccr; + u32 etmidr; + u8 etm_version = 0; mutex_lock(&t->mutex); new_count = t->etm_regs_count + 1; @@ -757,7 +760,12 @@ static int __devinit etm_probe(struct amba_device *dev, const struct amba_id *id /* dummy first read */ (void)etm_readl(&tracer, t->etm_regs_count, ETMMR_OSSRR); - t->ncmppairs = etm_readl(t, t->etm_regs_count, ETMR_CONFCODE) & 0xf; + etmccr = etm_readl(t, t->etm_regs_count, ETMR_CONFCODE); + t->ncmppairs = etmccr & 0xf; + if (etmccr & ETMCCR_ETMIDR_PRESENT) { + etmidr = etm_readl(t, t->etm_regs_count, ETMR_ID); + etm_version = ETMIDR_VERSION(etmidr); + } etm_writel(t, t->etm_regs_count, 0x441, ETMR_CTRL); etm_writel(t, t->etm_regs_count, new_count, ETMR_TRACEIDR); etm_lock(t, t->etm_regs_count); @@ -780,10 +788,15 @@ static int __devinit etm_probe(struct amba_device *dev, const struct amba_id *id if (ret) dev_dbg(&dev->dev, "Failed to create trace_range in sysfs\n"); - ret = sysfs_create_file(&dev->dev.kobj, &trace_data_range_attr.attr); - if (ret) - dev_dbg(&dev->dev, - "Failed to create trace_data_range in sysfs\n"); + if (etm_version < ETMIDR_VERSION_PFT_1_0) { + ret = sysfs_create_file(&dev->dev.kobj, + &trace_data_range_attr.attr); + if (ret) + dev_dbg(&dev->dev, + "Failed to create trace_data_range in sysfs\n"); + } else { + tracer.flags &= ~TRACER_TRACE_DATA; + } dev_dbg(&dev->dev, "ETM AMBA driver initialized.\n"); |