[PATCH 74/74] media: qcom: camss: vfe: Pass the write master its address again

From: bod

Date: Mon Oct 05 2026 - 13:41:19 EST


From: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>

With vfe-780 programming its planes through vfe_output_update(), no
backend needs the buffer in vfe_wm_update() any more. Go back to passing
the write master its address.

This reverts commit "media: qcom: camss: vfe: Pass the buffer to
vfe_wm_update()".

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@xxxxxxxxxx>
---
drivers/media/platform/qcom/camss/camss-vfe-17x.c | 5 ++---
drivers/media/platform/qcom/camss/camss-vfe-340.c | 3 +--
drivers/media/platform/qcom/camss/camss-vfe-480.c | 3 +--
drivers/media/platform/qcom/camss/camss-vfe-680.c | 5 ++---
drivers/media/platform/qcom/camss/camss-vfe-690.c | 4 +---
drivers/media/platform/qcom/camss/camss-vfe.c | 6 +++---
drivers/media/platform/qcom/camss/camss-vfe.h | 2 +-
7 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/drivers/media/platform/qcom/camss/camss-vfe-17x.c b/drivers/media/platform/qcom/camss/camss-vfe-17x.c
index a2d336e7f7aa9..52812d34530d6 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-17x.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-17x.c
@@ -253,13 +253,12 @@ static void vfe_wm_stop(struct vfe_device *vfe, u8 wm, struct vfe_line *line)
writel_relaxed(0, vfe->base + VFE_BUS_WM_CFG(wm));
}

-static void vfe_wm_update(struct vfe_device *vfe, u8 wm, struct camss_buffer *buffer,
+static void vfe_wm_update(struct vfe_device *vfe, u8 wm, u32 addr,
struct vfe_line *line)
{
struct v4l2_pix_format_mplane *pix =
&line->output[0].video_out.active_fmt.fmt.pix_mp;
u32 stride = pix->plane_fmt[0].bytesperline;
- u32 addr = buffer->addr[0];

writel_relaxed(addr, vfe->base + VFE_BUS_WM_IMAGE_ADDR(wm));
writel_relaxed(stride * pix->height, vfe->base + VFE_BUS_WM_FRAME_INC(wm));
@@ -542,7 +541,7 @@ static void vfe_isr_wm_done(struct vfe_device *vfe, u8 wm)
output->buf[index] = vfe_buf_get_pending(output);

if (output->buf[index])
- vfe_wm_update(vfe, output->wm[0].bus_client, output->buf[index], line);
+ vfe_wm_update(vfe, output->wm[0].bus_client, output->buf[index]->addr[0], line);
else
output->gen2.active_num--;

diff --git a/drivers/media/platform/qcom/camss/camss-vfe-340.c b/drivers/media/platform/qcom/camss/camss-vfe-340.c
index 708dad42186f9..051f270a38187 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-340.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-340.c
@@ -252,10 +252,9 @@ static void vfe_enable_irq(struct vfe_device *vfe)
TFE_BUS_IRQ_MASK_0_IMG_VIOL, vfe->base + TFE_BUS_IRQ_MASK_0);
}

