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

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

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/i915/display/skl_watermark.c
Extension
.c
Size
115717 bytes
Lines
4095
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: operation-table or driver-model contract
Status
pattern 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

static const struct file_operations skl_watermark_ipc_status_fops = {
	.owner = THIS_MODULE,
	.open = skl_watermark_ipc_status_open,
	.read = seq_read,
	.llseek = seq_lseek,
	.release = single_release,
	.write = skl_watermark_ipc_status_write
};

static int intel_sagv_status_show(struct seq_file *m, void *unused)
{
	struct intel_display *display = m->private;
	static const char * const sagv_status[] = {
		[I915_SAGV_UNKNOWN] = "unknown",
		[I915_SAGV_DISABLED] = "disabled",
		[I915_SAGV_ENABLED] = "enabled",
		[I915_SAGV_NOT_CONTROLLED] = "not controlled",
	};

	seq_printf(m, "SAGV available: %s\n", str_yes_no(intel_has_sagv(display)));
	seq_printf(m, "SAGV modparam: %s\n",
		   str_enabled_disabled(display->params.enable_sagv));
	seq_printf(m, "SAGV status: %s\n", sagv_status[display->sagv.status]);
	seq_printf(m, "SAGV block time: %d usec\n", display->sagv.block_time_us);

	return 0;
}

DEFINE_SHOW_ATTRIBUTE(intel_sagv_status);

void skl_watermark_debugfs_register(struct intel_display *display)
{
	struct dentry *debugfs_root = display->drm->debugfs_root;

	if (HAS_IPC(display))
		debugfs_create_file("i915_ipc_status", 0644, debugfs_root,
				    display, &skl_watermark_ipc_status_fops);

	if (HAS_SAGV(display))
		debugfs_create_file("i915_sagv_status", 0444, debugfs_root,
				    display, &intel_sagv_status_fops);
}

unsigned int skl_watermark_max_latency(struct intel_display *display, int initial_wm_level)
{
	int level;

	for (level = display->wm.num_levels - 1; level >= initial_wm_level; level--) {
		unsigned int latency = skl_wm_latency(display, level, NULL);

		if (latency)
			return latency;
	}

	return 0;
}

Annotation

Implementation Notes