Commit dc43e923 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov

drm/msm: allow compile time selection of driver components

MSM DRM driver already allows one to compile out the DP or DSI support.
Add support for disabling other features like MDP4/MDP5/DPU drivers or
direct HDMI output support.
Suggested-by: default avatarStephen Boyd <swboyd@chromium.org>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/482508/
Link: https://lore.kernel.org/r/20220419155346.1272627-6-dmitry.baryshkov@linaro.orgSigned-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
parent 5d44531b
...@@ -47,12 +47,39 @@ config DRM_MSM_GPU_SUDO ...@@ -47,12 +47,39 @@ config DRM_MSM_GPU_SUDO
Only use this if you are a driver developer. This should *not* Only use this if you are a driver developer. This should *not*
be enabled for production kernels. If unsure, say N. be enabled for production kernels. If unsure, say N.
config DRM_MSM_HDMI_HDCP config DRM_MSM_MDSS
bool "Enable HDMI HDCP support in MSM DRM driver" bool
depends on DRM_MSM
default n
config DRM_MSM_MDP4
bool "Enable MDP4 support in MSM DRM driver"
depends on DRM_MSM depends on DRM_MSM
default y default y
help help
Choose this option to enable HDCP state machine Compile in support for the Mobile Display Processor v4 (MDP4) in
the MSM DRM driver. It is the older display controller found in
devices using APQ8064/MSM8960/MSM8x60 platforms.
config DRM_MSM_MDP5
bool "Enable MDP5 support in MSM DRM driver"
depends on DRM_MSM
select DRM_MSM_MDSS
default y
help
Compile in support for the Mobile Display Processor v5 (MDP5) in
the MSM DRM driver. It is the display controller found in devices
using e.g. APQ8016/MSM8916/APQ8096/MSM8996/MSM8974/SDM6x0 platforms.
config DRM_MSM_DPU
bool "Enable DPU support in MSM DRM driver"
depends on DRM_MSM
select DRM_MSM_MDSS
default y
help
Compile in support for the Display Processing Unit in
the MSM DRM driver. It is the display controller found in devices
using e.g. SDM845 and newer platforms.
config DRM_MSM_DP config DRM_MSM_DP
bool "Enable DisplayPort support in MSM DRM driver" bool "Enable DisplayPort support in MSM DRM driver"
...@@ -117,3 +144,20 @@ config DRM_MSM_DSI_7NM_PHY ...@@ -117,3 +144,20 @@ config DRM_MSM_DSI_7NM_PHY
help help
Choose this option if DSI PHY on SM8150/SM8250/SC7280 is used on Choose this option if DSI PHY on SM8150/SM8250/SC7280 is used on
the platform. the platform.
config DRM_MSM_HDMI
bool "Enable HDMI support in MSM DRM driver"
depends on DRM_MSM
default y
help
Compile in support for the HDMI output MSM DRM driver. It can
be a primary or a secondary display on device. Note that this is used
only for the direct HDMI output. If the device outputs HDMI data
throught some kind of DSI-to-HDMI bridge, this option can be disabled.
config DRM_MSM_HDMI_HDCP
bool "Enable HDMI HDCP support in MSM DRM driver"
depends on DRM_MSM && DRM_MSM_HDMI
default y
help
Choose this option to enable HDCP state machine
...@@ -16,6 +16,8 @@ msm-y := \ ...@@ -16,6 +16,8 @@ msm-y := \
adreno/a6xx_gpu.o \ adreno/a6xx_gpu.o \
adreno/a6xx_gmu.o \ adreno/a6xx_gmu.o \
adreno/a6xx_hfi.o \ adreno/a6xx_hfi.o \
msm-$(CONFIG_DRM_MSM_HDMI) += \
hdmi/hdmi.o \ hdmi/hdmi.o \
hdmi/hdmi_audio.o \ hdmi/hdmi_audio.o \
hdmi/hdmi_bridge.o \ hdmi/hdmi_bridge.o \
...@@ -27,9 +29,10 @@ msm-y := \ ...@@ -27,9 +29,10 @@ msm-y := \
hdmi/hdmi_phy_8x60.o \ hdmi/hdmi_phy_8x60.o \
hdmi/hdmi_phy_8x74.o \ hdmi/hdmi_phy_8x74.o \
hdmi/hdmi_pll_8960.o \ hdmi/hdmi_pll_8960.o \
disp/mdp_format.o \
disp/mdp_kms.o \ msm-$(CONFIG_DRM_MSM_MDP4) += \
disp/mdp4/mdp4_crtc.o \ disp/mdp4/mdp4_crtc.o \
disp/mdp4/mdp4_dsi_encoder.o \
disp/mdp4/mdp4_dtv_encoder.o \ disp/mdp4/mdp4_dtv_encoder.o \
disp/mdp4/mdp4_lcdc_encoder.o \ disp/mdp4/mdp4_lcdc_encoder.o \
disp/mdp4/mdp4_lvds_connector.o \ disp/mdp4/mdp4_lvds_connector.o \
...@@ -37,7 +40,10 @@ msm-y := \ ...@@ -37,7 +40,10 @@ msm-y := \
disp/mdp4/mdp4_irq.o \ disp/mdp4/mdp4_irq.o \
disp/mdp4/mdp4_kms.o \ disp/mdp4/mdp4_kms.o \
disp/mdp4/mdp4_plane.o \ disp/mdp4/mdp4_plane.o \
msm-$(CONFIG_DRM_MSM_MDP5) += \
disp/mdp5/mdp5_cfg.o \ disp/mdp5/mdp5_cfg.o \
disp/mdp5/mdp5_cmd_encoder.o \
disp/mdp5/mdp5_ctl.o \ disp/mdp5/mdp5_ctl.o \
disp/mdp5/mdp5_crtc.o \ disp/mdp5/mdp5_crtc.o \
disp/mdp5/mdp5_encoder.o \ disp/mdp5/mdp5_encoder.o \
...@@ -47,6 +53,8 @@ msm-y := \ ...@@ -47,6 +53,8 @@ msm-y := \
disp/mdp5/mdp5_mixer.o \ disp/mdp5/mdp5_mixer.o \
disp/mdp5/mdp5_plane.o \ disp/mdp5/mdp5_plane.o \
disp/mdp5/mdp5_smp.o \ disp/mdp5/mdp5_smp.o \
msm-$(CONFIG_DRM_MSM_DPU) += \
disp/dpu1/dpu_core_perf.o \ disp/dpu1/dpu_core_perf.o \
disp/dpu1/dpu_crtc.o \ disp/dpu1/dpu_crtc.o \
disp/dpu1/dpu_encoder.o \ disp/dpu1/dpu_encoder.o \
...@@ -69,6 +77,13 @@ msm-y := \ ...@@ -69,6 +77,13 @@ msm-y := \
disp/dpu1/dpu_plane.o \ disp/dpu1/dpu_plane.o \
disp/dpu1/dpu_rm.o \ disp/dpu1/dpu_rm.o \
disp/dpu1/dpu_vbif.o \ disp/dpu1/dpu_vbif.o \
msm-$(CONFIG_DRM_MSM_MDSS) += \
msm_mdss.o \
msm-y += \
disp/mdp_format.o \
disp/mdp_kms.o \
disp/msm_disp_snapshot.o \ disp/msm_disp_snapshot.o \
disp/msm_disp_snapshot_util.o \ disp/msm_disp_snapshot_util.o \
msm_atomic.o \ msm_atomic.o \
...@@ -86,7 +101,6 @@ msm-y := \ ...@@ -86,7 +101,6 @@ msm-y := \
msm_gpu_devfreq.o \ msm_gpu_devfreq.o \
msm_io_utils.o \ msm_io_utils.o \
msm_iommu.o \ msm_iommu.o \
msm_mdss.o \
msm_perf.o \ msm_perf.o \
msm_rd.o \ msm_rd.o \
msm_ringbuffer.o \ msm_ringbuffer.o \
...@@ -117,12 +131,10 @@ msm-$(CONFIG_DRM_FBDEV_EMULATION) += msm_fbdev.o ...@@ -117,12 +131,10 @@ msm-$(CONFIG_DRM_FBDEV_EMULATION) += msm_fbdev.o
msm-$(CONFIG_DRM_MSM_HDMI_HDCP) += hdmi/hdmi_hdcp.o msm-$(CONFIG_DRM_MSM_HDMI_HDCP) += hdmi/hdmi_hdcp.o
msm-$(CONFIG_DRM_MSM_DSI) += dsi/dsi.o \ msm-$(CONFIG_DRM_MSM_DSI) += dsi/dsi.o \
disp/mdp4/mdp4_dsi_encoder.o \
dsi/dsi_cfg.o \ dsi/dsi_cfg.o \
dsi/dsi_host.o \ dsi/dsi_host.o \
dsi/dsi_manager.o \ dsi/dsi_manager.o \
dsi/phy/dsi_phy.o \ dsi/phy/dsi_phy.o
disp/mdp5/mdp5_cmd_encoder.o
msm-$(CONFIG_DRM_MSM_DSI_28NM_PHY) += dsi/phy/dsi_phy_28nm.o msm-$(CONFIG_DRM_MSM_DSI_28NM_PHY) += dsi/phy/dsi_phy_28nm.o
msm-$(CONFIG_DRM_MSM_DSI_20NM_PHY) += dsi/phy/dsi_phy_20nm.o msm-$(CONFIG_DRM_MSM_DSI_20NM_PHY) += dsi/phy/dsi_phy_20nm.o
......
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
#include "mdp4_kms.h" #include "mdp4_kms.h"
#ifdef CONFIG_DRM_MSM_DSI
struct mdp4_dsi_encoder { struct mdp4_dsi_encoder {
struct drm_encoder base; struct drm_encoder base;
struct drm_panel *panel; struct drm_panel *panel;
...@@ -170,3 +172,4 @@ struct drm_encoder *mdp4_dsi_encoder_init(struct drm_device *dev) ...@@ -170,3 +172,4 @@ struct drm_encoder *mdp4_dsi_encoder_init(struct drm_device *dev)
return ERR_PTR(ret); return ERR_PTR(ret);
} }
#endif /* CONFIG_DRM_MSM_DSI */
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include "mdp5_kms.h" #include "mdp5_kms.h"
#ifdef CONFIG_DRM_MSM_DSI
static struct mdp5_kms *get_kms(struct drm_encoder *encoder) static struct mdp5_kms *get_kms(struct drm_encoder *encoder)
{ {
struct msm_drm_private *priv = encoder->dev->dev_private; struct msm_drm_private *priv = encoder->dev->dev_private;
...@@ -198,3 +200,4 @@ int mdp5_cmd_encoder_set_split_display(struct drm_encoder *encoder, ...@@ -198,3 +200,4 @@ int mdp5_cmd_encoder_set_split_display(struct drm_encoder *encoder,
return 0; return 0;
} }
#endif /* CONFIG_DRM_MSM_DSI */
...@@ -291,10 +291,20 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev); ...@@ -291,10 +291,20 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev);
void msm_fbdev_free(struct drm_device *dev); void msm_fbdev_free(struct drm_device *dev);
struct hdmi; struct hdmi;
#ifdef CONFIG_DRM_MSM_HDMI
int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev, int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev,
struct drm_encoder *encoder); struct drm_encoder *encoder);
void __init msm_hdmi_register(void); void __init msm_hdmi_register(void);
void __exit msm_hdmi_unregister(void); void __exit msm_hdmi_unregister(void);
#else
static inline int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev,
struct drm_encoder *encoder)
{
return -EINVAL;
}
static inline void __init msm_hdmi_register(void) {}
static inline void __exit msm_hdmi_unregister(void) {}
#endif
struct msm_dsi; struct msm_dsi;
#ifdef CONFIG_DRM_MSM_DSI #ifdef CONFIG_DRM_MSM_DSI
...@@ -409,14 +419,37 @@ static inline void msm_dp_debugfs_init(struct msm_dp *dp_display, ...@@ -409,14 +419,37 @@ static inline void msm_dp_debugfs_init(struct msm_dp *dp_display,
#endif #endif
#ifdef CONFIG_DRM_MSM_MDP4
void msm_mdp4_register(void); void msm_mdp4_register(void);
void msm_mdp4_unregister(void); void msm_mdp4_unregister(void);
#else
static inline void msm_mdp4_register(void) {}
static inline void msm_mdp4_unregister(void) {}
#endif
#ifdef CONFIG_DRM_MSM_MDP5
void msm_mdp_register(void); void msm_mdp_register(void);
void msm_mdp_unregister(void); void msm_mdp_unregister(void);
#else
static inline void msm_mdp_register(void) {}
static inline void msm_mdp_unregister(void) {}
#endif
#ifdef CONFIG_DRM_MSM_DPU
void msm_dpu_register(void); void msm_dpu_register(void);
void msm_dpu_unregister(void); void msm_dpu_unregister(void);
#else
static inline void msm_dpu_register(void) {}
static inline void msm_dpu_unregister(void) {}
#endif
#ifdef CONFIG_DRM_MSM_MDSS
void msm_mdss_register(void); void msm_mdss_register(void);
void msm_mdss_unregister(void); void msm_mdss_unregister(void);
#else
static inline void msm_mdss_register(void) {}
static inline void msm_mdss_unregister(void) {}
#endif
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m); void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m);
......
...@@ -312,8 +312,17 @@ static const struct dev_pm_ops mdss_pm_ops = { ...@@ -312,8 +312,17 @@ static const struct dev_pm_ops mdss_pm_ops = {
static int find_mdp_node(struct device *dev, void *data) static int find_mdp_node(struct device *dev, void *data)
{ {
return of_match_node(dpu_dt_match, dev->of_node) || #ifdef CONFIG_DRM_MSM_DPU
of_match_node(mdp5_dt_match, dev->of_node); if (of_match_node(dpu_dt_match, dev->of_node))
return true;
#endif
#ifdef CONFIG_DRM_MSM_MDP5
if (of_match_node(mdp5_dt_match, dev->of_node))
return true;
#endif
return false;
} }
static int mdss_probe(struct platform_device *pdev) static int mdss_probe(struct platform_device *pdev)
......
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