Received: by 2002:a05:7412:f690:b0:e2:908c:2ebd with SMTP id ej16csp15014rdb; Wed, 18 Oct 2023 16:18:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFXI2h+fKrFPDzD4l63/GxBKU2kOnw9OIvFYdwA+zx0T9xwIdy+Ghxvw2w+42W5wWjO97OH X-Received: by 2002:a05:6e02:60a:b0:351:b22:af5c with SMTP id t10-20020a056e02060a00b003510b22af5cmr776112ils.32.1697671127014; Wed, 18 Oct 2023 16:18:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697671126; cv=none; d=google.com; s=arc-20160816; b=KZaQLkOyXGb0gBVnT6PzRWGWe7uEhh4eQ0avBDT6abFXTqD6rFsE0Q0uQF6qoalfW9 ON7sRT31AbwQMIX97SYksKx8dxCQpmocCYsEgT45J0Pf57eb9guq0yZOUZtWDric2AN0 RlrKFCwrX1Wyrb1B60337AHdqRqZHvJ/aApDajaFvlpU03A8csKP9sgiYl9t5LLnYVBZ Lb9JwAZF8bCc4za4vfu66wirVuCt+wLW0REjF9svosPy5o9EYnPZnM5GzxaGcHtmlU91 ldDM4wBvGEtNgYqIMfxqnKyfYZRG3v7JkPYdy0nCuX+E5V4W/qK7JIgPGzZjmdaCgPMa JRAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=xJe7r+758/rhHIoB8+BnhyWK6l9CWk9es+21T3rG9e4=; fh=d9G4dsZtlI8UONIvGKwhW94hCYEPGxy6CqYeKEG646A=; b=S8nvSHCsR5b3u/iArPfQ1FCWy5iOEaBahxDSJskfKMv1oD948ZgXc2fgUhVJiwRqLL dyGHTElkYjA63DvuJAVlxQvaJbFync9ZGopt16Z/pABXBwwKduGH3mebrucRhB9keNK4 MrXrvgC5imDcTDV3V6dZlzBZ/1uENu2Ktmt6gcXNzNaJvFaA7RAik+iCDhAv7/iUeYK4 jNG7DE+//dvg32Ze5YotI0ZYyXQ69PDV60qn7CgWYpJehtwmEoKMc4IUABmv6hGfihw6 iEvJj/ST7V3SY+2Pbl+7bGYDAQzGZTqyFnMBElzJ+eJSZZ+GVEUyNF7J2X8NxPt/cq5L z3cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="O/KR9lqz"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id i22-20020a633c56000000b005892fd16947si3173302pgn.546.2023.10.18.16.18.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Oct 2023 16:18:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="O/KR9lqz"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id A88938158334; Wed, 18 Oct 2023 16:18:29 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232628AbjJRXRW (ORCPT + 99 others); Wed, 18 Oct 2023 19:17:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232156AbjJRXQf (ORCPT ); Wed, 18 Oct 2023 19:16:35 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E1CB126; Wed, 18 Oct 2023 16:16:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697670990; x=1729206990; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=cBxWhILcEvrnw3qtLsqkGhZTWl+k3D7+p8GKQFslz7M=; b=O/KR9lqz5iGRHqnD/PRxVEktOrmOctDfzh7kf+PXKipQwf/lEETXjiwM Mk3Z6YIkJ2lvrNWAG67Y5HFLIz8d5G7R06en8EGCN0Wv7RGQTRDvRdUYH u/JTo9WeO+1yPtNb0CE8EYN3FIpbQWS5fBQpBmsL9qZDdBeoUVclmNJPq pOnMUpPum1yXMZEi+THBd41K/lrLswYm4KvKk9dzAN559GQ2puDOiKn43 rYvqx4eO2CViZUbZU/n5Db5KYLKTQSERlRQTSL3uCIq3s3zu252Ch6W1f o37qGQMxKUV92qenIyNuBiltnEE+BUgDst/HfsbnSIgknNkPe0dACx74R Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10867"; a="452605965" X-IronPort-AV: E=Sophos;i="6.03,236,1694761200"; d="scan'208";a="452605965" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Oct 2023 16:16:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10867"; a="756782185" X-IronPort-AV: E=Sophos;i="6.03,236,1694761200"; d="scan'208";a="756782185" Received: from linux.intel.com ([10.54.29.200]) by orsmga002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Oct 2023 16:16:26 -0700 Received: from debox1-desk4.lan (unknown [10.209.71.91]) by linux.intel.com (Postfix) with ESMTP id 2681C580DD4; Wed, 18 Oct 2023 16:16:26 -0700 (PDT) From: "David E. Box" To: linux-kernel@vger.kernel.org, platform-driver-x86@vger.kernel.org, ilpo.jarvinen@linux.intel.com, rajvi.jingar@linux.intel.com Subject: [PATCH V4 12/17] platform/x86/intel/pmc: Find and register PMC telemetry entries Date: Wed, 18 Oct 2023 16:16:19 -0700 Message-Id: <20231018231624.1044633-13-david.e.box@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231018231624.1044633-1-david.e.box@linux.intel.com> References: <20231018231624.1044633-1-david.e.box@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLACK autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.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 (pete.vger.email [0.0.0.0]); Wed, 18 Oct 2023 16:18:30 -0700 (PDT) The PMC SSRAM device contains counters that are structured in Intel Platform Monitoring Technology (PMT) telemetry regions. Look for and register these telemetry regions from the driver so that they may be read using the Intel PMT ABI. Signed-off-by: David E. Box Reviewed-by: Ilpo Järvinen --- V4 - no change V3 - no change V2 - no change drivers/platform/x86/intel/pmc/Kconfig | 1 + drivers/platform/x86/intel/pmc/core_ssram.c | 52 +++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/drivers/platform/x86/intel/pmc/Kconfig b/drivers/platform/x86/intel/pmc/Kconfig index b526597e4deb..d2f651fbec2c 100644 --- a/drivers/platform/x86/intel/pmc/Kconfig +++ b/drivers/platform/x86/intel/pmc/Kconfig @@ -7,6 +7,7 @@ config INTEL_PMC_CORE tristate "Intel PMC Core driver" depends on PCI depends on ACPI + depends on INTEL_PMT_TELEMETRY help The Intel Platform Controller Hub for Intel Core SoCs provides access to Power Management Controller registers via various interfaces. This diff --git a/drivers/platform/x86/intel/pmc/core_ssram.c b/drivers/platform/x86/intel/pmc/core_ssram.c index ccb3748dbed9..936aa0d5f452 100644 --- a/drivers/platform/x86/intel/pmc/core_ssram.c +++ b/drivers/platform/x86/intel/pmc/core_ssram.c @@ -13,6 +13,8 @@ #include #include "core.h" +#include "../vsec.h" +#include "../pmt/telemetry.h" #define SSRAM_HDR_SIZE 0x100 #define SSRAM_PWRM_OFFSET 0x14 @@ -22,6 +24,49 @@ #define SSRAM_IOE_OFFSET 0x68 #define SSRAM_DEVID_OFFSET 0x70 +static void +pmc_add_pmt(struct pmc_dev *pmcdev, u64 ssram_base, void __iomem *ssram) +{ + struct pci_dev *pcidev = pmcdev->ssram_pcidev; + struct intel_vsec_platform_info info = {}; + struct intel_vsec_header *headers[2] = {}; + struct intel_vsec_header header; + void __iomem *dvsec; + u32 dvsec_offset; + u32 table, hdr; + + ssram = ioremap(ssram_base, SSRAM_HDR_SIZE); + if (!ssram) + return; + + dvsec_offset = readl(ssram + SSRAM_DVSEC_OFFSET); + iounmap(ssram); + + dvsec = ioremap(ssram_base + dvsec_offset, SSRAM_DVSEC_SIZE); + if (!dvsec) + return; + + hdr = readl(dvsec + PCI_DVSEC_HEADER1); + header.id = readw(dvsec + PCI_DVSEC_HEADER2); + header.rev = PCI_DVSEC_HEADER1_REV(hdr); + header.length = PCI_DVSEC_HEADER1_LEN(hdr); + header.num_entries = readb(dvsec + INTEL_DVSEC_ENTRIES); + header.entry_size = readb(dvsec + INTEL_DVSEC_SIZE); + + table = readl(dvsec + INTEL_DVSEC_TABLE); + header.tbir = INTEL_DVSEC_TABLE_BAR(table); + header.offset = INTEL_DVSEC_TABLE_OFFSET(table); + iounmap(dvsec); + + headers[0] = &header; + info.caps = VSEC_CAP_TELEMETRY; + info.headers = headers; + info.base_addr = ssram_base; + info.parent = &pmcdev->pdev->dev; + + intel_vsec_register(pcidev, &info); +} + static const struct pmc_reg_map *pmc_core_find_regmap(struct pmc_info *list, u16 devid) { for (; list->map; ++list) @@ -96,6 +141,9 @@ pmc_core_get_secondary_pmc(struct pmc_dev *pmcdev, int pmc_idx, u32 offset) pwrm_base = get_base(secondary_ssram, SSRAM_PWRM_OFFSET); devid = readw(secondary_ssram + SSRAM_DEVID_OFFSET); + /* Find and register and PMC telemetry entries */ + pmc_add_pmt(pmcdev, ssram_base, main_ssram); + map = pmc_core_find_regmap(pmcdev->regmap_list, devid); if (!map) return -ENODEV; @@ -124,6 +172,9 @@ pmc_core_get_primary_pmc(struct pmc_dev *pmcdev) pwrm_base = get_base(ssram, SSRAM_PWRM_OFFSET); devid = readw(ssram + SSRAM_DEVID_OFFSET); + /* Find and register and PMC telemetry entries */ + pmc_add_pmt(pmcdev, ssram_base, ssram); + map = pmc_core_find_regmap(pmcdev->regmap_list, devid); if (!map) return -ENODEV; @@ -163,3 +214,4 @@ int pmc_core_ssram_init(struct pmc_dev *pmcdev) return ret; } +MODULE_IMPORT_NS(INTEL_VSEC); -- 2.34.1