Update SMP, add CFG and Overlay support
cover Update SMP, add CFG and Overlay support
This patch set updates the SMP config for MDP5, introduces a Config module for easier platform config update and allows MDP5 driver to use multiple CRTCs as well as multiple planes (overlay).
Stephane Viau (3):
drm/msm/mdp5: make SMP module dynamically configurable drm/msm/mdp5: introduce mdp5_cfg module drm/msm: add multiple CRTC and overlay support
drivers/gpu/drm/msm/Makefile | 2 + drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c | 215 ++++++++++++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h | 89 ++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 265 +++++++++++++++++------ drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c | 325 ++++++++++++++++++++++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.h | 121 +++++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_encoder.c | 13 ++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 251 ++++++++------------- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 97 ++------- drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 175 +++++++-------- drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c | 247 +++++++++++++++++---- drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.h | 22 +- 12 files changed, 1379 insertions(+), 443 deletions(-) create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.h
Signature · 8 lines
Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 1/3 drm/msm/mdp5: make SMP module dynamically configurable
The Shared Memory Pool (SMP) has its own limitation, features and state. Some examples are:
- the number of Memory Macro Block (MMB) and their size
- the number of lines that can be fetched
- the state of MMB currently allocated
- the computation of number of blocks required per plane
- client IDs ...
In order to avoid private data to be overwritten by other modules, let's make these private to the SMP module.
Some of these depend on the hardware configuration, let's add them to the mdp5_config struct.
In some hw configurations, some MMBs are statically tied to RGB pipes and cannot be re-allocated dynamically. This change introduces the concept of MMB static usage and makes sure that dynamic MMB requests are dimensioned accordingly.
A note on passing a pipe pointer, instead of client IDs:
Client IDs are SMP-related information. Passing PIPE information to SMP lets SMP module to find out which SMP client(s) are used. This allows the SMP module to access the PIPE pointer, which can be used for FIFO watermark configuration.
By the way, even though REG_MDP5_PIPE_REQPRIO_FIFO_WM_* registers are part of the PIPE registers, their functionality is to reflect the behavior of the SMP block. These registers access is now restricted to the SMP module.
--- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 28 +++- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 34 ++--- drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 92 ++---------- drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c | 242 +++++++++++++++++++++++++----- drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.h | 22 +-- 5 files changed, 265 insertions(+), 153 deletions(-)
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c +25 -3
@@ -30,6 +30,10 @@ const struct mdp5_config *mdp5_cfg;static const struct mdp5_config msm8x74_config = { .name ="msm8x74" , + .smp = { + .mmb_count =22 , + .mmb_size =4096 , + }, .ctl = { .count =5 , .base = {0x00600 ,0x00700 ,0x00800 ,0x00900 ,0x00a00 },
@@ -67,6 +71,15 @@ static const struct mdp5_config msm8x74_config = {static const struct mdp5_config apq8084_config = { .name ="apq8084" , + .smp = { + .mmb_count =44 , + .mmb_size =8192 , + .reserved_state[0 ] =GENMASK (7 ,0 ),/* first 8 MMBs */ + .reserved[CID_RGB0 ] =2 , + .reserved[CID_RGB1 ] =2 , + .reserved[CID_RGB2 ] =2 , + .reserved[CID_RGB3 ] =2 , + }, .ctl = { .count =5 , .base = {0x00600 ,0x00700 ,0x00800 ,0x00900 ,0x00a00 },
@@ -222,11 +235,15 @@ static void mdp5_destroy(struct msm_kms *kms) {struct mdp5_kms *mdp5_kms =to_mdp5_kms (to_mdp_kms (kms));struct msm_mmu *mmu = mdp5_kms->mmu; +void *smp = mdp5_kms->smp_priv;if (mmu) { mmu->funcs->detach (mmu, iommu_ports,ARRAY_SIZE (iommu_ports)); mmu->funcs->destroy (mmu); } +if (smp) +mdp5_smp_destroy (smp); +kfree (mdp5_kms); }
@@ -363,6 +380,7 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)struct mdp5_kms *mdp5_kms;struct msm_kms *kms =NULL ;struct msm_mmu *mmu; +void *priv;int i, ret; mdp5_kms =kzalloc (sizeof (*mdp5_kms),GFP_KERNEL );
@@ -377,7 +395,6 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev) kms = &mdp5_kms->base.base; mdp5_kms->dev = dev; - mdp5_kms->smp_blk_cnt = config->smp_blk_cnt; mdp5_kms->mmio =msm_ioremap (pdev,"mdp_phys" ,"MDP5" );if (IS_ERR (mdp5_kms->mmio)) {
@@ -429,6 +446,13 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)/* TODO: compute core clock rate at runtime */ clk_set_rate (mdp5_kms->src_clk, mdp5_kms->hw_cfg->max_clk); + priv =mdp5_smp_init (mdp5_kms->dev, &mdp5_kms->hw_cfg->smp); +if (IS_ERR (priv)) { + ret =PTR_ERR (priv); + goto fail; + } + mdp5_kms->smp_priv = priv; +/* make sure things are off before attaching iommu (bootloader could * have left things on, in which case we'll start getting faults if * we don't disable):
@@ -489,8 +513,6 @@ static struct mdp5_platform_config *mdp5_get_config(struct platform_device *dev)/* TODO */ #endif config.iommu =iommu_domain_alloc (&platform_bus_type); -/* TODO get from DT: */ - config.smp_blk_cnt =22 ;return &config; }
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h +11 -23
@@ -23,12 +23,22 @@#include "mdp/mdp_kms.h" /* dynamic offsets used by mdp5.xml.h (initialized in mdp5_kms.c) */ #define MDP5_MAX_BASES 8 +#define MAX_SMP_BLOCKS 44 +#define MAX_CLIENTS 32 +typedef DECLARE_BITMAP(mdp5_smp_state_t, MAX_SMP_BLOCKS);struct mdp5_sub_block {int count;uint32_t base[MDP5_MAX_BASES ]; }; +struct mdp5_smp_block { +int mmb_count;/* number of SMP MMBs */ +int mmb_size;/* MMB: size in bytes */ +mdp5_smp_state_t reserved_state;/* SMP MMBs statically allocated */ +int reserved[MAX_CLIENTS ];/* # of MMBs reserved per client */ +};struct mdp5_config {char *name; +struct mdp5_smp_block smp;struct mdp5_sub_block ctl;struct mdp5_sub_block pipe_vig;struct mdp5_sub_block pipe_rgb;
@@ -56,10 +66,7 @@ struct mdp5_kms {int id;struct msm_mmu *mmu; -/* for tracking smp allocation amongst pipes: */ -mdp5_smp_state_t smp_state; -struct mdp5_client_smp_state smp_client_state[CID_MAX ]; -int smp_blk_cnt; +void *smp_priv;/* io/register spaces: */ void __iomem *mmio, *vbif;
@@ -80,7 +87,6 @@ struct mdp5_kms {/* platform config data (ie. from DT, or pdata) */ struct mdp5_platform_config {struct iommu_domain *iommu; -int smp_blk_cnt; };static inline void mdp5_write (struct mdp5_kms *mdp5_kms,u32 reg,u32 data)
@@ -136,24 +142,6 @@ static inline int pipe2nclients(enum mdp5_pipe pipe) } } -static inline enum mdp5_client_id pipe2client (enum mdp5_pipe pipe,int plane) -{ -WARN_ON (plane >=pipe2nclients (pipe)); -switch (pipe) { -case SSPP_VIG0 :return CID_VIG0_Y + plane; -case SSPP_VIG1 :return CID_VIG1_Y + plane; -case SSPP_VIG2 :return CID_VIG2_Y + plane; -case SSPP_RGB0 :return CID_RGB0 ; -case SSPP_RGB1 :return CID_RGB1 ; -case SSPP_RGB2 :return CID_RGB2 ; -case SSPP_DMA0 :return CID_DMA0_Y + plane; -case SSPP_DMA1 :return CID_DMA1_Y + plane; -case SSPP_VIG3 :return CID_VIG3_Y + plane; -case SSPP_RGB3 :return CID_RGB3 ; -default :return CID_UNUSED ; - } -} -static inline uint32_t mixer2flush (int lm) {switch (lm) {
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c +12 -80
138 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c +204 -38
300 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.h +13 -9
@@ -1,4 +1,5 @@/* +* Copyright (c) 2014, The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark <[email protected]> *
@@ -20,12 +21,6 @@#include "msm_drv.h" -#define MAX_SMP_BLOCKS 22 -#define SMP_BLK_SIZE 4096 -#define SMP_ENTRIES_PER_BLK (SMP_BLK_SIZE / 16) - -typedef DECLARE_BITMAP(mdp5_smp_state_t, MAX_SMP_BLOCKS); -struct mdp5_client_smp_state {mdp5_smp_state_t inuse;mdp5_smp_state_t pending;
@@ -33,9 +28,18 @@ struct mdp5_client_smp_state {struct mdp5_kms ; -int mdp5_smp_request (struct mdp5_kms *mdp5_kms,enum mdp5_client_id cid,int nblks); -void mdp5_smp_configure (struct mdp5_kms *mdp5_kms,enum mdp5_client_id cid); -void mdp5_smp_commit (struct mdp5_kms *mdp5_kms,enum mdp5_client_id cid); +/* +* SMP module prototypes: +* mdp5_smp_init() returns a SMP @handler, +* which is then used to call the other mdp5_smp_*(handler, ...) functions. +*/ + +void *mdp5_smp_init (struct drm_device *dev,const struct mdp5_smp_block *cfg); +void mdp5_smp_destroy (void *handler); +int mdp5_smp_request (void *handler,enum mdp5_pipe pipe,u32 fmt,u32 width); +void mdp5_smp_configure (void *handler,enum mdp5_pipe pipe); +void mdp5_smp_commit (void *handler,enum mdp5_pipe pipe); +void mdp5_smp_release (void *handler,enum mdp5_pipe pipe);#endif /* __MDP5_SMP_H__ */
Signature · 8 lines
Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 2/3 drm/msm/mdp5: introduce mdp5_cfg module
In reply to Stephane ViauThe hardware configuration modification from a version to another is quite consequent. Introducing a configuration module (mdp5_cfg) may make things more clear and easier to access when a new hardware version comes up.
--- drivers/gpu/drm/msm/Makefile | 1 + drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c | 215 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h | 88 +++++++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 211 ++++++------------------------- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 39 +----- drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c | 9 +- 6 files changed, 354 insertions(+), 209 deletions(-) create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h
drivers/gpu/drm/msm/Makefile +1 -0
@@ -24,6 +24,7 @@ msm-y := \ mdp/mdp4/mdp4_irq.o \ mdp/mdp4/mdp4_kms.o \ mdp/mdp4/mdp4_plane.o \ + mdp/mdp5/mdp5_cfg.o \ mdp/mdp5/mdp5_crtc.o \ mdp/mdp5/mdp5_encoder.o \ mdp/mdp5/mdp5_irq.o \
drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c new file +215 -0
215 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h new file +88 -0
88 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c +41 -170
289 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h +2 -37
@@ -21,36 +21,7 @@#include "msm_drv.h" #include "msm_kms.h" #include "mdp/mdp_kms.h" -/* dynamic offsets used by mdp5.xml.h (initialized in mdp5_kms.c) */ -#define MDP5_MAX_BASES 8 -#define MAX_SMP_BLOCKS 44 -#define MAX_CLIENTS 32 -typedef DECLARE_BITMAP(mdp5_smp_state_t, MAX_SMP_BLOCKS); -struct mdp5_sub_block { -int count; -uint32_t base[MDP5_MAX_BASES ]; -}; -struct mdp5_smp_block { -int mmb_count;/* number of SMP MMBs */ -int mmb_size;/* MMB: size in bytes */ -mdp5_smp_state_t reserved_state;/* SMP MMBs statically allocated */ -int reserved[MAX_CLIENTS ];/* # of MMBs reserved per client */ -}; -struct mdp5_config { -char *name; -struct mdp5_smp_block smp; -struct mdp5_sub_block ctl; -struct mdp5_sub_block pipe_vig; -struct mdp5_sub_block pipe_rgb; -struct mdp5_sub_block pipe_dma; -struct mdp5_sub_block lm; -struct mdp5_sub_block dspp; -struct mdp5_sub_block ad; -struct mdp5_sub_block intf; - -uint32_t max_clk; -}; -extern const struct mdp5_config *mdp5_cfg; +#include "mdp5_cfg.h" /* must be included before mdp5.xml.h */ #include "mdp5.xml.h" #include "mdp5_smp.h"
@@ -59,8 +30,7 @@ struct mdp5_kms {struct drm_device *dev; -int rev; -const struct mdp5_config *hw_cfg; +void *cfg_priv;/* mapper-id used to request GEM buffer mapped for scanout: */ int id;
@@ -84,11 +54,6 @@ struct mdp5_kms { };#define to_mdp5_kms (x) container_of(x, struct mdp5_kms, base) -/* platform config data (ie. from DT, or pdata) */ -struct mdp5_platform_config { -struct iommu_domain *iommu; -}; -static inline void mdp5_write (struct mdp5_kms *mdp5_kms,u32 reg,u32 data) {msm_writel (data, mdp5_kms->mmio + reg);
drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c +7 -2
@@ -108,11 +108,15 @@ static int smp_request_block(struct mdp5_smp *smp, enum mdp5_client_id cid, int nblks) {struct mdp5_kms *mdp5_kms =get_kms (smp); +const struct mdp5_cfg_hw *hw_cfg;struct mdp5_client_smp_state *ps = &smp->client_state[cid];int i, ret, avail, cur_nblks, cnt = smp->blk_cnt; -int reserved = mdp5_kms->hw_cfg->smp.reserved[cid]; +int reserved;unsigned long flags; + hw_cfg =mdp5_cfg_get_hw_config (mdp5_kms->cfg_priv); + reserved = hw_cfg->smp.reserved[cid]; +spin_lock_irqsave (&smp->state_lock, flags); nblks -= reserved;
@@ -175,6 +179,7 @@ int mdp5_smp_request(void *handler, enum mdp5_pipe pipe, u32 fmt, u32 width)struct mdp5_smp *smp = handler;struct mdp5_kms *mdp5_kms =get_kms (smp);struct drm_device *dev = mdp5_kms->dev; +int rev =mdp5_cfg_get_hw_rev (mdp5_kms->cfg_priv);int i, hsub, nplanes, nlines, nblks, ret; nplanes =drm_format_num_planes (fmt);
@@ -192,7 +197,7 @@ int mdp5_smp_request(void *handler, enum mdp5_pipe pipe, u32 fmt, u32 width) n =DIV_ROUND_UP (fetch_stride * nlines, smp->blk_size);/* for hw rev v1.00 */ -if (mdp5_kms->rev ==0 ) +if (rev ==0 ) n =roundup_pow_of_two (n);DBG ("%s[%d]: request %d SMP blocks" ,pipe2name (pipe), i, n);
Signature · 8 lines
Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 3/3 drm/msm: add multiple CRTC and overlay support
In reply to Stephane ViauMDP5 currently support one single CRTC with its private pipe. This change allows the configuration of multiple CRTCs with the possibility to attach several public planes to these CRTCs.
--- drivers/gpu/drm/msm/Makefile | 1 + drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h | 1 + drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 265 +++++++++++++++++------ drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c | 325 ++++++++++++++++++++++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.h | 121 +++++++++++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_encoder.c | 13 ++ drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c | 48 +++- drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 48 ++-- drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 107 +++++++-- 9 files changed, 804 insertions(+), 125 deletions(-) create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c create mode 100644 drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.h
drivers/gpu/drm/msm/Makefile +1 -0
@@ -25,6 +25,7 @@ msm-y := \ mdp/mdp4/mdp4_kms.o \ mdp/mdp4/mdp4_plane.o \ mdp/mdp5/mdp5_cfg.o \ + mdp/mdp5/mdp5_ctl.o \ mdp/mdp5/mdp5_crtc.o \ mdp/mdp5/mdp5_encoder.o \ mdp/mdp5/mdp5_irq.o \
drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h +1 -0
@@ -24,6 +24,7 @@*/ extern const struct mdp5_cfg_hw *mdp5_cfg; +#define MAX_CTL 8#define MAX_BASES 8#define MAX_SMP_BLOCKS 44#define MAX_CLIENTS 32
drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c +199 -66
427 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.c new file +325 -0
325 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_ctl.h new file +121 -0
121 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_encoder.c +13 -0
@@ -24,6 +24,7 @@ struct mdp5_encoder {struct drm_encoder base;int intf;enum mdp5_intf intf_id; +spinlock_t intf_lock;/* protect REG_MDP5_INTF_* registers */ bool enabled;uint32_t bsc; };
@@ -115,6 +116,7 @@ static void mdp5_encoder_dpms(struct drm_encoder *encoder, int mode)struct mdp5_kms *mdp5_kms =get_kms (encoder);int intf = mdp5_encoder->intf;bool enabled = (mode ==DRM_MODE_DPMS_ON ); +unsigned long flags;DBG ("mode=%d" , mode);
@@ -123,9 +125,13 @@ static void mdp5_encoder_dpms(struct drm_encoder *encoder, int mode)if (enabled) {bs_set (mdp5_encoder,1 ); +spin_lock_irqsave (&mdp5_encoder->intf_lock, flags);mdp5_write (mdp5_kms,REG_MDP5_INTF_TIMING_ENGINE_EN (intf),1 ); +spin_unlock_irqrestore (&mdp5_encoder->intf_lock, flags); }else { +spin_lock_irqsave (&mdp5_encoder->intf_lock, flags);mdp5_write (mdp5_kms,REG_MDP5_INTF_TIMING_ENGINE_EN (intf),0 ); +spin_unlock_irqrestore (&mdp5_encoder->intf_lock, flags);bs_set (mdp5_encoder,0 ); }
@@ -150,6 +156,7 @@ static void mdp5_encoder_mode_set(struct drm_encoder *encoder,uint32_t display_v_start, display_v_end;uint32_t hsync_start_x, hsync_end_x;uint32_t format; +unsigned long flags; mode = adjusted_mode;
@@ -180,6 +187,8 @@ static void mdp5_encoder_mode_set(struct drm_encoder *encoder, display_v_start = (mode->vtotal - mode->vsync_start) * mode->htotal + dtv_hsync_skew; display_v_end = vsync_period - ((mode->vsync_start - mode->vdisplay) * mode->htotal) + dtv_hsync_skew -1 ; +spin_lock_irqsave (&mdp5_encoder->intf_lock, flags); +mdp5_write (mdp5_kms,REG_MDP5_INTF_HSYNC_CTL (intf),MDP5_INTF_HSYNC_CTL_PULSEW (mode->hsync_end - mode->hsync_start) |MDP5_INTF_HSYNC_CTL_PERIOD (mode->htotal));
@@ -201,6 +210,8 @@ static void mdp5_encoder_mode_set(struct drm_encoder *encoder,mdp5_write (mdp5_kms,REG_MDP5_INTF_ACTIVE_VEND_F0 (intf),0 );mdp5_write (mdp5_kms,REG_MDP5_INTF_PANEL_FORMAT (intf), format);mdp5_write (mdp5_kms,REG_MDP5_INTF_FRAME_LINE_COUNT_EN (intf),0x3 );/* frame+line? */ + +spin_unlock_irqrestore (&mdp5_encoder->intf_lock, flags); }static void mdp5_encoder_prepare (struct drm_encoder *encoder)
@@ -242,6 +253,8 @@ struct drm_encoder *mdp5_encoder_init(struct drm_device *dev, int intf, mdp5_encoder->intf_id = intf_id; encoder = &mdp5_encoder->base; +spin_lock_init (&mdp5_encoder->intf_lock); +drm_encoder_init (dev, encoder, &mdp5_encoder_funcs,DRM_MODE_ENCODER_TMDS );drm_encoder_helper_add (encoder, &mdp5_encoder_helper_funcs);
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c +37 -11
114 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h +19 -29
100 lines not on this page · raw message
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c +88 -19
190 lines not on this page · raw message
Signature · 8 lines
Qualcomm Innovation Center, Inc. The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project _______________________________________________ dri-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/dri-devel