On Thu, Mar 3, 2022 at 7:21 PM Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> wrote: > > 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: Stephen Boyd <swboyd@xxxxxxxxxxxx> > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> > --- > drivers/gpu/drm/msm/Kconfig | 50 ++++++++++++++++++++++++++++++++-- > drivers/gpu/drm/msm/Makefile | 18 ++++++++++-- > drivers/gpu/drm/msm/msm_drv.h | 33 ++++++++++++++++++++++ > drivers/gpu/drm/msm/msm_mdss.c | 13 +++++++-- > 4 files changed, 106 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig > index 9b019598e042..3735fd41eb3b 100644 > --- a/drivers/gpu/drm/msm/Kconfig > +++ b/drivers/gpu/drm/msm/Kconfig > @@ -46,12 +46,39 @@ config DRM_MSM_GPU_SUDO > Only use this if you are a driver developer. This should *not* > be enabled for production kernels. If unsure, say N. > > -config DRM_MSM_HDMI_HDCP > - bool "Enable HDMI HDCP support in MSM DRM driver" > +config DRM_MSM_MDSS > + bool > + depends on DRM_MSM > + default n > + > +config DRM_MSM_MDP4 > + bool "Enable MDP4 support in MSM DRM driver" > depends on DRM_MSM > default y > 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 (MDP4) in drive-by nit: s/MDP4/MDP5/ BR, -R > + 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 > bool "Enable DisplayPort support in MSM DRM driver" > @@ -116,3 +143,20 @@ config DRM_MSM_DSI_7NM_PHY > help > Choose this option if DSI PHY on SM8150/SM8250/SC7280 is used on > 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 > diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile > index e76927b42033..5fe9c20ab9ee 100644 > --- a/drivers/gpu/drm/msm/Makefile > +++ b/drivers/gpu/drm/msm/Makefile > @@ -16,6 +16,8 @@ msm-y := \ > adreno/a6xx_gpu.o \ > adreno/a6xx_gmu.o \ > adreno/a6xx_hfi.o \ > + > +msm-$(CONFIG_DRM_MSM_HDMI) += \ > hdmi/hdmi.o \ > hdmi/hdmi_audio.o \ > hdmi/hdmi_bridge.o \ > @@ -27,8 +29,8 @@ msm-y := \ > hdmi/hdmi_phy_8x60.o \ > hdmi/hdmi_phy_8x74.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_dtv_encoder.o \ > disp/mdp4/mdp4_lcdc_encoder.o \ > @@ -37,6 +39,8 @@ msm-y := \ > disp/mdp4/mdp4_irq.o \ > disp/mdp4/mdp4_kms.o \ > disp/mdp4/mdp4_plane.o \ > + > +msm-$(CONFIG_DRM_MSM_MDP5) += \ > disp/mdp5/mdp5_cfg.o \ > disp/mdp5/mdp5_ctl.o \ > disp/mdp5/mdp5_crtc.o \ > @@ -47,6 +51,8 @@ msm-y := \ > disp/mdp5/mdp5_mixer.o \ > disp/mdp5/mdp5_plane.o \ > disp/mdp5/mdp5_smp.o \ > + > +msm-$(CONFIG_DRM_MSM_DPU) += \ > disp/dpu1/dpu_core_perf.o \ > disp/dpu1/dpu_crtc.o \ > disp/dpu1/dpu_encoder.o \ > @@ -69,6 +75,13 @@ msm-y := \ > disp/dpu1/dpu_plane.o \ > disp/dpu1/dpu_rm.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_util.o \ > msm_atomic.o \ > @@ -86,7 +99,6 @@ msm-y := \ > msm_gpu_devfreq.o \ > msm_io_utils.o \ > msm_iommu.o \ > - msm_mdss.o \ > msm_perf.o \ > msm_rd.o \ > msm_ringbuffer.o \ > diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h > index c1aaadfbea34..6bad7e7b479d 100644 > --- a/drivers/gpu/drm/msm/msm_drv.h > +++ b/drivers/gpu/drm/msm/msm_drv.h > @@ -314,10 +314,20 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev); > void msm_fbdev_free(struct drm_device *dev); > > struct hdmi; > +#ifdef CONFIG_DRM_MSM_HDMI > int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev, > struct drm_encoder *encoder); > void __init msm_hdmi_register(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; > #ifdef CONFIG_DRM_MSM_DSI > @@ -432,14 +442,37 @@ static inline void msm_dp_debugfs_init(struct msm_dp *dp_display, > > #endif > > +#ifdef CONFIG_DRM_MSM_MDP4 > void msm_mdp4_register(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_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_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_unregister(void); > +#else > +static inline void msm_mdss_register(void) {} > +static inline void msm_mdss_unregister(void) {} > +#endif > > #ifdef CONFIG_DEBUG_FS > void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m); > diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c > index 4d25d8955301..66714b356762 100644 > --- a/drivers/gpu/drm/msm/msm_mdss.c > +++ b/drivers/gpu/drm/msm/msm_mdss.c > @@ -303,8 +303,17 @@ static const struct dev_pm_ops mdss_pm_ops = { > > static int find_mdp_node(struct device *dev, void *data) > { > - return of_match_node(dpu_dt_match, dev->of_node) || > - of_match_node(mdp5_dt_match, dev->of_node); > +#ifdef CONFIG_DRM_MSM_DPU > + 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) > -- > 2.34.1 >