public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: "David E. Box" <david.e.box@linux.intel.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Sasha Levin <sashal@kernel.org>,
	markgross@kernel.org, platform-driver-x86@vger.kernel.org
Subject: [PATCH AUTOSEL 6.3 17/44] platform/x86/intel: vsec: Explicitly enable capabilities
Date: Sun, 30 Apr 2023 22:56:05 -0400	[thread overview]
Message-ID: <20230501025632.3253067-17-sashal@kernel.org> (raw)
In-Reply-To: <20230501025632.3253067-1-sashal@kernel.org>

From: "David E. Box" <david.e.box@linux.intel.com>

[ Upstream commit 3f95ecf2a3e4db09e58d307932037e8f1210d6e7 ]

Discovered Intel VSEC/DVSEC capabilities are enabled by default and only
get disabled by quirk. Instead, remove such quirks and only enable support
for capabilities that have been explicitly added to a new capabilities
field. While here, also reorder the device info structures alphabetically.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20230316224628.2855884-1-david.e.box@linux.intel.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/platform/x86/intel/vsec.c | 69 ++++++++++++++-----------------
 drivers/platform/x86/intel/vsec.h |  9 +++-
 2 files changed, 38 insertions(+), 40 deletions(-)

diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
index 2311c16cb975d..91be391bba3f7 100644
--- a/drivers/platform/x86/intel/vsec.c
+++ b/drivers/platform/x86/intel/vsec.c
@@ -67,14 +67,6 @@ enum intel_vsec_id {
 	VSEC_ID_TPMI		= 66,
 };
 
-static enum intel_vsec_id intel_vsec_allow_list[] = {
-	VSEC_ID_TELEMETRY,
-	VSEC_ID_WATCHER,
-	VSEC_ID_CRASHLOG,
-	VSEC_ID_SDSI,
-	VSEC_ID_TPMI,
-};
-
 static const char *intel_vsec_name(enum intel_vsec_id id)
 {
 	switch (id) {
@@ -98,26 +90,19 @@ static const char *intel_vsec_name(enum intel_vsec_id id)
 	}
 }
 
