Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp2327954rdb; Tue, 3 Oct 2023 19:03:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFfH0rVqLnlVi6qJhQBRjPjCCw2KKvl5D7hmecuePCemR4raBfBU84+KsInJwrIRdEShmqJ X-Received: by 2002:a05:6a00:2e89:b0:693:3851:bd98 with SMTP id fd9-20020a056a002e8900b006933851bd98mr1291417pfb.2.1696385033687; Tue, 03 Oct 2023 19:03:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696385033; cv=none; d=google.com; s=arc-20160816; b=YMdmLk4QUXMhpqZFjl6dkY2BgmYcNiZaBE+ZiV4H1tUflp58FtTdGl8Z1MVwumx8sl GzLQSMsd0aOovc4RqdEmS/9pFMcZh+cy45DOX2C1j7taqK0+rq/ksIzKpazSGjHFBVoS UoxA9EVfR8fASkLqzT43XIAECgZqWERgFjS40MKocwezV4XM54Yv3bruCL1a91G7uaIR vYWU0/u1xG6/d4V1MRUlsYdYc9PI+FyJASdwltMabTPt0mdzDx+tyA762U/e+DyfFyBb MkQQe6W9LiccHgv3eMHZzNawkMiTSsowjh+gqgXd4d60DGGZWsgJIl/kakkxR5A3H5Wg /oPA== 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=SPZlza5Lzgryoa97xCeb9E0oEjH6rE31tiEhAZ+b5RA=; fh=d9G4dsZtlI8UONIvGKwhW94hCYEPGxy6CqYeKEG646A=; b=Gw2PHPEsxOZNXk6XH5Cyl2AgnV89cDD8OqeR0KS8nxhl9efiVBMB0kUjw7nr+DiMkm bxpceE+t553Y2x25yeAajoFd1eLvVNB4AVDFIqLhbH72LPjNxlLtg5/6lVYiKV1VVBdH UKt3PDAhMuLA9vIdUVQaiam/o60OtYqVVRAGc5h1LjGDvGzIg3QlbXK/z30+UvrRaa9d Leiy0q3i+pMHKB/cyCnhemKREcNhAmUQiXVewnNpLEi3QKPhJ2KNgBVE3DoDL+gsk8DC v15lEnpRSugLmwbQKZ4g9uXRX5BcxCFoAgbWLoDRxC3KSoTUz8Ll0a3aDBCaFEsoF4Eh 8LLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=FWf+ktGy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 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 agentk.vger.email (agentk.vger.email. [23.128.96.32]) by mx.google.com with ESMTPS id y9-20020a056a001c8900b0068fbd3713desi2679619pfw.107.2023.10.03.19.03.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Oct 2023 19:03:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 as permitted sender) client-ip=23.128.96.32; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=FWf+ktGy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.32 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 agentk.vger.email (Postfix) with ESMTP id BC40D819D228; Tue, 3 Oct 2023 19:03:48 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241324AbjJDCDc (ORCPT + 99 others); Tue, 3 Oct 2023 22:03:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43064 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241024AbjJDCD2 (ORCPT ); Tue, 3 Oct 2023 22:03:28 -0400 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 990D9DD; Tue, 3 Oct 2023 19:02:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1696384978; x=1727920978; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=7Q2q0Z6iXtFx5UqoGdq3vKePDkPpKrqMemgre9m9eLE=; b=FWf+ktGyxJ3DB0SHkLt1RahfxPmSk0YrckU4btRT2oJgk8FyrWmsdRGM TdB+BdEvSgjUhnekyBGM7M/qibsiupQRGRNoyLIKufBhAx7HrDkYOQM17 0ItHH/zTvmJ4vdGPVSr3mxQUYdd8iNJ6BdtEVa+3VR0ogMdfia467KGDK w4BDr27fn05I+utbukGbDlT2xfQNLMkxzfLMzDprWbxgiV5nuCOFQ6XQP NsTnliwaJ0ci3J/ym0dgoyNajEkgqebkB6EoI/Rk0qZ/1Y/rpuuTmRKc5 DBKVHY4rVgPxwk5ZWaKRbkKdKCDje6TBmkREesE4g+pjFE+H8LIO/nPAT g==; X-IronPort-AV: E=McAfee;i="6600,9927,10852"; a="1625872" X-IronPort-AV: E=Sophos;i="6.03,199,1694761200"; d="scan'208";a="1625872" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Oct 2023 19:02:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10852"; a="700926301" X-IronPort-AV: E=Sophos;i="6.03,199,1694761200"; d="scan'208";a="700926301" Received: from linux.intel.com ([10.54.29.200]) by orsmga003.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Oct 2023 19:02:23 -0700 Received: from debox1-desk4.intel.com (unknown [10.209.24.172]) by linux.intel.com (Postfix) with ESMTP id 62109580CBC; Tue, 3 Oct 2023 19:02:23 -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 V2 09/13] platform/x86/intel/pmc: Find and register PMC telemetry entries Date: Tue, 3 Oct 2023 19:02:18 -0700 Message-Id: <20231004020222.193445-10-david.e.box@linux.intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231004020222.193445-1-david.e.box@linux.intel.com> References: <20231004020222.193445-1-david.e.box@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.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 (agentk.vger.email [0.0.0.0]); Tue, 03 Oct 2023 19:03:48 -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 --- 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 ab5cc07fb177..b2abaf106bc5 100644 --- a/drivers/platform/x86/intel/pmc/core_ssram.c +++ b/drivers/platform/x86/intel/pmc/core_ssram.c @@ -12,6 +12,8 @@ #include #include "core.h" +#include "../vsec.h" +#include "../pmt/telemetry.h" #define SSRAM_HDR_SIZE 0x100 #define SSRAM_PWRM_OFFSET 0x14 @@ -21,6 +23,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) @@ -97,6 +142,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) { ret = -ENODEV; @@ -136,6 +184,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) { ret = -ENODEV; @@ -182,3 +233,4 @@ int pmc_core_ssram_init(struct pmc_dev *pmcdev) return ret; } +MODULE_IMPORT_NS(INTEL_VSEC); -- 2.34.1