Commit 98290b0a authored by Dmitry Baryshkov's avatar Dmitry Baryshkov Committed by Rob Clark
Browse files

drm/msm: make it possible to disable KMS-related code.



If the Adreno device is used in a headless mode, there is no need to
build all KMS components. Build corresponding parts conditionally, only
selecting them if modeset support is actually required.

Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/662581/


Signed-off-by: default avatarRob Clark <robin.clark@oss.qualcomm.com>
parent e10e1a40
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -68,6 +68,14 @@ config DRM_MSM_VALIDATE_XML
	  Validate XML files with register definitions against rules-fd schema.
	  This option is mostly targeting DRM MSM developers. If unsure, say N.

config DRM_MSM_KMS
	def_bool n
	depends on DRM_MSM

config DRM_MSM_KMS_FBDEV
	def_bool DRM_FBDEV_EMULATION
	depends on DRM_MSM_KMS

config DRM_MSM_MDSS
	bool
	depends on DRM_MSM
@@ -76,6 +84,7 @@ config DRM_MSM_MDSS
config DRM_MSM_MDP4
	bool "Enable MDP4 support in MSM DRM driver"
	depends on DRM_MSM
	select DRM_MSM_KMS
	default y
	help
	  Compile in support for the Mobile Display Processor v4 (MDP4) in
@@ -86,6 +95,7 @@ config DRM_MSM_MDP5
	bool "Enable MDP5 support in MSM DRM driver"
	depends on DRM_MSM
	select DRM_MSM_MDSS
	select DRM_MSM_KMS
	default y
	help
	  Compile in support for the Mobile Display Processor v5 (MDP5) in
@@ -96,6 +106,7 @@ config DRM_MSM_DPU
	bool "Enable DPU support in MSM DRM driver"
	depends on DRM_MSM
	select DRM_MSM_MDSS
	select DRM_MSM_KMS
	select DRM_DISPLAY_DSC_HELPER
	default y
	help
@@ -106,6 +117,7 @@ config DRM_MSM_DPU
config DRM_MSM_DP
	bool "Enable DisplayPort support in MSM DRM driver"
	depends on DRM_MSM
	depends on DRM_MSM_KMS
	select DRM_DISPLAY_HDMI_AUDIO_HELPER
	select RATIONAL
	default y
@@ -117,6 +129,7 @@ config DRM_MSM_DP
config DRM_MSM_DSI
	bool "Enable DSI support in MSM DRM driver"
	depends on DRM_MSM
	depends on DRM_MSM_KMS
	select DRM_PANEL
	select DRM_MIPI_DSI
	select DRM_DISPLAY_DSC_HELPER
@@ -172,6 +185,7 @@ config DRM_MSM_DSI_7NM_PHY
config DRM_MSM_HDMI
	bool "Enable HDMI support in MSM DRM driver"
	depends on DRM_MSM
	depends on DRM_MSM_KMS
	default y
	select DRM_DISPLAY_HDMI_HELPER
	select DRM_DISPLAY_HDMI_STATE_HELPER
+10 −9
Original line number Diff line number Diff line
@@ -100,18 +100,15 @@ msm-display-$(CONFIG_DRM_MSM_DPU) += \
msm-display-$(CONFIG_DRM_MSM_MDSS) += \
	msm_mdss.o \

msm-display-y += \
msm-display-$(CONFIG_DRM_MSM_KMS) += \
	disp/mdp_format.o \
	disp/mdp_kms.o \
	disp/msm_disp_snapshot.o \
	disp/msm_disp_snapshot_util.o \

msm-y += \
	msm_atomic.o \
	msm_atomic_tracepoints.o \
	msm_debugfs.o \
	msm_drv.o \
	msm_fb.o \
	msm_fence.o \
	msm_gem.o \
	msm_gem_prime.o \
@@ -122,7 +119,6 @@ msm-y += \
	msm_gpu_devfreq.o \
	msm_io_utils.o \
	msm_iommu.o \
	msm_kms.o \
	msm_perf.o \
	msm_rd.o \
	msm_ringbuffer.o \
@@ -130,13 +126,17 @@ msm-y += \
	msm_syncobj.o \
	msm_gpu_tracepoints.o \

msm-$(CONFIG_DRM_FBDEV_EMULATION) += msm_fbdev.o
msm-$(CONFIG_DRM_MSM_KMS) += \
	msm_atomic.o \
	msm_atomic_tracepoints.o \
	msm_fb.o \
	msm_kms.o \

msm-display-$(CONFIG_DEBUG_FS) += \
	dp/dp_debug.o
msm-$(CONFIG_DRM_MSM_KMS_FBDEV) += msm_fbdev.o

msm-display-$(CONFIG_DRM_MSM_DP)+= dp/dp_aux.o \
	dp/dp_ctrl.o \
	dp/dp_debug.o \
	dp/dp_display.o \
	dp/dp_drm.o \
	dp/dp_link.o \
@@ -159,7 +159,8 @@ msm-display-$(CONFIG_DRM_MSM_DSI_14NM_PHY) += dsi/phy/dsi_phy_14nm.o
msm-display-$(CONFIG_DRM_MSM_DSI_10NM_PHY) += dsi/phy/dsi_phy_10nm.o
msm-display-$(CONFIG_DRM_MSM_DSI_7NM_PHY) += dsi/phy/dsi_phy_7nm.o

msm-y += $(adreno-y) $(msm-display-y)
msm-y += $(adreno-y)
msm-$(CONFIG_DRM_MSM_KMS) += $(msm-display-y)

obj-$(CONFIG_DRM_MSM)	+= msm.o

+2 −2
Original line number Diff line number Diff line
@@ -742,7 +742,7 @@ void dpu_crtc_frame_event_cb(struct drm_crtc *crtc, u32 event)
	fevent->event = event;
	fevent->crtc = crtc;
	fevent->ts = ktime_get();
	kthread_queue_work(priv->event_thread[crtc_id].worker, &fevent->work);
	kthread_queue_work(priv->kms->event_thread[crtc_id].worker, &fevent->work);
}

/**
@@ -911,7 +911,7 @@ static void dpu_crtc_atomic_flush(struct drm_crtc *crtc,
	dev = crtc->dev;
	priv = dev->dev_private;

	if (crtc->index >= ARRAY_SIZE(priv->event_thread)) {
	if (crtc->index >= ARRAY_SIZE(priv->kms->event_thread)) {
		DPU_ERROR("invalid crtc index[%d]\n", crtc->index);
		return;
	}
+4 −0
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@

#define pr_fmt(fmt)"[drm-dp] %s: " fmt, __func__

#ifdef CONFIG_DEBUG_FS

#include <linux/debugfs.h>
#include <drm/drm_connector.h>
#include <drm/drm_file.h>
@@ -234,3 +236,5 @@ int msm_dp_debug_init(struct device *dev, struct msm_dp_panel *panel,

	return 0;
}

#endif
+53 −39
Original line number Diff line number Diff line
@@ -117,6 +117,36 @@ static const struct file_operations msm_gpu_fops = {
	.release = msm_gpu_release,
};

#ifdef CONFIG_DRM_MSM_KMS
static int msm_fb_show(struct seq_file *m, void *arg)
{
	struct drm_info_node *node = m->private;
	struct drm_device *dev = node->minor->dev;
	struct drm_framebuffer *fb, *fbdev_fb = NULL;

	if (dev->fb_helper && dev->fb_helper->fb) {
		seq_puts(m, "fbcon ");
		fbdev_fb = dev->fb_helper->fb;
		msm_framebuffer_describe(fbdev_fb, m);
	}

	mutex_lock(&dev->mode_config.fb_lock);
	list_for_each_entry(fb, &dev->mode_config.fb_list, head) {
		if (fb == fbdev_fb)
			continue;

		seq_puts(m, "user ");
		msm_framebuffer_describe(fb, m);
	}
	mutex_unlock(&dev->mode_config.fb_lock);

	return 0;
}

static struct drm_info_list msm_kms_debugfs_list[] = {
		{ "fb", msm_fb_show },
};

/*
 * Display Snapshot:
 */
@@ -180,6 +210,27 @@ static const struct file_operations msm_kms_fops = {
	.release = msm_kms_release,
};

static void msm_debugfs_kms_init(struct drm_minor *minor)
{
	struct drm_device *dev = minor->dev;
	struct msm_drm_private *priv = dev->dev_private;

	drm_debugfs_create_files(msm_kms_debugfs_list,
				 ARRAY_SIZE(msm_kms_debugfs_list),
				 minor->debugfs_root, minor);
	debugfs_create_file("kms", 0400, minor->debugfs_root,
			    dev, &msm_kms_fops);

	if (priv->kms->funcs->debugfs_init)
		priv->kms->funcs->debugfs_init(priv->kms, minor);

}
#else /* ! CONFIG_DRM_MSM_KMS */
static void msm_debugfs_kms_init(struct drm_minor *minor)
{
}
#endif

/*
 * Other debugfs:
 */
@@ -267,40 +318,11 @@ static int msm_mm_show(struct seq_file *m, void *arg)
	return 0;
}

static int msm_fb_show(struct seq_file *m, void *arg)
{
	struct drm_info_node *node = m->private;
	struct drm_device *dev = node->minor->dev;
	struct drm_framebuffer *fb, *fbdev_fb = NULL;

	if (dev->fb_helper && dev->fb_helper->fb) {
		seq_printf(m, "fbcon ");
		fbdev_fb = dev->fb_helper->fb;
		msm_framebuffer_describe(fbdev_fb, m);
	}

	mutex_lock(&dev->mode_config.fb_lock);
	list_for_each_entry(fb, &dev->mode_config.fb_list, head) {
		if (fb == fbdev_fb)
			continue;

		seq_printf(m, "user ");
		msm_framebuffer_describe(fb, m);
	}
	mutex_unlock(&dev->mode_config.fb_lock);

	return 0;
}

static struct drm_info_list msm_debugfs_list[] = {
		{"gem", msm_gem_show},
		{ "mm", msm_mm_show },
};

static struct drm_info_list msm_kms_debugfs_list[] = {
		{ "fb", msm_fb_show },
};

static int late_init_minor(struct drm_minor *minor)
{
	int ret;
@@ -375,20 +397,12 @@ void msm_debugfs_init(struct drm_minor *minor)
	if (priv->gpu_pdev)
		msm_debugfs_gpu_init(minor);

	if (priv->kms) {
		drm_debugfs_create_files(msm_kms_debugfs_list,
					 ARRAY_SIZE(msm_kms_debugfs_list),
					 minor->debugfs_root, minor);
		debugfs_create_file("kms", S_IRUSR, minor->debugfs_root,
				    dev, &msm_kms_fops);
	}
	if (priv->kms)
		msm_debugfs_kms_init(minor);

	debugfs_create_file("shrink", S_IRWXU, minor->debugfs_root,
		dev, &shrink_fops);

	if (priv->kms && priv->kms->funcs->debugfs_init)
		priv->kms->funcs->debugfs_init(priv->kms, minor);

	fault_create_debugfs_attr("fail_gem_alloc", minor->debugfs_root,
				  &fail_gem_alloc);
	fault_create_debugfs_attr("fail_gem_iova", minor->debugfs_root,
Loading