-static bool intel_vsec_allowed(u16 id)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(intel_vsec_allow_list); i++)
-		if (intel_vsec_allow_list[i] == id)
-			return true;
-
-	return false;
-}
-
-static bool intel_vsec_disabled(u16 id, unsigned long quirks)
+static bool intel_vsec_supported(u16 id, unsigned long caps)
 {
 	switch (id) {
+	case VSEC_ID_TELEMETRY:
+		return !!(caps & VSEC_CAP_TELEMETRY);
 	case VSEC_ID_WATCHER:
-		return !!(quirks & VSEC_QUIRK_NO_WATCHER);
-
+		return !!(caps & VSEC_CAP_WATCHER);
 	case VSEC_ID_CRASHLOG:
-		return !!(quirks & VSEC_QUIRK_NO_CRASHLOG);
-
+		return !!(caps & VSEC_CAP_CRASHLOG);
+	case VSEC_ID_SDSI:
+		return !!(caps & VSEC_CAP_SDSI);
+	case VSEC_ID_TPMI:
+		return !!(caps & VSEC_CAP_TPMI);
 	default:
 		return false;
 	}
@@ -206,7 +191,7 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
 	unsigned long quirks = info->quirks;
 	int i;
 
-	if (!intel_vsec_allowed(header->id) || intel_vsec_disabled(header->id, quirks))
+	if (!intel_vsec_supported(header->id, info->caps))
 		return -EINVAL;
 
 	if (!header->num_entries) {
@@ -261,14 +246,14 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
 static bool intel_vsec_walk_header(struct pci_dev *pdev,
 				   struct intel_vsec_platform_info *info)
 {
-	struct intel_vsec_header **header = info->capabilities;
+	struct intel_vsec_header **header = info->headers;
 	bool have_devices = false;
 	int ret;
 
 	for ( ; *header; header++) {
 		ret = intel_vsec_add_dev(pdev, *header, info);
 		if (ret)
-			dev_info(&pdev->dev, "Could not add device for DVSEC id %d\n",
+			dev_info(&pdev->dev, "Could not add device for VSEC id %d\n",
 				 (*header)->id);
 		else
 			have_devices = true;
@@ -403,14 +388,8 @@ static int intel_vsec_pci_probe(struct pci_dev *pdev, const struct pci_device_id
 	return 0;
 }
 
-/* TGL info */
-static const struct intel_vsec_platform_info tgl_info = {
-	.quirks = VSEC_QUIRK_NO_WATCHER | VSEC_QUIRK_NO_CRASHLOG |
-		  VSEC_QUIRK_TABLE_SHIFT | VSEC_QUIRK_EARLY_HW,
-};
-
 /* DG1 info */
-static struct intel_vsec_header dg1_telemetry = {
+static struct intel_vsec_header dg1_header = {
 	.length = 0x10,
 	.id = 2,
 	.num_entries = 1,
@@ -419,19 +398,31 @@ static struct intel_vsec_header dg1_telemetry = {
 	.offset = 0x466000,
 };
 
-static struct intel_vsec_header *dg1_capabilities[] = {
-	&dg1_telemetry,
+static struct intel_vsec_header *dg1_headers[] = {
+	&dg1_header,
 	NULL
 };
 
 static const struct intel_vsec_platform_info dg1_info = {
-	.capabilities = dg1_capabilities,
+	.caps = VSEC_CAP_TELEMETRY,
+	.headers = dg1_headers,
 	.quirks = VSEC_QUIRK_NO_DVSEC | VSEC_QUIRK_EARLY_HW,
 };
 
 /* MTL info */
 static const struct intel_vsec_platform_info mtl_info = {
-	.quirks = VSEC_QUIRK_NO_WATCHER | VSEC_QUIRK_NO_CRASHLOG,
+	.caps = VSEC_CAP_TELEMETRY,
+};
+
+/* OOBMSM info */
+static const struct intel_vsec_platform_info oobmsm_info = {
+	.caps = VSEC_CAP_TELEMETRY | VSEC_CAP_SDSI | VSEC_CAP_TPMI,
+};
+
+/* TGL info */
+static const struct intel_vsec_platform_info tgl_info = {
+	.caps = VSEC_CAP_TELEMETRY,
+	.quirks = VSEC_QUIRK_TABLE_SHIFT | VSEC_QUIRK_EARLY_HW,
 };
 
 #define PCI_DEVICE_ID_INTEL_VSEC_ADL		0x467d
@@ -446,7 +437,7 @@ static const struct pci_device_id intel_vsec_pci_ids[] = {
 	{ PCI_DEVICE_DATA(INTEL, VSEC_DG1, &dg1_info) },
 	{ PCI_DEVICE_DATA(INTEL, VSEC_MTL_M, &mtl_info) },
 	{ PCI_DEVICE_DATA(INTEL, VSEC_MTL_S, &mtl_info) },
-	{ PCI_DEVICE_DATA(INTEL, VSEC_OOBMSM, &(struct intel_vsec_platform_info) {}) },
+	{ PCI_DEVICE_DATA(INTEL, VSEC_OOBMSM, &oobmsm_info) },
 	{ PCI_DEVICE_DATA(INTEL, VSEC_RPL, &tgl_info) },
 	{ PCI_DEVICE_DATA(INTEL, VSEC_TGL, &tgl_info) },
 	{ }
diff --git a/drivers/platform/x86/intel/vsec.h b/drivers/platform/x86/intel/vsec.h
index ae8fe92c5595b..0fd042c171ba0 100644
--- a/drivers/platform/x86/intel/vsec.h
+++ b/drivers/platform/x86/intel/vsec.h
@@ -5,6 +5,12 @@
 #include <linux/auxiliary_bus.h>
 #include <linux/bits.h>
 
+#define VSEC_CAP_TELEMETRY	BIT(0)
+#define VSEC_CAP_WATCHER	BIT(1)
+#define VSEC_CAP_CRASHLOG	BIT(2)
+#define VSEC_CAP_SDSI		BIT(3)
+#define VSEC_CAP_TPMI		BIT(4)
+
 struct pci_dev;
 struct resource;
 
@@ -27,7 +33,8 @@ enum intel_vsec_quirks {
 
 /* Platform specific data */
 struct intel_vsec_platform_info {
-	struct intel_vsec_header **capabilities;
+	struct intel_vsec_header **headers;
+	unsigned long caps;
 	unsigned long quirks;
 };
 
-- 
2.39.2


  parent reply	other threads:[~2023-05-01  2:58 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-01  2:55 [PATCH AUTOSEL 6.3 01/44] drm/displayid: add displayid_get_header() and check bounds better Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 02/44] drm/amd/display: populate subvp cmd info only for the top pipe Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 03/44] drm/amd/display: Correct DML calculation to align HW formula Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 04/44] drm/amd/display: enable DPG when disabling plane for phantom pipe Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 05/44] platform/x86: x86-android-tablets: Add Acer Iconia One 7 B1-750 data Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 06/44] drm/amd/display: Enable HostVM based on rIOMMU active Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 07/44] drm/amd/display: Use DC_LOG_DC in the trasform pixel function Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 08/44] regmap: cache: Return error in cache sync operations for REGCACHE_NONE Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 09/44] remoteproc: imx_dsp_rproc: Add custom memory copy implementation for i.MX DSP Cores Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 10/44] arm64: dts: qcom: msm8996: Add missing DWC3 quirks Sasha Levin
2023-05-01  2:55 ` [PATCH AUTOSEL 6.3 11/44] accel/habanalabs: postpone mem_mgr IDR destruction to hpriv_release() Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 12/44] drm/amd/display: reallocate DET for dual displays with high pixel rate ratio Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 13/44] media: imx-jpeg: Bounds check sizeimage access Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 14/44] media: cx23885: Fix a null-ptr-deref bug in buffer_prepare() and buffer_finish() Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 15/44] media: pci: tw68: Fix null-ptr-deref bug in buf prepare and finish Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 16/44] media: pvrusb2: VIDEO_PVRUSB2 depends on DVB_CORE to use dvb_* symbols Sasha Levin
2023-05-01  2:56 ` Sasha Levin [this message]
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 18/44] ACPI: processor: Check for null return of devm_kzalloc() in fch_misc_setup() Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 19/44] drm/rockchip: dw_hdmi: cleanup drm encoder during unbind Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 20/44] memstick: r592: Fix UAF bug in r592_remove due to race condition Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 21/44] arm64: dts: imx8mq-librem5: Remove dis_u3_susphy_quirk from usb_dwc3_0 Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 22/44] firmware: arm_sdei: Fix sleep from invalid context BUG Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 23/44] ACPI: EC: Fix oops when removing custom query handlers Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 24/44] drm/amd/display: fixed dcn30+ underflow issue Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 25/44] remoteproc: stm32_rproc: Add mutex protection for workqueue Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 26/44] accel/ivpu: Remove D3hot delay for Meteorlake Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 27/44] drm/tegra: Avoid potential 32-bit integer overflow Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 28/44] drm/msm/dp: Clean up handling of DP AUX interrupts Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 29/44] ACPICA: Avoid undefined behavior: applying zero offset to null pointer Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 30/44] ACPICA: ACPICA: check null return of ACPI_ALLOCATE_ZEROED in acpi_db_display_objects Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 31/44] arm64: dts: qcom: sdm845-polaris: Drop inexistent properties Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 32/44] arm64: dts: qcom: sm6115-j606f: Add ramoops node Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 33/44] irqchip/gicv3: Workaround for NVIDIA erratum T241-FABRIC-4 Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 34/44] media: cros-ec-cec: Don't exit early in .remove() callback Sasha Levin
2023-05-01 15:26   ` Uwe Kleine-König
2023-05-18 17:02     ` Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 35/44] media: ipu3-cio2: support multiple sensors and VCMs with same HID Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 36/44] ACPI: video: Remove desktops without backlight DMI quirks Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 37/44] drm/amd/display: Correct DML calculation to follow HW SPEC Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 38/44] drm/amd: Fix an out of bounds error in BIOS parser Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 39/44] drm/amdgpu: Fix sdma v4 sw fini error Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 40/44] media: Prefer designated initializers over memset for subdev pad ops Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 41/44] drm/amdgpu: Enable IH retry CAM on GFX9 Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 42/44] media: mediatek: vcodec: Fix potential array out-of-bounds in decoder queue_setup Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 43/44] platform/x86/amd: pmc: Fix memory leak in amd_pmc_stb_debugfs_open_v2() Sasha Levin
2023-05-01  2:56 ` [PATCH AUTOSEL 6.3 44/44] hwmon: (nzxt-smart2) add another USB ID Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230501025632.3253067-17-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=andy.shevchenko@gmail.com \
    --cc=david.e.box@linux.intel.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox