Commit 5fbbe8d4 authored by Michal Wajdeczko's avatar Michal Wajdeczko Committed by Chris Wilson

drm/i915: Add pretty printer for runtime part of intel_device_info

During initialization of the runtime part of the intel_device_info
we are dumping that part using DRM_DEBUG_DRIVER mechanism.
As we already have pretty printer for const part of the info,
make similar function for the runtime part and use it separately.

v2: add runtime dump to debugfs (Chris)
Signed-off-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171221185334.17396-7-michal.wajdeczko@intel.comReviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20171221215735.30314-6-chris@chris-wilson.co.uk
parent 6a7e51f3
...@@ -48,6 +48,7 @@ static int i915_capabilities(struct seq_file *m, void *data) ...@@ -48,6 +48,7 @@ static int i915_capabilities(struct seq_file *m, void *data)
seq_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev_priv)); seq_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev_priv));
intel_device_info_dump_flags(info, &p); intel_device_info_dump_flags(info, &p);
intel_device_info_dump_runtime(info, &p);
kernel_param_lock(THIS_MODULE); kernel_param_lock(THIS_MODULE);
i915_params_dump(&i915_modparams, &p); i915_params_dump(&i915_modparams, &p);
......
...@@ -1089,6 +1089,11 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv) ...@@ -1089,6 +1089,11 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
return -ENODEV; return -ENODEV;
intel_device_info_runtime_init(mkwrite_device_info(dev_priv)); intel_device_info_runtime_init(mkwrite_device_info(dev_priv));
if (drm_debug & DRM_UT_DRIVER) {
struct drm_printer p = drm_debug_printer("i915 device info:");
intel_device_info_dump_runtime(&dev_priv->info, &p);
}
intel_sanitize_options(dev_priv); intel_sanitize_options(dev_priv);
......
...@@ -78,6 +78,32 @@ void intel_device_info_dump_flags(const struct intel_device_info *info, ...@@ -78,6 +78,32 @@ void intel_device_info_dump_flags(const struct intel_device_info *info,
#undef PRINT_FLAG #undef PRINT_FLAG
} }
static void sseu_dump(const struct sseu_dev_info *sseu, struct drm_printer *p)
{
drm_printf(p, "slice mask: %04x\n", sseu->slice_mask);
drm_printf(p, "slice total: %u\n", hweight8(sseu->slice_mask));
drm_printf(p, "subslice total: %u\n", sseu_subslice_total(sseu));
drm_printf(p, "subslice mask %04x\n", sseu->subslice_mask);
drm_printf(p, "subslice per slice: %u\n",
hweight8(sseu->subslice_mask));
drm_printf(p, "EU total: %u\n", sseu->eu_total);
drm_printf(p, "EU per subslice: %u\n", sseu->eu_per_subslice);
drm_printf(p, "has slice power gating: %s\n",
yesno(sseu->has_slice_pg));
drm_printf(p, "has subslice power gating: %s\n",
yesno(sseu->has_subslice_pg));
drm_printf(p, "has EU power gating: %s\n", yesno(sseu->has_eu_pg));
}
void intel_device_info_dump_runtime(const struct intel_device_info *info,
struct drm_printer *p)
{
sseu_dump(&info->sseu, p);
drm_printf(p, "CS timestamp frequency: %u kHz\n",
info->cs_timestamp_frequency_khz);
}
void intel_device_info_dump(const struct intel_device_info *info, void intel_device_info_dump(const struct intel_device_info *info,
struct drm_printer *p) struct drm_printer *p)
{ {
...@@ -558,22 +584,4 @@ void intel_device_info_runtime_init(struct intel_device_info *info) ...@@ -558,22 +584,4 @@ void intel_device_info_runtime_init(struct intel_device_info *info)
/* Initialize command stream timestamp frequency */ /* Initialize command stream timestamp frequency */
info->cs_timestamp_frequency_khz = read_timestamp_frequency(dev_priv); info->cs_timestamp_frequency_khz = read_timestamp_frequency(dev_priv);
DRM_DEBUG_DRIVER("slice mask: %04x\n", info->sseu.slice_mask);
DRM_DEBUG_DRIVER("slice total: %u\n", hweight8(info->sseu.slice_mask));
DRM_DEBUG_DRIVER("subslice total: %u\n",
sseu_subslice_total(&info->sseu));
DRM_DEBUG_DRIVER("subslice mask %04x\n", info->sseu.subslice_mask);
DRM_DEBUG_DRIVER("subslice per slice: %u\n",
hweight8(info->sseu.subslice_mask));
DRM_DEBUG_DRIVER("EU total: %u\n", info->sseu.eu_total);
DRM_DEBUG_DRIVER("EU per subslice: %u\n", info->sseu.eu_per_subslice);
DRM_DEBUG_DRIVER("has slice power gating: %s\n",
info->sseu.has_slice_pg ? "y" : "n");
DRM_DEBUG_DRIVER("has subslice power gating: %s\n",
info->sseu.has_subslice_pg ? "y" : "n");
DRM_DEBUG_DRIVER("has EU power gating: %s\n",
info->sseu.has_eu_pg ? "y" : "n");
DRM_DEBUG_DRIVER("CS timestamp frequency: %u kHz\n",
info->cs_timestamp_frequency_khz);
} }
...@@ -177,5 +177,7 @@ void intel_device_info_dump(const struct intel_device_info *info, ...@@ -177,5 +177,7 @@ void intel_device_info_dump(const struct intel_device_info *info,
struct drm_printer *p); struct drm_printer *p);
void intel_device_info_dump_flags(const struct intel_device_info *info, void intel_device_info_dump_flags(const struct intel_device_info *info,
struct drm_printer *p); struct drm_printer *p);
void intel_device_info_dump_runtime(const struct intel_device_info *info,
struct drm_printer *p);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment