From patchwork Thu Nov 10 18:18:49 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 81738 Delivered-To: patch@linaro.org Received: by 10.140.97.165 with SMTP id m34csp870224qge; Thu, 10 Nov 2016 10:20:36 -0800 (PST) X-Received: by 10.107.167.1 with SMTP id q1mr8230336ioe.110.1478802036642; Thu, 10 Nov 2016 10:20:36 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id ze5si5185393pac.262.2016.11.10.10.20.36; Thu, 10 Nov 2016 10:20:36 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755927AbcKJSUa (ORCPT + 27 others); Thu, 10 Nov 2016 13:20:30 -0500 Received: from mail-it0-f50.google.com ([209.85.214.50]:35922 "EHLO mail-it0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755781AbcKJSS7 (ORCPT ); Thu, 10 Nov 2016 13:18:59 -0500 Received: by mail-it0-f50.google.com with SMTP id q124so253113675itd.1 for ; Thu, 10 Nov 2016 10:18:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OMSYe8BpKLNYTGl3jmbmwmglNLRh+lIbRFrOvtjtj3c=; b=MKwUS0OZ05dM49WHySLs1Gi0sRqAf70zVVV9fl33adIuTLYqXnNfPMaIWbY/fUPJ0H q2gx6OlZGLpYMFQBMgaHgWvhrRgcsNRTGsnuRMthxd2Ah7jM3hTae+n26nt+3RAS6VdU 6nsV4S7mMOYx38blR/wHPb1hebi4mcHR7RwxE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OMSYe8BpKLNYTGl3jmbmwmglNLRh+lIbRFrOvtjtj3c=; b=NZLuNebaylXRVlmjLNSqVGxS5SS/zajVG1VAugyFSe/+mkN/F7HVv5nNmWd9AJjJf3 gN1L4cMKFUEnKSqJkmbWGEBOQHjJnG1A93LNH/EAsS/nZOHl8Iw/sEVrDyOQ4BXEcboj 5nqw20lWYyh5ZGDbr+QpMhBR3pMXCzvelVf5u+F6s4v8yeGINRoYr9PhWIptp8ocAYZ+ F7TtyF+bSDXNea7ubc3y9EUYZ2C6tIAw7w0et1oXupozXiBwYD7JNvfEsUCt0fzTb/2C jqmnGkWVnCDZNxfSgWLyNKpx2b7ggDSLrm7WJKTRjgHuv02pqhv4Kxa0+cvXZNtGFmui Q22A== X-Gm-Message-State: ABUngvcXJnJq6zCnmiPNUnagXODi0y7745AoyoASWXiOnqdT13ArKxMJPCN6p5JGTfMAuviG X-Received: by 10.36.220.130 with SMTP id q124mr5499308itg.78.1478801938819; Thu, 10 Nov 2016 10:18:58 -0800 (PST) Received: from t430.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id 62sm10377930itl.19.2016.11.10.10.18.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 10 Nov 2016 10:18:58 -0800 (PST) From: Mathieu Poirier To: gregkh@linuxfoundation.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/8] coresight: etm3x: Adding missing features of Coresight PTM components Date: Thu, 10 Nov 2016 11:18:49 -0700 Message-Id: <1478801934-26904-4-git-send-email-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1478801934-26904-1-git-send-email-mathieu.poirier@linaro.org> References: <1478801934-26904-1-git-send-email-mathieu.poirier@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Muhammad Abdul WAHAB In the current driver for Coresight components, two features of PTM components are missing: 1. Branch Broadcasting (present also in ETM but called Branch Output) 2. Return Stack (only present in PTM v1.0 and PTMv1.1) These features can be added simply to the code using `mode` field of `etm_config` struct. 1. **Branch Broadcast** : The branch broadcast feature is present in ETM components as well and is called Branch output. It allows to retrieve addresses for direct branch addresses alongside the indirect branch addresses. For example, it could be useful in cases when tracing without source code. 2. **Return Stack** : The return stack option allows to retrieve the return addresses of function calls. It can be useful to avoid CRA (Code Reuse Attacks) by keeping a shadowstack. Signed-off-by: Muhammad Abdul Wahab Signed-off-by: Mathieu Poirier --- drivers/hwtracing/coresight/coresight-etm.h | 5 +++++ drivers/hwtracing/coresight/coresight-etm3x-sysfs.c | 10 ++++++++++ 2 files changed, 15 insertions(+) -- 2.7.4 diff --git a/drivers/hwtracing/coresight/coresight-etm.h b/drivers/hwtracing/coresight/coresight-etm.h index 4a18ee499965..ad063d7444e1 100644 --- a/drivers/hwtracing/coresight/coresight-etm.h +++ b/drivers/hwtracing/coresight/coresight-etm.h @@ -89,11 +89,13 @@ /* ETMCR - 0x00 */ #define ETMCR_PWD_DWN BIT(0) #define ETMCR_STALL_MODE BIT(7) +#define ETMCR_BRANCH_BROADCAST BIT(8) #define ETMCR_ETM_PRG BIT(10) #define ETMCR_ETM_EN BIT(11) #define ETMCR_CYC_ACC BIT(12) #define ETMCR_CTXID_SIZE (BIT(14)|BIT(15)) #define ETMCR_TIMESTAMP_EN BIT(28) +#define ETMCR_RETURN_STACK BIT(29) /* ETMCCR - 0x04 */ #define ETMCCR_FIFOFULL BIT(23) /* ETMPDCR - 0x310 */ @@ -110,8 +112,11 @@ #define ETM_MODE_STALL BIT(2) #define ETM_MODE_TIMESTAMP BIT(3) #define ETM_MODE_CTXID BIT(4) +#define ETM_MODE_BBROAD BIT(5) +#define ETM_MODE_RET_STACK BIT(6) #define ETM_MODE_ALL (ETM_MODE_EXCLUDE | ETM_MODE_CYCACC | \ ETM_MODE_STALL | ETM_MODE_TIMESTAMP | \ + ETM_MODE_BBROAD | ETM_MODE_RET_STACK | \ ETM_MODE_CTXID | ETM_MODE_EXCL_KERN | \ ETM_MODE_EXCL_USER) diff --git a/drivers/hwtracing/coresight/coresight-etm3x-sysfs.c b/drivers/hwtracing/coresight/coresight-etm3x-sysfs.c index 5ea090955c08..ca98ad13bb8c 100644 --- a/drivers/hwtracing/coresight/coresight-etm3x-sysfs.c +++ b/drivers/hwtracing/coresight/coresight-etm3x-sysfs.c @@ -164,6 +164,16 @@ static ssize_t mode_store(struct device *dev, else config->ctrl &= ~ETMCR_CTXID_SIZE; + if (config->mode & ETM_MODE_BBROAD) + config->ctrl |= ETMCR_BRANCH_BROADCAST; + else + config->ctrl &= ~ETMCR_BRANCH_BROADCAST; + + if (config->mode & ETM_MODE_RET_STACK) + config->ctrl |= ETMCR_RETURN_STACK; + else + config->ctrl &= ~ETMCR_RETURN_STACK; + if (config->mode & (ETM_MODE_EXCL_KERN | ETM_MODE_EXCL_USER)) etm_config_trace_mode(config);