dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
To: dri-devel@lists.freedesktop.org
Cc: oded.gabbay@gmail.com, jeff.hugo@oss.qualcomm.com,
	karol.wachowski@linux.intel.com, lizhi.hou@amd.com,
	andrzej.kacprowski@linux.intel.com,
	Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Subject: [PATCH 2/3] accel/ivpu: Convert hw_ip_gen/btrs_gen to enum types
Date: Thu,  1 Oct 2026 13:04:00 +0200	[thread overview]
Message-ID: <20261001110401.2866557-3-dawid.osuchowski@linux.intel.com> (raw)
In-Reply-To: <20261001110401.2866557-1-dawid.osuchowski@linux.intel.com>

Change the hw_ip_gen and btrs_gen members of struct ivpu_device, and
their accessors, from u32/int to enum vpu_hw_ip/enum vpu_hw_btrs, and
drop the default: labels from the switch statements in ivpu_hw_ip.c
that dispatch on them. Switching on the real enum types lets the
compiler treat these switches as exhaustive at compile time, so a
missing case for a new generation now warns instead of silently
hitting default:.

This compile-time guarantee holds because ivpu_ip_gen_init() now fails
probe on an unrecognized PCI device ID instead of leaving these fields
at 0, so the switches never see an unhandled value.

Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
---
 drivers/accel/ivpu/ivpu_drv.h   | 28 ++++++++++++++++------------
 drivers/accel/ivpu/ivpu_hw_ip.c | 14 ++++++++++----
 2 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/drivers/accel/ivpu/ivpu_drv.h b/drivers/accel/ivpu/ivpu_drv.h
index 87953d0474fb..ce9cb118c0c4 100644
--- a/drivers/accel/ivpu/ivpu_drv.h
+++ b/drivers/accel/ivpu/ivpu_drv.h
@@ -31,17 +31,9 @@
 #define PCI_DEVICE_ID_WCL	0xfd3e
 #define PCI_DEVICE_ID_NVL	0xd71d
 
-#define IVPU_HW_IP_37XX 37
-#define IVPU_HW_IP_40XX 40
-#define IVPU_HW_IP_50XX 50
-#define IVPU_HW_IP_60XX 60
-
 #define IVPU_HW_IP_REV_LNL_B0 4
 #define IVPU_HW_IP_REV_NVL_A0 0
 
-#define IVPU_HW_BTRS_MTL 1
-#define IVPU_HW_BTRS_LNL 2
-
 #define IVPU_GLOBAL_CONTEXT_MMU_SSID   0
 /* SSID 1 is used by the VPU to represent reserved context */
 #define IVPU_RESERVED_CONTEXT_MMU_SSID 1
@@ -107,6 +99,18 @@
 		ivpu_dbg(vdev, MISC, "Using WA: " #wa_name "\n");	\
 } while (0)
 
