[Freedreno] [PATCH v3 5/5] drm/msm: allow compile time selection of driver components

Dmitry Baryshkov dmitry.baryshkov at linaro.org
Thu Mar 17 15:43:15 UTC 2022


On 17/03/2022 15:44, Dmitry Baryshkov wrote:
> On 16/03/2022 20:26, Abhinav Kumar wrote:
>>
>>
>> On 3/16/2022 12:31 AM, Dmitry Baryshkov wrote:
>>> On 16/03/2022 03:28, Abhinav Kumar wrote:
>>>>
>>>>
>>>> On 3/3/2022 7:21 PM, Dmitry Baryshkov 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 at chromium.org>
>>>>> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
>>>>> ---
>>>>>   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
>>>> shouldnt DRM_MSM_MDSS be defaulted to y?
>>>
>>> No, it will be selected either by MDP5 or by DPU1. It is not used if 
>>> DRM_MSM is compiled with just MDP4 or headless support in mind.
>> Ok got it.
>>>
>>>>
>>>> Another question is the compilation validation of the combinations 
>>>> of these.
>>>>
>>>> So we need to try:
>>>>
>>>> 1) DRM_MSM_MDSS + DRM_MSM_MDP4
>>>> 2) DRM_MSM_MDSS + DRM_MSM_MDP5
>>>> 3) DRM_MSM_MDSS + DRM_MSM_DPU
>>>>
>>>> Earlier since all of them were compiled together any 
>>>> inter-dependencies will not show up. Now since we are separating it 
>>>> out, just wanted to make sure each of the combos compile?
>>>
>>> I think you meant:
>>> - headless
>>> - MDP4
>>> - MDP5
>>> - DPU1
>>> - MDP4 + MDP5
>>> - MDP4 + DPU1
>>> - MDP5 + DPU1
>>> - all three drivers
>>>
>> Yes, each of these combinations.
> 
> Each of them was tested.

Hmm. It looks like I had DSI disabled during the tests. Will fix it up.

> 
>>>>
>>>>> +
>>>>> +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
>>>>> +      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)
>>>
>>>
> 
> 


-- 
With best wishes
Dmitry


More information about the Freedreno mailing list