Received: by 2002:a05:7412:251c:b0:e2:908c:2ebd with SMTP id w28csp1104735rda; Mon, 23 Oct 2023 02:39:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHz4UQvhwiErzJwl53j97aZ+plu95FjNDd2iyVmfa3RNbu4LgQ2RYlD3D4GwLIuEgB/Jlnt X-Received: by 2002:a17:90a:a38d:b0:27d:3a34:2194 with SMTP id x13-20020a17090aa38d00b0027d3a342194mr8121382pjp.14.1698053995841; Mon, 23 Oct 2023 02:39:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698053995; cv=none; d=google.com; s=arc-20160816; b=VLX7AryVs32cK3Xn6Z8SnDbgs87oft46xcJf/wipFTcIlr9lpwJYdNZOuS3LFtWKdF NSjcVC3Z1uRZ06PWI6odz6o5kjQQYf0gv9tVL+95o0Cvqmqk34YgKlHuww2NYztpzq09 ZRzqFdz4fx9q3tmkvg1ojWBEhaGf+9qdvr+0E4gRvuk3HTX89tQ8ypVqCAaWYUQ7cVZY jVB6XC2Q+dXnB03WDVXA3CrTI5jsXJkWRX5Iq4CvuQbEcbeY74y1fFqswTViUmjanxC6 5RIR4LriruTVrU6xSuTT/4V6znG/x2uNVqsBtfDpY5yU2m6u9HVi2nAwO7j797+SzERZ o3Vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=iMArw87+6EDJMkv0PGe8hazNygj+ntr9e/qwbc/bYuA=; fh=TphmuD1AJSqT9oCqEDa9md47YIbDSiIAbdIDWrtrz2U=; b=X3MIVv4xVxMpuiHSnjw1yWj/fboKkwscuhsZou4mcK5V22l/NA7OzPET8uHQeSHYkD mNnZ+3iJtAg+KuosCJRZUe+FVA89V3zlsdVly6qZSqSzj9ZsevtmWikiIG6bUBTISFOW YG0vNkK4o5L7FvPEhrHRBfzV8/5OfqTH5f/v9to48jNh0zc8sxhSTiMIT4JP2a1tKsuh YeJb/n74dCdfx4jHNck8B0Svbd2gwXB7nBmFDRfSRNyzfyABJ86QOfGeHviO5Otx9KoK KTDZ+unbnB2I9xJxz2yd1JGUsvidt+Z7G5RDDu03/Zy1dQ+VCE2HFaYA+M9TY/xDgd7c CMcA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from howler.vger.email (howler.vger.email. [23.128.96.34]) by mx.google.com with ESMTPS id mi18-20020a17090b4b5200b0027b0a89978csi6593367pjb.166.2023.10.23.02.39.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 02:39:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) client-ip=23.128.96.34; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.34 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id DEE778067B7D; Mon, 23 Oct 2023 02:39:52 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229708AbjJWJjo (ORCPT + 99 others); Mon, 23 Oct 2023 05:39:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229449AbjJWJjm (ORCPT ); Mon, 23 Oct 2023 05:39:42 -0400 Received: from out30-98.freemail.mail.aliyun.com (out30-98.freemail.mail.aliyun.com [115.124.30.98]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3FBBCA4; Mon, 23 Oct 2023 02:39:36 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R581e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018045192;MF=xueshuai@linux.alibaba.com;NM=1;PH=DS;RN=15;SR=0;TI=SMTPD_---0Vujf2Wq_1698053971; Received: from 30.240.113.74(mailfrom:xueshuai@linux.alibaba.com fp:SMTPD_---0Vujf2Wq_1698053971) by smtp.aliyun-inc.com; Mon, 23 Oct 2023 17:39:33 +0800 Message-ID: Date: Mon, 23 Oct 2023 17:39:30 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v9 3/4] drivers/perf: add DesignWare PCIe PMU driver Content-Language: en-US To: Baolin Wang Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, rdunlap@infradead.org, mark.rutland@arm.com, zhuo.song@linux.alibaba.com, renyu.zj@linux.alibaba.com, chengyou@linux.alibaba.com, kaishen@linux.alibaba.com, helgaas@kernel.org, yangyicong@huawei.com, will@kernel.org, Jonathan.Cameron@huawei.com, robin.murphy@arm.com References: <20231020134230.53342-1-xueshuai@linux.alibaba.com> <20231020134230.53342-4-xueshuai@linux.alibaba.com> <8c6a480e-41d2-43f7-952e-4f4e691e700f@linux.alibaba.com> <539dade7-c349-33c3-cb9e-8a795de28041@linux.alibaba.com> From: Shuai Xue In-Reply-To: <539dade7-c349-33c3-cb9e-8a795de28041@linux.alibaba.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.7 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Mon, 23 Oct 2023 02:39:53 -0700 (PDT) On 2023/10/23 10:05, Baolin Wang wrote: > > > On 10/22/2023 3:47 PM, Shuai Xue wrote: >> Hi, Baolin, >> >> I droped your Revivewed-by tag due to that I made significant changes to this >> patch previously, please explicty give me Revivewed-by tag again if you are >> happy with the changes. > > Yes, I am happy with this version (just some nits as below), and thanks for the review from other guys. Please feel free to add: > > Reviewed-by: Baolin Wang Thank you. Best Regards, Shuai > >> On 2023/10/20 21:42, Shuai Xue wrote: >>> This commit adds the PCIe Performance Monitoring Unit (PMU) driver support >>> for T-Head Yitian SoC chip. Yitian is based on the Synopsys PCI Express >>> Core controller IP which provides statistics feature. The PMU is a PCIe >>> configuration space register block provided by each PCIe Root Port in a >>> Vendor-Specific Extended Capability named RAS D.E.S (Debug, Error >>> injection, and Statistics). >>> >>> To facilitate collection of statistics the controller provides the >>> following two features for each Root Port: >>> >>> - one 64-bit counter for Time Based Analysis (RX/TX data throughput and >>>    time spent in each low-power LTSSM state) and >>> - one 32-bit counter for Event Counting (error and non-error events for >>>    a specified lane) >>> >>> Note: There is no interrupt for counter overflow. >>> >>> This driver adds PMU devices for each PCIe Root Port. And the PMU device is >>> named based the BDF of Root Port. For example, >>> >>>      30:03.0 PCI bridge: Device 1ded:8000 (rev 01) >>> >>> the PMU device name for this Root Port is dwc_rootport_3018. >>> >>> Example usage of counting PCIe RX TLP data payload (Units of bytes):: >>> >>>      $# perf stat -a -e dwc_rootport_3018/Rx_PCIe_TLP_Data_Payload/ >>> >>> average RX bandwidth can be calculated like this: >>> >>>      PCIe TX Bandwidth = Rx_PCIe_TLP_Data_Payload / Measure_Time_Window >>> >>> Signed-off-by: Shuai Xue >>> --- > > [snip] > >>> +static u64 dwc_pcie_pmu_read_time_based_counter(struct perf_event *event) >>> +{ >>> +    struct dwc_pcie_pmu *pcie_pmu = to_dwc_pcie_pmu(event->pmu); >>> +    struct pci_dev *pdev = pcie_pmu->pdev; >>> +    int event_id = DWC_PCIE_EVENT_ID(event); >>> +    u16 ras_des_offset = pcie_pmu->ras_des_offset; >>> +    u32 lo, hi, ss; >>> + >>> +    /* >>> +     * The 64-bit value of the data counter is spread across two >>> +     * registers that are not synchronized. In order to read them >>> +     * atomically, ensure that the high 32 bits match before and after >>> +     * reading the low 32 bits. >>> +     */ >>> +    pci_read_config_dword(pdev, ras_des_offset + >>> +        DWC_PCIE_TIME_BASED_ANAL_DATA_REG_HIGH, &hi); >>> +    do { >>> +        /* snapshot the high 32 bits */ >>> +        ss = hi; >>> + >>> +        pci_read_config_dword( >>> +            pdev, ras_des_offset + DWC_PCIE_TIME_BASED_ANAL_DATA_REG_LOW, >>> +            &lo); >>> +        pci_read_config_dword( >>> +            pdev, ras_des_offset + DWC_PCIE_TIME_BASED_ANAL_DATA_REG_HIGH, >>> +            &hi); >>> +    } while (hi != ss); >>> + >>> +    /* >>> +     * The Group#1 event measures the amount of data processed in 16-byte >>> +     * units. Simplify the end-user interface by multiplying the counter >>> +     * at the point of read. >>> +     */ >>> +    if (event_id >= 0x20 && event_id <= 0x23) >>> +        return (((u64)hi << 32) | lo) << 4; >>> +    else > > You can drop the 'else'. Agreed, will fix it in next version. >>> + >>> +    event->cpu = pcie_pmu->on_cpu; >>> + >>> +    return 0; >>> +} >>> + >>> +static void dwc_pcie_pmu_set_period(struct hw_perf_event *hwc) >>> +{ >>> +    local64_set(&hwc->prev_count, 0); >>> +} > > Only dwc_pcie_pmu_event_start() will call this small function, why just remove this function and move local64_set() into dwc_pcie_pmu_event_start()? Good suggestion, will fix it.