From nobody Tue Dec 16 16:38:10 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 98534C07CA9 for ; Thu, 30 Nov 2023 21:48:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376993AbjK3VsH (ORCPT ); Thu, 30 Nov 2023 16:48:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46628 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229937AbjK3VsE (ORCPT ); Thu, 30 Nov 2023 16:48:04 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 765D210F9; Thu, 30 Nov 2023 13:48:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701380891; x=1732916891; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=P2DaoEX+ZlxmopknKJDRlfJ7mGZUxT8s3MGZif/juAM=; b=Yx131qEH+jZ9MomQ1j9NUWA2bsrF27AlBptcUyFf1q1l9JFHmKRM253r uXHKBXYrU2VFRMhbSncVGnSl1xfHfvhV9W1pDyJ5MA5NUddixBPvciefN cldvxEctFprFN/hlR2esq+lLLpoIol5VPe9N3W3hQM74opxiu48QOPNam lH8VpbAhmWocv5o+ydS25ApFL54emQmkNzcG8PMeCSKlkOs3WkzM7uDdw 6HxPQzURHlBT4gdd/l/6Fe8qx2bCl5YDIWerPiEZEsCNtKse3WVXEi2cc zLco8fee76qol8kurJZ2cQ2uVIGAAJjTZ+jxuBuv8/iQTVe2PxU/3Cj86 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="399942" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="399942" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Nov 2023 13:48:10 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="860334604" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="860334604" Received: from spandruv-desk.jf.intel.com ([10.54.75.14]) by FMSMGA003.fm.intel.com with ESMTP; 30 Nov 2023 13:48:09 -0800 From: Srinivas Pandruvada To: hdegoede@redhat.com, markgross@kernel.org, ilpo.jarvinen@linux.intel.com, andriy.shevchenko@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Pandruvada Subject: [PATCH v2 1/5] platform/x86/intel/tpmi: Don't create devices for disabled features Date: Thu, 30 Nov 2023 13:47:47 -0800 Message-Id: <20231130214751.3100418-2-srinivas.pandruvada@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> References: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If some TPMI features are disabled, don't create auxiliary devices. In this way feature drivers will not load. While creating auxiliary devices, call tpmi_read_feature_status() to check feature state and return if the feature is disabled without creating a device. Signed-off-by: Srinivas Pandruvada Reviewed-by: Hans de Goede Reviewed-by: Ilpo J=C3=A4rvinen --- v2 - Add comment for returning -EOPNOTSUPP drivers/platform/x86/intel/tpmi.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/platform/x86/intel/tpmi.c b/drivers/platform/x86/intel= /tpmi.c index c89aa4d14bea..868067ff966e 100644 --- a/drivers/platform/x86/intel/tpmi.c +++ b/drivers/platform/x86/intel/tpmi.c @@ -604,9 +604,21 @@ static int tpmi_create_device(struct intel_tpmi_info *= tpmi_info, struct intel_vsec_device *vsec_dev =3D tpmi_info->vsec_dev; char feature_id_name[TPMI_FEATURE_NAME_LEN]; struct intel_vsec_device *feature_vsec_dev; + struct tpmi_feature_state feature_state; struct resource *res, *tmp; const char *name; - int i; + int i, ret; + + ret =3D tpmi_read_feature_status(tpmi_info, pfs->pfs_header.tpmi_id, &fea= ture_state); + if (ret) + return ret; + + /* + * If not enabled, continue to look at other features in the PFS, so retu= rn -EOPNOTSUPP. + * This will not cause failure of loading of this driver. + */ + if (!feature_state.enabled) + return -EOPNOTSUPP; =20 name =3D intel_tpmi_name(pfs->pfs_header.tpmi_id); if (!name) --=20 2.41.0 From nobody Tue Dec 16 16:38:10 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 665B6C07CA9 for ; Thu, 30 Nov 2023 21:48:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377015AbjK3VsK (ORCPT ); Thu, 30 Nov 2023 16:48:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376972AbjK3VsF (ORCPT ); Thu, 30 Nov 2023 16:48:05 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9193A10FA; Thu, 30 Nov 2023 13:48:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701380892; x=1732916892; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VEDbcl6LTDH7xUZ430vI60xVleNhbYt5lhgrwjtmUY0=; b=gnhkoHC4Rf1QcaVl1g3VJe5J9824g+yR+4ZP7BHbdQDnhi/fA7NYuJF+ jAIkjeixEzzpERs9z8+74SnXXUnMjSyqpYBpv4wNTxY9jM0Y1HWBkNKW7 VylHytpwnciduF5Pz/DNI/418BnN13siiiqf3qOImITcncHHuCDGCoiWL mTNz1GRCTU13EGU2oyftc+m4weTfhhI1SjnBqzJs2UIC25iu90X85J5/Q XT3bIH2vxvOzuDGhHNpy8ejDkFH8NIu92zEdLBrZO1Siv/kVgYoIg/ro/ kKUipN2icczONJ4zY+rF4bY1cm4e6Y7P7fioZH8BeSoj9/WcV7GJoIFOq A==; X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="399946" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="399946" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Nov 2023 13:48:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="860334605" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="860334605" Received: from spandruv-desk.jf.intel.com ([10.54.75.14]) by FMSMGA003.fm.intel.com with ESMTP; 30 Nov 2023 13:48:10 -0800 From: Srinivas Pandruvada To: hdegoede@redhat.com, markgross@kernel.org, ilpo.jarvinen@linux.intel.com, andriy.shevchenko@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Pandruvada Subject: [PATCH v2 2/5] platform/x86/intel/tpmi: Modify external interface to get read/write state Date: Thu, 30 Nov 2023 13:47:48 -0800 Message-Id: <20231130214751.3100418-3-srinivas.pandruvada@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> References: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Modify the external interface tpmi_get_feature_status() to get read and write blocked instead of locked and disabled. Since auxiliary device is not created when disabled, no use of returning disabled state. Also locked state is not useful as feature driver can't use locked state in a meaningful way. Using read and write state, feature driver can decide which operations to restrict for that feature. Signed-off-by: Srinivas Pandruvada Reviewed-by: Ilpo J=C3=A4rvinen --- v2: - Change read_blocked/write_blocked to bool * drivers/platform/x86/intel/tpmi.c | 8 ++++---- include/linux/intel_tpmi.h | 5 ++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/platform/x86/intel/tpmi.c b/drivers/platform/x86/intel= /tpmi.c index 868067ff966e..ec64565baddc 100644 --- a/drivers/platform/x86/intel/tpmi.c +++ b/drivers/platform/x86/intel/tpmi.c @@ -351,8 +351,8 @@ static int tpmi_read_feature_status(struct intel_tpmi_i= nfo *tpmi_info, int featu return ret; } =20 -int tpmi_get_feature_status(struct auxiliary_device *auxdev, int feature_i= d, - int *locked, int *disabled) +int tpmi_get_feature_status(struct auxiliary_device *auxdev, + int feature_id, bool *read_blocked, bool *write_blocked) { struct intel_vsec_device *intel_vsec_dev =3D dev_to_ivdev(auxdev->dev.par= ent); struct intel_tpmi_info *tpmi_info =3D auxiliary_get_drvdata(&intel_vsec_d= ev->auxdev); @@ -363,8 +363,8 @@ int tpmi_get_feature_status(struct auxiliary_device *au= xdev, int feature_id, if (ret) return ret; =20 - *locked =3D feature_state.locked; - *disabled =3D !feature_state.enabled; + *read_blocked =3D feature_state.read_blocked; + *write_blocked =3D feature_state.write_blocked; =20 return 0; } diff --git a/include/linux/intel_tpmi.h b/include/linux/intel_tpmi.h index 939663bb095f..7dff3d96a200 100644 --- a/include/linux/intel_tpmi.h +++ b/include/linux/intel_tpmi.h @@ -38,7 +38,6 @@ struct intel_tpmi_plat_info { struct intel_tpmi_plat_info *tpmi_get_platform_data(struct auxiliary_devic= e *auxdev); struct resource *tpmi_get_resource_at_index(struct auxiliary_device *auxde= v, int index); int tpmi_get_resource_count(struct auxiliary_device *auxdev); - -int tpmi_get_feature_status(struct auxiliary_device *auxdev, int feature_i= d, int *locked, - int *disabled); +int tpmi_get_feature_status(struct auxiliary_device *auxdev, int feature_i= d, bool *read_blocked, + bool *write_blocked); #endif --=20 2.41.0 From nobody Tue Dec 16 16:38:10 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3DA8C4167B for ; Thu, 30 Nov 2023 21:48:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377003AbjK3VsJ (ORCPT ); Thu, 30 Nov 2023 16:48:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376859AbjK3VsF (ORCPT ); Thu, 30 Nov 2023 16:48:05 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 16A6610FC; Thu, 30 Nov 2023 13:48:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701380892; x=1732916892; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=zOIRV6C6yfvlONwX2u1gSAyMm0UlCkV9/4g8gxQwRqo=; b=dX9tL3KO56lqPsWtJv27N/fN1AVj/dSkb5PFwMN3FYIDiwC9P8cdYZbH Cy5/InCOIZp+9Q79tOZ5ZiC1cZBiZEmKrb8XdyA3vGHBiCMeCSPl6CuIQ ubKDTw2Baw/NTjBadaCEKv9sHyKe7KQzT2uSslMjXe209Zi58Ue4HfZfB Z8N22+0Wc7khMMJtZLTCB3On4tS3Ru2qPbuf/hIJW3AO3do1f229WiQJ3 8Pq2DBVVpWgvbmCBepmJ/AVGxyzRmG8qOxlhCQ/ox+D5zHoiLn9gb0ZHf J8ySqvXvZcM+gKEFxGs4oxhoevxuJtBuPSROOyi9RiVCwQXIVs1OFcHmi A==; X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="399950" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="399950" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Nov 2023 13:48:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="860334607" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="860334607" Received: from spandruv-desk.jf.intel.com ([10.54.75.14]) by FMSMGA003.fm.intel.com with ESMTP; 30 Nov 2023 13:48:10 -0800 From: Srinivas Pandruvada To: hdegoede@redhat.com, markgross@kernel.org, ilpo.jarvinen@linux.intel.com, andriy.shevchenko@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Pandruvada Subject: [PATCH v2 3/5] platform/x86/intel/tpmi: Move TPMI ID definition Date: Thu, 30 Nov 2023 13:47:49 -0800 Message-Id: <20231130214751.3100418-4-srinivas.pandruvada@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> References: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Move TPMI ID definitions to common include file. In this way other feature drivers don't have to redefine. Signed-off-by: Srinivas Pandruvada Reviewed-by: Ilpo J=C3=A4rvinen --- v2 - Aligned comments for TPMI IDs drivers/platform/x86/intel/tpmi.c | 13 ------------- include/linux/intel_tpmi.h | 13 +++++++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/platform/x86/intel/tpmi.c b/drivers/platform/x86/intel= /tpmi.c index ec64565baddc..7ea4cbf5b3a3 100644 --- a/drivers/platform/x86/intel/tpmi.c +++ b/drivers/platform/x86/intel/tpmi.c @@ -176,19 +176,6 @@ struct tpmi_feature_state { u32 locked:1; } __packed; =20 -/* - * List of supported TMPI IDs. - * Some TMPI IDs are not used by Linux, so the numbers are not consecutive. - */ -enum intel_tpmi_id { - TPMI_ID_RAPL =3D 0, /* Running Average Power Limit */ - TPMI_ID_PEM =3D 1, /* Power and Perf excursion Monitor */ - TPMI_ID_UNCORE =3D 2, /* Uncore Frequency Scaling */ - TPMI_ID_SST =3D 5, /* Speed Select Technology */ - TPMI_CONTROL_ID =3D 0x80, /* Special ID for getting feature status */ - TPMI_INFO_ID =3D 0x81, /* Special ID for PCI BDF and Package ID informati= on */ -}; - /* * The size from hardware is in u32 units. This size is from a trusted har= dware, * but better to verify for pre silicon platforms. Set size to 0, when inv= alid. diff --git a/include/linux/intel_tpmi.h b/include/linux/intel_tpmi.h index 7dff3d96a200..612b6a215e81 100644 --- a/include/linux/intel_tpmi.h +++ b/include/linux/intel_tpmi.h @@ -12,6 +12,19 @@ #define TPMI_MINOR_VERSION(val) FIELD_GET(GENMASK(4, 0), val) #define TPMI_MAJOR_VERSION(val) FIELD_GET(GENMASK(7, 5), val) =20 +/* + * List of supported TMPI IDs. + * Some TMPI IDs are not used by Linux, so the numbers are not consecutive. + */ +enum intel_tpmi_id { + TPMI_ID_RAPL =3D 0, /* Running Average Power Limit */ + TPMI_ID_PEM =3D 1, /* Power and Perf excursion Monitor */ + TPMI_ID_UNCORE =3D 2, /* Uncore Frequency Scaling */ + TPMI_ID_SST =3D 5, /* Speed Select Technology */ + TPMI_CONTROL_ID =3D 0x80, /* Special ID for getting feature status */ + TPMI_INFO_ID =3D 0x81, /* Special ID for PCI BDF and Package ID informati= on */ +}; + /** * struct intel_tpmi_plat_info - Platform information for a TPMI device in= stance * @cdie_mask: Mask of all compute dies in the partition --=20 2.41.0 From nobody Tue Dec 16 16:38:10 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 419F7C4167B for ; Thu, 30 Nov 2023 21:48:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376994AbjK3VsN (ORCPT ); Thu, 30 Nov 2023 16:48:13 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229645AbjK3VsG (ORCPT ); Thu, 30 Nov 2023 16:48:06 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BC56010FD; Thu, 30 Nov 2023 13:48:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701380893; x=1732916893; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=iPenITkAPbJk/twSPTXeCodsEQgm0vYgv3Cv5U1mHjI=; b=Oq2MRbcntB9RsP3b+GtfHxZrI/8fTmq8kRjDjIzkUGMOoMelQ2vnlkGY ZRvH8qDBffePFRMiiFbRR4Oq1tEThemhI0/acAQvYHgR0QouotzGOYoqy +aaRj6zvNn4JotOaKTNWjfpdKr7+jN7n9wKo2xCOlvx8o8E8nHDO02I7e jJ7BOWhdK6T/Dn3c2vERH4UcSpPD7md+kd3X5il1U2CsGbjdOX46KGuIW fiAeDdolaYfDQ2mboCr6TU3esHTdFLkZAt+IW6XH7kopAdojudvO1XiFe 5gBSr9tg4xWpb1KgJM4ptK+4BXrXbYbdDRC59I5F56EKuxJFjD2zfIODN A==; X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="399956" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="399956" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Nov 2023 13:48:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="860334608" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="860334608" Received: from spandruv-desk.jf.intel.com ([10.54.75.14]) by FMSMGA003.fm.intel.com with ESMTP; 30 Nov 2023 13:48:10 -0800 From: Srinivas Pandruvada To: hdegoede@redhat.com, markgross@kernel.org, ilpo.jarvinen@linux.intel.com, andriy.shevchenko@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Pandruvada Subject: [PATCH v2 4/5] platform/x86: ISST: Process read/write blocked feature status Date: Thu, 30 Nov 2023 13:47:50 -0800 Message-Id: <20231130214751.3100418-5-srinivas.pandruvada@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> References: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" When a feature is read blocked, don't continue to read SST information and register with SST core. When the feature is write blocked, continue to offer read interface for SST parameters, but don't allow any operation to change state. A state change results from SST level change, feature change or class of service change. Signed-off-by: Srinivas Pandruvada Reviewed-by: Hans de Goede Reviewed-by: Ilpo J=C3=A4rvinen --- v2 - Change read_blocked, write_blocked to bool - Move the check for power_domain_info->write_blocked for SST-CP to only write operations .../intel/speed_select_if/isst_tpmi_core.c | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c b/= drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c index 0b6d2c864437..2662fbbddf0c 100644 --- a/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c +++ b/drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c @@ -234,6 +234,7 @@ struct perf_level { * @saved_clos_configs: Save SST-CP CLOS configuration to store restore fo= r suspend/resume * @saved_clos_assocs: Save SST-CP CLOS association to store restore for s= uspend/resume * @saved_pp_control: Save SST-PP control information to store restore for= suspend/resume + * @write_blocked: Write operation is blocked, so can't change SST state * * This structure is used store complete SST information for a power_domai= n. This information * is used to read/write request for any SST IOCTL. Each physical CPU pack= age can have multiple @@ -259,6 +260,7 @@ struct tpmi_per_power_domain_info { u64 saved_clos_configs[4]; u64 saved_clos_assocs[4]; u64 saved_pp_control; + bool write_blocked; }; =20 /** @@ -515,6 +517,9 @@ static long isst_if_clos_param(void __user *argp) return -EINVAL; =20 if (clos_param.get_set) { + if (power_domain_info->write_blocked) + return -EPERM; + _write_cp_info("clos.min_freq", clos_param.min_freq_mhz, (SST_CLOS_CONFIG_0_OFFSET + clos_param.clos * SST_REG_SIZE), SST_CLOS_CONFIG_MIN_START, SST_CLOS_CONFIG_MIN_WIDTH, @@ -602,6 +607,9 @@ static long isst_if_clos_assoc(void __user *argp) =20 power_domain_info =3D &sst_inst->power_domain_info[punit_id]; =20 + if (assoc_cmds.get_set && power_domain_info->write_blocked) + return -EPERM; + offset =3D SST_CLOS_ASSOC_0_OFFSET + (punit_cpu_no / SST_CLOS_ASSOC_CPUS_PER_REG) * SST_REG_SIZE; shift =3D punit_cpu_no % SST_CLOS_ASSOC_CPUS_PER_REG; @@ -752,6 +760,9 @@ static int isst_if_set_perf_level(void __user *argp) if (!power_domain_info) return -EINVAL; =20 + if (power_domain_info->write_blocked) + return -EPERM; + if (!(power_domain_info->pp_header.allowed_level_mask & BIT(perf_level.le= vel))) return -EINVAL; =20 @@ -809,6 +820,9 @@ static int isst_if_set_perf_feature(void __user *argp) if (!power_domain_info) return -EINVAL; =20 + if (power_domain_info->write_blocked) + return -EPERM; + _write_pp_info("perf_feature", perf_feature.feature, SST_PP_CONTROL_OFFSE= T, SST_PP_FEATURE_STATE_START, SST_PP_FEATURE_STATE_WIDTH, SST_MUL_FACTOR_NONE) @@ -1257,11 +1271,21 @@ static long isst_if_def_ioctl(struct file *file, un= signed int cmd, =20 int tpmi_sst_dev_add(struct auxiliary_device *auxdev) { + bool read_blocked =3D 0, write_blocked =3D 0; struct intel_tpmi_plat_info *plat_info; struct tpmi_sst_struct *tpmi_sst; int i, ret, pkg =3D 0, inst =3D 0; int num_resources; =20 + ret =3D tpmi_get_feature_status(auxdev, TPMI_ID_SST, &read_blocked, &writ= e_blocked); + if (ret) + dev_info(&auxdev->dev, "Can't read feature status: ignoring read/write b= locked status\n"); + + if (read_blocked) { + dev_info(&auxdev->dev, "Firmware has blocked reads, exiting\n"); + return -ENODEV; + } + plat_info =3D tpmi_get_platform_data(auxdev); if (!plat_info) { dev_err(&auxdev->dev, "No platform info\n"); @@ -1306,6 +1330,7 @@ int tpmi_sst_dev_add(struct auxiliary_device *auxdev) tpmi_sst->power_domain_info[i].package_id =3D pkg; tpmi_sst->power_domain_info[i].power_domain_id =3D i; tpmi_sst->power_domain_info[i].auxdev =3D auxdev; + tpmi_sst->power_domain_info[i].write_blocked =3D write_blocked; tpmi_sst->power_domain_info[i].sst_base =3D devm_ioremap_resource(&auxde= v->dev, res); if (IS_ERR(tpmi_sst->power_domain_info[i].sst_base)) return PTR_ERR(tpmi_sst->power_domain_info[i].sst_base); --=20 2.41.0 From nobody Tue Dec 16 16:38:10 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7BE02C4167B for ; Thu, 30 Nov 2023 21:48:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229645AbjK3VsP (ORCPT ); Thu, 30 Nov 2023 16:48:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46664 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232317AbjK3VsG (ORCPT ); Thu, 30 Nov 2023 16:48:06 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.10]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CE5E71704; Thu, 30 Nov 2023 13:48:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701380893; x=1732916893; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ynpHLXDdF8t4exe4BtFwqcU6UiBYIe3RD5PYagdF8UE=; b=Kie+S0mLoxPMeY8mDMPtrM37sxgfawqhftYI56jKpvFR8AvWWt38ENYK 96NPBh7SfqBSpM6PWnPOKHyo9DQIt+8hCNvUjlZm34OIZEmgOhMqYzO4z twGbB5aiw1HG1feG9jFONRHXWPhM5IFXYob8lmrj0wH80s0PKzBWVQGaj lPWoDFUWf165ppcvwy1lZ3QdTVUPAh8fPYi3dUoSyLXjif7tgmENkqITA o5LXR2Edp0zgP6xkjVbXIm+cmvXYcEHsryHAcldyWMvELgjQe5PtE1a1l J/1fxSXB2yijGCNntcKC5OEvuMzoyFSbvoUpCFPKd83al2hZyLehsOZu9 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="399962" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="399962" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Nov 2023 13:48:12 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10910"; a="860334609" X-IronPort-AV: E=Sophos;i="6.04,240,1695711600"; d="scan'208";a="860334609" Received: from spandruv-desk.jf.intel.com ([10.54.75.14]) by FMSMGA003.fm.intel.com with ESMTP; 30 Nov 2023 13:48:11 -0800 From: Srinivas Pandruvada To: hdegoede@redhat.com, markgross@kernel.org, ilpo.jarvinen@linux.intel.com, andriy.shevchenko@linux.intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Srinivas Pandruvada Subject: [PATCH v2 5/5] platform/x86/intel-uncore-freq: Process read/write blocked feature status Date: Thu, 30 Nov 2023 13:47:51 -0800 Message-Id: <20231130214751.3100418-6-srinivas.pandruvada@linux.intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> References: <20231130214751.3100418-1-srinivas.pandruvada@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When a feature is read blocked, don't continue to read uncore information and register with uncore core. When the feature is write blocked, continue to offer read interface but block setting uncore limits. Signed-off-by: Srinivas Pandruvada Reviewed-by: Ilpo J=C3=A4rvinen --- v2 - Change read_blocked, write_blocked to bool .../uncore-frequency/uncore-frequency-tpmi.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-t= pmi.c b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c index 4fb790552c47..bd75d61ff8a6 100644 --- a/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c +++ b/drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c @@ -66,6 +66,7 @@ struct tpmi_uncore_struct { int min_ratio; struct tpmi_uncore_power_domain_info *pd_info; struct tpmi_uncore_cluster_info root_cluster; + bool write_blocked; }; =20 #define UNCORE_GENMASK_MIN_RATIO GENMASK_ULL(21, 15) @@ -157,6 +158,9 @@ static int uncore_write_control_freq(struct uncore_data= *data, unsigned int inpu cluster_info =3D container_of(data, struct tpmi_uncore_cluster_info, unco= re_data); uncore_root =3D cluster_info->uncore_root; =20 + if (uncore_root->write_blocked) + return -EPERM; + /* Update each cluster in a package */ if (cluster_info->root_domain) { struct tpmi_uncore_struct *uncore_root =3D cluster_info->uncore_root; @@ -233,11 +237,21 @@ static void remove_cluster_entries(struct tpmi_uncore= _struct *tpmi_uncore) =20 static int uncore_probe(struct auxiliary_device *auxdev, const struct auxi= liary_device_id *id) { + bool read_blocked =3D 0, write_blocked =3D 0; struct intel_tpmi_plat_info *plat_info; struct tpmi_uncore_struct *tpmi_uncore; int ret, i, pkg =3D 0; int num_resources; =20 + ret =3D tpmi_get_feature_status(auxdev, TPMI_ID_UNCORE, &read_blocked, &w= rite_blocked); + if (ret) + dev_info(&auxdev->dev, "Can't read feature status: ignoring blocked stat= us\n"); + + if (read_blocked) { + dev_info(&auxdev->dev, "Firmware has blocked reads, exiting\n"); + return -ENODEV; + } + /* Get number of power domains, which is equal to number of resources */ num_resources =3D tpmi_get_resource_count(auxdev); if (!num_resources) @@ -266,6 +280,7 @@ static int uncore_probe(struct auxiliary_device *auxdev= , const struct auxiliary_ } =20 tpmi_uncore->power_domain_count =3D num_resources; + tpmi_uncore->write_blocked =3D write_blocked; =20 /* Get the package ID from the TPMI core */ plat_info =3D tpmi_get_platform_data(auxdev); --=20 2.41.0