public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jack Zhu <jack.zhu@starfivetech.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Maxime Ripard <mripard@kernel.org>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Robert Foss <rfoss@kernel.org>,
	"Todor Tomov" <todor.too@gmail.com>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	"Jernej Skrabec" <jernej.skrabec@gmail.com>,
	Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	"Eugen Hristev" <eugen.hristev@collabora.com>,
	<linux-media@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>,
	<changhuang.liang@starfivetech.com>
Subject: Re: [PATCH v2 6/6] media: starfive: Add Starfive Camera Subsystem driver
Date: Thu, 23 Mar 2023 19:22:21 +0800	[thread overview]
Message-ID: <d2dd7d2c-8469-c3a9-5ecd-9c1a22caee2c@starfivetech.com> (raw)
In-Reply-To: <20230321175626.GD20234@pendragon.ideasonboard.com>



On 2023/3/22 1:56, Laurent Pinchart wrote:
> Hi Jack,
> 
> On Tue, Mar 21, 2023 at 08:56:34PM +0800, Jack Zhu wrote:
>> On 2023/3/12 20:43, Laurent Pinchart wrote:
>> > Hi Jack,
>> > 
>> > Thank you for the patch.
>> > 
>> > I'll do a partial review here as the patch is huge and I'm lacking time
>> > at the moment.
>> 
>> Thank you for the review and your time.
>> 
>> > On Fri, Mar 10, 2023 at 08:05:53PM +0800, Jack Zhu wrote:
>> >> Add the driver for Starfive Camera Subsystem found on
>> >> Starfive JH7110 SoC. It is used for handing image sensor
>> >> data.
>> >> 
>> >> Signed-off-by: Jack Zhu <jack.zhu@starfivetech.com>
>> >> ---
>> >>  drivers/media/platform/Kconfig                |    1 +
>> >>  drivers/media/platform/Makefile               |    1 +
>> >>  drivers/media/platform/starfive/Kconfig       |   18 +
>> >>  drivers/media/platform/starfive/Makefile      |   14 +
>> >>  drivers/media/platform/starfive/stf_camss.c   |  728 +++++++++
>> >>  drivers/media/platform/starfive/stf_camss.h   |  104 ++
>> >>  drivers/media/platform/starfive/stf_common.h  |  149 ++
>> >>  drivers/media/platform/starfive/stf_isp.c     | 1079 ++++++++++++++
>> >>  drivers/media/platform/starfive/stf_isp.h     |  183 +++
>> >>  .../media/platform/starfive/stf_isp_hw_ops.c  | 1286 ++++++++++++++++
>> >>  drivers/media/platform/starfive/stf_video.c   | 1286 ++++++++++++++++
>> >>  drivers/media/platform/starfive/stf_video.h   |   89 ++
>> >>  drivers/media/platform/starfive/stf_vin.c     | 1314 +++++++++++++++++
>> >>  drivers/media/platform/starfive/stf_vin.h     |  194 +++
>> >>  .../media/platform/starfive/stf_vin_hw_ops.c  |  357 +++++
>> >>  include/uapi/linux/stf_isp_ioctl.h            |  127 ++
>> >>  16 files changed, 6930 insertions(+)
>> >>  create mode 100644 drivers/media/platform/starfive/Kconfig
>> >>  create mode 100644 drivers/media/platform/starfive/Makefile
>> >>  create mode 100644 drivers/media/platform/starfive/stf_camss.c
>> >>  create mode 100644 drivers/media/platform/starfive/stf_camss.h
>> >>  create mode 100644 drivers/media/platform/starfive/stf_common.h
>> >>  create mode 100644 drivers/media/platform/starfive/stf_isp.c
>> >>  create mode 100644 drivers/media/platform/starfive/stf_isp.h
>> >>  create mode 100644 drivers/media/platform/starfive/stf_isp_hw_ops.c
>> >>  create mode 100644 drivers/media/platform/starfive/stf_video.c
>> >>  create mode 100644 drivers/media/platform/starfive/stf_video.h
>> >>  create mode 100644 drivers/media/platform/starfive/stf_vin.c
>> >>  create mode 100644 drivers/media/platform/starfive/stf_vin.h
>> >>  create mode 100644 drivers/media/platform/starfive/stf_vin_hw_ops.c
>> >>  create mode 100644 include/uapi/linux/stf_isp_ioctl.h
> 
> [snip]
> 
>> >> diff --git a/drivers/media/platform/starfive/stf_camss.c b/drivers/media/platform/starfive/stf_camss.c
>> >> new file mode 100644
>> >> index 000000000000..525f2d80c5eb
>> >> --- /dev/null
>> >> +++ b/drivers/media/platform/starfive/stf_camss.c
>> >> @@ -0,0 +1,728 @@
> 
> [snip]
> 
>> >> +/*
>> >> + * stfcamss_find_sensor - Find a linked media entity which represents a sensor
>> >> + * @entity: Media entity to start searching from
>> >> + *
>> >> + * Return a pointer to sensor media entity or NULL if not found
>> >> + */
>> >> +struct media_entity *stfcamss_find_sensor(struct media_entity *entity)
>> > 
>> > From a camss point of view, the source is the csi2rx. You shouldn't
>> > need to access the sensor directly, only the csi2rx. If you think you
>> > have a need to access the sensor, please explain why and we can discuss
>> > it.
>> 
>> need to use format and bpp of sensor to configure isp HW.
> 
> You can obtain the same information from the ISP sink pad:
> 
> 
> +----------+       +------------+       +-----------+
> |          |       |            |       |           | 
> | Sensor [0| ----> |0] csi2rx [1| ----> |0]   ISP   |
> |          |       |            |       |           |
> +----------+       +------------+       +-----------+
> 
> (I'm not entirely sure if the csi2rx and ISP pad numbers are correct,
> but that's the idea.)
> 
> The csi2rx can't modify the format (size and bpp), so the format on the
> sensor's pad 0, csi2rx pad 0, csi2rx pad 1 and ISP pad 0 must be
> identical.
> 
> In isp_sensor_fmt_to_index(), the ISP driver doesn't need to get the
> format from the sensor, it can use the format on ISP pad 0 instead.
> 
> In video_enum_framesizes(), the ISP driver shouldn't look at the format
> on the ISP input at all, it must enumerate all sizes that the video node
> supports, regardless of what is connected to its input.
> 
> video_enum_frameintervals() should be dropped, the ISP itself has no
> notion of frame interval. Userspace can query and configure the frame
> rate from the sensor subdev directly.
> 
> In video_pipeline_s_fmt(), the ISP driver shouldn't look at the format
> on the ISP input at all either. It must accept any format supported by
> the ISP. It's only when starting streaming that the pipeline is
> validated to make sure the formats configured on all subdevs match. I
> recommend reading https://git.ideasonboard.org/doc/mc-v4l2.git for an
> overview of how Media Controller-based drivers should behave. The
> documentation describes how the API is meant to be used from userspace,
> but the operating principles apply to driver development too.
> 
> video_subscribe_event() and video_unsubscribe_event() should also be
> dropped, events from the sensor can be accessed by userspace on the
> sensor subdev directly.
> 
> vin_set_stream() should call .s_stream() on the csi2rx, not the sensor.
> The csi2rx .s_stream() handler will forward the call to the sensor.
> 

OK, will fix. Thank you for your comment.

>> >> +{
>> >> +	struct media_pad *pad;
>> >> +
>> >> +	while (1) {
>> >> +		if (!entity->pads)
>> >> +			return NULL;
>> >> +
>> >> +		pad = &entity->pads[0];
>> >> +		if (!(pad->flags & MEDIA_PAD_FL_SINK))
>> >> +			return NULL;
>> >> +
>> >> +		pad = media_pad_remote_pad_first(pad);
>> >> +		if (!pad || !is_media_entity_v4l2_subdev(pad->entity))
>> >> +			return NULL;
>> >> +
>> >> +		entity = pad->entity;
>> >> +
>> >> +		if (entity->function == MEDIA_ENT_F_CAM_SENSOR)
>> >> +			return entity;
>> >> +	}
>> >> +}
> 
> [snip]
> 
>> >> diff --git a/include/uapi/linux/stf_isp_ioctl.h b/include/uapi/linux/stf_isp_ioctl.h
>> >> new file mode 100644
>> >> index 000000000000..3f302ef235d2
>> >> --- /dev/null
>> >> +++ b/include/uapi/linux/stf_isp_ioctl.h
>> >> @@ -0,0 +1,127 @@
> 
> [snip]
> 
>> >> +enum _STF_ISP_IOCTL {
>> > 
>> > Device-specific ioctls are allowed, but they must all be clearly
>> > documented.
>> 
>> OK, I will add annotations for these ioctls.
>> 
>> > 
>> >> +	STF_ISP_IOCTL_LOAD_FW = BASE_VIDIOC_PRIVATE + 1,
>> > 
>> > Why can't you use the Linux kernel firmware API ?
>> 
>> The ioctl is used for loading config file, it is different from
>> the Linux kernel firmware API. I will rename it.
> 
> Could you explain what the config file is used for ?

used for debugging. It's not necessary. I will drop it.

> 
>> >> +	STF_ISP_IOCTL_DMABUF_ALLOC,
>> >> +	STF_ISP_IOCTL_DMABUF_FREE,
>> >> +	STF_ISP_IOCTL_GET_HW_VER,
>> > 
>> > Not used, drop them.
>> 
>> OK, will drop them.
>> 
>> > 
>> >> +	STF_ISP_IOCTL_REG,
>> > 
>> > Setting registers from userspace isn't allowed. No exception.
>> 
>> OK, will fix.
>> 
>> > 
>> >> +	STF_ISP_IOCTL_SHADOW_LOCK,
>> >> +	STF_ISP_IOCTL_SHADOW_UNLOCK,
>> >> +	STF_ISP_IOCTL_SHADOW_UNLOCK_N_TRIGGER,
>> >> +	STF_ISP_IOCTL_SET_USER_CONFIG_ISP,
>> > 
>> > I'm not sure what these ioctls do exactly as documentation is missing,
>> > but I don't think they are the right API. Please describe the problem
>> > you're trying to solve, and we'll find a good API.
>> 
>> These were used for debugging, I will drop them. Thanks.
>> 
>> >> +	STF_ISP_IOCTL_MAX
>> >> +};
> 
> [snip]
> 

      reply	other threads:[~2023-03-23 11:22 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-10 12:05 [PATCH v2 0/6] Add Starfive Camera Subsystem driver Jack Zhu
2023-03-10 12:05 ` [PATCH v2 1/6] media: dt-bindings: Add bindings for JH7110 Camera Subsystem Jack Zhu
2023-03-12 11:12   ` Laurent Pinchart
2023-03-20  6:24     ` Jack Zhu
2023-03-12 11:16   ` Krzysztof Kozlowski
2023-03-20  6:27     ` Jack Zhu
2023-03-10 12:05 ` [PATCH v2 2/6] media: dt-bindings: cadence-csi2rx: Convert to DT schema Jack Zhu
2023-03-10 13:55   ` Rob Herring
2023-03-20  6:30     ` Jack Zhu
2023-03-12 11:09   ` Laurent Pinchart
2023-03-20  8:08     ` Jack Zhu
2023-03-12 11:17   ` Krzysztof Kozlowski
2023-03-20  8:19     ` Jack Zhu
2023-03-10 12:05 ` [PATCH v2 3/6] media: admin-guide: Add starfive_camss.rst for Starfive Camera Subsystem Jack Zhu
2023-03-10 12:05 ` [PATCH v2 4/6] media: cadence: Add support for external dphy and JH7110 SoC Jack Zhu
2023-03-12 11:33   ` Laurent Pinchart
2023-03-20 11:54     ` Jack Zhu
2023-03-10 12:05 ` [PATCH v2 5/6] MAINTAINERS: Add Starfive Camera Subsystem driver Jack Zhu
2023-03-12 11:14   ` Laurent Pinchart
2023-03-20 12:03     ` Jack Zhu
2023-03-10 12:05 ` [PATCH v2 6/6] media: starfive: " Jack Zhu
2023-03-10 14:09   ` kernel test robot
2023-03-10 14:09   ` kernel test robot
     [not found]   ` <20230312124339.GD2545@pendragon.ideasonboard.com>
     [not found]     ` <650b6882-ea02-e4c8-1f73-9e5bdeab290d@starfivetech.com>
2023-03-21 17:56       ` Laurent Pinchart
2023-03-23 11:22         ` Jack Zhu [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d2dd7d2c-8469-c3a9-5ecd-9c1a22caee2c@starfivetech.com \
    --to=jack.zhu@starfivetech.com \
    --cc=andrzejtp2010@gmail.com \
    --cc=changhuang.liang@starfivetech.com \
    --cc=devicetree@vger.kernel.org \
    --cc=eugen.hristev@collabora.com \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jernej.skrabec@gmail.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=mripard@kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=rfoss@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=todor.too@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox