Commit b36c6049 authored by Laurent Pinchart's avatar Laurent Pinchart

media: vsp1: Add vsp1_dl_list argument to .configure_stream() operation

The WPF needs access to the current display list to configure writeback.
Add a display list pointer to the VSP1 entity .configure_stream()
operation.

Only display pipelines can make use of the display list there as
mem-to-mem pipelines don't have access to a display list at stream
configuration time. This is not an issue as writeback is only used for
display pipelines.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: default avatarKieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Reviewed-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 65cddb19
...@@ -283,6 +283,7 @@ static const struct v4l2_subdev_ops brx_ops = { ...@@ -283,6 +283,7 @@ static const struct v4l2_subdev_ops brx_ops = {
static void brx_configure_stream(struct vsp1_entity *entity, static void brx_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_brx *brx = to_brx(&entity->subdev); struct vsp1_brx *brx = to_brx(&entity->subdev);
......
...@@ -171,6 +171,7 @@ static const struct v4l2_subdev_ops clu_ops = { ...@@ -171,6 +171,7 @@ static const struct v4l2_subdev_ops clu_ops = {
static void clu_configure_stream(struct vsp1_entity *entity, static void clu_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_clu *clu = to_clu(&entity->subdev); struct vsp1_clu *clu = to_clu(&entity->subdev);
......
...@@ -558,7 +558,7 @@ static void vsp1_du_pipeline_configure(struct vsp1_pipeline *pipe) ...@@ -558,7 +558,7 @@ static void vsp1_du_pipeline_configure(struct vsp1_pipeline *pipe)
} }
vsp1_entity_route_setup(entity, pipe, dlb); vsp1_entity_route_setup(entity, pipe, dlb);
vsp1_entity_configure_stream(entity, pipe, dlb); vsp1_entity_configure_stream(entity, pipe, dl, dlb);
vsp1_entity_configure_frame(entity, pipe, dl, dlb); vsp1_entity_configure_frame(entity, pipe, dl, dlb);
vsp1_entity_configure_partition(entity, pipe, dl, dlb); vsp1_entity_configure_partition(entity, pipe, dl, dlb);
} }
......
...@@ -71,10 +71,11 @@ void vsp1_entity_route_setup(struct vsp1_entity *entity, ...@@ -71,10 +71,11 @@ void vsp1_entity_route_setup(struct vsp1_entity *entity,
void vsp1_entity_configure_stream(struct vsp1_entity *entity, void vsp1_entity_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
if (entity->ops->configure_stream) if (entity->ops->configure_stream)
entity->ops->configure_stream(entity, pipe, dlb); entity->ops->configure_stream(entity, pipe, dl, dlb);
} }
void vsp1_entity_configure_frame(struct vsp1_entity *entity, void vsp1_entity_configure_frame(struct vsp1_entity *entity,
......
...@@ -67,7 +67,9 @@ struct vsp1_route { ...@@ -67,7 +67,9 @@ struct vsp1_route {
* struct vsp1_entity_operations - Entity operations * struct vsp1_entity_operations - Entity operations
* @destroy: Destroy the entity. * @destroy: Destroy the entity.
* @configure_stream: Setup the hardware parameters for the stream which do * @configure_stream: Setup the hardware parameters for the stream which do
* not vary between frames (pipeline, formats). * not vary between frames (pipeline, formats). Note that
* the vsp1_dl_list argument is only valid for display
* pipeline and will be NULL for mem-to-mem pipelines.
* @configure_frame: Configure the runtime parameters for each frame. * @configure_frame: Configure the runtime parameters for each frame.
* @configure_partition: Configure partition specific parameters. * @configure_partition: Configure partition specific parameters.
* @max_width: Return the max supported width of data that the entity can * @max_width: Return the max supported width of data that the entity can
...@@ -78,7 +80,7 @@ struct vsp1_route { ...@@ -78,7 +80,7 @@ struct vsp1_route {
struct vsp1_entity_operations { struct vsp1_entity_operations {
void (*destroy)(struct vsp1_entity *); void (*destroy)(struct vsp1_entity *);
void (*configure_stream)(struct vsp1_entity *, struct vsp1_pipeline *, void (*configure_stream)(struct vsp1_entity *, struct vsp1_pipeline *,
struct vsp1_dl_body *); struct vsp1_dl_list *, struct vsp1_dl_body *);
void (*configure_frame)(struct vsp1_entity *, struct vsp1_pipeline *, void (*configure_frame)(struct vsp1_entity *, struct vsp1_pipeline *,
struct vsp1_dl_list *, struct vsp1_dl_body *); struct vsp1_dl_list *, struct vsp1_dl_body *);
void (*configure_partition)(struct vsp1_entity *, void (*configure_partition)(struct vsp1_entity *,
...@@ -155,6 +157,7 @@ void vsp1_entity_route_setup(struct vsp1_entity *entity, ...@@ -155,6 +157,7 @@ void vsp1_entity_route_setup(struct vsp1_entity *entity,
void vsp1_entity_configure_stream(struct vsp1_entity *entity, void vsp1_entity_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb); struct vsp1_dl_body *dlb);
void vsp1_entity_configure_frame(struct vsp1_entity *entity, void vsp1_entity_configure_frame(struct vsp1_entity *entity,
......
...@@ -131,6 +131,7 @@ static const struct v4l2_ctrl_config hgo_num_bins_control = { ...@@ -131,6 +131,7 @@ static const struct v4l2_ctrl_config hgo_num_bins_control = {
static void hgo_configure_stream(struct vsp1_entity *entity, static void hgo_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_hgo *hgo = to_hgo(&entity->subdev); struct vsp1_hgo *hgo = to_hgo(&entity->subdev);
......
...@@ -127,6 +127,7 @@ static const struct v4l2_ctrl_config hgt_hue_areas = { ...@@ -127,6 +127,7 @@ static const struct v4l2_ctrl_config hgt_hue_areas = {
static void hgt_configure_stream(struct vsp1_entity *entity, static void hgt_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_hgt *hgt = to_hgt(&entity->subdev); struct vsp1_hgt *hgt = to_hgt(&entity->subdev);
......
...@@ -129,6 +129,7 @@ static const struct v4l2_subdev_ops hsit_ops = { ...@@ -129,6 +129,7 @@ static const struct v4l2_subdev_ops hsit_ops = {
static void hsit_configure_stream(struct vsp1_entity *entity, static void hsit_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_hsit *hsit = to_hsit(&entity->subdev); struct vsp1_hsit *hsit = to_hsit(&entity->subdev);
......
...@@ -84,6 +84,7 @@ static const struct v4l2_subdev_ops lif_ops = { ...@@ -84,6 +84,7 @@ static const struct v4l2_subdev_ops lif_ops = {
static void lif_configure_stream(struct vsp1_entity *entity, static void lif_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
const struct v4l2_mbus_framefmt *format; const struct v4l2_mbus_framefmt *format;
......
...@@ -147,6 +147,7 @@ static const struct v4l2_subdev_ops lut_ops = { ...@@ -147,6 +147,7 @@ static const struct v4l2_subdev_ops lut_ops = {
static void lut_configure_stream(struct vsp1_entity *entity, static void lut_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_lut *lut = to_lut(&entity->subdev); struct vsp1_lut *lut = to_lut(&entity->subdev);
......
...@@ -57,6 +57,7 @@ static const struct v4l2_subdev_ops rpf_ops = { ...@@ -57,6 +57,7 @@ static const struct v4l2_subdev_ops rpf_ops = {
static void rpf_configure_stream(struct vsp1_entity *entity, static void rpf_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_rwpf *rpf = to_rwpf(&entity->subdev); struct vsp1_rwpf *rpf = to_rwpf(&entity->subdev);
......
...@@ -269,6 +269,7 @@ static const struct v4l2_subdev_ops sru_ops = { ...@@ -269,6 +269,7 @@ static const struct v4l2_subdev_ops sru_ops = {
static void sru_configure_stream(struct vsp1_entity *entity, static void sru_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
const struct vsp1_sru_param *param; const struct vsp1_sru_param *param;
......
...@@ -257,6 +257,7 @@ static const struct v4l2_subdev_ops uds_ops = { ...@@ -257,6 +257,7 @@ static const struct v4l2_subdev_ops uds_ops = {
static void uds_configure_stream(struct vsp1_entity *entity, static void uds_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_uds *uds = to_uds(&entity->subdev); struct vsp1_uds *uds = to_uds(&entity->subdev);
......
...@@ -192,6 +192,7 @@ static const struct v4l2_subdev_ops uif_ops = { ...@@ -192,6 +192,7 @@ static const struct v4l2_subdev_ops uif_ops = {
static void uif_configure_stream(struct vsp1_entity *entity, static void uif_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_uif *uif = to_uif(&entity->subdev); struct vsp1_uif *uif = to_uif(&entity->subdev);
......
...@@ -825,7 +825,8 @@ static int vsp1_video_setup_pipeline(struct vsp1_pipeline *pipe) ...@@ -825,7 +825,8 @@ static int vsp1_video_setup_pipeline(struct vsp1_pipeline *pipe)
list_for_each_entry(entity, &pipe->entities, list_pipe) { list_for_each_entry(entity, &pipe->entities, list_pipe) {
vsp1_entity_route_setup(entity, pipe, pipe->stream_config); vsp1_entity_route_setup(entity, pipe, pipe->stream_config);
vsp1_entity_configure_stream(entity, pipe, pipe->stream_config); vsp1_entity_configure_stream(entity, pipe, NULL,
pipe->stream_config);
} }
return 0; return 0;
......
...@@ -234,6 +234,7 @@ static void vsp1_wpf_destroy(struct vsp1_entity *entity) ...@@ -234,6 +234,7 @@ static void vsp1_wpf_destroy(struct vsp1_entity *entity)
static void wpf_configure_stream(struct vsp1_entity *entity, static void wpf_configure_stream(struct vsp1_entity *entity,
struct vsp1_pipeline *pipe, struct vsp1_pipeline *pipe,
struct vsp1_dl_list *dl,
struct vsp1_dl_body *dlb) struct vsp1_dl_body *dlb)
{ {
struct vsp1_rwpf *wpf = to_rwpf(&entity->subdev); struct vsp1_rwpf *wpf = to_rwpf(&entity->subdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment