From nobody Thu Apr 2 20:28:11 2026 Received: from mail-oo1-f50.google.com (mail-oo1-f50.google.com [209.85.161.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4413E43D4E6 for ; Thu, 26 Mar 2026 18:56:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774551375; cv=none; b=t00UWfKy5uAGNWAwqUwi2122EgqJgYM69Esq6WtcyPcqCfIr/wN40jXHT+snOlPgAbwMMcq5TY8AH0fEYA5Y4StUfahNRnsoP/AsbjbbldA25fRAYfnXTqeuW98DRj7TCH2u6yn/YnPYyXAut1mY9f57I3P5MfX7C5nCQ09xR4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774551375; c=relaxed/simple; bh=Siwzlu//qwBDGXWphUDn6x73A+uGwqd9JhrR8tc5Qcg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FUF8lC1SzGVKqCQ5UlrfWzRTG6vL2IQv1yfe0xLzNbsHdMaaIfrDcp4OABej5/ADElVts2W2kjqry2GSgLHfpHY36r/PKWLXlPkbHzoYmpB3rXSXQsJtSERm7pBG9Uf6Fj/0MLDNFDqDWNt6bjXzn2igwVjTESvDBvWeTSjYGkw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=n8b+fi/U; arc=none smtp.client-ip=209.85.161.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="n8b+fi/U" Received: by mail-oo1-f50.google.com with SMTP id 006d021491bc7-679b072ed3aso790157eaf.1 for ; Thu, 26 Mar 2026 11:56:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774551373; x=1775156173; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wgXq6jE50vtzY84cY1V8ERFkQj1I8fWL7chL4/tqUbE=; b=n8b+fi/UB6XasCje6/yang1pIzPvZVqP+Rmp2/aHd/Og8iY2RuE0Wjc5MqQ+KqSl1+ gjFur5FcsnKYD08zbWjtFgaooKdDmWxpCVJPqF0vCyPV2OXfKazXZn7X3mWJm/vIrePP NNwrQLJ3x9ZCw7dkMWz6FOalX2rhE+7ABg0xHg6C9M0O/0f2PJh4YkQyJ/qaUOJ535Yw iGJgM0NIEDYtjlhNZC1b+EW/cpeVzJJLQp1rtepV1fXXQSwmqg0jev4EdW9VMXzKKNdj CXUL4969SIYk1dWKxt8e7sCFg+UqE1WoMQJKsRlc/73RXh5sSoD+VaJc2xd1Sx5GUcu/ ohIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774551373; x=1775156173; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wgXq6jE50vtzY84cY1V8ERFkQj1I8fWL7chL4/tqUbE=; b=R/utt2YgWqnvXvK87VRFWgTsKXG2Tqe/hLlVGtDfQpME3BK58j0fpE/SG5fAxMXtBk kbglitBTSs8Oe60tA1PmT8phKlLY5Ce9maWDclnIqlhF1GLe5W+Mw3E4XGK0TMUb5sVD bN0F0FI9+3M+SDPhWrpxseIHPHJKLhd6CbD9r2d4SL7g5ZPww3JMIkPLIqXVbJLOg/5t ZuQgMjg2AaDdnK367/L4Cz2UU5XO1XrvZm9O90PXkRhqrNJropNt65QY25VGLbWIFoFQ 6NuG32B2HJMvBnsbpVHdncT6DAQPdDw8ewOCHncPH0XLfr8SVwx3lDdBUcSDRBILgd69 NJpQ== X-Gm-Message-State: AOJu0YwT3y+g7vsezu1H1TvKM0hxUNamLf2/q3QoF/VpFP+7/oQitdFi Quym9yMPdWi2DxG74TnUgw5O0Jl9Yi+xdZ81AKTdiD4Y43DcHUCV+8CWov9/ng== X-Gm-Gg: ATEYQzy8YJFLn/W4+4oeAJa4PErHkPJtBIfRaJK1c8251Ddg+AhIAdgcCG2X97FS5So ensmk45XVIRe0hySB8u4QPjGyoPW6NGhU1k1CemHeF2k7SFbIO+Dfj3M4idsbJdM32V78ygaEtE 7kAsFNtq+20a+pP+MQXGNALckB3xNdHC+U5lKwextHp6lvGi4DZFRyzvIfi2L1SFLWalAr4rLr8 etggo6SMFqOLoyo+tbAMInt80J7k4/thhCtej235JFfRFHSpD3NGvH+6Q4FXf4Ei0KpebviC3Ek RnpOzR0ZZtGeHuAUkitBn19PXFydufHXls8YcwHAEWjUHUvmLwxaevLoNAe3wtXJsrKAA4PvtWL gV89lOGQv+q+DPrBnD+ClTXN+vvXOCZBZv8aATlN1pW0kkvokcbjkSE9giGKqyl5k1xpUQyDB6O DUldMdO7sjkZF8zFtYqCpmY1y/SyhUvkN9FzeviRh0sxB6dUeq X-Received: by 2002:a05:6820:3106:b0:67d:e17b:31ac with SMTP id 006d021491bc7-67dff51609emr4069367eaf.45.1774551373018; Thu, 26 Mar 2026 11:56:13 -0700 (PDT) Received: from frodo (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 586e51a60fabf-41cc7760c08sm3075171fac.4.2026.03.26.11.56.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Mar 2026 11:56:12 -0700 (PDT) From: Jim Cromie To: linux-kernel@vger.kernel.org, airlied@gmail.com, simona@ffwll.ch, jbaron@akamai.com, gregkh@linuxfoundation.org Cc: jim.cromie@gmail.com, mripard@kernel.org, tzimmermann@suse.de, maarten.lankhorst@linux.intel.com, jani.nikula@intel.com, ville.syrjala@linux.intel.com, christian.koenig@amd.com, matthew.auld@intel.com, arunpravin.paneerselvam@amd.com, louis.chauvet@bootlin.com, skhan@linuxfoundation.org, pmladek@suse.com, ukaszb@chromium.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Subject: [PATCH v12 67/69] accel/ivpu: implement IVPU_DBG_* as a dyndbg classmap Date: Thu, 26 Mar 2026 12:54:11 -0600 Message-ID: <20260326185413.1205870-68-jim.cromie@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260326185413.1205870-1-jim.cromie@gmail.com> References: <20260326185413.1205870-1-jim.cromie@gmail.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 Content-Type: text/plain; charset="utf-8" Invoke DRM_CLASSMAP_DEFINE to create a classmap of class-ids/categories for ivpu_dbg(). This brings static-key optimized-off benefits to the ivpu_dbg() callsites. DRM_CLASSMAP_PARAM_REF wires the sysfs kparam to the classmap. This is the 1st real-world example of a module avoiding another module's classmap's class_id range reservation. Its also something of an oddity: it "is" a DRM module only cuz 1. CONFIG_DRM_ACCEL_IVPU exists. 2. code therefore uses CONFIG_DRM_USE_DYNAMIC_DEBUG, so must also use it's dependent wrappers: DRM_CLASSMAP_* accel/amdxdna is already using drm.debug via dev_dbg(), so it is more fully DRM but iirc its a single call. Anyway, to play nice with DRM, we change all the constants, from macros calling BIT(X), to an explicit "enum ivpu_dbg_category" starting at 16 to avoid DRM_UT_CORE..RES. This is all in an indef to avoid changing the constants for the non-dyndbg case. Signed-off-by: Jim Cromie --- drivers/accel/ivpu/ivpu_drv.c | 27 +++++++++++++++++++-- drivers/accel/ivpu/ivpu_drv.h | 45 ++++++++++++++++++++++++++++++----- 2 files changed, 64 insertions(+), 8 deletions(-) diff --git a/drivers/accel/ivpu/ivpu_drv.c b/drivers/accel/ivpu/ivpu_drv.c index 5900a40c7a78..214fdbf06470 100644 --- a/drivers/accel/ivpu/ivpu_drv.c +++ b/drivers/accel/ivpu/ivpu_drv.c @@ -3,6 +3,7 @@ * Copyright (C) 2020-2025 Intel Corporation */ =20 +#include #include #include #include @@ -37,8 +38,30 @@ #define DRIVER_VERSION_STR "1.0.0 " UTS_RELEASE #endif =20 -int ivpu_dbg_mask; -module_param_named(dbg_mask, ivpu_dbg_mask, int, 0644); +unsigned long ivpu_dbg_mask; + +#if !defined(CONFIG_DRM_USE_DYNAMIC_DEBUG) + +module_param_named(dbg_mask, ivpu_dbg_mask, ulong, 0644); +#else +DRM_CLASSMAP_DEFINE(ivpu_dbg_classes, DD_CLASS_TYPE_DISJOINT_BITS, + IVPU_DBG_REG, + "IVPU_DBG_REG", + "IVPU_DBG_IRQ", + "IVPU_DBG_MMU", + "IVPU_DBG_FILE", + "IVPU_DBG_MISC", + "IVPU_DBG_FW_BOOT", + "IVPU_DBG_PM", + "IVPU_DBG_IPC", + "IVPU_DBG_BO", + "IVPU_DBG_JOB", + "IVPU_DBG_JSM", + "IVPU_DBG_KREF", + "IVPU_DBG_RPM", + "IVPU_DBG_MMU_MAP"); +DRM_CLASSMAP_PARAM_REF(dbg_mask, ivpu_dbg_mask, ivpu_dbg_classes, p); +#endif MODULE_PARM_DESC(dbg_mask, "Driver debug mask. See IVPU_DBG_* macros."); =20 int ivpu_test_mode; diff --git a/drivers/accel/ivpu/ivpu_drv.h b/drivers/accel/ivpu/ivpu_drv.h index 5b34b6f50e69..ef5a96b961fc 100644 --- a/drivers/accel/ivpu/ivpu_drv.h +++ b/drivers/accel/ivpu/ivpu_drv.h @@ -65,6 +65,10 @@ =20 #define IVPU_SCHED_MODE_AUTO -1 =20 +extern unsigned long ivpu_dbg_mask; + +#if !defined(CONFIG_DRM_USE_DYNAMIC_DEBUG) + #define IVPU_DBG_REG BIT(0) #define IVPU_DBG_IRQ BIT(1) #define IVPU_DBG_MMU BIT(2) @@ -81,6 +85,41 @@ #define IVPU_DBG_MMU_MAP BIT(13) #define IVPU_DBG_IOCTL BIT(14) =20 +#define ivpu_dbg(vdev, type, fmt, args...) do { \ + if (unlikely(IVPU_DBG_##type & ivpu_dbg_mask)) \ + dev_dbg((vdev)->drm.dev, "[%s] " fmt, #type, ##args); \ +} while (0) + +#else /* !!CONFIG_DRM_USE_DYNAMIC_DEBUG */ + +enum ivpu_dbg_category { + /* + * since accels are drm-devices (CONFIG_DRM_ACCEL_*), adjust + * IVPU_DBG_* to avoid DRMs 0..10 class_id reservations. + */ + IVPU_DBG_REG =3D 16, + IVPU_DBG_IRQ, + IVPU_DBG_MMU, + IVPU_DBG_FILE, + IVPU_DBG_MISC, + IVPU_DBG_FW_BOOT, + IVPU_DBG_PM, + IVPU_DBG_IPC, + IVPU_DBG_BO, + IVPU_DBG_JOB, + IVPU_DBG_JSM, + IVPU_DBG_KREF, + IVPU_DBG_RPM, + IVPU_DBG_MMU_MAP, + IVPU_DBG_IOCTL +}; + +#define ivpu_dbg(vdev, type, fmt, ...) \ + _dynamic_func_call_cls(IVPU_DBG_##type, fmt, __dynamic_dev_dbg, \ + (vdev)->drm.dev, fmt, ##__VA_ARGS__) + +#endif /* !!CONFIG_DRM_USE_DYNAMIC_DEBUG */ + #define ivpu_err(vdev, fmt, ...) \ drm_err(&(vdev)->drm, "%s(): " fmt, __func__, ##__VA_ARGS__) =20 @@ -95,11 +134,6 @@ =20 #define ivpu_info(vdev, fmt, ...) drm_info(&(vdev)->drm, fmt, ##__VA_ARGS_= _) =20 -#define ivpu_dbg(vdev, type, fmt, args...) do { = \ - if (unlikely(IVPU_DBG_##type & ivpu_dbg_mask)) \ - dev_dbg((vdev)->drm.dev, "[%s] " fmt, #type, ##args); \ -} while (0) - #define IVPU_WA(wa_name) (vdev->wa.wa_name) =20 #define IVPU_PRINT_WA(wa_name) do { \ @@ -197,7 +231,6 @@ struct ivpu_file_priv { bool aborted; }; =20 -extern int ivpu_dbg_mask; extern u8 ivpu_pll_min_ratio; extern u8 ivpu_pll_max_ratio; extern int ivpu_sched_mode; --=20 2.53.0