diff mbox series

media: rkisp1: remove support for V4L2_PIX_FMT_GREY

Message ID 20211120110257.22775-1-dafna.hirschfeld@collabora.com (mailing list archive)
State New, archived
Headers show
Series media: rkisp1: remove support for V4L2_PIX_FMT_GREY | expand

Commit Message

Dafna Hirschfeld Nov. 20, 2021, 11:02 a.m. UTC
When trying to stream on both mainpatch and selfpatch
with grey format, I get an iommu page fault.
The fault is on the address at the end of the buffer,
so it seems that the device is somehow wrongly
configured and thinks there is another plane.

Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
---
 .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
 1 file changed, 15 deletions(-)

Comments

Laurent Pinchart Nov. 20, 2021, 12:34 p.m. UTC | #1
Hi Dafna,

Thank you for the patch.

On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
> When trying to stream on both mainpatch and selfpatch
> with grey format, I get an iommu page fault.
> The fault is on the address at the end of the buffer,
> so it seems that the device is somehow wrongly
> configured and thinks there is another plane.

Could we try to fix that instead ? There are IR sensors for which the
GREY format is useful.

> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
> ---
>  .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
>  1 file changed, 15 deletions(-)
> 
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> index 768987d5f2dd..7f78f361dd5e 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
>  		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>  		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>  	},
> -	/* yuv400 */
> -	{
> -		.fourcc = V4L2_PIX_FMT_GREY,
> -		.uv_swap = 0,
> -		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> -	},
>  	/* yuv420 */
>  	{
>  		.fourcc = V4L2_PIX_FMT_NV21,
> @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
>  		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
>  		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>  	},
> -	/* yuv400 */
> -	{
> -		.fourcc = V4L2_PIX_FMT_GREY,
> -		.uv_swap = 0,
> -		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
> -		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> -	},
>  	/* rgb */
>  	{
>  		.fourcc = V4L2_PIX_FMT_XBGR32,
Dafna Hirschfeld Nov. 22, 2021, 11:20 a.m. UTC | #2
On 20.11.21 14:34, Laurent Pinchart wrote:
> Hi Dafna,
> 
> Thank you for the patch.
> 
> On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
>> When trying to stream on both mainpatch and selfpatch
>> with grey format, I get an iommu page fault.
>> The fault is on the address at the end of the buffer,
>> so it seems that the device is somehow wrongly
>> configured and thinks there is another plane.
> 
> Could we try to fix that instead ? There are IR sensors for which the
> GREY format is useful.

Hi, the doc is not very useful so I can try doing a bit trial and error.
I see that there are several greyscale formats: [1]
which make me think that maybe the device support one of the other greyscale formats.
Do you know if some formats are more likely than other?

thanks,
Dafna

[1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html


> 
>> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
>> ---
>>   .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
>>   1 file changed, 15 deletions(-)
>>
>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>> index 768987d5f2dd..7f78f361dd5e 100644
>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>> @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
>>   		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>>   		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>   	},
>> -	/* yuv400 */
>> -	{
>> -		.fourcc = V4L2_PIX_FMT_GREY,
>> -		.uv_swap = 0,
>> -		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>> -	},
>>   	/* yuv420 */
>>   	{
>>   		.fourcc = V4L2_PIX_FMT_NV21,
>> @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
>>   		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
>>   		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>   	},
>> -	/* yuv400 */
>> -	{
>> -		.fourcc = V4L2_PIX_FMT_GREY,
>> -		.uv_swap = 0,
>> -		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
>> -		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>> -	},
>>   	/* rgb */
>>   	{
>>   		.fourcc = V4L2_PIX_FMT_XBGR32,
>
Laurent Pinchart Nov. 22, 2021, 12:29 p.m. UTC | #3
Hi Dafna,

On Mon, Nov 22, 2021 at 01:20:47PM +0200, Dafna Hirschfeld wrote:
> On 20.11.21 14:34, Laurent Pinchart wrote:
> > On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
> >> When trying to stream on both mainpatch and selfpatch
> >> with grey format, I get an iommu page fault.
> >> The fault is on the address at the end of the buffer,
> >> so it seems that the device is somehow wrongly
> >> configured and thinks there is another plane.
> > 
> > Could we try to fix that instead ? There are IR sensors for which the
> > GREY format is useful.
> 
> Hi, the doc is not very useful so I can try doing a bit trial and error.
> I see that there are several greyscale formats: [1]
> which make me think that maybe the device support one of the other greyscale formats.
> Do you know if some formats are more likely than other?

GREY seems the most likely (useful for IR sensors for instance, after
ISP processing). Formats with a higher bpp would require processing of
more than 8bpp through the ISP pipeline, I don't know if that's
supported.

Formats with a higher bpp (both greyscale and bayer formats) are also
useful to capture raw images (before ISP processing). Is that something
the hardware and driver support ?

> [1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
> 
> >> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
> >> ---
> >>   .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
> >>   1 file changed, 15 deletions(-)
> >>
> >> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> >> index 768987d5f2dd..7f78f361dd5e 100644
> >> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> >> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> >> @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
> >>   		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> >>   		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >>   	},
> >> -	/* yuv400 */
> >> -	{
> >> -		.fourcc = V4L2_PIX_FMT_GREY,
> >> -		.uv_swap = 0,
> >> -		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> >> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >> -	},
> >>   	/* yuv420 */
> >>   	{
> >>   		.fourcc = V4L2_PIX_FMT_NV21,
> >> @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
> >>   		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
> >>   		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >>   	},
> >> -	/* yuv400 */
> >> -	{
> >> -		.fourcc = V4L2_PIX_FMT_GREY,
> >> -		.uv_swap = 0,
> >> -		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
> >> -		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
> >> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >> -	},
> >>   	/* rgb */
> >>   	{
> >>   		.fourcc = V4L2_PIX_FMT_XBGR32,
Dafna Hirschfeld Nov. 22, 2021, 2:21 p.m. UTC | #4
On 22.11.21 14:29, Laurent Pinchart wrote:
> Hi Dafna,
> 
> On Mon, Nov 22, 2021 at 01:20:47PM +0200, Dafna Hirschfeld wrote:
>> On 20.11.21 14:34, Laurent Pinchart wrote:
>>> On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
>>>> When trying to stream on both mainpatch and selfpatch
>>>> with grey format, I get an iommu page fault.
>>>> The fault is on the address at the end of the buffer,
>>>> so it seems that the device is somehow wrongly
>>>> configured and thinks there is another plane.
>>>
>>> Could we try to fix that instead ? There are IR sensors for which the
>>> GREY format is useful.
>>
>> Hi, the doc is not very useful so I can try doing a bit trial and error.
>> I see that there are several greyscale formats: [1]
>> which make me think that maybe the device support one of the other greyscale formats.
>> Do you know if some formats are more likely than other?
> 
> GREY seems the most likely (useful for IR sensors for instance, after
> ISP processing). Formats with a higher bpp would require processing of
> more than 8bpp through the ISP pipeline, I don't know if that's
> supported.
> 
> Formats with a higher bpp (both greyscale and bayer formats) are also
> useful to capture raw images (before ISP processing). Is that something
> the hardware and driver support ?

hi, yes the variations of V4L2_PIX_FMT_Sxxxx10, V4L2_PIX_FMT_Sxxxx12 are supported on mainpath.

> 
>> [1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
>>
>>>> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
>>>> ---
>>>>    .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
>>>>    1 file changed, 15 deletions(-)
>>>>
>>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>> index 768987d5f2dd..7f78f361dd5e 100644
>>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>> @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
>>>>    		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>>>>    		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>    	},
>>>> -	/* yuv400 */
>>>> -	{
>>>> -		.fourcc = V4L2_PIX_FMT_GREY,
>>>> -		.uv_swap = 0,
>>>> -		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>>>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>> -	},
>>>>    	/* yuv420 */
>>>>    	{
>>>>    		.fourcc = V4L2_PIX_FMT_NV21,
>>>> @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
>>>>    		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
>>>>    		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>    	},
>>>> -	/* yuv400 */
>>>> -	{
>>>> -		.fourcc = V4L2_PIX_FMT_GREY,
>>>> -		.uv_swap = 0,
>>>> -		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
>>>> -		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
>>>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>> -	},
>>>>    	/* rgb */
>>>>    	{
>>>>    		.fourcc = V4L2_PIX_FMT_XBGR32,
>
Laurent Pinchart Nov. 22, 2021, 2:28 p.m. UTC | #5
Hi Dafna,

On Mon, Nov 22, 2021 at 04:21:25PM +0200, Dafna Hirschfeld wrote:
> On 22.11.21 14:29, Laurent Pinchart wrote:
> > On Mon, Nov 22, 2021 at 01:20:47PM +0200, Dafna Hirschfeld wrote:
> >> On 20.11.21 14:34, Laurent Pinchart wrote:
> >>> On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
> >>>> When trying to stream on both mainpatch and selfpatch
> >>>> with grey format, I get an iommu page fault.
> >>>> The fault is on the address at the end of the buffer,
> >>>> so it seems that the device is somehow wrongly
> >>>> configured and thinks there is another plane.
> >>>
> >>> Could we try to fix that instead ? There are IR sensors for which the
> >>> GREY format is useful.
> >>
> >> Hi, the doc is not very useful so I can try doing a bit trial and error.
> >> I see that there are several greyscale formats: [1]
> >> which make me think that maybe the device support one of the other greyscale formats.
> >> Do you know if some formats are more likely than other?
> > 
> > GREY seems the most likely (useful for IR sensors for instance, after
> > ISP processing). Formats with a higher bpp would require processing of
> > more than 8bpp through the ISP pipeline, I don't know if that's
> > supported.
> > 
> > Formats with a higher bpp (both greyscale and bayer formats) are also
> > useful to capture raw images (before ISP processing). Is that something
> > the hardware and driver support ?
> 
> hi, yes the variations of V4L2_PIX_FMT_Sxxxx10, V4L2_PIX_FMT_Sxxxx12
> are supported on mainpath.

That's nice. Does it bypass the whole ISP then ? Is it possible to
capture raw frames on the main path and processed frames on the self
path at the same time, or are we restricted to raw only when we capture
raw frames ?

> >> [1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
> >>
> >>>> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
> >>>> ---
> >>>>    .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
> >>>>    1 file changed, 15 deletions(-)
> >>>>
> >>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> >>>> index 768987d5f2dd..7f78f361dd5e 100644
> >>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> >>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> >>>> @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
> >>>>    		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> >>>>    		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >>>>    	},
> >>>> -	/* yuv400 */
> >>>> -	{
> >>>> -		.fourcc = V4L2_PIX_FMT_GREY,
> >>>> -		.uv_swap = 0,
> >>>> -		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> >>>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >>>> -	},
> >>>>    	/* yuv420 */
> >>>>    	{
> >>>>    		.fourcc = V4L2_PIX_FMT_NV21,
> >>>> @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
> >>>>    		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
> >>>>    		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >>>>    	},
> >>>> -	/* yuv400 */
> >>>> -	{
> >>>> -		.fourcc = V4L2_PIX_FMT_GREY,
> >>>> -		.uv_swap = 0,
> >>>> -		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
> >>>> -		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
> >>>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> >>>> -	},
> >>>>    	/* rgb */
> >>>>    	{
> >>>>    		.fourcc = V4L2_PIX_FMT_XBGR32,
Dafna Hirschfeld Dec. 1, 2021, 7:03 a.m. UTC | #6
On 22.11.21 16:28, Laurent Pinchart wrote:
> Hi Dafna,
> 
> On Mon, Nov 22, 2021 at 04:21:25PM +0200, Dafna Hirschfeld wrote:
>> On 22.11.21 14:29, Laurent Pinchart wrote:
>>> On Mon, Nov 22, 2021 at 01:20:47PM +0200, Dafna Hirschfeld wrote:
>>>> On 20.11.21 14:34, Laurent Pinchart wrote:
>>>>> On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
>>>>>> When trying to stream on both mainpatch and selfpatch
>>>>>> with grey format, I get an iommu page fault.
>>>>>> The fault is on the address at the end of the buffer,
>>>>>> so it seems that the device is somehow wrongly
>>>>>> configured and thinks there is another plane.
>>>>>
>>>>> Could we try to fix that instead ? There are IR sensors for which the
>>>>> GREY format is useful.
>>>>
>>>> Hi, the doc is not very useful so I can try doing a bit trial and error.
>>>> I see that there are several greyscale formats: [1]
>>>> which make me think that maybe the device support one of the other greyscale formats.
>>>> Do you know if some formats are more likely than other?
>>>
>>> GREY seems the most likely (useful for IR sensors for instance, after
>>> ISP processing). Formats with a higher bpp would require processing of
>>> more than 8bpp through the ISP pipeline, I don't know if that's
>>> supported.

I tried all kind of things but was not able to stream greyscale.
When ISP processing works it outputs YUV 422 format and then the resizer
is used to change the format to YUV 420 if wanted.
I tried to chance the scale to YUV 400 (grey) or change the mainpath/selfpath
configuration but still had that iommu page fault errors.

Interestingly when I bypass the iommu and dma allocation is direct
the streaming works and even the output frames seems okayish greyscale format
but that might be by accident.

>>>
>>> Formats with a higher bpp (both greyscale and bayer formats) are also
>>> useful to capture raw images (before ISP processing). Is that something
>>> the hardware and driver support ?
>>
>> hi, yes the variations of V4L2_PIX_FMT_Sxxxx10, V4L2_PIX_FMT_Sxxxx12
>> are supported on mainpath.
> 
> That's nice. Does it bypass the whole ISP then ? Is it possible to
> capture raw frames on the main path and processed frames on the self
> path at the same time, or are we restricted to raw only when we capture
> raw frames ?

I think we are restricted to raw only when we capture raw frames.
The doc describe the isp_ctl register that set the isp output to either raw or yuv.
It seems not to be possible to send raw to mainpath and yuv to selfpath.

Thanks,
Dafna

> 
>>>> [1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
>>>>
>>>>>> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
>>>>>> ---
>>>>>>     .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
>>>>>>     1 file changed, 15 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>>>> index 768987d5f2dd..7f78f361dd5e 100644
>>>>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>>>> @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
>>>>>>     		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>>>>>>     		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>>     	},
>>>>>> -	/* yuv400 */
>>>>>> -	{
>>>>>> -		.fourcc = V4L2_PIX_FMT_GREY,
>>>>>> -		.uv_swap = 0,
>>>>>> -		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>>>>>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>> -	},
>>>>>>     	/* yuv420 */
>>>>>>     	{
>>>>>>     		.fourcc = V4L2_PIX_FMT_NV21,
>>>>>> @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
>>>>>>     		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
>>>>>>     		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>>     	},
>>>>>> -	/* yuv400 */
>>>>>> -	{
>>>>>> -		.fourcc = V4L2_PIX_FMT_GREY,
>>>>>> -		.uv_swap = 0,
>>>>>> -		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
>>>>>> -		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
>>>>>> -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>> -	},
>>>>>>     	/* rgb */
>>>>>>     	{
>>>>>>     		.fourcc = V4L2_PIX_FMT_XBGR32,
>
Nicolas Dufresne Dec. 1, 2021, 6:14 p.m. UTC | #7
Le mercredi 01 décembre 2021 à 09:03 +0200, Dafna Hirschfeld a écrit :
> 
> On 22.11.21 16:28, Laurent Pinchart wrote:
> > Hi Dafna,
> > 
> > On Mon, Nov 22, 2021 at 04:21:25PM +0200, Dafna Hirschfeld wrote:
> > > On 22.11.21 14:29, Laurent Pinchart wrote:
> > > > On Mon, Nov 22, 2021 at 01:20:47PM +0200, Dafna Hirschfeld wrote:
> > > > > On 20.11.21 14:34, Laurent Pinchart wrote:
> > > > > > On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
> > > > > > > When trying to stream on both mainpatch and selfpatch
> > > > > > > with grey format, I get an iommu page fault.
> > > > > > > The fault is on the address at the end of the buffer,
> > > > > > > so it seems that the device is somehow wrongly
> > > > > > > configured and thinks there is another plane.
> > > > > > 
> > > > > > Could we try to fix that instead ? There are IR sensors for which the
> > > > > > GREY format is useful.
> > > > > 
> > > > > Hi, the doc is not very useful so I can try doing a bit trial and error.
> > > > > I see that there are several greyscale formats: [1]
> > > > > which make me think that maybe the device support one of the other greyscale formats.
> > > > > Do you know if some formats are more likely than other?
> > > > 
> > > > GREY seems the most likely (useful for IR sensors for instance, after
> > > > ISP processing). Formats with a higher bpp would require processing of
> > > > more than 8bpp through the ISP pipeline, I don't know if that's
> > > > supported.
> 
> I tried all kind of things but was not able to stream greyscale.
> When ISP processing works it outputs YUV 422 format and then the resizer
> is used to change the format to YUV 420 if wanted.
> I tried to chance the scale to YUV 400 (grey) or change the mainpath/selfpath
> configuration but still had that iommu page fault errors.
> 
> Interestingly when I bypass the iommu and dma allocation is direct
> the streaming works and even the output frames seems okayish greyscale format
> but that might be by accident.

Just a guess, but its possible they use a short cut to gray scale, and write to
NV12 buffers. planar YUV 420 are somewhat compatible with grayscale, so that's
always a possible cheat.

> 
> > > > 
> > > > Formats with a higher bpp (both greyscale and bayer formats) are also
> > > > useful to capture raw images (before ISP processing). Is that something
> > > > the hardware and driver support ?
> > > 
> > > hi, yes the variations of V4L2_PIX_FMT_Sxxxx10, V4L2_PIX_FMT_Sxxxx12
> > > are supported on mainpath.
> > 
> > That's nice. Does it bypass the whole ISP then ? Is it possible to
> > capture raw frames on the main path and processed frames on the self
> > path at the same time, or are we restricted to raw only when we capture
> > raw frames ?
> 
> I think we are restricted to raw only when we capture raw frames.
> The doc describe the isp_ctl register that set the isp output to either raw or yuv.
> It seems not to be possible to send raw to mainpath and yuv to selfpath.
> 
> Thanks,
> Dafna
> 
> > 
> > > > > [1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
> > > > > 
> > > > > > > Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
> > > > > > > ---
> > > > > > >     .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
> > > > > > >     1 file changed, 15 deletions(-)
> > > > > > > 
> > > > > > > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> > > > > > > index 768987d5f2dd..7f78f361dd5e 100644
> > > > > > > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> > > > > > > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> > > > > > > @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
> > > > > > >     		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> > > > > > >     		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > >     	},
> > > > > > > -	/* yuv400 */
> > > > > > > -	{
> > > > > > > -		.fourcc = V4L2_PIX_FMT_GREY,
> > > > > > > -		.uv_swap = 0,
> > > > > > > -		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> > > > > > > -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > > -	},
> > > > > > >     	/* yuv420 */
> > > > > > >     	{
> > > > > > >     		.fourcc = V4L2_PIX_FMT_NV21,
> > > > > > > @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
> > > > > > >     		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
> > > > > > >     		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > >     	},
> > > > > > > -	/* yuv400 */
> > > > > > > -	{
> > > > > > > -		.fourcc = V4L2_PIX_FMT_GREY,
> > > > > > > -		.uv_swap = 0,
> > > > > > > -		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
> > > > > > > -		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
> > > > > > > -		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > > -	},
> > > > > > >     	/* rgb */
> > > > > > >     	{
> > > > > > >     		.fourcc = V4L2_PIX_FMT_XBGR32,
> > 
>
Kieran Bingham Dec. 1, 2021, 11:29 p.m. UTC | #8
Quoting Nicolas Dufresne (2021-12-01 18:14:45)
> Le mercredi 01 décembre 2021 à 09:03 +0200, Dafna Hirschfeld a écrit :
> > 
> > On 22.11.21 16:28, Laurent Pinchart wrote:
> > > Hi Dafna,
> > > 
> > > On Mon, Nov 22, 2021 at 04:21:25PM +0200, Dafna Hirschfeld wrote:
> > > > On 22.11.21 14:29, Laurent Pinchart wrote:
> > > > > On Mon, Nov 22, 2021 at 01:20:47PM +0200, Dafna Hirschfeld wrote:
> > > > > > On 20.11.21 14:34, Laurent Pinchart wrote:
> > > > > > > On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
> > > > > > > > When trying to stream on both mainpatch and selfpatch
> > > > > > > > with grey format, I get an iommu page fault.
> > > > > > > > The fault is on the address at the end of the buffer,
> > > > > > > > so it seems that the device is somehow wrongly
> > > > > > > > configured and thinks there is another plane.
> > > > > > > 
> > > > > > > Could we try to fix that instead ? There are IR sensors for which the
> > > > > > > GREY format is useful.
> > > > > > 
> > > > > > Hi, the doc is not very useful so I can try doing a bit trial and error.
> > > > > > I see that there are several greyscale formats: [1]
> > > > > > which make me think that maybe the device support one of the other greyscale formats.
> > > > > > Do you know if some formats are more likely than other?
> > > > > 
> > > > > GREY seems the most likely (useful for IR sensors for instance, after
> > > > > ISP processing). Formats with a higher bpp would require processing of
> > > > > more than 8bpp through the ISP pipeline, I don't know if that's
> > > > > supported.
> > 
> > I tried all kind of things but was not able to stream greyscale.
> > When ISP processing works it outputs YUV 422 format and then the resizer
> > is used to change the format to YUV 420 if wanted.
> > I tried to chance the scale to YUV 400 (grey) or change the mainpath/selfpath
> > configuration but still had that iommu page fault errors.
> > 
> > Interestingly when I bypass the iommu and dma allocation is direct
> > the streaming works and even the output frames seems okayish greyscale format
> > but that might be by accident.
> 
> Just a guess, but its possible they use a short cut to gray scale, and write to
> NV12 buffers. planar YUV 420 are somewhat compatible with grayscale, so that's
> always a possible cheat.

NV12 would be a pain, as it would require bigger buffers to be provided
for the capture, which if coming from an external source rather than
allocated on the device might not be given ...

Is there an explicit way to configure the UV plane on the RKISP to an
internal scratch buffer that would get discarded? or will it always
assume the UV data is immediately after the Y data?

--
Kieran


> > > > > Formats with a higher bpp (both greyscale and bayer formats) are also
> > > > > useful to capture raw images (before ISP processing). Is that something
> > > > > the hardware and driver support ?
> > > > 
> > > > hi, yes the variations of V4L2_PIX_FMT_Sxxxx10, V4L2_PIX_FMT_Sxxxx12
> > > > are supported on mainpath.
> > > 
> > > That's nice. Does it bypass the whole ISP then ? Is it possible to
> > > capture raw frames on the main path and processed frames on the self
> > > path at the same time, or are we restricted to raw only when we capture
> > > raw frames ?
> > 
> > I think we are restricted to raw only when we capture raw frames.
> > The doc describe the isp_ctl register that set the isp output to either raw or yuv.
> > It seems not to be possible to send raw to mainpath and yuv to selfpath.
> > 
> > Thanks,
> > Dafna
> > 
> > > 
> > > > > > [1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
> > > > > > 
> > > > > > > > Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
> > > > > > > > ---
> > > > > > > >     .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
> > > > > > > >     1 file changed, 15 deletions(-)
> > > > > > > > 
> > > > > > > > diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> > > > > > > > index 768987d5f2dd..7f78f361dd5e 100644
> > > > > > > > --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> > > > > > > > +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
> > > > > > > > @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
> > > > > > > >                   .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> > > > > > > >                   .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > > >           },
> > > > > > > > - /* yuv400 */
> > > > > > > > - {
> > > > > > > > -         .fourcc = V4L2_PIX_FMT_GREY,
> > > > > > > > -         .uv_swap = 0,
> > > > > > > > -         .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
> > > > > > > > -         .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > > > - },
> > > > > > > >           /* yuv420 */
> > > > > > > >           {
> > > > > > > >                   .fourcc = V4L2_PIX_FMT_NV21,
> > > > > > > > @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
> > > > > > > >                   .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
> > > > > > > >                   .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > > >           },
> > > > > > > > - /* yuv400 */
> > > > > > > > - {
> > > > > > > > -         .fourcc = V4L2_PIX_FMT_GREY,
> > > > > > > > -         .uv_swap = 0,
> > > > > > > > -         .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
> > > > > > > > -         .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
> > > > > > > > -         .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
> > > > > > > > - },
> > > > > > > >           /* rgb */
> > > > > > > >           {
> > > > > > > >                   .fourcc = V4L2_PIX_FMT_XBGR32,
> > > 
> > 
>
Dafna Hirschfeld Dec. 2, 2021, 3:28 p.m. UTC | #9
On 02.12.21 01:29, Kieran Bingham wrote:
> Quoting Nicolas Dufresne (2021-12-01 18:14:45)
>> Le mercredi 01 décembre 2021 à 09:03 +0200, Dafna Hirschfeld a écrit :
>>>
>>> On 22.11.21 16:28, Laurent Pinchart wrote:
>>>> Hi Dafna,
>>>>
>>>> On Mon, Nov 22, 2021 at 04:21:25PM +0200, Dafna Hirschfeld wrote:
>>>>> On 22.11.21 14:29, Laurent Pinchart wrote:
>>>>>> On Mon, Nov 22, 2021 at 01:20:47PM +0200, Dafna Hirschfeld wrote:
>>>>>>> On 20.11.21 14:34, Laurent Pinchart wrote:
>>>>>>>> On Sat, Nov 20, 2021 at 01:02:57PM +0200, Dafna Hirschfeld wrote:
>>>>>>>>> When trying to stream on both mainpatch and selfpatch
>>>>>>>>> with grey format, I get an iommu page fault.
>>>>>>>>> The fault is on the address at the end of the buffer,
>>>>>>>>> so it seems that the device is somehow wrongly
>>>>>>>>> configured and thinks there is another plane.
>>>>>>>>
>>>>>>>> Could we try to fix that instead ? There are IR sensors for which the
>>>>>>>> GREY format is useful.
>>>>>>>
>>>>>>> Hi, the doc is not very useful so I can try doing a bit trial and error.
>>>>>>> I see that there are several greyscale formats: [1]
>>>>>>> which make me think that maybe the device support one of the other greyscale formats.
>>>>>>> Do you know if some formats are more likely than other?
>>>>>>
>>>>>> GREY seems the most likely (useful for IR sensors for instance, after
>>>>>> ISP processing). Formats with a higher bpp would require processing of
>>>>>> more than 8bpp through the ISP pipeline, I don't know if that's
>>>>>> supported.
>>>
>>> I tried all kind of things but was not able to stream greyscale.
>>> When ISP processing works it outputs YUV 422 format and then the resizer
>>> is used to change the format to YUV 420 if wanted.
>>> I tried to chance the scale to YUV 400 (grey) or change the mainpath/selfpath
>>> configuration but still had that iommu page fault errors.
>>>
>>> Interestingly when I bypass the iommu and dma allocation is direct
>>> the streaming works and even the output frames seems okayish greyscale format
>>> but that might be by accident.
>>
>> Just a guess, but its possible they use a short cut to gray scale, and write to
>> NV12 buffers. planar YUV 420 are somewhat compatible with grayscale, so that's
>> always a possible cheat.
> 
> NV12 would be a pain, as it would require bigger buffers to be provided
> for the capture, which if coming from an external source rather than
> allocated on the device might not be given ...
> 
> Is there an explicit way to configure the UV plane on the RKISP to an
> internal scratch buffer that would get discarded? or will it always
> assume the UV data is immediately after the Y data?

It's actually not assumed so, the UV buffer address is a different address
configured into the device and doesn't have to be continuously after the Y buffer.
So we can indeed set it to a dummy buffer (which is already there
for the cases no vb2 buffers are queued.

Thanks,
Dafna

> 
> --
> Kieran
> 
> 
>>>>>> Formats with a higher bpp (both greyscale and bayer formats) are also
>>>>>> useful to capture raw images (before ISP processing). Is that something
>>>>>> the hardware and driver support ?
>>>>>
>>>>> hi, yes the variations of V4L2_PIX_FMT_Sxxxx10, V4L2_PIX_FMT_Sxxxx12
>>>>> are supported on mainpath.
>>>>
>>>> That's nice. Does it bypass the whole ISP then ? Is it possible to
>>>> capture raw frames on the main path and processed frames on the self
>>>> path at the same time, or are we restricted to raw only when we capture
>>>> raw frames ?
>>>
>>> I think we are restricted to raw only when we capture raw frames.
>>> The doc describe the isp_ctl register that set the isp output to either raw or yuv.
>>> It seems not to be possible to send raw to mainpath and yuv to selfpath.
>>>
>>> Thanks,
>>> Dafna
>>>
>>>>
>>>>>>> [1] https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/pixfmt-yuv-luma.html
>>>>>>>
>>>>>>>>> Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
>>>>>>>>> ---
>>>>>>>>>      .../platform/rockchip/rkisp1/rkisp1-capture.c     | 15 ---------------
>>>>>>>>>      1 file changed, 15 deletions(-)
>>>>>>>>>
>>>>>>>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>>>>>>> index 768987d5f2dd..7f78f361dd5e 100644
>>>>>>>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>>>>>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
>>>>>>>>> @@ -116,13 +116,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
>>>>>>>>>                    .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>>>>>>>>>                    .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>>>>>            },
>>>>>>>>> - /* yuv400 */
>>>>>>>>> - {
>>>>>>>>> -         .fourcc = V4L2_PIX_FMT_GREY,
>>>>>>>>> -         .uv_swap = 0,
>>>>>>>>> -         .write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
>>>>>>>>> -         .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>>>>> - },
>>>>>>>>>            /* yuv420 */
>>>>>>>>>            {
>>>>>>>>>                    .fourcc = V4L2_PIX_FMT_NV21,
>>>>>>>>> @@ -244,14 +237,6 @@ static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
>>>>>>>>>                    .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
>>>>>>>>>                    .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>>>>>            },
>>>>>>>>> - /* yuv400 */
>>>>>>>>> - {
>>>>>>>>> -         .fourcc = V4L2_PIX_FMT_GREY,
>>>>>>>>> -         .uv_swap = 0,
>>>>>>>>> -         .write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
>>>>>>>>> -         .output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
>>>>>>>>> -         .mbus = MEDIA_BUS_FMT_YUYV8_2X8,
>>>>>>>>> - },
>>>>>>>>>            /* rgb */
>>>>>>>>>            {
>>>>>>>>>                    .fourcc = V4L2_PIX_FMT_XBGR32,
>>>>
>>>
>>
diff mbox series

Patch

diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
index 768987d5f2dd..7f78f361dd5e 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-capture.c
@@ -116,13 +116,6 @@  static const struct rkisp1_capture_fmt_cfg rkisp1_mp_fmts[] = {
 		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
 		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
 	},
-	/* yuv400 */
-	{
-		.fourcc = V4L2_PIX_FMT_GREY,
-		.uv_swap = 0,
-		.write_format = RKISP1_MI_CTRL_MP_WRITE_YUV_PLA_OR_RAW8,
-		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
-	},
 	/* yuv420 */
 	{
 		.fourcc = V4L2_PIX_FMT_NV21,
@@ -244,14 +237,6 @@  static const struct rkisp1_capture_fmt_cfg rkisp1_sp_fmts[] = {
 		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV422,
 		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
 	},
-	/* yuv400 */
-	{
-		.fourcc = V4L2_PIX_FMT_GREY,
-		.uv_swap = 0,
-		.write_format = RKISP1_MI_CTRL_SP_WRITE_PLA,
-		.output_format = RKISP1_MI_CTRL_SP_OUTPUT_YUV400,
-		.mbus = MEDIA_BUS_FMT_YUYV8_2X8,
-	},
 	/* rgb */
 	{
 		.fourcc = V4L2_PIX_FMT_XBGR32,