drivers/gpu/drm/i915/display/intel_crtc_state_dump.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/i915/display/intel_crtc_state_dump.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/i915/display/intel_crtc_state_dump.c
Extension
.c
Size
14273 bytes
Lines
401
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: MIT
/*
 * Copyright © 2022 Intel Corporation
 */

#include <drm/drm_edid.h>
#include <drm/drm_eld.h>
#include <drm/drm_print.h>

#include "intel_crtc_state_dump.h"
#include "intel_display_core.h"
#include "intel_display_types.h"
#include "intel_hdmi.h"
#include "intel_vblank.h"
#include "intel_vdsc.h"
#include "intel_vrr.h"

static void intel_dump_crtc_timings(struct drm_printer *p,
				    const struct drm_display_mode *mode)
{
	drm_printf(p, "crtc timings: clock=%d, "
		   "hd=%d hb=%d-%d hs=%d-%d ht=%d, "
		   "vd=%d vb=%d-%d vs=%d-%d vt=%d, "
		   "flags=0x%x\n",
		   mode->crtc_clock,
		   mode->crtc_hdisplay, mode->crtc_hblank_start, mode->crtc_hblank_end,
		   mode->crtc_hsync_start, mode->crtc_hsync_end, mode->crtc_htotal,
		   mode->crtc_vdisplay, mode->crtc_vblank_start, mode->crtc_vblank_end,
		   mode->crtc_vsync_start, mode->crtc_vsync_end, mode->crtc_vtotal,
		   mode->flags);
}

static void
intel_dump_m_n_config(struct drm_printer *p,
		      const struct intel_crtc_state *pipe_config,
		      const char *id, unsigned int lane_count,
		      const struct intel_link_m_n *m_n)
{
	drm_printf(p, "%s: lanes: %i; data_m: %u, data_n: %u, link_m: %u, link_n: %u, tu: %u\n",
		   id, lane_count,
		   m_n->data_m, m_n->data_n,
		   m_n->link_m, m_n->link_n, m_n->tu);
}

static void
intel_dump_infoframe(struct intel_display *display,
		     const union hdmi_infoframe *frame)
{
	if (!drm_debug_enabled(DRM_UT_KMS))
		return;

	hdmi_infoframe_log(KERN_DEBUG, display->drm->dev, frame);
}

#define OUTPUT_TYPE(x) [INTEL_OUTPUT_ ## x] = #x

static const char * const output_type_str[] = {
	OUTPUT_TYPE(UNUSED),
	OUTPUT_TYPE(ANALOG),
	OUTPUT_TYPE(DVO),
	OUTPUT_TYPE(SDVO),
	OUTPUT_TYPE(LVDS),
	OUTPUT_TYPE(TVOUT),
	OUTPUT_TYPE(HDMI),
	OUTPUT_TYPE(DP),
	OUTPUT_TYPE(EDP),
	OUTPUT_TYPE(DSI),
	OUTPUT_TYPE(DDI),
	OUTPUT_TYPE(DP_MST),
};

#undef OUTPUT_TYPE

static void snprintf_output_types(char *buf, size_t len,
				  unsigned int output_types)
{
	char *str = buf;
	int i;

	str[0] = '\0';

	for (i = 0; i < ARRAY_SIZE(output_type_str); i++) {
		int r;

		if ((output_types & BIT(i)) == 0)
			continue;

		r = snprintf(str, len, "%s%s",
			     str != buf ? "," : "", output_type_str[i]);
		if (r >= len)

Annotation

Implementation Notes