Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3007294pxk; Mon, 21 Sep 2020 02:54:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyV4mqfxMvk8bXvzBanMX4JrfPPFNqJwIDR8dsT87CO3pscJzSlKTDHGKfEq2EosLEah2mg X-Received: by 2002:a17:906:4993:: with SMTP id p19mr50613315eju.277.1600682093498; Mon, 21 Sep 2020 02:54:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600682093; cv=none; d=google.com; s=arc-20160816; b=J86u2zqyFylusRyp7APgBvfh2qs2Eal1hHXF0NXa9hdxvMRS6JX9Dpcg44QYE6XhGP hZoqMcw5Qk5zvYl1GTn9mSZv6PTQEfzIdaxSWlYGNyxc2BbWbvBGtEDzpbnZqJF+0Lco qfyzowS8+/FYokBO/n2ja5wk3aNGztG4559kb/5GgMyQgzopM9ylEAKSfUqZGP8rQOJP uE0Ar4NNgPo5noTmfWytqZ4U5oZ56BO7Z2U1w03KSv8KpOLaMR9EovvKpjyqXxQOafQz qOtvP44JgyjXTD3STbbuxm52BbY7lKBuSZ0VQ/251rVIJxdgXv0fvb7ZBWuZxfhiNaVT kE7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:subject:cc:to:from; bh=RAs37+cLbTWZn0ptragPPX3/WLLJyQ70ucLUpsyklRE=; b=TT7UeyB9WxNmYYhCASw/iytokVXvE+vY3lqDPBfojYUxLE9emgtRA7c8N26wbyyQ+z IylOw1Xo+CrJrBReljcyN7PJIf7Nl8XfRE//hXvRGcX0MK+s7NM5iRlyLDn5O7dBUY06 wi/iVxAsr49I7e6mzsnI+riNsTW2XIj0dKgIHesZD5/0OEL8rglO+ceX4nQ+DXxBfxB7 CB1wH9tbeyazdCCBoo4oI2JAz99AdP+9gVvi8Wc4qAk7hygTSnL5NDvsYbpr/pYXTNAd XeOc5xin6wGJBRvamUWil71dW7Ft7eg75ZIdOgqEwBVjjtQ2LQreB21MSFx31NYvpjjK OiJg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b20si7516616eds.592.2020.09.21.02.54.28; Mon, 21 Sep 2020 02:54:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726454AbgIUJwH (ORCPT + 99 others); Mon, 21 Sep 2020 05:52:07 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:13745 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726395AbgIUJwG (ORCPT ); Mon, 21 Sep 2020 05:52:06 -0400 Received: from DGGEMS412-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id CDC19F919099F431C62D; Mon, 21 Sep 2020 17:52:01 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by DGGEMS412-HUB.china.huawei.com (10.3.19.212) with Microsoft SMTP Server id 14.3.487.0; Mon, 21 Sep 2020 17:51:54 +0800 From: Qi Liu To: , , , CC: , , Subject: [PATCH v2] coresight: etm4x: Modify core-commit of cpu to avoid the overflow of HiSilicon ETM Date: Mon, 21 Sep 2020 17:50:42 +0800 Message-ID: <1600681842-9105-1-git-send-email-liuqi115@huawei.com> X-Mailer: git-send-email 2.8.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.67.165.24] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The ETM device can't keep up with the core pipeline when cpu core is at full speed. This may cause overflow within core and its ETM. This is a common phenomenon on ETM devices. On HiSilicon Hip08 platform, a specific feature is added to set core pipeline. So commit rate can be reduced manually to avoid ETM overflow. Signed-off-by: Qi Liu --- Change since v1: - add CONFIG_ETM4X_IMPDEF_FEATURE and CONFIG_ETM4X_IMPDEF_HISILICON to keep specific feature off platforms which don't use it. drivers/hwtracing/coresight/Kconfig | 13 ++++++ drivers/hwtracing/coresight/coresight-etm4x.c | 60 +++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/drivers/hwtracing/coresight/Kconfig b/drivers/hwtracing/coresight/Kconfig index 02dbb5c..362dadf 100644 --- a/drivers/hwtracing/coresight/Kconfig +++ b/drivers/hwtracing/coresight/Kconfig @@ -85,6 +85,19 @@ config CORESIGHT_SOURCE_ETM4X for instruction level tracing. Depending on the implemented version data tracing may also be available. +config ETM4X_IMPDEF_FEATURE + bool "Control overflow impdef support in CoreSight ETM 4.x driver " + depends on CORESIGHT_SOURCE_ETM4X + help + This control provides overflow impdef for CoreSight ETM 4.x driver + which can not reduce commit race automatically. + +config ETM4X_IMPDEF_HISILICON + bool "Control overflow impdef support in HiSilicon ETM 4.x driver " + depends on ETM4X_IMPDEF_FEATURE + help + This control provides overflow impdef for HiSilicon ETM 4.x driver. + config CORESIGHT_STM bool "CoreSight System Trace Macrocell driver" depends on (ARM && !(CPU_32v3 || CPU_32v4 || CPU_32v4T)) || ARM64 diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c index f5ab13a..1a7a6c9 100644 --- a/drivers/hwtracing/coresight/coresight-etm4x.c +++ b/drivers/hwtracing/coresight/coresight-etm4x.c @@ -103,12 +103,71 @@ struct etm4_enable_arg { int rc; }; +#ifdef CONFIG_ETM4X_IMPDEF_FEATURE + +#ifdef CONFIG_ETM4X_IMPDEF_HISILICON + +#define HISI_HIP08_CORE_COMMIT_CLEAR 0x3000 +#define HISI_HIP08_CORE_COMMIT_SHIFT 12 +static void etm4_hisi_config_core_commit(int flag) +{ + u64 val; + + asm volatile("mrs %0,s3_1_c15_c2_5" : "=r"(val)); + val &= ~HISI_HIP08_CORE_COMMIT_CLEAR; + val |= flag << HISI_HIP08_CORE_COMMIT_SHIFT; + asm volatile("msr s3_1_c15_c2_5,%0" : : "r"(val)); +} +#else +static void etm4_hisi_config_core_commit(int flag) +{ +} +#endif /* CONFIG_ETM4X_IMPDEF_HISILICON */ + +static void etm4_enable_arch_specific(struct etmv4_drvdata *drvdata) +{ + struct device *dev = drvdata->csdev->dev.parent; + struct amba_device *adev; + + adev = container_of(dev, struct amba_device, dev); + + /* + * If ETM device is HiSilicon ETM device, reduce the + * core-commit to avoid ETM overflow. + */ + etm4_hisi_config_core_commit(1); +} + +static void etm4_disable_arch_specific(struct etmv4_drvdata *drvdata) +{ + struct device *dev = drvdata->csdev->dev.parent; + struct amba_device *adev; + + adev = container_of(dev, struct amba_device, dev); + + /* + * If ETM device is HiSilicon ETM device, resume the + * core-commit after ETM trace is complete. + */ + etm4_hisi_config_core_commit(0); +} +#else +static void etm4_enable_arch_specific(struct etmv4_drvdata *drvdata) +{ +} + +static void etm4_disable_arch_specific(struct etmv4_drvdata *drvdata) +{ +} +#endif/* CONFIG_ETM4X_IMPDEF_FEATURE */ + static int etm4_enable_hw(struct etmv4_drvdata *drvdata) { int i, rc; struct etmv4_config *config = &drvdata->config; struct device *etm_dev = &drvdata->csdev->dev; + etm4_enable_arch_specific(drvdata); CS_UNLOCK(drvdata->base); etm4_os_unlock(drvdata); @@ -475,6 +534,7 @@ static void etm4_disable_hw(void *info) struct device *etm_dev = &drvdata->csdev->dev; int i; + etm4_disable_arch_specific(drvdata); CS_UNLOCK(drvdata->base); if (!drvdata->skip_power_up) { -- 2.8.1