Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp472374pxk; Thu, 3 Sep 2020 04:57:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw6lIT3ClrnPP6/iYVDTrGnCqGdRmiBkpuJ61a1bGr0R1tkVNdGMQireoaF4JwxT6CaUlji X-Received: by 2002:aa7:c308:: with SMTP id l8mr2610548edq.361.1599134227603; Thu, 03 Sep 2020 04:57:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599134227; cv=none; d=google.com; s=arc-20160816; b=f4My+QRxlMva4MhvznbDxqGNZuN+ujVN4F+mYdcqO/w+VJ5zT84BUnOX2ywTR7V9lg jjONoRqAVgiM2ZjvAgTqpR+xM/QKsnD7RtSwbAl4zQyVYHVI7+tqlssYTVu1xLNGpfxX 1ZIpPtDNrmCuHjtIa92D7wPKjBnla4cJRC/xsWTqAv6FFoTaWBDsNQ0nLpGVVwGnWMGj I7X5+7KmEBzytU7QFnAKnKGcHZHFhZRq4v3E1+UsRXDmaItbkApHsUZk1qazE9JHlZ50 HNewBLDjVbM2hHg1cQvIMsxW5EPnpKM+gPgZpkPY2UebZoS3HqDPxDYgA93UtmrHrP7x Zv3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=ABUKp35wqzIbHV1nT83ZaGTKJvelPVBMpBeesFrXjh0=; b=RhZrae3nM/L1GIQmpFAVqwmGbdMAA6wQUcT2tdUgLYUXnVVKdFyLsIU0/6DaryZ3S6 snjixoqOg76dqR/vzt2dny4GZC/w/089fDRBtgfHUKAwMY96fSsdkhGieBtueKeSgCis V4SobSve9sbnzQmLow+bQOgDSbnJGesyazvbPvTSHiOaY8iTtpbD2fppnz9afRJnzhxe kFFavbP/kG73afzNqaRreU+hVGtYUmKc3os1y9lDsaO+ZDUtGD3XEPTkyY/L6ubJ7KsC +5YLlfTcfao11WjcFO22oIYrlk2mi+vMihbQBSTZx+iHJhnsCgCCyS/YGYbK8EWP+NRT glxw== 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 u20si1197129edi.129.2020.09.03.04.56.45; Thu, 03 Sep 2020 04:57:07 -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 S1728754AbgICLws (ORCPT + 99 others); Thu, 3 Sep 2020 07:52:48 -0400 Received: from szxga07-in.huawei.com ([45.249.212.35]:41226 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728737AbgICLi1 (ORCPT ); Thu, 3 Sep 2020 07:38:27 -0400 Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 034C48D1C9FB848B0584; Thu, 3 Sep 2020 19:38:26 +0800 (CST) Received: from localhost.localdomain (10.67.165.24) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.487.0; Thu, 3 Sep 2020 19:38:17 +0800 From: Qi Liu To: , , CC: , , Subject: [PATCH] coresight: etm4x: Modify core-commit of cpu to avoid the overflow of HiSilicon ETM Date: Thu, 3 Sep 2020 19:37:14 +0800 Message-ID: <1599133034-38747-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 Sender: linux-kernel-owner@vger.kernel.org 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 --- link of the RFC patch: https://lore.kernel.org/linux-arm-kernel/1597824397-29894-1-git-send-email-liuqi115@huawei.com/ drivers/hwtracing/coresight/coresight-etm4x.c | 46 +++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c index 7bcac88..5833be1 100644 --- a/drivers/hwtracing/coresight/coresight-etm4x.c +++ b/drivers/hwtracing/coresight/coresight-etm4x.c @@ -45,6 +45,10 @@ static int etm4_set_event_filters(struct etmv4_drvdata *drvdata, static enum cpuhp_state hp_online; +#define HISI_HIP08_CORE_COMMIT_CLEAR 0x3000 +#define HISI_HIP08_CORE_COMMIT_SHIFT 12 +#define HISI_HIP08_ETM_ID 0x000b6d01 + static void etm4_os_unlock(struct etmv4_drvdata *drvdata) { /* Writing any value to ETMOSLAR unlocks the trace registers */ @@ -84,12 +88,38 @@ struct etm4_enable_arg { int rc; }; +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)); +} + +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. + */ + if (adev->periphid == HISI_HIP08_ETM_ID) + etm4_hisi_config_core_commit(1); +} + 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); @@ -436,11 +466,27 @@ static int etm4_enable(struct coresight_device *csdev, return ret; } +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. + */ + if (adev->periphid == HISI_HIP08_ETM_ID) + etm4_hisi_config_core_commit(0); +} + static void etm4_disable_hw(void *info) { u32 control; struct etmv4_drvdata *drvdata = info; + etm4_disable_arch_specific(drvdata); CS_UNLOCK(drvdata->base); /* power can be removed from the trace unit now */ -- 2.8.1