On Fri, Jul 05, 2019 at 11:44:45AM +0000, james qian wang (Arm Technology China) wrote: > For layer_split: > Enable it if the scaling exceed the accept range of scaler. > > For image_enhancer: > Enable it if the scaling is a 2x+ scaling Imo should be two patches. Aside from that (and with 0 knowledge about the hw, just looking at this from a kms/atomic uapi pov): Acked-by: Daniel Vetter <daniel.vetter@xxxxxxxx> > > Signed-off-by: james qian wang (Arm Technology China) <james.qian.wang@xxxxxxx> > --- > .../gpu/drm/arm/display/komeda/komeda_pipeline.h | 3 ++- > .../arm/display/komeda/komeda_pipeline_state.c | 15 ++++++++++++++- > drivers/gpu/drm/arm/display/komeda/komeda_plane.c | 8 +------- > .../drm/arm/display/komeda/komeda_wb_connector.c | 10 +--------- > 4 files changed, 18 insertions(+), 18 deletions(-) > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h b/drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h > index fc1b8613385e..a90bcbb3cb23 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_pipeline.h > @@ -537,7 +537,8 @@ void komeda_pipeline_disable(struct komeda_pipeline *pipe, > void komeda_pipeline_update(struct komeda_pipeline *pipe, > struct drm_atomic_state *old_state); > > -void komeda_complete_data_flow_cfg(struct komeda_data_flow_cfg *dflow, > +void komeda_complete_data_flow_cfg(struct komeda_layer *layer, > + struct komeda_data_flow_cfg *dflow, > struct drm_framebuffer *fb); > > #endif /* _KOMEDA_PIPELINE_H_*/ > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c b/drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c > index 2b415ef2b7d3..709870bdaa4f 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c > @@ -784,9 +784,11 @@ komeda_timing_ctrlr_validate(struct komeda_timing_ctrlr *ctrlr, > return 0; > } > > -void komeda_complete_data_flow_cfg(struct komeda_data_flow_cfg *dflow, > +void komeda_complete_data_flow_cfg(struct komeda_layer *layer, > + struct komeda_data_flow_cfg *dflow, > struct drm_framebuffer *fb) > { > + struct komeda_scaler *scaler = layer->base.pipeline->scalers[0]; > u32 w = dflow->in_w; > u32 h = dflow->in_h; > > @@ -803,6 +805,17 @@ void komeda_complete_data_flow_cfg(struct komeda_data_flow_cfg *dflow, > > dflow->en_scaling = (w != dflow->out_w) || (h != dflow->out_h); > dflow->is_yuv = fb->format->is_yuv; > + > + /* try to enable image enhancer if it is a 2x+ upscaling */ > + dflow->en_img_enhancement = dflow->out_w >= 2 * w || > + dflow->out_h >= 2 * h; > + > + /* try to enable split if scaling exceed the scaler's acceptable > + * input/output range. > + */ > + if (dflow->en_scaling && scaler) > + dflow->en_split = !in_range(&scaler->hsize, dflow->in_w) || > + !in_range(&scaler->hsize, dflow->out_w); > } > > static bool merger_is_available(struct komeda_pipeline *pipe, > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c > index 5bb8553cc117..c095af154216 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_plane.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_plane.c > @@ -18,7 +18,6 @@ komeda_plane_init_data_flow(struct drm_plane_state *st, > struct komeda_data_flow_cfg *dflow) > { > struct komeda_plane *kplane = to_kplane(st->plane); > - struct komeda_plane_state *kplane_st = to_kplane_st(st); > struct drm_framebuffer *fb = st->fb; > const struct komeda_format_caps *caps = to_kfb(fb)->format_caps; > struct komeda_pipeline *pipe = kplane->layer->base.pipeline; > @@ -57,10 +56,7 @@ komeda_plane_init_data_flow(struct drm_plane_state *st, > return -EINVAL; > } > > - dflow->en_img_enhancement = !!kplane_st->img_enhancement; > - dflow->en_split = !!kplane_st->layer_split; > - > - komeda_complete_data_flow_cfg(dflow, fb); > + komeda_complete_data_flow_cfg(kplane->layer, dflow, fb); > > return 0; > } > @@ -175,8 +171,6 @@ komeda_plane_atomic_duplicate_state(struct drm_plane *plane) > > old = to_kplane_st(plane->state); > > - new->img_enhancement = old->img_enhancement; > - > return &new->base; > } > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c > index bb8a61f6e9a4..617e1f7b8472 100644 > --- a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c > @@ -13,7 +13,6 @@ komeda_wb_init_data_flow(struct komeda_layer *wb_layer, > struct komeda_crtc_state *kcrtc_st, > struct komeda_data_flow_cfg *dflow) > { > - struct komeda_scaler *scaler = wb_layer->base.pipeline->scalers[0]; > struct drm_framebuffer *fb = conn_st->writeback_job->fb; > > memset(dflow, 0, sizeof(*dflow)); > @@ -28,14 +27,7 @@ komeda_wb_init_data_flow(struct komeda_layer *wb_layer, > dflow->pixel_blend_mode = DRM_MODE_BLEND_PIXEL_NONE; > dflow->rot = DRM_MODE_ROTATE_0; > > - komeda_complete_data_flow_cfg(dflow, fb); > - > - /* if scaling exceed the acceptable scaler input/output range, try to > - * enable split. > - */ > - if (dflow->en_scaling && scaler) > - dflow->en_split = !in_range(&scaler->hsize, dflow->in_w) || > - !in_range(&scaler->hsize, dflow->out_w); > + komeda_complete_data_flow_cfg(wb_layer, dflow, fb); > > return 0; > } > -- > 2.20.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel