Commit b3c8fa0d authored by Jani Nikula's avatar Jani Nikula Committed by Jouni Högander
Browse files

drm/{i915, xe}/display: pass parent interface to display probe



Let's gradually start calling i915 and xe parent, or core, drivers from
display via function pointers passed at display probe.

Going forward, the struct intel_display_parent_interface is expected to
include const pointers to sub-structs by functionality, for example:

struct intel_display_rpm {
	struct ref_tracker *(*get)(struct drm_device *drm);
	/* ... */
};

struct intel_display_parent_interface {
	/* ... */
	const struct intel_display_rpm *rpm;
};

This is a baby step towards not building display as part of both i915
and xe drivers, but rather making it an independent driver interfacing
with the two.

v3: useless include additions dropped
v2: unrelated include removal dropped

Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarJouni Högander <jouni.hogander@intel.com>
Link: https://patch.msgid.link/20251030202836.1815680-2-jouni.hogander@intel.com
parent ad7108f9
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ struct intel_cdclk_vals;
struct intel_color_funcs;
struct intel_crtc;
struct intel_crtc_state;
struct intel_display_parent_interface;
struct intel_dmc;
struct intel_dpll_global_funcs;
struct intel_dpll_mgr;
@@ -291,6 +292,9 @@ struct intel_display {
	/* Intel PCH: where the south display engine lives */
	enum intel_pch pch_type;

	/* Parent, or core, driver functions exposed to display */
	const struct intel_display_parent_interface *parent;

	/* Display functions */
	struct {
		/* Top level crtc-ish functions */
+4 −1
Original line number Diff line number Diff line
@@ -1647,7 +1647,8 @@ static void display_platforms_or(struct intel_display_platforms *dst,
	bitmap_or(dst->bitmap, dst->bitmap, src->bitmap, display_platforms_num_bits());
}

struct intel_display *intel_display_device_probe(struct pci_dev *pdev)
struct intel_display *intel_display_device_probe(struct pci_dev *pdev,
						 const struct intel_display_parent_interface *parent)
{
	struct intel_display *display;
	const struct intel_display_device_info *info;
@@ -1663,6 +1664,8 @@ struct intel_display *intel_display_device_probe(struct pci_dev *pdev)
	/* Add drm device backpointer as early as possible. */
	display->drm = pci_get_drvdata(pdev);

	display->parent = parent;

	intel_display_params_copy(&display->params);

	if (has_no_display(pdev)) {
+3 −1
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@

struct drm_printer;
struct intel_display;
struct intel_display_parent_interface;
struct pci_dev;

/*
@@ -313,7 +314,8 @@ struct intel_display_device_info {

bool intel_display_device_present(struct intel_display *display);
bool intel_display_device_enabled(struct intel_display *display);
struct intel_display *intel_display_device_probe(struct pci_dev *pdev);
struct intel_display *intel_display_device_probe(struct pci_dev *pdev,
						 const struct intel_display_parent_interface *parent);
void intel_display_device_remove(struct intel_display *display);
void intel_display_device_info_runtime_init(struct intel_display *display);

+10 −1
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@
#include <drm/drm_managed.h>
#include <drm/drm_probe_helper.h>
#include <drm/intel/display_member.h>
#include <drm/intel/display_parent_interface.h>

#include "display/i9xx_display_sr.h"
#include "display/intel_bw.h"
@@ -738,6 +739,14 @@ static void i915_welcome_messages(struct drm_i915_private *dev_priv)
			 "DRM_I915_DEBUG_RUNTIME_PM enabled\n");
}

static const struct intel_display_parent_interface parent = {
};

const struct intel_display_parent_interface *i915_driver_parent_interface(void)
{
	return &parent;
}

/* Ensure drm and display members are placed properly. */
INTEL_DISPLAY_MEMBER_STATIC_ASSERT(struct drm_i915_private, drm, display);

@@ -762,7 +771,7 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)
	/* Set up device info and initial runtime info. */
	intel_device_info_driver_create(i915, pdev->device, match_info);

	display = intel_display_device_probe(pdev);
	display = intel_display_device_probe(pdev, &parent);
	if (IS_ERR(display))
		return ERR_CAST(display);

+2 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ struct pci_dev;
struct pci_device_id;
struct drm_i915_private;
struct drm_printer;
struct intel_display_parent_interface;

#define DRIVER_NAME		"i915"
#define DRIVER_DESC		"Intel Graphics"
@@ -24,6 +25,7 @@ void i915_driver_shutdown(struct drm_i915_private *i915);

int i915_driver_resume_switcheroo(struct drm_i915_private *i915);
int i915_driver_suspend_switcheroo(struct drm_i915_private *i915, pm_message_t state);
const struct intel_display_parent_interface *i915_driver_parent_interface(void);

void
i915_print_iommu_status(struct drm_i915_private *i915, struct drm_printer *p);
Loading