drm/omap: Remove CONFIG_DRM_OMAP_NUM_CRTCS, cleanup & CTM
Subsystems (3)
v4 cover drm/omap: Remove CONFIG_DRM_OMAP_NUM_CRTCS, cleanup & CTM
The first patch removes CONFIG_DRM_OMAP_NUM_CRTCS config option. The patches number 2-4 gets rid of annoying name collision between dss backend and omapdrm. The second last patch cleans up the unnecessary complexity from omap_modeset_init(). And finally the last implements CRTC's CTM matrix propety by using DSS DISPC's Color Phase Rotation unit.
Changes since v3:
- Rebased on top Tomi Valkeinen's latest omap-drm series:
https://lists.freedesktop.org/archives/dri-devel/2017-March/136770.html
- Adds:
- drm/omap: Implement CTM property for CRTC using OVL managers CPR matrix
Changes since v2:
- drm/omap: Get rid of DRM_OMAP_NUM_CRTCS config option
- No change
- Added:
- drm/omap: Rename enum omap_plane to enum omap_plane_id
- drm/omap: Fix ugliest indentation style breaks from previous patch
- drm/omap: Remove the obsolete #define omap_plane _omap_plane hack
- drm/omap: Major omap_modeset_init() cleanup
- use memset() to reset omap_crtcs[] in omap_crtc_pre_init()
- make the mapping between omapdrm plane index and dss plane id explicit
Changes since first version:
- drm/omapdrm: Get rid of DRM_OMAP_NUM_CRTCS config option
- drm/omapdrm: -> drm/omap:
- Drop:
- drm/omapdrm: Change possible_crtcs to possible_crtcs_for_planes
- drm/omapdrm: Separate ids for planes and CRTCs in omap_modeset_init()
- Add:
- drm/omap: Major omap_modeset_init() cleanup
Jyri Sarha (6):
drm/omap: Get rid of DRM_OMAP_NUM_CRTCS config option drm/omap: Rename enum omap_plane to enum omap_plane_id drm/omap: Fix one ugly indentation style break left by coccinelle drm/omap: Remove the obsolete #define omap_plane _omap_plane hack drm/omap: Major omap_modeset_init() cleanup
drm/omap: Implement CTM property for CRTC using OVL managers CPR
matrix
drivers/gpu/drm/omapdrm/Kconfig | 9 -- drivers/gpu/drm/omapdrm/dss/dispc.c | 123 +++++++++-------- drivers/gpu/drm/omapdrm/dss/dispc.h | 62 ++++----- drivers/gpu/drm/omapdrm/dss/dss.h | 5 +- drivers/gpu/drm/omapdrm/dss/dss_features.c | 6 +- drivers/gpu/drm/omapdrm/dss/dss_features.h | 6 +- drivers/gpu/drm/omapdrm/dss/omapdss.h | 17 +-- drivers/gpu/drm/omapdrm/omap_crtc.c | 50 ++++++- drivers/gpu/drm/omapdrm/omap_drv.c | 212 +++++++---------------------- drivers/gpu/drm/omapdrm/omap_drv.h | 4 +- drivers/gpu/drm/omapdrm/omap_plane.c | 32 +++-- 11 files changed, 236 insertions(+), 290 deletions(-)
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH v4 1/6 drm/omap: Get rid of DRM_OMAP_NUM_CRTCS config option
Allocate one CRTC for each connected output and get rid of DRM_OMAP_NUM_CRTCS config option. We still can not create more CRTCs than we have DSS display managers. We also reserve one overlay per CRTC for primary plane so we can not have more CRTCs than we have overlays either.
--- drivers/gpu/drm/omapdrm/Kconfig | 9 ------ drivers/gpu/drm/omapdrm/omap_drv.c | 59 +++++++++++--------------------------- 2 files changed, 16 insertions(+), 52 deletions(-)
drivers/gpu/drm/omapdrm/Kconfig +0 -9
@@ -10,15 +10,6 @@ config DRM_OMAP if DRM_OMAP -config DRM_OMAP_NUM_CRTCS - int "Number of CRTCs" - range 1 10 - default 1 if ARCH_OMAP2 || ARCH_OMAP3 - default 2 if ARCH_OMAP4 - help - Select the number of video overlays which can be used as framebuffers. - The remaining overlays are reserved for video. - source "drivers/gpu/drm/omapdrm/dss/Kconfig" source "drivers/gpu/drm/omapdrm/displays/Kconfig"
drivers/gpu/drm/omapdrm/omap_drv.c +16 -43
96 lines not on this page · raw message
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4 1/6] drm/omap: Get rid of DRM_OMAP_NUM_CRTCS config option
Hi Jyri,
Thank you for the patch.
Quoted 7 lines · On Friday 24 Mar 2017 16:47:51 Jyri Sarha wrote:
Allocate one CRTC for each connected output and get rid of
DRM_OMAP_NUM_CRTCSconfig option. We still can not create more CRTCs than we have DSS display managers. We also reserve one overlay per CRTC for primary plane so we can not have more CRTCs than we have overlays either.Signed-off-by Jyri Sarha <[email protected]>
Quoted 10 lines
--- drivers/gpu/drm/omapdrm/Kconfig | 9 ------ drivers/gpu/drm/omapdrm/omap_drv.c | 59 ++++++++--------------------------- 2 files changed, 16 insertions(+), 52 deletions(-)(quoted diff) +0
-0b/drivers/gpu/drm/omapdrm/Kconfig index 556f81f..b3d08c5 100644
drivers/gpu/drm/omapdrm/Kconfig config DRM_OMAP · line 19
Quoted 10 lines
drivers/gpu/drm/omapdrm/Kconfig +0
-7@@ -10,15 +10,6 @@ config DRM_OMAP if DRM_OMAP -config DRM_OMAP_NUM_CRTCS - int "Number of CRTCs" - range 1 10 - default 1 if ARCH_OMAP2 || ARCH_OMAP3 - default 2 if ARCH_OMAP4 - help - Select the number of video overlays which can be used as
framebuffers.
Quoted 31 lines
drivers/gpu/drm/omapdrm/Kconfig +0
-2- The remaining overlays are reserved for video. - source "drivers/gpu/drm/omapdrm/dss/Kconfig" source "drivers/gpu/drm/omapdrm/displays/Kconfig"(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_drv.cindex ad8d16c..b040f5f 100644drivers/gpu/drm/omapdrm/omap_drv.c +1
-6@@ -34,11 +34,6 @@#define DRIVER_MINOR 0#define DRIVER_PATCHLEVEL 0 -static int num_crtc =CONFIG_DRM_OMAP_NUM_CRTCS ; - -MODULE_PARM_DESC (num_crtc,"Number of overlays to use as CRTCs" ); -module_param (num_crtc, int,0600 ); -/* * mode config funcs */ @@ -319,7 +314,7 @@ static int omap_modeset_init(struct drm_device *dev)struct omap_dss_device *dssdev =NULL ;int num_ovls = priv->dispc_ops->get_num_ovls ();int num_mgrs = priv->dispc_ops->get_num_mgrs (); -int num_crtcs; +int num_crtcs =0 ;int i, id =0 ;int ret;u32 possible_crtcs;
drivers/gpu/drm/omapdrm/omap_drv.c static int omap_modeset_init(struct drm_device *dev) · line 336
Quoted 6 lines
drivers/gpu/drm/omapdrm/omap_drv.c +0
-3@@ -331,12 +326,15 @@ static int omap_modeset_init(struct drm_device *dev)return ret;/* -* We usually don't want to create a CRTC for each manager, at least -* not until we have a way to expose private planes to userspace. -* Otherwise there would not be enough video pipes left for drm
planes.
drivers/gpu/drm/omapdrm/omap_drv.c static int omap_modeset_init(struct drm_device *dev) · line 337
Quoted 1 line
drivers/gpu/drm/omapdrm/omap_drv.c +0
-1-* We use the num_crtc argument to limit the number of crtcs we
create.
Quoted 14 lines
drivers/gpu/drm/omapdrm/omap_drv.c +8
-1+* Let's create one CRTC for each connected DSS device if we +* have display managers and overlays (for primary planes) for +* them. */ - num_crtcs =min3 (num_crtc, num_mgrs, num_ovls); +for_each_dss_dev (dssdev) +if (omapdss_device_is_connected (dssdev)) + num_crtcs++; + + num_crtcs =min3 (num_crtcs, num_mgrs, num_ovls); possible_crtcs = (1 << num_crtcs) -1 ; dssdev =NULL ;
drivers/gpu/drm/omapdrm/omap_drv.c static int omap_modeset_init(struct drm_device *dev) · line 382
Quoted 7 lines
drivers/gpu/drm/omapdrm/omap_drv.c +0
-4@@ -376,11 +374,9 @@ static int omap_modeset_init(struct drm_device *dev)drm_mode_connector_attach_encoder (connector, encoder);/* -* if we have reached the limit of the crtcs we are allowed to -* create, let's not try to look for a crtc for this -* panel/encoder and onwards, we will, of course, populate the -* the possible_crtcs field for all the encoders with the
final
drivers/gpu/drm/omapdrm/omap_drv.c static int omap_modeset_init(struct drm_device *dev) · line 418
Quoted 12 lines
drivers/gpu/drm/omapdrm/omap_drv.c +3
-2-* set of crtcs we create +* if we have reached the limit of the crtcs we can +* create, let's not try to create a crtc for this +* panel/encoder and onwards. */ if (id == num_crtcs)continue ;@@ -415,33 +411,6 @@ static int omap_modeset_init(struct drm_device *dev) }/* -* we have allocated crtcs according to the need of the
panels/encoders,
Quoted 40 lines
drivers/gpu/drm/omapdrm/omap_drv.c +4
-26-* adding more crtcs here if needed -*/ -for (; id < num_crtcs; id++) { - -/* find a free manager for this crtc */ -for (i =0 ; i < num_mgrs; i++) { -if (!channel_used (dev, i)) -break ; - } - -if (i == num_mgrs) { -/* this shouldn't really happen */ -dev_err (dev->dev,"no managers left for crtc\n" ); -return -ENOMEM ; - } - - ret =omap_modeset_create_crtc (dev, id, i, - possible_crtcs); -if (ret <0 ) { -dev_err (dev->dev, -"could not create CRTC (channel %u)\n" , i); -return ret; - } - } - -/* * Create normal planes for the remaining overlays: */ for (; id < num_ovls; id++) {@@ -456,6 +425,10 @@ static int omap_modeset_init(struct drm_device *dev) priv->planes[priv->num_planes++] = plane; } +/* +* populate the the possible_crtcs field for all the encoders +* we created. +*/ for (i =0 ; i < priv->num_encoders; i++) {struct drm_encoder *encoder = priv->encoders[i]; struct omap_dss_device *dssdev =
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH v4 2/6 drm/omap: Rename enum omap_plane to enum omap_plane_id
In reply to Jyri SarhaThe enum omap_plane conflicted with the same struct name for omapdrm plane private data. This rename should solve the conflict.
The rename was implement with this very simple coccinelle patch:
------------------------
@@
@@
enum
-omap_plane
+omap_plane_id
------------------------
The patch was applied like this:
spatch --sp-file <cocci_file> --all-includes --in-place --dir drivers/gpu/drm/omapdrm
The above patch did not rename the actual enum definition. That was added manually on top of the spatch changes.
--- drivers/gpu/drm/omapdrm/dss/dispc.c | 124 ++++++++++++++++------------- drivers/gpu/drm/omapdrm/dss/dispc.h | 62 +++++++-------- drivers/gpu/drm/omapdrm/dss/dss.h | 5 +- drivers/gpu/drm/omapdrm/dss/dss_features.c | 6 +- drivers/gpu/drm/omapdrm/dss/dss_features.h | 6 +- drivers/gpu/drm/omapdrm/dss/omapdss.h | 17 ++-- 6 files changed, 117 insertions(+), 103 deletions(-)
drivers/gpu/drm/omapdrm/dss/dispc.c +68 -56
@@ -303,8 +303,8 @@ struct color_conv_coef {static unsigned long dispc_mgr_lclk_rate (enum omap_channel channel);static unsigned long dispc_mgr_pclk_rate (enum omap_channel channel); -static unsigned long dispc_plane_pclk_rate (enum omap_plane plane); -static unsigned long dispc_plane_lclk_rate (enum omap_plane plane); +static unsigned long dispc_plane_pclk_rate (enum omap_plane_id plane); +static unsigned long dispc_plane_lclk_rate (enum omap_plane_id plane);static void dispc_clear_irqstatus (u32 mask);static bool dispc_mgr_is_enabled (enum omap_channel channel);
@@ -653,7 +653,7 @@ bool dispc_wb_go_busy(void)void dispc_wb_go (void ) { -enum omap_plane plane =OMAP_DSS_WB ; +enum omap_plane_id plane =OMAP_DSS_WB ;bool enable, go; enable =REG_GET (DISPC_OVL_ATTRIBUTES (plane),0 ,0 ) ==1 ;
@@ -670,29 +670,33 @@ void dispc_wb_go(void)REG_FLD_MOD (DISPC_CONTROL2 ,1 ,6 ,6 ); } -static void dispc_ovl_write_firh_reg (enum omap_plane plane,int reg,u32 value) +static void dispc_ovl_write_firh_reg (enum omap_plane_id plane,int reg, +u32 value) {dispc_write_reg (DISPC_OVL_FIR_COEF_H (plane, reg), value); } -static void dispc_ovl_write_firhv_reg (enum omap_plane plane,int reg,u32 value) +static void dispc_ovl_write_firhv_reg (enum omap_plane_id plane,int reg, +u32 value) {dispc_write_reg (DISPC_OVL_FIR_COEF_HV (plane, reg), value); } -static void dispc_ovl_write_firv_reg (enum omap_plane plane,int reg,u32 value) +static void dispc_ovl_write_firv_reg (enum omap_plane_id plane,int reg, +u32 value) {dispc_write_reg (DISPC_OVL_FIR_COEF_V (plane, reg), value); } -static void dispc_ovl_write_firh2_reg (enum omap_plane plane,int reg,u32 value) +static void dispc_ovl_write_firh2_reg (enum omap_plane_id plane,int reg, +u32 value) {BUG_ON (plane ==OMAP_DSS_GFX );dispc_write_reg (DISPC_OVL_FIR_COEF_H2 (plane, reg), value); } -static void dispc_ovl_write_firhv2_reg (enum omap_plane plane,int reg, +static void dispc_ovl_write_firhv2_reg (enum omap_plane_id plane,int reg,u32 value) {BUG_ON (plane ==OMAP_DSS_GFX );
@@ -700,14 +704,15 @@ static void dispc_ovl_write_firhv2_reg(enum omap_plane plane, int reg,dispc_write_reg (DISPC_OVL_FIR_COEF_HV2 (plane, reg), value); } -static void dispc_ovl_write_firv2_reg (enum omap_plane plane,int reg,u32 value) +static void dispc_ovl_write_firv2_reg (enum omap_plane_id plane,int reg, +u32 value) {BUG_ON (plane ==OMAP_DSS_GFX );dispc_write_reg (DISPC_OVL_FIR_COEF_V2 (plane, reg), value); } -static void dispc_ovl_set_scale_coef (enum omap_plane plane,int fir_hinc, +static void dispc_ovl_set_scale_coef (enum omap_plane_id plane,int fir_hinc,int fir_vinc,int five_taps,enum omap_color_component color_comp) {
@@ -753,7 +758,7 @@ static void dispc_ovl_set_scale_coef(enum omap_plane plane, int fir_hinc, } -static void dispc_ovl_write_color_conv_coef (enum omap_plane plane, +static void dispc_ovl_write_color_conv_coef (enum omap_plane_id plane,const struct color_conv_coef *ct) {#define CVAL (x, y) (FLD_VAL(x, 26, 16) | FLD_VAL(y, 10, 0))
@@ -789,27 +794,27 @@ static void dispc_setup_color_conv_coef(void)dispc_ovl_write_color_conv_coef (OMAP_DSS_WB , &ctbl_bt601_5_wb); } -static void dispc_ovl_set_ba0 (enum omap_plane plane,u32 paddr) +static void dispc_ovl_set_ba0 (enum omap_plane_id plane,u32 paddr) {dispc_write_reg (DISPC_OVL_BA0 (plane), paddr); } -static void dispc_ovl_set_ba1 (enum omap_plane plane,u32 paddr) +static void dispc_ovl_set_ba1 (enum omap_plane_id plane,u32 paddr) {dispc_write_reg (DISPC_OVL_BA1 (plane), paddr); } -static void dispc_ovl_set_ba0_uv (enum omap_plane plane,u32 paddr) +static void dispc_ovl_set_ba0_uv (enum omap_plane_id plane,u32 paddr) {dispc_write_reg (DISPC_OVL_BA0_UV (plane), paddr); } -static void dispc_ovl_set_ba1_uv (enum omap_plane plane,u32 paddr) +static void dispc_ovl_set_ba1_uv (enum omap_plane_id plane,u32 paddr) {dispc_write_reg (DISPC_OVL_BA1_UV (plane), paddr); } -static void dispc_ovl_set_pos (enum omap_plane plane, +static void dispc_ovl_set_pos (enum omap_plane_id plane,enum omap_overlay_caps caps,int x,int y) {u32 val;
@@ -822,7 +827,7 @@ static void dispc_ovl_set_pos(enum omap_plane plane,dispc_write_reg (DISPC_OVL_POSITION (plane), val); } -static void dispc_ovl_set_input_size (enum omap_plane plane,int width, +static void dispc_ovl_set_input_size (enum omap_plane_id plane,int width,int height) {u32 val =FLD_VAL (height -1 ,26 ,16 ) |FLD_VAL (width -1 ,10 ,0 );
@@ -833,7 +838,7 @@ static void dispc_ovl_set_input_size(enum omap_plane plane, int width,dispc_write_reg (DISPC_OVL_PICTURE_SIZE (plane), val); } -static void dispc_ovl_set_output_size (enum omap_plane plane,int width, +static void dispc_ovl_set_output_size (enum omap_plane_id plane,int width,int height) {u32 val;
@@ -848,7 +853,7 @@ static void dispc_ovl_set_output_size(enum omap_plane plane, int width,dispc_write_reg (DISPC_OVL_SIZE (plane), val); } -static void dispc_ovl_set_zorder (enum omap_plane plane, +static void dispc_ovl_set_zorder (enum omap_plane_id plane,enum omap_overlay_caps caps,u8 zorder) {if ((caps &OMAP_DSS_OVL_CAP_ZORDER ) ==0 )
@@ -868,7 +873,7 @@ static void dispc_ovl_enable_zorder_planes(void)REG_FLD_MOD (DISPC_OVL_ATTRIBUTES (i),1 ,25 ,25 ); } -static void dispc_ovl_set_pre_mult_alpha (enum omap_plane plane, +static void dispc_ovl_set_pre_mult_alpha (enum omap_plane_id plane,enum omap_overlay_caps caps,bool enable) {if ((caps &OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA ) ==0 )
@@ -877,7 +882,7 @@ static void dispc_ovl_set_pre_mult_alpha(enum omap_plane plane,REG_FLD_MOD (DISPC_OVL_ATTRIBUTES (plane), enable ?1 :0 ,28 ,28 ); } -static void dispc_ovl_setup_global_alpha (enum omap_plane plane, +static void dispc_ovl_setup_global_alpha (enum omap_plane_id plane,enum omap_overlay_caps caps,u8 global_alpha) {static const unsigned shifts[] = {0 ,8 ,16 ,24 , };
@@ -890,17 +895,17 @@ static void dispc_ovl_setup_global_alpha(enum omap_plane plane,REG_FLD_MOD (DISPC_GLOBAL_ALPHA , global_alpha, shift +7 , shift); } -static void dispc_ovl_set_pix_inc (enum omap_plane plane,s32 inc) +static void dispc_ovl_set_pix_inc (enum omap_plane_id plane,s32 inc) {dispc_write_reg (DISPC_OVL_PIXEL_INC (plane), inc); } -static void dispc_ovl_set_row_inc (enum omap_plane plane,s32 inc) +static void dispc_ovl_set_row_inc (enum omap_plane_id plane,s32 inc) {dispc_write_reg (DISPC_OVL_ROW_INC (plane), inc); } -static void dispc_ovl_set_color_mode (enum omap_plane plane, +static void dispc_ovl_set_color_mode (enum omap_plane_id plane,enum omap_color_mode color_mode) {u32 m =0 ;
@@ -981,7 +986,7 @@ static void dispc_ovl_set_color_mode(enum omap_plane plane,REG_FLD_MOD (DISPC_OVL_ATTRIBUTES (plane), m,4 ,1 ); } -static void dispc_ovl_configure_burst_type (enum omap_plane plane, +static void dispc_ovl_configure_burst_type (enum omap_plane_id plane,enum omap_dss_rotation_type rotation_type) {if (dss_has_feature (FEAT_BURST_2D ) ==0 )
@@ -993,7 +998,8 @@ static void dispc_ovl_configure_burst_type(enum omap_plane plane,REG_FLD_MOD (DISPC_OVL_ATTRIBUTES (plane),0 ,29 ,29 ); } -static void dispc_ovl_set_channel_out (enum omap_plane plane,enum omap_channel channel) +static void dispc_ovl_set_channel_out (enum omap_plane_id plane, +enum omap_channel channel) {int shift;u32 val;
@@ -1054,7 +1060,7 @@ static void dispc_ovl_set_channel_out(enum omap_plane plane, enum omap_channel cdispc_write_reg (DISPC_OVL_ATTRIBUTES (plane), val); } -static enum omap_channel dispc_ovl_get_channel_out (enum omap_plane plane) +static enum omap_channel dispc_ovl_get_channel_out (enum omap_plane_id plane) {int shift;u32 val;
@@ -1096,12 +1102,12 @@ static enum omap_channel dispc_ovl_get_channel_out(enum omap_plane plane)void dispc_wb_set_channel_in (enum dss_writeback_channel channel) { -enum omap_plane plane =OMAP_DSS_WB ; +enum omap_plane_id plane =OMAP_DSS_WB ;REG_FLD_MOD (DISPC_OVL_ATTRIBUTES (plane), channel,18 ,16 ); } -static void dispc_ovl_set_burst_size (enum omap_plane plane, +static void dispc_ovl_set_burst_size (enum omap_plane_id plane,enum omap_burst_size burst_size) {static const unsigned shifts[] = {6 ,14 ,14 ,14 ,14 , };
@@ -1123,14 +1129,14 @@ static void dispc_configure_burst_sizes(void)dispc_ovl_set_burst_size (OMAP_DSS_WB , burst_size); } -static u32 dispc_ovl_get_burst_size (enum omap_plane plane) +static u32 dispc_ovl_get_burst_size (enum omap_plane_id plane) {unsigned unit =dss_feat_get_burst_size_unit ();/* burst multiplier is always x8 (see dispc_configure_burst_sizes()) */ return unit *8 ; } -static enum omap_color_mode dispc_ovl_get_color_modes (enum omap_plane plane) +static enum omap_color_mode dispc_ovl_get_color_modes (enum omap_plane_id plane) {return dss_feat_get_supported_color_modes (plane); }
@@ -1168,7 +1174,8 @@ static void dispc_mgr_set_cpr_coef(enum omap_channel channel,dispc_write_reg (DISPC_CPR_COEF_B (channel), coef_b); } -static void dispc_ovl_set_vid_color_conv (enum omap_plane plane,bool enable) +static void dispc_ovl_set_vid_color_conv (enum omap_plane_id plane, +bool enable) {u32 val;
@@ -1179,7 +1186,7 @@ static void dispc_ovl_set_vid_color_conv(enum omap_plane plane, bool enable)dispc_write_reg (DISPC_OVL_ATTRIBUTES (plane), val); } -static void dispc_ovl_enable_replication (enum omap_plane plane, +static void dispc_ovl_enable_replication (enum omap_plane_id plane,enum omap_overlay_caps caps,bool enable) {static const unsigned shifts[] = {5 ,10 ,10 ,10 };
@@ -1276,7 +1283,7 @@ static void dispc_init_fifos(void) } } -static u32 dispc_ovl_get_fifo_size (enum omap_plane plane) +static u32 dispc_ovl_get_fifo_size (enum omap_plane_id plane) {int fifo;u32 size =0 ;
@@ -1289,7 +1296,8 @@ static u32 dispc_ovl_get_fifo_size(enum omap_plane plane)return size; } -void dispc_ovl_set_fifo_threshold (enum omap_plane plane,u32 low,u32 high) +void dispc_ovl_set_fifo_threshold (enum omap_plane_id plane,u32 low, +u32 high) {u8 hi_start, hi_end, lo_start, lo_end;u32 unit;
@@ -1338,7 +1346,7 @@ void dispc_enable_fifomerge(bool enable)REG_FLD_MOD (DISPC_CONFIG , enable ?1 :0 ,14 ,14 ); } -void dispc_ovl_compute_fifo_thresholds (enum omap_plane plane, +void dispc_ovl_compute_fifo_thresholds (enum omap_plane_id plane,u32 *fifo_low,u32 *fifo_high,bool use_fifomerge,bool manual_update) {
@@ -1385,7 +1393,7 @@ void dispc_ovl_compute_fifo_thresholds(enum omap_plane plane, } } -static void dispc_ovl_set_mflag (enum omap_plane plane,bool enable) +static void dispc_ovl_set_mflag (enum omap_plane_id plane,bool enable) {int bit;
@@ -1397,7 +1405,7 @@ static void dispc_ovl_set_mflag(enum omap_plane plane, bool enable)REG_FLD_MOD (DISPC_OVL_ATTRIBUTES (plane), enable, bit, bit); } -static void dispc_ovl_set_mflag_threshold (enum omap_plane plane, +static void dispc_ovl_set_mflag_threshold (enum omap_plane_id plane,int low,int high) { dispc_write_reg(DISPC_OVL_MFLAG_THRESHOLD(plane),
@@ -1461,7 +1469,7 @@ static void dispc_init_mflag(void) } } -static void dispc_ovl_set_fir (enum omap_plane plane, +static void dispc_ovl_set_fir (enum omap_plane_id plane,int hinc,int vinc,enum omap_color_component color_comp) {
@@ -1484,7 +1492,8 @@ static void dispc_ovl_set_fir(enum omap_plane plane, } } -static void dispc_ovl_set_vid_accu0 (enum omap_plane plane,int haccu,int vaccu) +static void dispc_ovl_set_vid_accu0 (enum omap_plane_id plane,int haccu, +int vaccu) {u32 val;u8 hor_start, hor_end, vert_start, vert_end;
@@ -1498,7 +1507,8 @@ static void dispc_ovl_set_vid_accu0(enum omap_plane plane, int haccu, int vaccu)dispc_write_reg (DISPC_OVL_ACCU0 (plane), val); } -static void dispc_ovl_set_vid_accu1 (enum omap_plane plane,int haccu,int vaccu) +static void dispc_ovl_set_vid_accu1 (enum omap_plane_id plane,int haccu, +int vaccu) {u32 val;u8 hor_start, hor_end, vert_start, vert_end;
@@ -1512,7 +1522,7 @@ static void dispc_ovl_set_vid_accu1(enum omap_plane plane, int haccu, int vaccu)dispc_write_reg (DISPC_OVL_ACCU1 (plane), val); } -static void dispc_ovl_set_vid_accu2_0 (enum omap_plane plane,int haccu, +static void dispc_ovl_set_vid_accu2_0 (enum omap_plane_id plane,int haccu,int vaccu) {u32 val;
@@ -1521,7 +1531,7 @@ static void dispc_ovl_set_vid_accu2_0(enum omap_plane plane, int haccu,dispc_write_reg (DISPC_OVL_ACCU2_0 (plane), val); } -static void dispc_ovl_set_vid_accu2_1 (enum omap_plane plane,int haccu, +static void dispc_ovl_set_vid_accu2_1 (enum omap_plane_id plane,int haccu,int vaccu) {u32 val;
@@ -1530,7 +1540,7 @@ static void dispc_ovl_set_vid_accu2_1(enum omap_plane plane, int haccu,dispc_write_reg (DISPC_OVL_ACCU2_1 (plane), val); } -static void dispc_ovl_set_scale_param(enum omap_plane plane, +static void dispc_ovl_set_scale_param(enum omap_plane_id plane, u16 orig_width, u16 orig_height, u16 out_width, u16 out_height, bool five_taps, u8 rotation,
@@ -1546,7 +1556,7 @@ static void dispc_ovl_set_scale_param(enum omap_plane plane,dispc_ovl_set_fir (plane, fir_hinc, fir_vinc, color_comp); } -static void dispc_ovl_set_accu_uv (enum omap_plane plane, +static void dispc_ovl_set_accu_uv (enum omap_plane_id plane,u16 orig_width,u16 orig_height,u16 out_width,u16 out_height,bool ilace,enum omap_color_mode color_mode,u8 rotation) {
@@ -1634,7 +1644,7 @@ static void dispc_ovl_set_accu_uv(enum omap_plane plane,dispc_ovl_set_vid_accu2_1 (plane, h_accu2_1, v_accu2_1); } -static void dispc_ovl_set_scaling_common(enum omap_plane plane, +static void dispc_ovl_set_scaling_common(enum omap_plane_id plane, u16 orig_width, u16 orig_height, u16 out_width, u16 out_height, bool ilace, bool five_taps,
@@ -1688,7 +1698,7 @@ static void dispc_ovl_set_scaling_common(enum omap_plane plane,dispc_ovl_set_vid_accu1 (plane,0 , accu1); } -static void dispc_ovl_set_scaling_uv(enum omap_plane plane, +static void dispc_ovl_set_scaling_uv(enum omap_plane_id plane, u16 orig_width, u16 orig_height, u16 out_width, u16 out_height, bool ilace, bool five_taps,
@@ -1768,7 +1778,7 @@ static void dispc_ovl_set_scaling_uv(enum omap_plane plane,REG_FLD_MOD (DISPC_OVL_ATTRIBUTES (plane), scale_y ?1 :0 ,6 ,6 ); } -static void dispc_ovl_set_scaling(enum omap_plane plane, +static void dispc_ovl_set_scaling(enum omap_plane_id plane, u16 orig_width, u16 orig_height, u16 out_width, u16 out_height, bool ilace, bool five_taps,
@@ -1792,7 +1802,8 @@ static void dispc_ovl_set_scaling(enum omap_plane plane, rotation); } -static void dispc_ovl_set_rotation_attrs (enum omap_plane plane,u8 rotation, +static void dispc_ovl_set_rotation_attrs (enum omap_plane_id plane, +u8 rotation,enum omap_dss_rotation_type rotation_type,bool mirroring,enum omap_color_mode color_mode) {
@@ -2624,7 +2635,7 @@ static int dispc_ovl_calc_scaling(unsigned long pclk, unsigned long lclk,return 0 ; } -static int dispc_ovl_setup_common(enum omap_plane plane, +static int dispc_ovl_setup_common(enum omap_plane_id plane, enum omap_overlay_caps caps, u32 paddr, u32 p_uv_addr, u16 screen_width, int pos_x, int pos_y, u16 width, u16 height, u16 out_width, u16 out_height, enum omap_color_mode color_mode,
@@ -2822,7 +2833,8 @@ static int dispc_ovl_setup_common(enum omap_plane plane,return 0 ; } -static int dispc_ovl_setup (enum omap_plane plane,const struct omap_overlay_info *oi, +static int dispc_ovl_setup (enum omap_plane_id plane, +const struct omap_overlay_info *oi,const struct videomode *vm,bool mem_to_mem) {int r;
@@ -2852,7 +2864,7 @@ int dispc_wb_setup(const struct omap_dss_writeback_info *wi, {int r;u32 l; -enum omap_plane plane =OMAP_DSS_WB ; +enum omap_plane_id plane =OMAP_DSS_WB ;const int pos_x =0 , pos_y =0 ;const u8 zorder =0 , global_alpha =0 ;const bool replication = true;
@@ -2915,7 +2927,7 @@ int dispc_wb_setup(const struct omap_dss_writeback_info *wi,return r; } -static int dispc_ovl_enable (enum omap_plane plane,bool enable) +static int dispc_ovl_enable (enum omap_plane_id plane,bool enable) {DSSDBG ("dispc_enable_plane %d, %d\n" , plane, enable);
@@ -2924,7 +2936,7 @@ static int dispc_ovl_enable(enum omap_plane plane, bool enable)return 0 ; } -static bool dispc_ovl_enabled (enum omap_plane plane) +static bool dispc_ovl_enabled (enum omap_plane_id plane) {return REG_GET (DISPC_OVL_ATTRIBUTES (plane),0 ,0 ); }
@@ -3392,7 +3404,7 @@ static unsigned long dispc_core_clk_rate(void)return dispc.core_clk_rate; } -static unsigned long dispc_plane_pclk_rate (enum omap_plane plane) +static unsigned long dispc_plane_pclk_rate (enum omap_plane_id plane) {enum omap_channel channel;
@@ -3404,7 +3416,7 @@ static unsigned long dispc_plane_pclk_rate(enum omap_plane plane)return dispc_mgr_pclk_rate (channel); } -static unsigned long dispc_plane_lclk_rate (enum omap_plane plane) +static unsigned long dispc_plane_lclk_rate (enum omap_plane_id plane) {enum omap_channel channel;
drivers/gpu/drm/omapdrm/dss/dispc.h +31 -31
248 lines not on this page · raw message
drivers/gpu/drm/omapdrm/dss/dss.h +3 -2
@@ -359,8 +359,9 @@ int dispc_calc_clock_rates(unsigned long dispc_fclk_rate, struct dispc_clock_info *cinfo); -void dispc_ovl_set_fifo_threshold (enum omap_plane plane,u32 low,u32 high); -void dispc_ovl_compute_fifo_thresholds (enum omap_plane plane, +void dispc_ovl_set_fifo_threshold (enum omap_plane_id plane,u32 low, +u32 high); +void dispc_ovl_compute_fifo_thresholds (enum omap_plane_id plane,u32 *fifo_low,u32 *fifo_high,bool use_fifomerge,bool manual_update);
drivers/gpu/drm/omapdrm/dss/dss_features.c +3 -3
@@ -800,17 +800,17 @@ enum omap_dss_output_id dss_feat_get_supported_outputs(enum omap_channel channelreturn omap_current_dss_features->supported_outputs[channel]; } -enum omap_color_mode dss_feat_get_supported_color_modes (enum omap_plane plane) +enum omap_color_mode dss_feat_get_supported_color_modes (enum omap_plane_id plane) {return omap_current_dss_features->supported_color_modes[plane]; } -enum omap_overlay_caps dss_feat_get_overlay_caps (enum omap_plane plane) +enum omap_overlay_caps dss_feat_get_overlay_caps (enum omap_plane_id plane) {return omap_current_dss_features->overlay_caps[plane]; } -bool dss_feat_color_mode_supported (enum omap_plane plane, +bool dss_feat_color_mode_supported (enum omap_plane_id plane,enum omap_color_mode color_mode) { return omap_current_dss_features->supported_color_modes[plane] &
drivers/gpu/drm/omapdrm/dss/dss_features.h +3 -3
@@ -88,8 +88,8 @@ enum dss_range_param {/* DSS Feature Functions */ unsigned long dss_feat_get_param_min (enum dss_range_param param);unsigned long dss_feat_get_param_max (enum dss_range_param param); -enum omap_overlay_caps dss_feat_get_overlay_caps (enum omap_plane plane); -bool dss_feat_color_mode_supported (enum omap_plane plane, +enum omap_overlay_caps dss_feat_get_overlay_caps (enum omap_plane_id plane); +bool dss_feat_color_mode_supported (enum omap_plane_id plane,enum omap_color_mode color_mode);u32 dss_feat_get_buffer_size_unit (void );/* in bytes */
@@ -106,6 +106,6 @@ bool dss_feat_color_mode_supported(enum omap_plane plane,int dss_feat_get_num_mgrs (void );int dss_feat_get_num_ovls (void ); -enum omap_color_mode dss_feat_get_supported_color_modes (enum omap_plane plane); +enum omap_color_mode dss_feat_get_supported_color_modes (enum omap_plane_id plane);#endif
drivers/gpu/drm/omapdrm/dss/omapdss.h +9 -8
@@ -76,7 +76,7 @@ enum omap_display_type { OMAP_DISPLAY_TYPE_DVI = 1 << 6, }; -enum omap_plane { +enum omap_plane_id {OMAP_DSS_GFX =0 ,OMAP_DSS_VIDEO1 =1 ,OMAP_DSS_VIDEO2 =2 ,
@@ -338,7 +338,7 @@ struct omap_overlay {/* static fields */ const char *name; -enum omap_plane id; +enum omap_plane_id id;enum omap_color_mode supported_modes;enum omap_overlay_caps caps;
@@ -785,7 +785,7 @@ struct omap_dss_device *omap_dss_find_device(void *data,int dss_feat_get_num_mgrs (void );int dss_feat_get_num_ovls (void ); -enum omap_color_mode dss_feat_get_supported_color_modes (enum omap_plane plane); +enum omap_color_mode dss_feat_get_supported_color_modes (enum omap_plane_id plane);
@@ -923,14 +923,15 @@ struct dispc_ops {const struct drm_color_lut *lut, unsigned int length); -int (*ovl_enable)(enum omap_plane plane,bool enable); -bool (*ovl_enabled)(enum omap_plane plane); -void (*ovl_set_channel_out)(enum omap_plane plane, +int (*ovl_enable)(enum omap_plane_id plane,bool enable); +bool (*ovl_enabled)(enum omap_plane_id plane); +void (*ovl_set_channel_out)(enum omap_plane_id plane,enum omap_channel channel); -int (*ovl_setup)(enum omap_plane plane,const struct omap_overlay_info *oi, +int (*ovl_setup)(enum omap_plane_id plane, +const struct omap_overlay_info *oi,const struct videomode *vm,bool mem_to_mem); -enum omap_color_mode (*ovl_get_color_modes)(enum omap_plane plane); +enum omap_color_mode (*ovl_get_color_modes)(enum omap_plane_id plane); };void dispc_set_ops (const struct dispc_ops *o);
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4 2/6] drm/omap: Rename enum omap_plane to enum omap_plane_id
Hi Jyri,
Quoted 15 lines · On Friday 24 Mar 2017 16:47:52 Jyri Sarha wrote:
The enum
omap_planeconflicted with the same struct name for omapdrm plane private data. This rename should solve the conflict.The rename was implement with this very simple coccinelle patch:
------------------------
@@
@@
enum(quoted diff) +1
-2-omap_plane +omap_plane_id ------------------------The patch was applied like this:
spatch --sp-file <cocci_file> --all-includes --in-place --dirdrivers/gpu/drm/omapdrm
Quoted 4 lines
The above patch did not rename the actual enum definition. That was added manually on top of the spatch changes.
Signed-off-by Jyri Sarha <[email protected]>
Quoted 8 lines
--- drivers/gpu/drm/omapdrm/dss/dispc.c | 124 +++++++++++++------------- drivers/gpu/drm/omapdrm/dss/dispc.h | 62 +++++++-------- drivers/gpu/drm/omapdrm/dss/dss.h | 5 +- drivers/gpu/drm/omapdrm/dss/dss_features.c | 6 +- drivers/gpu/drm/omapdrm/dss/dss_features.h | 6 +- drivers/gpu/drm/omapdrm/dss/omapdss.h | 17 ++-- 6 files changed, 117 insertions(+), 103 deletions(-)
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH v4 3/6 drm/omap: Fix one ugly indentation style break left by coccinelle
In reply to Jyri SarhaFix one ugly indentation style break left by the previous coccilnelle patch.
--- drivers/gpu/drm/omapdrm/dss/dispc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/gpu/drm/omapdrm/dss/dispc.c +2 -3
@@ -1802,8 +1802,7 @@ static void dispc_ovl_set_scaling(enum omap_plane_id plane, rotation); } -static void dispc_ovl_set_rotation_attrs (enum omap_plane_id plane, -u8 rotation, +static void dispc_ovl_set_rotation_attrs (enum omap_plane_id plane,u8 rotation,enum omap_dss_rotation_type rotation_type,bool mirroring,enum omap_color_mode color_mode) {
@@ -2834,7 +2833,7 @@ static int dispc_ovl_setup_common(enum omap_plane_id plane, }static int dispc_ovl_setup (enum omap_plane_id plane, -const struct omap_overlay_info *oi, +const struct omap_overlay_info *oi,const struct videomode *vm,bool mem_to_mem) {int r;
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4 3/6] drm/omap: Fix one ugly indentation style break left by coccinelle
Hi Jyri,
Thank you for the patch.
Quoted 4 lines · On Friday 24 Mar 2017 16:47:53 Jyri Sarha wrote:
Fix one ugly indentation style break left by the previous coccilnelle patch.
Signed-off-by Jyri Sarha <[email protected]>
Quoted 27 lines
--- drivers/gpu/drm/omapdrm/dss/dispc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/dss/dispc.cindex 8100fec..5ac0145 100644drivers/gpu/drm/omapdrm/dss/dispc.c +2
-3@@ -1802,8 +1802,7 @@ static void dispc_ovl_set_scaling(enum omap_plane_id plane, rotation); } -static void dispc_ovl_set_rotation_attrs (enum omap_plane_id plane, -u8 rotation, +static void dispc_ovl_set_rotation_attrs (enum omap_plane_id plane,u8 rotation,enum omap_dss_rotation_type rotation_type,bool mirroring,enum omap_color_mode color_mode) {@@ -2834,7 +2833,7 @@ static int dispc_ovl_setup_common(enum omap_plane_id plane, }static int dispc_ovl_setup (enum omap_plane_id plane, -const struct omap_overlay_info *oi, +const struct omap_overlay_info *oi,const struct videomode *vm,bool mem_to_mem) {int r;
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH v4 4/6 drm/omap: Remove the obsolete #define omap_plane _omap_plane hack
In reply to Jyri SarhaRemove the obsolete "#define omap_plane _omap_plane" hack and other related hacks to get around the enum omap_plane colliding with struct omap_plane.
--- drivers/gpu/drm/omapdrm/omap_plane.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
drivers/gpu/drm/omapdrm/omap_plane.c +1 -7
@@ -24,12 +24,6 @@#include "omap_dmm_tiler.h" #include "omap_drv.h" -/* some hackery because omapdss has an 'enum omap_plane' (which would be -* better named omap_plane_id).. and compiler seems unhappy about having -* both a 'struct omap_plane' and 'enum omap_plane' -*/ -#define omap_plane _omap_plane -/* * plane funcs */
@@ -38,7 +32,7 @@struct omap_plane {struct drm_plane base; -int id;/* TODO rename omap_plane -> omap_plane_id in omapdss so I can use the enum */ +enum omap_plane_id id;const char *name;uint32_t nformats;
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4 4/6] drm/omap: Remove the obsolete #define omap_plane _omap_plane hack
Hi Jyri,
Thank you for the patch.
Quoted 5 lines · On Friday 24 Mar 2017 16:47:54 Jyri Sarha wrote:
Remove the obsolete "#define
omap_plane_omap_plane" hack and other related hacks to get around the enumomap_planecolliding with structomap_plane.Signed-off-by Jyri Sarha <[email protected]>
Quoted 22 lines
--- drivers/gpu/drm/omapdrm/omap_plane.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_plane.cindex 27c1902..64d53c4 100644drivers/gpu/drm/omapdrm/omap_plane.c +0
-6@@ -24,12 +24,6 @@#include "omap_dmm_tiler.h" #include "omap_drv.h" -/* some hackery because omapdss has an 'enum omap_plane' (which would be -* better named omap_plane_id).. and compiler seems unhappy about having -* both a 'struct omap_plane' and 'enum omap_plane' -*/ -#define omap_plane _omap_plane -/* * plane funcs */
drivers/gpu/drm/omapdrm/omap_plane.c line 41
Quoted 4 lines
drivers/gpu/drm/omapdrm/omap_plane.c +0
-1@@ -38,7 +32,7 @@struct omap_plane {struct drm_plane base; -int id;/* TODO rename omap_plane -> omap_plane_id in omapdss so I
can
Quoted 4 lines
drivers/gpu/drm/omapdrm/omap_plane.c +0
-0use the enum */ + enum omap_plane_id id;const char *name;uint32_t nformats;
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH v4 5/6 drm/omap: Major omap_modeset_init() cleanup
In reply to Jyri SarhaCleanup overly complex omap_modeset_init(). The function is trying to support many unusual configuration, that have never been tested and are not supported by other parts of the dirver.
After cleanup the init function creates exactly one connector, encoder, crtc, and primary plane per each connected dss-device. Each connector->encoder->crtc chain is expected to be separate and each crtc is connect to a single dss-channel. If the configuration does not match the expectations or exceeds the available resources, the configuration is rejected.
--- drivers/gpu/drm/omapdrm/omap_crtc.c | 20 +++- drivers/gpu/drm/omapdrm/omap_drv.c | 177 ++++++++++------------------------- drivers/gpu/drm/omapdrm/omap_drv.h | 4 +- drivers/gpu/drm/omapdrm/omap_plane.c | 24 ++++- 4 files changed, 86 insertions(+), 139 deletions(-)
drivers/gpu/drm/omapdrm/omap_crtc.c +17 -3
@@ -561,6 +561,8 @@ static int omap_crtc_atomic_get_property(struct drm_crtc *crtc,void omap_crtc_pre_init (void ) { +memset (omap_crtcs,0 ,sizeof (omap_crtcs)); +dss_install_mgr_ops (&mgr_ops); }
@@ -571,18 +573,28 @@ void omap_crtc_pre_uninit(void)/* initialize crtc */ struct drm_crtc *omap_crtc_init (struct drm_device *dev, -struct drm_plane *plane,enum omap_channel channel,int id) +struct drm_plane *plane,struct omap_dss_device *dssdev) {struct omap_drm_private *priv = dev->dev_private;struct drm_crtc *crtc =NULL ;struct omap_crtc *omap_crtc; +enum omap_channel channel; +struct omap_dss_device *out;int ret; + out =omapdss_find_output_from_display (dssdev); + channel = out->dispc_channel; +omap_dss_put_device (out); +DBG ("%s" , channel_names[channel]); +/* Multiple displays on same channel is not allowed */ +if (WARN_ON (omap_crtcs[channel] !=NULL )) +return ERR_PTR (-EINVAL ); + omap_crtc =kzalloc (sizeof (*omap_crtc),GFP_KERNEL );if (!omap_crtc) -return NULL ; +return ERR_PTR (-ENOMEM ); crtc = &omap_crtc->base;
@@ -594,8 +606,10 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev, ret =drm_crtc_init_with_planes (dev, crtc, plane,NULL , &omap_crtc_funcs,NULL );if (ret <0 ) { +dev_err (dev->dev,"%s(): could not init crtc for: %s\n" , + __func__, dssdev->name);kfree (omap_crtc); -return NULL ; +return ERR_PTR (ret); }drm_crtc_helper_add (crtc, &omap_crtc_helper_funcs);
drivers/gpu/drm/omapdrm/omap_drv.c +47 -130
242 lines not on this page · raw message
drivers/gpu/drm/omapdrm/omap_drv.h +2 -2
@@ -137,13 +137,13 @@ static inline void omap_fbdev_free(struct drm_device *dev)void omap_crtc_pre_init (void );void omap_crtc_pre_uninit (void );struct drm_crtc *omap_crtc_init (struct drm_device *dev, -struct drm_plane *plane,enum omap_channel channel,int id); +struct drm_plane *plane,struct omap_dss_device *dssdev);int omap_crtc_wait_pending (struct drm_crtc *crtc);void omap_crtc_error_irq (struct drm_crtc *crtc,uint32_t irqstatus);void omap_crtc_vblank_irq (struct drm_crtc *crtc);struct drm_plane *omap_plane_init (struct drm_device *dev, -int id,enum drm_plane_type type, +int idx,enum drm_plane_type type,u32 possible_crtcs);void omap_plane_install_properties (struct drm_plane *plane,struct drm_mode_object *obj);
drivers/gpu/drm/omapdrm/omap_plane.c +20 -4
@@ -329,24 +329,37 @@ static int omap_plane_atomic_get_property(struct drm_plane *plane, .atomic_get_property = omap_plane_atomic_get_property, }; -static const char *plane_names[] = { +static const char *plane_id_to_name[] = { [OMAP_DSS_GFX ] ="gfx" , [OMAP_DSS_VIDEO1 ] ="vid1" , [OMAP_DSS_VIDEO2 ] ="vid2" , [OMAP_DSS_VIDEO3 ] ="vid3" , }; +static const enum omap_plane_id plane_idx_to_id[] = { +OMAP_DSS_GFX , +OMAP_DSS_VIDEO1 , +OMAP_DSS_VIDEO2 , +OMAP_DSS_VIDEO3 , +}; +/* initialize plane */ struct drm_plane *omap_plane_init (struct drm_device *dev, -int id,enum drm_plane_type type, +int idx,enum drm_plane_type type,u32 possible_crtcs) {struct omap_drm_private *priv = dev->dev_private;struct drm_plane *plane;struct omap_plane *omap_plane; +enum omap_plane_id id;int ret; -DBG ("%s: type=%d" , plane_names[id], type); +if (WARN_ON (idx >=ARRAY_SIZE (plane_idx_to_id))) +return ERR_PTR (-EINVAL ); + + id = plane_idx_to_id[idx]; + +DBG ("%s: type=%d" , plane_id_to_name[id], type); omap_plane =kzalloc (sizeof (*omap_plane),GFP_KERNEL );if (!omap_plane)
@@ -356,7 +369,7 @@ struct drm_plane *omap_plane_init(struct drm_device *dev, omap_plane->formats,ARRAY_SIZE (omap_plane->formats), priv->dispc_ops->ovl_get_color_modes(id)); omap_plane->id = id; - omap_plane->name = plane_names[id]; + omap_plane->name = plane_id_to_name[id]; plane = &omap_plane->base;
@@ -373,6 +386,9 @@ struct drm_plane *omap_plane_init(struct drm_device *dev,return plane; error: +dev_err (dev->dev,"%s(): could not create plane: %s\n" , + __func__, plane_id_to_name[id]); +kfree (omap_plane);return NULL ; }
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH v4 6/6 drm/omap: Implement CTM property for CRTC using OVL managers CPR matrix
In reply to Jyri SarhaImplement CTM color management property for OMAP CRTC using DSS overlay manager's Color Phase Rotation matrix. The CPR matrix does not exactly match the CTM property documentation. On DSS the CPR matrix is applied before gamma table look up. However, it seems stupid to add a custom property just for that.
--- drivers/gpu/drm/omapdrm/omap_crtc.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-)
drivers/gpu/drm/omapdrm/omap_crtc.c +29 -1
@@ -312,6 +312,25 @@ void omap_crtc_vblank_irq(struct drm_crtc *crtc)DBG ("%s: apply done" , omap_crtc->name); } +static s16 omap_crtc_s32_32_to_s2_8 (s64 coef) +{ +return (s16)(coef >>24 ); +} + +static void omap_crtc_cpr_coefs_from_ctm (const struct drm_color_ctm *ctm, +struct omap_dss_cpr_coefs *cpr) +{ + cpr->rr =omap_crtc_s32_32_to_s2_8 (ctm->matrix[0 ]); + cpr->rg =omap_crtc_s32_32_to_s2_8 (ctm->matrix[1 ]); + cpr->rb =omap_crtc_s32_32_to_s2_8 (ctm->matrix[2 ]); + cpr->gr =omap_crtc_s32_32_to_s2_8 (ctm->matrix[3 ]); + cpr->gg =omap_crtc_s32_32_to_s2_8 (ctm->matrix[4 ]); + cpr->gb =omap_crtc_s32_32_to_s2_8 (ctm->matrix[5 ]); + cpr->br =omap_crtc_s32_32_to_s2_8 (ctm->matrix[6 ]); + cpr->bg =omap_crtc_s32_32_to_s2_8 (ctm->matrix[7 ]); + cpr->bb =omap_crtc_s32_32_to_s2_8 (ctm->matrix[8 ]); +} +static void omap_crtc_write_crtc_properties (struct drm_crtc *crtc) {struct omap_drm_private *priv = crtc->dev->dev_private;
@@ -325,6 +344,15 @@ static void omap_crtc_write_crtc_properties(struct drm_crtc *crtc) info.partial_alpha_enabled = false; info.cpr_enable = false; +if (crtc->state->ctm && !WARN_ON (crtc->state->ctm->length != +sizeof (struct drm_color_ctm ))) { +struct drm_color_ctm *ctm = + (struct drm_color_ctm *) crtc->state->ctm->data; + + info.cpr_enable = true; +omap_crtc_cpr_coefs_from_ctm (ctm, &info.cpr_coefs); + } + priv->dispc_ops->mgr_setup (omap_crtc->channel, &info); }
@@ -624,7 +652,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,if (priv->dispc_ops->mgr_gamma_size (channel)) {uint gamma_lut_size =256 ; -drm_crtc_enable_color_mgmt (crtc,0 , false, gamma_lut_size); +drm_crtc_enable_color_mgmt (crtc,0 , true, gamma_lut_size);drm_mode_crtc_set_gamma_size (crtc, gamma_lut_size); }
Signature · 6 lines
1.9.1 _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v4 6/6] drm/omap: Implement CTM property for CRTC using OVL managers CPR matrix
Hi Jyri,
Thank you for the patch.
Quoted 42 lines · On Friday 24 Mar 2017 16:47:56 Jyri Sarha wrote:
Implement CTM color management property for OMAP CRTC using DSS overlay manager's Color Phase Rotation matrix. The CPR matrix does not exactly match the CTM property documentation. On DSS the CPR matrix is applied before gamma table look up. However, it seems stupid to add a custom property just for that.
Signed-off-by Jyri Sarha <[email protected]>--- drivers/gpu/drm/omapdrm/omap_crtc.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-)(quoted diff) +0
-0
b/drivers/gpu/drm/omapdrm/omap_crtc.cindex 026f73b..ed3b631 100644drivers/gpu/drm/omapdrm/omap_crtc.c +19
-0@@ -312,6 +312,25 @@ void omap_crtc_vblank_irq(struct drm_crtc *crtc)DBG ("%s: apply done" , omap_crtc->name); } +static s16 omap_crtc_s32_32_to_s2_8 (s64 coef) +{ +return (s16)(coef >>24 ); +} + +static void omap_crtc_cpr_coefs_from_ctm (const struct drm_color_ctm *ctm, +struct omap_dss_cpr_coefs *cpr) +{ + cpr->rr =omap_crtc_s32_32_to_s2_8 (ctm->matrix[0 ]); + cpr->rg =omap_crtc_s32_32_to_s2_8 (ctm->matrix[1 ]); + cpr->rb =omap_crtc_s32_32_to_s2_8 (ctm->matrix[2 ]); + cpr->gr =omap_crtc_s32_32_to_s2_8 (ctm->matrix[3 ]); + cpr->gg =omap_crtc_s32_32_to_s2_8 (ctm->matrix[4 ]); + cpr->gb =omap_crtc_s32_32_to_s2_8 (ctm->matrix[5 ]); + cpr->br =omap_crtc_s32_32_to_s2_8 (ctm->matrix[6 ]); + cpr->bg =omap_crtc_s32_32_to_s2_8 (ctm->matrix[7 ]); + cpr->bb =omap_crtc_s32_32_to_s2_8 (ctm->matrix[8 ]); +} +static void omap_crtc_write_crtc_properties (struct drm_crtc *crtc) {struct omap_drm_private *priv = crtc->dev->dev_private;
drivers/gpu/drm/omapdrm/omap_crtc.c static void omap_crtc_write_crtc_properties(struct · line 348
Quoted 5 lines
drivers/gpu/drm/omapdrm/omap_crtc.c +2
-0@@ -325,6 +344,15 @@ static void omap_crtc_write_crtc_properties(struct drm_crtc *crtc) info.partial_alpha_enabled = false; info.cpr_enable = false; +if (crtc->state->ctm && !WARN_ON (crtc->state->ctm->length != +sizeof (struct drm_color_ctm ))) {
Can the length check fail ? The property set path calls drm_atomic_replace_property_blob_from_id() which contains
if (expected_size > 0 && expected_size != new_blob->length) {
drm_property_unreference_blob(new_blob);
return -EINVAL;
}and expected_size is set to sizeof(struct drm_color_ctm).
Quoted 18 lines
drivers/gpu/drm/omapdrm/omap_crtc.c +8
-1+struct drm_color_ctm *ctm = + (struct drm_color_ctm *) crtc->state->ctm->data; + + info.cpr_enable = true; +omap_crtc_cpr_coefs_from_ctm (ctm, &info.cpr_coefs); + } + priv->dispc_ops->mgr_setup (omap_crtc->channel, &info); }@@ -624,7 +652,7 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,if (priv->dispc_ops->mgr_gamma_size (channel)) {uint gamma_lut_size =256 ; -drm_crtc_enable_color_mgmt (crtc,0 , false, gamma_lut_size); +drm_crtc_enable_color_mgmt (crtc,0 , true, gamma_lut_size);drm_mode_crtc_set_gamma_size (crtc, gamma_lut_size); }
Signature · 8 lines
Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Quoted 7 lines · Jyri Sarha
The first patch removes
CONFIG_DRM_OMAP_NUM_CRTCSconfig option. The patches number 2-4 gets rid of annoying name collision between dss backend and omapdrm. The second last patch cleans up the unnecessary complexity fromomap_modeset_init(). And finally the last implements CRTC's CTM matrix propety by using DSS DISPC's Color Phase Rotation unit.
Quoted 5 lines
Changes since v3:
- Rebased on top Tomi Valkeinen's latest omap-drm series:https://lists.freedesktop.org/archives/dri-devel/2017-March/136770.html- Adds:
- drm/omap: Implement CTM property for CRTC using OVL managers CPR matrix
I think the series looks good, except the CPR patch needs more work on deciding what kind of userspace API we need.
I'll apply the rest of the patches.
Tomi
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel