From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2761C242D72; Fri, 15 May 2026 00:21:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778804510; cv=none; b=ViB5khEehrPEZFvdui6oxufeU/Mip8dKLhg6kKINaavQiQc9ISPrQChML0go/w3sFRbNgMchhLOgHrekLFDGhqcElXRAG7rBPBD1bxN1OIcknJlTr9HOYk2l8SGTZkjDDnDe96Eu6vRqQrvOr8ExwO3chCa/cA/cFlEkfjqGnHc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778804510; c=relaxed/simple; bh=9Y1oVciVCzq+salVW5pW0WJe4wyuMEjUEH+YMb8RnTg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J07p+grunl5jH6cibREzSwTHHrUloaDY//vByAqHf7+Cf7y+g3Iwy8486KoyYZ1BrxRNOur5lIlPDu+/GCZOYF4HlrSqL0MIdK+/WGMS4/FHAcZjgcr79dp1sV29t2hc0baMhir+9t8j4AjIVZNd7GsAet0GPJVxWX3PwYkeOxQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=PSBMBFWe; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="PSBMBFWe" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1778804509; x=1810340509; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=9Y1oVciVCzq+salVW5pW0WJe4wyuMEjUEH+YMb8RnTg=; b=PSBMBFWek09wm9g59DV5p0PuuUckKQCkHGWnpLKQWcdqHUhAm1zF8PAE +EsxNBY3B3XWi61LsCvdEDSoLVopDadAMYMdNRJfMl5pocE5NrkCJHVJk BPtRUro1SVosFxRPFKCUx6f5ien5onq8bQcyY9fUg0W+j3oVKa9V/Dbo2 djepSjTzF5cU0l6NLQ8qlpa1PyOirNgsbN9If19wyCYjDpsfgYNIcXQ5g +pdThcaUalHoyTgw8k+RjlpMlWupX4ujoWPIgbh9ImyVTtsV2c1h+lvVi VNWtfwJT9ZsupPGkfHBKS8Qn87Pc4+G0WSAErQjfGAth6M11Akgg5Y6gr g==; X-CSE-ConnectionGUID: LC8y6wXdQbiua9P9hWporg== X-CSE-MsgGUID: iVQL+dxyThWM5nVR6ya7bg== X-IronPort-AV: E=McAfee;i="6800,10657,11786"; a="78895160" X-IronPort-AV: E=Sophos;i="6.23,235,1770624000"; d="scan'208";a="78895160" Received: from orviesa004.jf.intel.com ([10.64.159.144]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2026 17:21:45 -0700 X-CSE-ConnectionGUID: butNVBVqRbqu6tczp0ozkg== X-CSE-MsgGUID: EF2x7kSXSL+cB4iJEzgOyQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,235,1770624000"; d="scan'208";a="242879067" Received: from debox1-desk4.jf.intel.com ([10.88.27.138]) by orviesa004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2026 17:21:45 -0700 From: "David E. Box" To: y, Rajneesh Bhardwaj , =?UTF-8?q?Ilpo=20J=C3=A4rvinen?= , Hans de Goede Cc: "David E. Box" , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Xi Pardee , Srinivas Pandruvada Subject: [PATCH v4 05/16] platform/x86/intel/pmt: Cache the telemetry discovery header Date: Thu, 14 May 2026 17:21:12 -0700 Message-ID: <20260515002130.701457-6-david.e.box@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260515002130.701457-1-david.e.box@linux.intel.com> References: <20260515002130.701457-1-david.e.box@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable pmt_telem_header_decode() only needs the discovery header dwords, but it currently decodes them by reading directly from entry->disc_table. Cache the discovery header in intel_pmt_entry when the device is created and have telemetry decode use the cached values instead of performing MMIO reads at decode time. This keeps the telemetry header decode path independent of how the discovery data is backed and avoids baking a direct MMIO assumption into the feature-specific decode logic. Signed-off-by: David E. Box --- V4 - No changes V3 changes: - New patch split out from PMT header-fetch rework to cache discovery header data before downstream decode/population. - Added to carry the post-v3 bug fix while preserving the original series ordering intent. drivers/platform/x86/intel/pmt/class.c | 3 +++ drivers/platform/x86/intel/pmt/class.h | 1 + drivers/platform/x86/intel/pmt/telemetry.c | 12 ++++++------ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/platform/x86/intel/pmt/class.c b/drivers/platform/x86/= intel/pmt/class.c index 7da8279b54f8..61834cbe3764 100644 --- a/drivers/platform/x86/intel/pmt/class.c +++ b/drivers/platform/x86/intel/pmt/class.c @@ -383,6 +383,9 @@ int intel_pmt_dev_create(struct intel_pmt_entry *entry,= struct intel_pmt_namespa if (IS_ERR(entry->disc_table)) return PTR_ERR(entry->disc_table); =20 + memcpy_fromio(entry->disc_header, entry->disc_table, + sizeof(entry->disc_header)); + if (ns->pmt_pre_decode) { ret =3D ns->pmt_pre_decode(intel_vsec_dev, entry); if (ret) diff --git a/drivers/platform/x86/intel/pmt/class.h b/drivers/platform/x86/= intel/pmt/class.h index 8a0db0ef58c1..84202fc7920c 100644 --- a/drivers/platform/x86/intel/pmt/class.h +++ b/drivers/platform/x86/intel/pmt/class.h @@ -44,6 +44,7 @@ struct intel_pmt_entry { struct telem_endpoint *ep; struct pci_dev *pcidev; struct intel_pmt_header header; + u32 disc_header[4]; struct bin_attribute pmt_bin_attr; const struct attribute_group *attr_grp; struct kobject *kobj; diff --git a/drivers/platform/x86/intel/pmt/telemetry.c b/drivers/platform/= x86/intel/pmt/telemetry.c index d22f633638be..953f35b6daec 100644 --- a/drivers/platform/x86/intel/pmt/telemetry.c +++ b/drivers/platform/x86/intel/pmt/telemetry.c @@ -72,16 +72,16 @@ static bool pmt_telem_region_overlaps(struct device *de= v, u32 guid, u32 type) static int pmt_telem_header_decode(struct intel_pmt_entry *entry, struct device *dev) { - void __iomem *disc_table =3D entry->disc_table; struct intel_pmt_header *header =3D &entry->header; + u32 *disc_header =3D entry->disc_header; =20 - header->access_type =3D TELEM_ACCESS(readl(disc_table)); - header->guid =3D readl(disc_table + TELEM_GUID_OFFSET); - header->base_offset =3D readl(disc_table + TELEM_BASE_OFFSET); + header->access_type =3D TELEM_ACCESS(disc_header[0]); + header->guid =3D disc_header[1]; + header->base_offset =3D disc_header[2]; =20 /* Size is measured in DWORDS, but accessor returns bytes */ - header->size =3D TELEM_SIZE(readl(disc_table)); - header->telem_type =3D TELEM_TYPE(readl(entry->disc_table)); + header->size =3D TELEM_SIZE(disc_header[0]); + header->telem_type =3D TELEM_TYPE(disc_header[0]); =20 return 0; } --=20 2.43.0