+enum vpu_hw_ip {
+	IVPU_HW_IP_37XX = 37,
+	IVPU_HW_IP_40XX = 40,
+	IVPU_HW_IP_50XX = 50,
+	IVPU_HW_IP_60XX = 60,
+};
+
+enum vpu_hw_btrs {
+	IVPU_HW_BTRS_MTL = 1,
+	IVPU_HW_BTRS_LNL = 2,
+};
+
 struct ivpu_wa_table {
 	bool punit_disabled;
 	bool clear_runtime_mem;
@@ -136,8 +140,8 @@ struct ivpu_device {
 	struct drm_device drm;
 	void __iomem *regb;
 	void __iomem *regv;
-	u32 hw_ip_gen;
-	u32 btrs_gen;
+	enum vpu_hw_ip hw_ip_gen;
+	enum vpu_hw_btrs btrs_gen;
 	u32 platform;
 	u32 irq;
 
@@ -259,12 +263,12 @@ static inline u16 ivpu_device_id(struct ivpu_device *vdev)
 	return to_pci_dev(vdev->drm.dev)->device;
 }
 
-static inline int ivpu_hw_ip_gen(struct ivpu_device *vdev)
+static inline enum vpu_hw_ip ivpu_hw_ip_gen(struct ivpu_device *vdev)
 {
 	return vdev->hw_ip_gen;
 }
 
-static inline int ivpu_hw_btrs_gen(struct ivpu_device *vdev)
+static inline enum vpu_hw_btrs ivpu_hw_btrs_gen(struct ivpu_device *vdev)
 {
 	return vdev->btrs_gen;
 }
diff --git a/drivers/accel/ivpu/ivpu_hw_ip.c b/drivers/accel/ivpu/ivpu_hw_ip.c
index c604c1c37e99..bd6bb3fa49ff 100644
--- a/drivers/accel/ivpu/ivpu_hw_ip.c
+++ b/drivers/accel/ivpu/ivpu_hw_ip.c
@@ -688,7 +688,7 @@ static void pwr_island_delay_set(struct ivpu_device *vdev)
 		post2 = 0;
 		status = high ? 46 : 3;
 		break;
-	default:
+	case IVPU_HW_IP_60XX:
 		post = high ? 198 : 17;
 		post1 = 0;
 		post2 = high ? 198 : 17;
@@ -801,10 +801,15 @@ static void ivpu_hw_ip_tbu_mmu_enable_40xx(struct ivpu_device *vdev)
 
 void ivpu_hw_ip_tbu_mmu_enable(struct ivpu_device *vdev)
 {
-	if (ivpu_hw_ip_gen(vdev) == IVPU_HW_IP_37XX)
+	switch (ivpu_hw_ip_gen(vdev)) {
+	case IVPU_HW_IP_37XX:
 		return ivpu_hw_ip_tbu_mmu_enable_37xx(vdev);
-	else
+
+	case IVPU_HW_IP_40XX:
+	case IVPU_HW_IP_50XX:
+	case IVPU_HW_IP_60XX:
 		return ivpu_hw_ip_tbu_mmu_enable_40xx(vdev);
+	}
 }
 
 static inline u64 get_entry_point_addr(struct ivpu_device *vdev)
@@ -940,8 +945,9 @@ int ivpu_hw_ip_soc_cpu_boot(struct ivpu_device *vdev)
 		ret = soc_cpu_boot_40xx(vdev);
 		break;
 
-	default:
+	case IVPU_HW_IP_60XX:
 		ret = soc_cpu_boot_60xx(vdev);
+		break;
 	}
 
 	if (ret)
-- 
2.43.0


  parent reply	other threads:[~2026-10-01 11:10 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-01 11:03 [PATCH 0/3] accel/ivpu: Rework HW IP generation detection and dispatch Dawid Osuchowski
2026-10-01 11:03 ` [PATCH 1/3] accel/ivpu: Improve HW IP gen and buttress version checks Dawid Osuchowski
2026-10-01 13:57   ` Wachowski, Karol
2026-10-02 15:19   ` Jeff Hugo
2026-10-01 11:04 ` Dawid Osuchowski [this message]
2026-10-01 13:58   ` [PATCH 2/3] accel/ivpu: Convert hw_ip_gen/btrs_gen to enum types Wachowski, Karol
2026-10-01 14:33   ` Andrzej Kacprowski
2026-10-02 15:20   ` Jeff Hugo
2026-10-01 11:04 ` [PATCH 3/3] accel/ivpu: Split HW IP generation dispatch into helpers Dawid Osuchowski
2026-10-01 14:34   ` Andrzej Kacprowski
2026-10-02 15:21   ` Jeff Hugo
2026-10-05  7:08 ` [PATCH 0/3] accel/ivpu: Rework HW IP generation detection and dispatch Wachowski, Karol

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=20261001110401.2866557-3-dawid.osuchowski@linux.intel.com \
    --to=dawid.osuchowski@linux.intel.com \
    --cc=andrzej.kacprowski@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jeff.hugo@oss.qualcomm.com \
    --cc=karol.wachowski@linux.intel.com \
    --cc=lizhi.hou@amd.com \
    --cc=oded.gabbay@gmail.com \
    /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