Thread (23 messages) 23 messages, 3 authors, 2025-09-08

Re: [PATCH v5 01/14] media: ti: j721e-csi2rx: Remove word size alignment on frame width

From: Rishikesh Donadkar <hidden>
Date: 2025-09-08 08:21:38
Also in: linux-media, lkml

On 05/09/25 16:37, Jai Luthra wrote:
Hi Rishikesh,

Hi Jai,

Thank you for the comments

Quoting Rishikesh Donadkar (2025-08-25 19:55:09)
quoted
j721e-csi2rx driver has a limitation of frame width being a multiple
word size. However, there is no such limitation imposed by the
hardware [1].
Is there no limitation for the step size, or also not limitation for the
minimum size of transfer?


I did not see any mention of restrictions on the step size and minimum 
size of transfer in the TRM and the CSI functional specifications.

quoted
Remove this limitation from the driver.

Link: https://www.ti.com/lit/pdf/spruj16
Signed-off-by: Rishikesh Donadkar <redacted>
---
  .../platform/ti/j721e-csi2rx/j721e-csi2rx.c     | 17 +++--------------
  1 file changed, 3 insertions(+), 14 deletions(-)
diff --git a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
index 3992f8b754b7..b3a27f4c3210 100644
--- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
+++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
@@ -260,9 +260,6 @@ static void ti_csi2rx_fill_fmt(const struct ti_csi2rx_fmt *csi_fmt,
                              MAX_WIDTH_BYTES * 8 / csi_fmt->bpp);
Here the pix->width is restricted to be at minimum pixels_in_word.
So TRY_FMT/S_FMT with a width = 1 will be clamped by the driver.
quoted
         pix->height = clamp_t(unsigned int, pix->height, 1, MAX_HEIGHT_LINES);
  
-       /* Width should be a multiple of transfer word-size */
-       pix->width = rounddown(pix->width, pixels_in_word);
-
         v4l2_fmt->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
         pix->pixelformat = csi_fmt->fourcc;
         pix->bytesperline = pix->width * (csi_fmt->bpp / 8);
@@ -360,23 +357,15 @@ static int ti_csi2rx_enum_framesizes(struct file *file, void *fh,
                                      struct v4l2_frmsizeenum *fsize)
  {
         const struct ti_csi2rx_fmt *fmt;
-       unsigned int pixels_in_word;
  
         fmt = find_format_by_fourcc(fsize->pixel_format);
         if (!fmt || fsize->index != 0)
                 return -EINVAL;
  
-       /*
-        * Number of pixels in one PSI-L word. The transfer happens in multiples
-        * of PSI-L word sizes.
-        */
-       pixels_in_word = PSIL_WORD_SIZE_BYTES * 8 / fmt->bpp;
-
         fsize->type = V4L2_FRMSIZE_TYPE_STEPWISE;
-       fsize->stepwise.min_width = pixels_in_word;
-       fsize->stepwise.max_width = rounddown(MAX_WIDTH_BYTES * 8 / fmt->bpp,
-                                             pixels_in_word);
-       fsize->stepwise.step_width = pixels_in_word;
+       fsize->stepwise.min_width = 1;
But here, in ENUM_FRAMESIZES we allow width to go as low as 1.

Can you make sure both of them match whatever is correct (and possible by
the hardware)?

Sure

quoted
+       fsize->stepwise.max_width = MAX_WIDTH_BYTES * 8 / fmt->bpp;
+       fsize->stepwise.step_width = 1;
         fsize->stepwise.min_height = 1;
         fsize->stepwise.max_height = MAX_HEIGHT_LINES;
         fsize->stepwise.step_height = 1;
-- 
2.34.1
Thanks,
     Jai

Regards,

Rishikesh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help