-static void vfe_wm_update(struct vfe_device *vfe, u8 wm, struct camss_buffer *buffer,
+static void vfe_wm_update(struct vfe_device *vfe, u8 wm, u32 addr,
struct vfe_line *line)
{
- u32 addr = buffer->addr[0];
u8 client = tfe_wm_client_map[wm];

writel_relaxed(addr, vfe->base + TFE_BUS_IMAGE_ADDR(client));
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c b/drivers/media/platform/qcom/camss/camss-vfe-480.c
index bb065e47fe91e..75dc73eadd6d0 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-480.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c
@@ -133,10 +133,9 @@ static void vfe_wm_stop(struct vfe_device *vfe, u8 wm, struct vfe_line *line)
writel_relaxed(0, vfe->base + VFE_BUS_WM_CFG(wm));
}

-static void vfe_wm_update(struct vfe_device *vfe, u8 wm, struct camss_buffer *buffer,
+static void vfe_wm_update(struct vfe_device *vfe, u8 wm, u32 addr,
struct vfe_line *line)
{
- u32 addr = buffer->addr[0];
wm = RDI_WM(wm); /* map to actual WM used (from wm=RDI index) */
writel_relaxed(addr, vfe->base + VFE_BUS_WM_IMAGE_ADDR(wm));
}
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-680.c b/drivers/media/platform/qcom/camss/camss-vfe-680.c
index 242bacb051cc0..d9a6402e8d928 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-680.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-680.c
@@ -144,11 +144,10 @@ static void vfe_disable_irq(struct vfe_device *vfe)
writel(0u, vfe->base + VFE_BUS_IRQn_MASK(vfe, 1));
}

-static void vfe_wm_update(struct vfe_device *vfe, u8 wm, struct camss_buffer *buffer,
+static void vfe_wm_update(struct vfe_device *vfe, u8 rdi, u32 addr,
struct vfe_line *line)
{
- u32 addr = buffer->addr[0];
- wm = RDI_WM(wm); /* map to actual WM used (from wm=RDI index) */
+ u8 wm = RDI_WM(rdi);

writel(addr, vfe->base + VFE_BUS_IMAGE_ADDR(vfe, wm));
}
diff --git a/drivers/media/platform/qcom/camss/camss-vfe-690.c b/drivers/media/platform/qcom/camss/camss-vfe-690.c
index efe8d963b4703..fb40560d4ab41 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe-690.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe-690.c
@@ -96,11 +96,9 @@ static void vfe_wm_stop(struct vfe_device *vfe, u8 wm, struct vfe_line *line)
writel(0, vfe->base + VFE_BUS_WM_CFG(wm));
}

-static void vfe_wm_update(struct vfe_device *vfe, u8 wm, struct camss_buffer *buffer,
+static void vfe_wm_update(struct vfe_device *vfe, u8 wm, u32 addr,
struct vfe_line *line)
{
- u32 addr = buffer->addr[0];
-
wm = RDI_WM(wm);

writel(addr, vfe->base + VFE_BUS_WM_IMAGE_ADDR(wm));
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c
index 5c72357bb8f02..485feb0bd7420 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.c
+++ b/drivers/media/platform/qcom/camss/camss-vfe.c
@@ -822,7 +822,7 @@ static struct camss_buffer *vfe_output_done(struct vfe_device *vfe,
ops->vfe_output_update(vfe, output, output->buf[index]);
else
ops->vfe_wm_update(vfe, output->wm[0].bus_client,
- output->buf[index],
+ output->buf[index]->addr[0],
line);
ops->reg_update(vfe, line->id);
} else {
@@ -942,7 +942,7 @@ static int vfe_enable_one_output(struct vfe_line *line, struct vfe_output *outpu
ops->vfe_output_update(vfe, output, output->buf[i]);
else
ops->vfe_wm_update(vfe, output->wm[0].bus_client,
- output->buf[i], line);
+ output->buf[i]->addr[0], line);
ops->reg_update(vfe, line->id);
}

@@ -1016,7 +1016,7 @@ int vfe_queue_buffer_v2(struct camss_video *vid,
ops->vfe_output_update(vfe, output, buf);
else
ops->vfe_wm_update(vfe, output->wm[0].bus_client,
- buf, line);
+ buf->addr[0], line);
ops->reg_update(vfe, line->id);
} else {
vfe_buf_add_pending(output, buf);
diff --git a/drivers/media/platform/qcom/camss/camss-vfe.h b/drivers/media/platform/qcom/camss/camss-vfe.h
index b39bce17f8dec..f7d9070391163 100644
--- a/drivers/media/platform/qcom/camss/camss-vfe.h
+++ b/drivers/media/platform/qcom/camss/camss-vfe.h
@@ -196,7 +196,7 @@ struct vfe_hw_ops {
struct vfe_line *line);
void (*vfe_buf_done)(struct vfe_device *vfe, int port_id,
struct camss_buf_done_info *buf_done_info);
- void (*vfe_wm_update)(struct vfe_device *vfe, u8 wm, struct camss_buffer *buffer,
+ void (*vfe_wm_update)(struct vfe_device *vfe, u8 wm, u32 addr,
struct vfe_line *line);

/*

--
2.55.0