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 <[email protected]>
>
> Signed-off-by: james qian wang (Arm Technology China) <[email protected]>
> ---
> .../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
> [email protected]
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
On Fri, Jul 05, 2019 at 02:25:46PM +0200, Daniel Vetter wrote:
> 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 <[email protected]>
Hi Daniel:
I split this change to two patches, please ignore this one, and please
help to review the below sparated ones:
- https://patchwork.freedesktop.org/series/63340/ for layer_split
- https://patchwork.freedesktop.org/series/63341/ for image enhancer
Thanks
James
> >
> > Signed-off-by: james qian wang (Arm Technology China) <[email protected]>
> > ---
> > .../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
> > [email protected]
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.