Commit Graph

34681 Commits

Author SHA1 Message Date
Eugen Hristev
c73d327327 media: mediatek: vcodec: fix possible unbalanced PM counter
[ Upstream commit c28d4921a1 ]

It is possible that mtk_vcodec_enc_pw_on fails, and in that scenario
the PM counter is not incremented, and subsequent call to
mtk_vcodec_enc_pw_off decrements the counter, leading to a PM imbalance.
Fix by bailing out of venc_if_encode in the case when mtk_vcodec_enc_pw_on
fails.

Fixes: 4e855a6efa ("[media] vcodec: mediatek: Add Mediatek V4L2 Video Encoder Driver")
Signed-off-by: Eugen Hristev <eugen.hristev@collabora.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:41 +02:00
Irui Wang
f29a426420 media: mediatek: vcodec: add encoder power management helper functions
[ Upstream commit 3568cb6556 ]

Remove PM functions at start/stop streaming, add PM helper functions
to get PM before encoding frame start and put PM after encoding frame
done. Meanwhile, remove unnecessary clock operations.

Signed-off-by: Irui Wang <irui.wang@mediatek.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Stable-dep-of: c28d4921a1 ("media: mediatek: vcodec: fix possible unbalanced PM counter")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:41 +02:00
Dan Carpenter
d410017a71 media: stk1160: fix bounds checking in stk1160_copy_video()
[ Upstream commit faa4364bef ]

The subtract in this condition is reversed.  The ->length is the length
of the buffer.  The ->bytesused is how many bytes we have copied thus
far.  When the condition is reversed that means the result of the
subtraction is always negative but since it's unsigned then the result
is a very high positive value.  That means the overflow check is never
true.

Additionally, the ->bytesused doesn't actually work for this purpose
because we're not writing to "buf->mem + buf->bytesused".  Instead, the
math to calculate the destination where we are writing is a bit
involved.  You calculate the number of full lines already written,
multiply by two, skip a line if necessary so that we start on an odd
numbered line, and add the offset into the line.

To fix this buffer overflow, just take the actual destination where we
are writing, if the offset is already out of bounds print an error and
return.  Otherwise, write up to buf->length bytes.

Fixes: 9cb2173e6e ("[media] media: Add stk1160 new driver (easycap replacement)")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:40 +02:00
Fabio Estevam
755575a42c media: ov2680: Do not fail if data-lanes property is absent
[ Upstream commit 24034af644 ]

Since commit 63b0cd30b7 ("media: ov2680: Add bus-cfg / endpoint
property verification") the ov2680 driver no longer probes when the
'data-lanes' property is absent.

The OV2680 sensor has only one data lane, so there is no need for
describing it the devicetree.

Remove the unnecessary data-lanes property check.

Suggested-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Fixes: 63b0cd30b7 ("media: ov2680: Add bus-cfg / endpoint property verification")
Signed-off-by: Fabio Estevam <festevam@denx.de>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:38 +02:00
Fabio Estevam
08754dd758 media: ov2680: Allow probing if link-frequencies is absent
[ Upstream commit fd2e66abd7 ]

Since commit 63b0cd30b7 ("media: ov2680: Add bus-cfg / endpoint
property verification") the ov2680 no longer probes on a imx7s-warp7:

ov2680 1-0036: error -EINVAL: supported link freq 330000000 not found
ov2680 1-0036: probe with driver ov2680 failed with error -22

As the 'link-frequencies' property is not mandatory, allow the probe
to succeed by skipping the link-frequency verification when the
property is absent.

Cc: stable@vger.kernel.org
Fixes: 63b0cd30b7 ("media: ov2680: Add bus-cfg / endpoint property verification")
Signed-off-by: Fabio Estevam <festevam@denx.de>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Stable-dep-of: 24034af644 ("media: ov2680: Do not fail if data-lanes property is absent")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:37 +02:00
Fabio Estevam
a7e0a70ac6 media: ov2680: Clear the 'ret' variable on success
[ Upstream commit 49a9bad83b ]

Since commit 63b0cd30b7 ("media: ov2680: Add bus-cfg / endpoint
property verification") even when the correct 'link-frequencies'
property is passed in the devicetree, the driver fails to probe:

ov2680 1-0036: probe with driver ov2680 failed with error -22

The reason is that the variable 'ret' may contain the -EINVAL value
from a previous assignment:

ret = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency",
			       &rate);

Fix the problem by clearing 'ret' on the successful path.

Tested on imx7s-warp board with the following devicetree:

port {
	ov2680_to_mipi: endpoint {
		remote-endpoint = <&mipi_from_sensor>;
		clock-lanes = <0>;
		data-lanes = <1>;
		link-frequencies = /bits/ 64 <330000000>;
	};
};

Cc: stable@vger.kernel.org
Fixes: 63b0cd30b7 ("media: ov2680: Add bus-cfg / endpoint property verification")
Suggested-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Fabio Estevam <festevam@denx.de>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Stable-dep-of: 24034af644 ("media: ov2680: Do not fail if data-lanes property is absent")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:37 +02:00
Sakari Ailus
9a496f7d18 media: v4l: Don't turn on privacy LED if streamon fails
[ Upstream commit f2bf6cd8f4 ]

Turn on the privacy LED only if streamon succeeds. This can be done after
enabling streaming on the sensor.

Fixes: b6e10ff6c2 ("media: v4l2-core: Make the v4l2-core code enable/disable the privacy LED if present")
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:37 +02:00
Laurent Pinchart
35556d0e1c media: v4l2-subdev: Document and enforce .s_stream() requirements
[ Upstream commit 009905ec50 ]

The subdev .s_stream() operation must not be called to start an already
started subdev, or stop an already stopped one. This requirement has
never been formally documented. Fix it, and catch possible offenders
with a WARN_ON() in the call_s_stream() wrapper.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Stable-dep-of: f2bf6cd8f4 ("media: v4l: Don't turn on privacy LED if streamon fails")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:37 +02:00
Sean Young
a10c3d5ff9 pwm: Rename pwm_apply_state() to pwm_apply_might_sleep()
[ Upstream commit c748a6d77c ]

In order to introduce a pwm api which can be used from atomic context,
we will need two functions for applying pwm changes:

	int pwm_apply_might_sleep(struct pwm *, struct pwm_state *);
	int pwm_apply_atomic(struct pwm *, struct pwm_state *);

This commit just deals with renaming pwm_apply_state(), a following
commit will introduce the pwm_apply_atomic() function.

Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Guenter Roeck <linux@roeck-us.net>
Acked-by: Mark Brown <broonie@kernel.org>
Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> # for input
Acked-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Jani Nikula <jani.nikula@intel.com>
Acked-by: Lee Jones <lee@kernel.org>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
Stable-dep-of: 974afccd37 ("leds: pwm: Disable PWM when going to suspend")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:24 +02:00
Pratyush Yadav
205b6dd5b7 media: cadence: csi2rx: configure DPHY before starting source stream
[ Upstream commit fd64dda48f ]

When the source device is operating above 1.5 Gbps per lane, it needs to
send the Skew Calibration Sequence before sending any HS data. If the
DPHY is initialized after the source stream is started, then it might
miss the sequence and not be able to receive data properly. Move the
start of source subdev to the end of the sequence to make sure
everything is ready to receive data before the source starts streaming.

Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
Fixes: 3295cf1241 ("media: cadence: Add support for external dphy")
Tested-by: Julien Massot <julien.massot@collabora.com>
Tested-by: Changhuang Liang <Changhuang.liang@starfivetech.com>
Reviewed-by: Julien Massot <julien.massot@collabora.com>
Reviewed-by: Changhuang Liang <Changhuang.liang@starfivetech.com>
Signed-off-by: Jai Luthra <j-luthra@ti.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:05 +02:00
Ricardo Ribalda
4b3421c2f6 media: uvcvideo: Add quirk for Logitech Rally Bar
[ Upstream commit 07731053d1 ]

Logitech Rally Bar devices, despite behaving as UVC cameras, have a
different power management system that the other cameras from Logitech.

USB_QUIRK_RESET_RESUME is applied to all the UVC cameras from Logitech
at the usb core. Unfortunately, USB_QUIRK_RESET_RESUME causes undesired
USB disconnects in the Rally Bar that make them completely unusable.

There is an open discussion about if we should fix this in the core or
add a quirk in the UVC driver. In order to enable this hardware, let's
land this patch first, and we can revert it later if there is a
different conclusion.

Fixes: e387ef5c47 ("usb: Add USB_QUIRK_RESET_RESUME for all Logitech UVC webcams")
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Devinder Khroad <dkhroad@logitech.com>
Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Link: https://lore.kernel.org/r/20240404-rallybar-v6-1-6d67bb6b69af@chromium.org
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:04 +02:00
Laurent Pinchart
983e91ad75 media: v4l2-subdev: Fix stream handling for crop API
[ Upstream commit 34d7bf1c8e ]

When support for streams was added to the V4L2 subdev API, the
v4l2_subdev_crop structure was extended with a stream field, but the
field was not handled in the core code that translates the
VIDIOC_SUBDEV_[GS]_CROP ioctls to the selection API. Fix it.

Fixes: 2f91e10ee6 ("media: subdev: add stream based configuration")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:02 +02:00
Uwe Kleine-König
c1a3803e5b media: i2c: et8ek8: Don't strip remove function when driver is builtin
[ Upstream commit 545b215736 ]

Using __exit for the remove function results in the remove callback
being discarded with CONFIG_VIDEO_ET8EK8=y. When such a device gets
unbound (e.g. using sysfs or hotplug), the driver is just removed
without the cleanup being performed. This results in resource leaks. Fix
it by compiling in the remove callback unconditionally.

This also fixes a W=1 modpost warning:

	WARNING: modpost: drivers/media/i2c/et8ek8/et8ek8: section mismatch in reference: et8ek8_i2c_driver+0x10 (section: .data) -> et8ek8_remove (section: .exit.text)

Fixes: c5254e72b8 ("[media] media: Driver for Toshiba et8ek8 5MP sensor")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:02 +02:00
Sakari Ailus
db572c3973 media: ipu3-cio2: Request IRQ earlier
[ Upstream commit a069f79bfa ]

Call devm_request_irq() before registering the async notifier, as otherwise
it would be possible to use the device before the interrupts could be
delivered to the driver.

Fixes: c2a6a07afe ("media: intel-ipu3: cio2: add new MIPI-CSI2 driver")
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:01 +02:00
Ricardo Ribalda
0f070f0c3b media: radio-shark2: Avoid led_names truncations
[ Upstream commit 1820e16a30 ]

Increase the size of led_names so it can fit any valid v4l2 device name.

Fixes:
drivers/media/radio/radio-shark2.c:197:17: warning: ‘%s’ directive output may be truncated writing up to 35 bytes into a region of size 32 [-Wformat-truncation=]

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:01 +02:00
Arnd Bergmann
d8076c9e02 media: rcar-vin: work around -Wenum-compare-conditional warning
[ Upstream commit 1a742c6010 ]

clang-19 warns about mixing two enum types here:

drivers/media/platform/renesas/rcar-vin/rcar-vin.h:296:12: error: conditional expression between different enumeration types ('enum rvin_csi_id' and 'enum rvin_isp_id') [-Werror,-Wenum-compare-conditional]
drivers/media/platform/renesas/rcar-vin/rcar-core.c:216:18: error: conditional expression between different enumeration types ('enum rvin_csi_id' and 'enum rvin_isp_id') [-Werror,-Wenum-compare-conditional]
drivers/media/platform/renesas/rcar-vin/rcar-vin.h:296:12: error: conditional expression between different enumeration types ('enum rvin_csi_id' and 'enum rvin_isp_id') [-Werror,-Wenum-compare-conditional]
drivers/media/platform/renesas/rcar-vin/rcar-vin.h:296:12: error: conditional expression between different enumeration types ('enum rvin_csi_id' and 'enum rvin_isp_id') [-Werror,-Wenum-compare-conditional]

This one is intentional, and there is already a cast to work around another
warning, so address this by adding another cast.

Fixes: 406bb586de ("media: rcar-vin: Add r8a779a0 support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:01 +02:00
Aleksandr Burakov
f987b53c28 media: ngene: Add dvb_ca_en50221_init return value check
[ Upstream commit 9bb1fd7edd ]

The return value of dvb_ca_en50221_init() is not checked here that may
cause undefined behavior in case of nonzero value return.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: 25aee3debe ("[media] Rename media/dvb as media/pci")
Signed-off-by: Aleksandr Burakov <a.burakov@rosalinux.ru>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-06-12 11:12:01 +02:00
Aymen Sghaier
18badd880b ILIE-86: media: nxp: neoisp: Fix spinlock init issue
When CONFIG_DEBUG_SPINLOCK flag is enabled, a bug appears right after
starting a neoisp pipeline as follow:

[   50.704779] BUG: spinlock bad magic on CPU#4, v4l2src0:src/743
[   50.711818]  lock: 0xffff00008a7204a0, .magic: 00000000,
                 .owner: <none>/-1, .owner_cpu: 0
[   50.731688] Hardware name: NXP i.MX95 19X19 board (DT)
[   50.738284] Call trace:
[   50.742193]  dump_backtrace+0x90/0xe8
[   50.747314]  show_stack+0x18/0x24
[   50.752089]  dump_stack_lvl+0x48/0x60
[   50.757211]  dump_stack+0x18/0x24
[   50.761986]  spin_bug+0x9c/0xd8
[   50.766589]  do_raw_spin_lock+0xe4/0x10c
[   50.771970]  _raw_spin_lock_irqsave+0x2c/0x40
[   50.777786]  neoisp_schedule_one+0x30/0x80 [neoisp]
[   50.784121]  neoisp_node_buffer_queue+0x64/0x78 [neoisp]

This patch adds the missing initialization of hw_lock spinlock to fix
the above bug.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-05-31 18:45:08 +02:00
Aymen Sghaier
784dcdfa53 LF-12472: media: nxp: neoisp: Fix suspend resume while streaming
While neoisp streaming is on, a suspend trigger is not waiting the end of
current frame processing. Also, at resume, neoisp is not taking into
account that registers are cleared. This leads to bus error interruption
followed by a kernel dump.

This patch adds a waiting loop at pm suspend request, reloads full context
registers and internal memory look up tables, rework the saved context
in memory by split gcm and packetizer and simplifies the switch context
handling to cover pm resume case.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-05-31 18:44:54 +02:00
Aymen Sghaier
3dbc05a8a7 LF-12337: media: nxp: neoisp: Fix xBGR v4l2 pixel format code
Neosip device supports RGB x padding at byte 3 only, meanwhile 'BGRX'
v4l2 pixel format code was misleading since x channel is at byte 0, thus
colors order is wrong.
This patch replaces unsupported BGRX by XBGR pixel format as a fix.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-05-17 07:36:22 +02:00
Aymen Sghaier
bb0514c2c6 LF-12340 media: nxp: neoisp: Fix 24 bit RGB format issue
After playing a 32 bit RGBX format from neoisp some related settings
remain and cause an issue if a 24 bit RGB format is used.
This patch adds a reset to initial value and fix this issue.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-05-17 07:35:52 +02:00
Guoniu.zhou
279d111abd LF-12188-09: media: i2c: ds90ub960: add internally generated FrameSync support
DS90UB960 support two different frame synchronization signal mode.
The first option offers sending the external FrameSync using one
of the available GPIO pins on the DS90UB960 and mapping that GPIO
to a back channel GPIO on one or more of the FPD-Link III ports.
                               ┌───────────────────┐
 ┌─┐ GPIOx┌──────────┐         │   HUB Desrializer │
 │ │ ◄────┤Serializer◄─────────┤◄──────┐ BC_GPIOx  │
─┘ └─     └──────────┘         │       │           │
                               │       │           │
 ┌─┐ GPIOx┌──────────┐         │       │           │
 │ │ ◄────┤Serializer◄─────────┤ ◄─────┤ BC_GPIOx  │
─┘ └─     └──────────┘         │       │           │
                               │       │           │
 ┌─┐ GPIOx┌──────────┐         │       │           │
 │ │ ◄────┤Serializer◄─────────┤ ◄─────┤ BC_GPIOx  │    ┌─┐
─┘ └─     └──────────┘         │       │           │    │ │
                               │       │           │   ─┘ └─
 ┌─┐ GPIOx┌──────────┐         │       │ BC_GPIOx  │   GPIOy
 │ │ ◄────┤Serializer◄─────────┤◄──────┴───────────┼──────────
─┘ └─     └──────────┘         │                   │
                               └───────────────────┘

The second option is to have the DS90UB960 internally generate a
FrameSync signal to send through GPIO to one or more of the attached
Serializers.
                               ┌───────────────────────────────┐
 ┌─┐ GPIOx┌──────────┐         │   HUB Desrializer             │
 │ │ ◄────┤Serializer◄─────────┤◄──────┐ BC_GPIOx              │
─┘ └─     └──────────┘         │       │                       │
                               │       │                       │
 ┌─┐ GPIOx┌──────────┐         │       │                       │
 │ │ ◄────┤Serializer◄─────────┤ ◄─────┤ BC_GPIOx              │
─┘ └─     └──────────┘         │       │               ┌─┐     │
                               │       │               │ │     │
 ┌─┐ GPIOx┌──────────┐         │       │              ─┘ └─    │
 │ │ ◄────┤Serializer◄─────────┤ ◄─────┤ BC_GPIOx              │
─┘ └─     └──────────┘         │       │          ┌──────────┐ │
                               │       │          │FrameSync │ │
 ┌─┐ GPIOx┌──────────┐         │       │ BC_GPIOx │Generator │ │
 │ │ ◄────┤Serializer◄─────────┤◄──────┴───────── └──────────┘ │
─┘ └─     └──────────┘         │                               │
                               └───────────────────────────────┘
Only the second option is supported.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-30 16:40:36 +08:00
Guoniu.zhou
7886a5f0b7 LF-12188-08: media: i2c: implement .[s/g]_frame_interval subdev callback
Implement .[s/g]_frame_interval subdev callback for ds90ub960.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-30 16:40:36 +08:00
Guoniu.zhou
2a3625712c LF-12188-07: media: i2c: ds90ub960: add back channel GPIO select support
Add back channel GPIO select support to send a frame synchronization
signal in multiple camera case.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-30 16:40:36 +08:00
Guoniu.zhou
ca7fc6c9e0 LF-12188-04: media: i2c: ds90ub953: set GPIO as back channel by default
When enabled as an output, each DS90UB953 GPIO pin can be
programed to output remote data coming from the compatible
deserializer. User can also change the output value using
LOCAL_GPIO_DATA(0x0D) register.

Enable remote deserializer GPIO data on local GPIO by default
since no API in GPIO framework can select this mode. User can
change it to output the value in LOCAL_GPIO_DATA(0x0D[3:0]) by
calling gpio_set_value().

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
2024-04-30 16:40:36 +08:00
Guoniu.zhou
c2085ec9f6 LF-12188-03: media: i2c: add v4l2-subdev driver for OX03C10 sensor
Add v4l2-subdev driver which reuse OX03C10 LIB code for OX03C10 sensor.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-30 16:40:36 +08:00
Guoniu.zhou
3273a0c710 LF-12188-02: media: i2c: ds90ub960: add RAW16 support
Add RAW16 format support in DS90UB960 driver.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-30 16:40:36 +08:00
Mirela Rabulea
33aaa2c8d9 MLK-26186-8: media: os08a20: Fix v4l2-compliance ioctl error
The v4l2-compliance error is:
fail: v4l2-compliance.cpp(810): doioctl(node, ioc, nullptr) != ENOTTY
test invalid ioctls: FAIL

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:28 +03:00
Mirela Rabulea
f2ca865165 MLK-26186-7: media: os08a20: Initialize default format
The first GET_FMT, prior to any SET_FMT reports width=0,
height=0, etc. This is inconsistent with the default mode
set during probe, so also initialize the sensor->format.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:28 +03:00
Mirela Rabulea
60d92b913b MLK-26186-6: media: os08a20: Allow link_freq control to change
The V4L2_CID_LINK_FREQ refers to the freqency on the data bus,
it affects the pixel rate on the bus.
Remove the read-only flag and add a new value, for further testing
more frame rates.

Signed-off-by: Mirela Rabulea <mirela.rabulea@oss.nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
4892da9340 MLK-26186-5: media: os08a20: Add analog gain and exposure controls
The V4L2_CID_ANALOGUE_GAIN and V4L2_CID_EXPOSURE controls are
modifying the registers for the long exposure.
For HDR mode, it is necessary to modify also the short exposure,
this is not implemented yet.

Signed-off-by: Mirela Rabulea <mirela.rabulea@oss.nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
03055a6393 MLK-26186-4: media: os08a20: Add hblank, vblank and pixel_rate controls
The V4L2_CID_VBLANK and V4L2_CID_HBLANK will modify the VTS/HTS
sensor registers and influence the frame rate. For now, keep the
HBLANK fixed per mode, but allow some variance for VBLANK.

The V4L2_CID_PIXEL_RATE refers to pixel sampling rate on the
devices pixel array, is read-only by definition, it is only
updated by the driver based on current mode.

All these controls depend on current mode settings, so update their
ranges, default value and current value on format change.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
0c1de91afc MLK-26186-3: media: os08a20: Implement get_selection
Minimal implementation for G_SELECTION API.
TGT_CROP is not supported.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
0504b14fed MLK-26186-2: media: os08a20: Implement enum_frame_size
For each mbus code, report each framesize only once.
For 10bpp mbus code, the driver supports 1080p and 4k.
For 12bpp mbus code, the driver only supports 4k.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
d637918104 MLK-26186-1: media: os08a20: Fix enum_mbus_codes
Register configurations are present for SBGGR10 both with or without HDR.
For SBGGR12 there is only register configuration without HDR, but HDR mode
can be achieved by enabling some HDR related registers.
So, both SBGGR10 & SBGGR12 can be achieved for both HDR/no-HDR modes.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
e0513d845b LF-11724-5: media: os08a20: Add comments to registers
Add some descriptions to the registers used for
sensor configuration, for easier diffs between modes.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
aa6198681e LF-11724-4: media: os08a20: Fix fps for non-hdr mode following hdr mode
When running a non-hdr mode after an hdr mode, residual hdr settings
remained in the registers, for example mode 2 after mode 3, causing
the fps to drop to half. So, apply the hdr register settings whenever
hdr mode changes during s_ctrl.

Fixes: 1761777d67 ("LF-11724-2: media: os08a20: Implement V4L2_CID_HDR_SENSOR_MODE")

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Mirela Rabulea
6b658f63ef LF-11724-3: media: os08a20: Don't fail in set_fmt
According to documentation, S_FMT cannot fail for unsupported
format, instead it should modify the format to match device
capabilities and keep it as closely as possible to the original
request.
Libcamera calls S_FMT with a purposely invalid mbus code 0, expecting
the driver will update it with a supported format.

So, modify os08a20_update_current_mode such that it never fails,
at the last resort, fallback to nearest size, even if it does not match
the current hdr mode set by the v4l2-ctrl.

Achieve the requested hdr by appending the hdr register config
to the current mode. For this purpose, add two helper functions:
os08a20_enable_staggered_hdr, os08a20_disable_staggered_hdr.

Fixes: 426200cd8e ("LF-11724-1: media: os08a20: Fix S_FMT")
Fixes: 1761777d67 ("LF-11724-2: media: os08a20: Implement V4L2_CID_HDR_SENSOR_MODE")

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
2024-04-29 14:08:27 +03:00
Hans Verkuil
390a71e361 media: videobuf2: request more buffers for vb2_read
[ Upstream commit 350ab13e13 ]

The vb2 read support requests 1 buffer, leaving it to the driver
to increase this number to something that works.

Unfortunately, drivers do not deal with this reliably, and in fact
this caused problems for the bttv driver and reading from /dev/vbiX,
causing every other VBI frame to be all 0.

Instead, request as the number of buffers whatever is the maximum of
2 and q->min_buffers_needed+1.

In order to start streaming you need at least q->min_buffers_needed
queued buffers, so add 1 buffer for processing. And if that field
is 0, then choose 2 (again, one buffer is being filled while the
other one is being processed).

This certainly makes more sense than requesting just 1 buffer, and
the VBI bttv support is now working again.

It turns out that the old videobuf1 behavior of bttv was to allocate
8 (video) and 4 (vbi) buffers when used with read(). After the vb2
conversion that changed to 2 for both. With this patch it is 3, which
is really all you need.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Fixes: b7ec3212a7 ("media: bttv: convert to vb2")
Tested-by: Dr. David Alan Gilbert <dave@treblig.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-27 17:11:30 +02:00
Aymen Sghaier
05c6aad791 ILIE-75 media: nxp: neoisp: Fix neoisp issue upon resume from suspend state
Suspend / resume test showed that neoisp driver is stuck when triggered
to process a frame. The root cause is missing hardware init call after
resume.
This patch adds hardware init call in pm resume function.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Celine Laurencin <celine.laurencin@nxp.com>
2024-04-26 18:53:28 +02:00
Aymen Sghaier
d6f89549d9 ILIE-74: media: nxp: neoisp: Refine media device links
Current neoisp media links are all immutables while some pads are
optionals.
This patch refines default links flags as follow:
  pad0: Sink <- "neoisp-input0":0 [ENABLED,IMMUTABLE]
  pad1: Sink <- "neoisp-input1":0 []
  pad2: Sink <- "neoisp-params":0 [ENABLED]
  pad3: Source -> "neoisp-frame":0 [ENABLED]
  pad4: Source -> "neoisp-ir":0 []
  pad5: Source -> "neoisp-stats":0 [ENABLED]

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Celine Laurencin <celine.laurencin@nxp.com>
2024-04-26 18:53:28 +02:00
Aymen Sghaier
c91e68b954 ILIE-72-1: media: nxp: neoisp: Add hw_revision to media device
This patch fills hw_revision field for neosip media device that could be
retrieved by MEDIA_IOC_DEVICE_INFO ioctl.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Celine Laurencin <celine.laurencin@nxp.com>
2024-04-26 18:53:27 +02:00
Mirela Rabulea
1761777d67 LF-11724-2: media: os08a20: Implement V4L2_CID_HDR_SENSOR_MODE
The information from S_FMT (resolution and pixel code) is not
enough to define the sensor mode, further more, we need to know
the hdr mode. For that, implement V4L2_CID_HDR_SENSOR_MODE.
We need to take into account that s_ctrl and S_FMT may come
in any order. So let the S_FMT establish the resolution
and pixel code and use whatever hdr mode was previously set,
while the s_ctrl will try to find a mode that matches the
current resolution and code and the new hdr mode.
Both S_FMT and s_ctrl will update the sensor if needed and
if a matching mode is found.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Alice Yuan <alice.yuan@nxp.com>
2024-04-25 18:29:53 +03:00
Mirela Rabulea
426200cd8e LF-11724-1: media: os08a20: Fix S_FMT
Currently, S_FMT fails for any attempt to change the
format that is hardcoded in probe. Partially fix it
by looking for a matching mode based on resolution
and mbus code.
Refactor S_FMT, separate finding and applying sensor mode.

The HDR mode is not addressed yet.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Alice Yuan <alice.yuan@nxp.com>
2024-04-25 18:29:44 +03:00
Guoniu.zhou
e260226d94 LF-12089-02: media: i2c: mx95mbcam: update ox03c10 initialize interface
Update ox03c10 initialize interface since the changes in commit
56c25fe6a496 ("LF-12089-01: media: ox03c10: extend ox03c10_init() usage")

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-24 16:32:31 +08:00
Guoniu.zhou
be7ea096c7 LF-12089-01: media: ox03c10: extend ox03c10_init() usage
The current implementation of ox03c10_init() only for dummy i2c
client device and it's the case for Maxim SerDes solution. But
for TI SerDes solution, it will register i2c client for sensor
when serializer is registered as i2c adapter. So by adding one
new parameter(use_dummy) to distinguish the two different case
in order to reuse OX03C10_LIB code.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-24 16:32:01 +08:00
Guoniu.zhou
52ca08ec7c LF-12086: media: i2c: mx95mbcam: remove invalid i2c client data setting
I2C client data will be set to point to struct v4l2subdev instance
in v4l2_i2c_subdev_init(), so it will be overwritten. Remove it.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-24 15:04:31 +08:00
Guoniu.zhou
cca36a54de LF-12084: media: ox03c10: remove ox03c10_deinit() since no definition
ox03c10_deinit() only has declaration in header file and no definition
in source file, nowhere use it, so remove it.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-24 15:04:31 +08:00
Guoniu.zhou
917e084df6 LF-12023: media: imx8-isi: fix hang issue when run multiple capture instance
When run multiple capture instance by duplicating AP1302 stream,
kill one of them will cause the other streams stop. The reason
for this issue is ISI can duplicate stream from same input port.
It means close one of stream will stop AP1302 streaming, so the
other stream instance will hang. Using counter for each stream
and do stopping camera streaming when the counter is zero.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-23 09:45:29 +08:00
Aymen Sghaier
88450f8601 ILIE-71: media: nxp: neoisp: Remove useless interrupts
ISP hardware could trigger several interrupts for different phases in
the pipeline blocks, this is useful while debug, but while nominal
processing it could be harmful for performance.
This patch enables only statistics done and frame done interrupts to
prevent handling irrelevant ones.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 15:15:41 +02:00
Aymen Sghaier
eec425eff7 ILIE-70: media: nxp: neoisp: Fix default params restore after stream-off
Current driver keeps latest set parameters in buffer after a stream-off,
and next processed frame will run with non-default parameters.
This patch fixes this issue and ensures using default parameters upon
stream-on event.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 15:15:39 +02:00
Alexi Birlinger
f2ddb547ec ILIE-53-2: media: nxp: neoisp: Expand YUV video capture formats
Add support of the following video capture formats:
- YUVX32, VUYX32 and VYUY (interleaved)
- NV12, NV21, NV16 and NV61 (semi-planar)

Signed-off-by: Alexi Birlinger <alexi.birlinger@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 15:15:08 +02:00
Alexi Birlinger
038ac01355 ILIE-53-1: media: nxp: neoisp: Remove unsupported greyscale formats
Remove greyscale capture formats from formats_vcap struct and update
table size.
Y14 format is not supported
Y10, Y12 are not tested and will be added in the future

Signed-off-by: Alexi Birlinger <alexi.birlinger@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 15:15:08 +02:00
Alexi Birlinger
8b17ad6cdf ILIE-53: media: nxp: neoisp: Expand RGB capture format support
This patch enables BGRX32, RGBX32 and BGR24 video capture formats

Signed-off-by: Alexi Birlinger <alexi.birlinger@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 15:15:08 +02:00
Alexi Birlinger
4855fb395b ILIE-60: media: nxp: neoisp: Change default alignment for input buffers
Image buffers provided to ISP are MSB aligned, while default parameter
is set to LSB alignment.
This patch updates default parameter to be MSB aligned.

Signed-off-by: Alexi Birlinger <alexi.birlinger@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 15:15:08 +02:00
Alexi Birlinger
ea0ad75f00 ILIE-44: media: nxp: neoisp: Fix hdr decompression missing ratio
Add kneepoint_ratio4 as default ratio for pixel values being equal
or greater than declared kneepoints

Signed-off-by: Alexi Birlinger <alexi.birlinger@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 15:15:02 +02:00
Aymen Sghaier
1e57ad8adf ILIE-48: media: nxp: neoisp: Remove V4L2_SUBDEV_FL_STREAMS flag for subdevice
Current v4l2 subdevice node does not support stream/routing file ops,
while V4L2_SUBDEV_FL_STREAMS flag is set and leads to segfault when
using media-ctl with v4l-utils version 1.26.
This patch remove this flag until adding stream/routing support.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 14:58:57 +02:00
Aymen Sghaier
74658ebdce ILIE-25: media: nxp: neoisp: Add multiple contexts support
The driver is updating isp parameters for each processed frame, assuming
only one camera context is used.
This patch adds multiple camera contexts handling.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Robert Chiras <robert.chiras@nxp.com>
2024-04-19 14:57:43 +02:00
Nini Song
7611722dc5 media: cec: core: remove length check of Timer Status
commit ce5d241c3a upstream.

The valid_la is used to check the length requirements,
including special cases of Timer Status. If the length is
shorter than 5, that means no Duration Available is returned,
the message will be forced to be invalid.

However, the description of Duration Available in the spec
is that this parameter may be returned when these cases, or
that it can be optionally return when these cases. The key
words in the spec description are flexible choices.

Remove the special length check of Timer Status to fit the
spec which is not compulsory about that.

Signed-off-by: Nini Song <nini.song@mediatek.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-04-17 11:19:26 +02:00
Mirela Rabulea
cec4700deb LF-11503-5: media: os08a20: Implement .get_frame_desc subdev callback
In order to provide the virtual channel and the CSI data type,
implement the .get_frame_desc() operation.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-14 19:57:50 +03:00
Mirela Rabulea
3e96822777 MLK-26180: media: nxp: imx8-isi: Fix potential null pointer dereference
Fix mxc_isi_get_frame_desc(), in case the subdevice get_frame_desc
returns success, but the stream is not found in source_fd.

Fixes: 438ca0fc316b ("LF-11234-07: media: nxp: imx8-isi: Implement .get_frame_desc subdev callback")

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-14 19:56:37 +03:00
Mirela Rabulea
3e050005f8 LF-11503-1: media: nxp: dwc-mipi-csi2: Set default VC and DT in CSI when no get_frame_desc
In order to support sensors that do not implement yet the
get_frame_desc(), do not fail, but provide a default virtual
channel and data type for the CSI.

Fixes: a01abbceaf9d ("LF-11234-03: media: nxp: dwc-mipi-csi2: Implement multi frame description")

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-14 19:55:20 +03:00
Yunfei Dong
41671f0c01 media: mediatek: vcodec: adding lock to protect encoder context list
[ Upstream commit afaaf3a0f6 ]

Add a lock for the ctx_list, to avoid accessing a NULL pointer
within the 'vpu_enc_ipi_handler' function when the ctx_list has
been deleted due to an unexpected behavior on the SCP IP block.

Fixes: 1972e32431 ("media: mediatek: vcodec: Fix possible invalid memory access for encoder")
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-13 13:07:40 +02:00
Yunfei Dong
0a2dc707aa media: mediatek: vcodec: adding lock to protect decoder context list
[ Upstream commit 6467cda18c ]

Add a lock for the ctx_list, to avoid accessing a NULL pointer
within the 'vpu_dec_ipi_handler' function when the ctx_list has
been deleted due to an unexpected behavior on the SCP IP block.

Hardware name: Google juniper sku16 board (DT)
pstate: 20400005 (nzCv daif +PAN -UAO -TCO BTYPE=--)
pc : vpu_dec_ipi_handler+0x58/0x1f8 [mtk_vcodec_dec]
lr : scp_ipi_handler+0xd0/0x194 [mtk_scp]
sp : ffffffc0131dbbd0
x29: ffffffc0131dbbd0 x28: 0000000000000000
x27: ffffff9bb277f348 x26: ffffff9bb242ad00
x25: ffffffd2d440d3b8 x24: ffffffd2a13ff1d4
x23: ffffff9bb7fe85a0 x22: ffffffc0133fbdb0
x21: 0000000000000010 x20: ffffff9b050ea328
x19: ffffffc0131dbc08 x18: 0000000000001000
x17: 0000000000000000 x16: ffffffd2d461c6e0
x15: 0000000000000242 x14: 000000000000018f
x13: 000000000000004d x12: 0000000000000000
x11: 0000000000000001 x10: fffffffffffffff0
x9 : ffffff9bb6e793a8 x8 : 0000000000000000
x7 : 0000000000000000 x6 : 000000000000003f
x5 : 0000000000000040 x4 : fffffffffffffff0
x3 : 0000000000000020 x2 : ffffff9bb6e79080
x1 : 0000000000000010 x0 : ffffffc0131dbc08
Call trace:
vpu_dec_ipi_handler+0x58/0x1f8 [mtk_vcodec_dec (HASH:6c3f 2)]
scp_ipi_handler+0xd0/0x194 [mtk_scp (HASH:7046 3)]
mt8183_scp_irq_handler+0x44/0x88 [mtk_scp (HASH:7046 3)]
scp_irq_handler+0x48/0x90 [mtk_scp (HASH:7046 3)]
irq_thread_fn+0x38/0x94
irq_thread+0x100/0x1c0
kthread+0x140/0x1fc
ret_from_fork+0x10/0x30
Code: 54000088 f94ca50a eb14015f 54000060 (f9400108)
---[ end trace ace43ce36cbd5c93 ]---
Kernel panic - not syncing: Oops: Fatal exception
SMP: stopping secondary CPUs
Kernel Offset: 0x12c4000000 from 0xffffffc010000000
PHYS_OFFSET: 0xffffffe580000000
CPU features: 0x08240002,2188200c
Memory Limit: none

Fixes: 655b86e52e ("media: mediatek: vcodec: Fix possible invalid memory access for decoder")
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-13 13:07:40 +02:00
Nicolas Dufresne
ec25fc3c2c media: mediatek: vcodec: Fix oops when HEVC init fails
[ Upstream commit 97c75ee5de ]

The stateless HEVC decoder saves the instance pointer in the context
regardless if the initialization worked or not. This caused a use after
free, when the pointer is freed in case of a failure in the deinit
function.
Only store the instance pointer when the initialization was successful,
to solve this issue.

 Hardware name: Acer Tomato (rev3 - 4) board (DT)
 pstate: 80400009 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
 pc : vcodec_vpu_send_msg+0x4c/0x190 [mtk_vcodec_dec]
 lr : vcodec_send_ap_ipi+0x78/0x170 [mtk_vcodec_dec]
 sp : ffff80008750bc20
 x29: ffff80008750bc20 x28: ffff1299f6d70000 x27: 0000000000000000
 x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
 x23: ffff80008750bc98 x22: 000000000000a003 x21: ffffd45c4cfae000
 x20: 0000000000000010 x19: ffff1299fd668310 x18: 000000000000001a
 x17: 000000040044ffff x16: ffffd45cb15dc648 x15: 0000000000000000
 x14: ffff1299c08da1c0 x13: ffffd45cb1f87a10 x12: ffffd45cb2f5fe80
 x11: 0000000000000001 x10: 0000000000001b30 x9 : ffffd45c4d12b488
 x8 : 1fffe25339380d81 x7 : 0000000000000001 x6 : ffff1299c9c06c00
 x5 : 0000000000000132 x4 : 0000000000000000 x3 : 0000000000000000
 x2 : 0000000000000010 x1 : ffff80008750bc98 x0 : 0000000000000000
 Call trace:
  vcodec_vpu_send_msg+0x4c/0x190 [mtk_vcodec_dec]
  vcodec_send_ap_ipi+0x78/0x170 [mtk_vcodec_dec]
  vpu_dec_deinit+0x1c/0x30 [mtk_vcodec_dec]
  vdec_hevc_slice_deinit+0x30/0x98 [mtk_vcodec_dec]
  vdec_if_deinit+0x38/0x68 [mtk_vcodec_dec]
  mtk_vcodec_dec_release+0x20/0x40 [mtk_vcodec_dec]
  fops_vcodec_release+0x64/0x118 [mtk_vcodec_dec]
  v4l2_release+0x7c/0x100
  __fput+0x80/0x2d8
  __fput_sync+0x58/0x70
  __arm64_sys_close+0x40/0x90
  invoke_syscall+0x50/0x128
  el0_svc_common.constprop.0+0x48/0xf0
  do_el0_svc+0x24/0x38
  el0_svc+0x38/0xd8
  el0t_64_sync_handler+0xc0/0xc8
  el0t_64_sync+0x1a8/0x1b0
 Code: d503201f f9401660 b900127f b900227f (f9400400)

Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Fixes: 2674486aac ("media: mediatek: vcodec: support stateless hevc decoder")
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-13 13:07:40 +02:00
Arnd Bergmann
cb9420142e media: sta2x11: fix irq handler cast
[ Upstream commit 3de49ae81c ]

clang-16 warns about casting incompatible function pointers:

drivers/media/pci/sta2x11/sta2x11_vip.c:1057:6: error: cast from 'irqreturn_t (*)(int, struct sta2x11_vip *)' (aka 'enum irqreturn (*)(int, struct sta2x11_vip *)') to 'irq_handler_t' (aka 'enum irqreturn (*)(int, void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]

Change the prototype of the irq handler to the regular version with a
local variable to adjust the argument type.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
[hverkuil: update argument documentation]
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-13 13:07:35 +02:00
Guoniu.zhou
f02a70ea4e LF-11913: media: imx8-isi: fix invalid frame description issue
For iMX95, the stream configurations are moved to csi formatter from
gasket enable/disable callback and only leave ISI QoS setting. When
enable multiple stream support in ISI driver, it will get multiple
frame description entity from remote subdev, but for gasket, only
need be called once, so remove the checking for the number of frame
description entity and use the first stream for single camera platform.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
2024-04-12 17:29:53 +08:00
Laurentiu Palcu
6a03b4c555 LF-11414-8 media/i2c: add support for mx95mbcam camera module
This is a NXP camera module containing a MAX96717F serializer chip and
an OX03C10 Omnivision sensor.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Reviewed-by: Mirela Rabulea <Mirela.rabulea@nxp.com>
2024-04-11 08:37:59 +00:00
Laurentiu Palcu
cb1389d3f3 LF-11414-7 media/i2c: add ox03c10 camera sensor library
The OX03C10 is 1/2.6" optical format, 1920x1280 stacked-chip digital
high dynamic range sensor intended for high-end CMS and SVS application
for the automotive market.

This is the library supporting the chip and will be used by module
drivers that usually contain a serializer and a sensor.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Reviewed-by: Mirela Rabulea <Mirela.rabulea@nxp.com>
2024-04-11 08:37:59 +00:00
Laurentiu Palcu
23ceb31ee0 LF-11414-6 media/i2c: add max96717 chip library
The MAX96717F GMSL serializer receives video on a MIPI CSI-2 interface
and outputs it on a GMSL2 serial link transceiver.

This is just a library that will be used by camera modules drivers that
usually contain a serializer and a camera sensor.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Reviewed-by: Mirela Rabulea <Mirela.rabulea@nxp.com>
2024-04-11 08:37:59 +00:00
Laurentiu Palcu
ad6c1bb4d0 LF-11414-4 media/i2c: add support for MAX96724 deserializer chip
The MAX96724/F/R deserializer converts four GMSL2/1 inputs to 1, 2, or 4
MIPI D-PHY or C-PHY outputs. The device allows simultaneous transmit
bidirectional transmissions over 50ohm coax or 100ohm STP cables that meet
the GMSL channel specification.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Reviewed-by: Mirela Rabulea <Mirela.rabulea@nxp.com>
2024-04-11 08:37:59 +00:00
Laurentiu Palcu
142920ec88 LF-11414-3 media/platform/nxp: imx8-isi: add 16bit raw formats support
We will need RAW16 formats for the OX03C10 cameras.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Reviewed-by: G.N. Zhou <guoniu.zhou@nxp.com>
Reviewed-by: Mirela Rabulea <Mirela.rabulea@nxp.com>
2024-04-11 08:37:59 +00:00
Laurentiu Palcu
f06eedea02 LF-11414-2 media/platform/nxp: imx-csi-formatter: add RAW16 support
The CSI controller and pixel formatter supports RAW16 as well. Add it.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Reviewed-by: G.N. Zhou <guoniu.zhou@nxp.com>
Reviewed-by: Mirela Rabulea <Mirela.rabulea@nxp.com>
2024-04-11 08:37:59 +00:00
Laurentiu Palcu
a115bfbfa4 LF-11414-1 media/platform/nxp: dwc-mipi-csi2: add support for RAW 16bit formats
The 16bit RAW formats will be needed for the OX03C10 camera sensor.

Signed-off-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robert Chiras <robert.chiras@nxp.com>
Reviewed-by: G.N. Zhou <guoniu.zhou@nxp.com>
Reviewed-by: Mirela Rabulea <Mirela.rabulea@nxp.com>
2024-04-11 08:37:59 +00:00
Guoniu.zhou
b588873215 LF-11655: media: i2c: ap130x: add scaling support
AP1302 is an external ISP which can support scaling. User can use
this feature to reach 1080P@60 since the maximum size output by
AR0144 sensor is 1280x800.

How to set scaling:
$ media-ctl -V "'ap130x.2-003c':2 [fmt:UYVY8_1X16/1920x1080 field:none]"

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:51 +08:00
Guoniu.zhou
f5926e028e LF-11653-02: media: i2c: ap130x: remove ADV_IRQ_SYS_INTE register setting
Remove ADV_IRQ_SYS_INTE register setting when enable stream, otherwise
data lanes changing won't take effect. I can't find any description
about the register in AP1302 data sheet. I'm asking Onsemi for help.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:51 +08:00
Guoniu.zhou
c2d0ac5b4e LF-11233: media: i2c: ap130x: Implement .get_frame_desc subdev callback
Implement .get_frame_desc subdev callback.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
8d1a3591dd LF-11234-07: media: nxp: imx8-isi: Implement .get_frame_desc subdev callback
Implement .get_frame_desc subdev callback for ISI.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Tested-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
84dfe1bc31 LF-11234-06: media: nxp: imx8-isi: add virtual channel support
ISI of iMX95 can handle 8 virtual channel and only process the data
from pixel link which virtual channel ID number matched. It gets the
number from remote connected subdev, so it can handler 8 different
independent camera stream.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Tested-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
10fc626a62 LF-11234-05: media: nxp: imx8-isi: add ISI stream duplicated support
ISI support duplicate input stream into multiple outputs,
but v4l2 subdev stream only can be enabled/disabled one
time, so return zero directly for input stream which has
been enabled or disabled.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Tested-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
081e0820af LF-11234-04: media: nxp: dwc-mipi-csi2: Add multiplexed streams support
Add multiplexed streams support for DesignWare MIPI CSI-2 driver.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Tested-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
34520c46ad LF-11234-03: media: nxp: dwc-mipi-csi2: Implement multi frame description
Implement multi frame description since its input may have
multiple stream, not only single one.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Tested-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
aa2cafeee7 LF-11234-02: media: nxp: dwc-mipi-csi2: Rename sensor_sd to source_sd
Rename sensor_sd to source_sd since the input of MIPI CSI-2
maybe other bridge device, such as deserilizer, so the name
source_sd for the remote connected subdev should be better.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Tested-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
d1eb6606b9 LF-11234-01: media: nxp: dwc-mipi-csi2: fix resources uncleaned issue
Some resources are not cleaned when error happened, fix them.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Tested-by: Laurentiu Palcu <laurentiu.palcu@oss.nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
dd701628d6 LF-10853-04: media: nxp: imx8-isi: remove gasket support for iMX95
The gasket operations are used to control csi pixel formatter, remove
it since a new driver for pixel formatter has been added.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Guoniu.zhou
f261ddc3d1 LF-10853-03: media: nxp: add v4l2 subdev driver for csi pixel formatter
The CSI2 pixel formatter is a module which can uses packet info, pixel
and non-pixel data from the CSI2 host controller and reformat them to
match Pixel Link (PL) definition. In addition, optionally, it can either
route non-pixel data or one of pixel data type to another pixel link
virtual channel.

So add a V4L2 subdev driver for it since it's a standalone module and
need to export more controls to userspace.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-08 11:25:50 +08:00
Laurent Pinchart
88efc3095b media: nxp: imx8-isi: Mark all crossbar sink pads as MUST_CONNECT
[ Upstream commit 9b71021b2e ]

All the sink pads of the crossbar switch require an active link if
they're part of the pipeline. Mark them with the
MEDIA_PAD_FL_MUST_CONNECT flag to fail pipeline validation if they're
not connected. This allows removing a manual check when translating
streams.

Cc: stable@vger.kernel.org # 6.1
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:18 +02:00
Laurent Pinchart
d0e3440dab media: mc: Expand MUST_CONNECT flag to always require an enabled link
[ Upstream commit b3decc5ce7 ]

The MEDIA_PAD_FL_MUST_CONNECT flag indicates that the pad requires an
enabled link to stream, but only if it has any link at all. This makes
little sense, as if a pad is part of a pipeline, there are very few use
cases for an active link to be mandatory only if links exist at all. A
review of in-tree drivers confirms they all need an enabled link for
pads marked with the MEDIA_PAD_FL_MUST_CONNECT flag.

Expand the scope of the flag by rejecting pads that have no links at
all. This requires modifying the pipeline build code to add those pads
to the pipeline.

Cc: stable@vger.kernel.org # 6.1
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:17 +02:00
Laurent Pinchart
3b6ccc91dc media: mc: Rename pad variable to clarify intent
[ Upstream commit 9ec9109cf9 ]

The pad local variable in the media_pipeline_explore_next_link()
function is used to store the pad through which the entity has been
reached. Rename it to origin to reflect that and make the code easier to
read. This will be even more important in subsequent commits when
expanding the function with additional logic.

Cc: stable@vger.kernel.org # 6.1
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:17 +02:00
Laurent Pinchart
ebb6fb7f62 media: mc: Add num_links flag to media_pad
[ Upstream commit baeddf94aa ]

Maintain a counter of the links connected to a pad in the media_pad
structure. This helps checking if a pad is connected to anything, which
will be used in the pipeline building code.

Cc: stable@vger.kernel.org # 6.1
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:17 +02:00
Marek Vasut
c95318607f media: nxp: imx8-isi: Check whether crossbar pad is non-NULL before access
[ Upstream commit eb2f932100 ]

When translating source to sink streams in the crossbar subdev, the
driver tries to locate the remote subdev connected to the sink pad. The
remote pad may be NULL, if userspace tries to enable a stream that ends
at an unconnected crossbar sink. When that occurs, the driver
dereferences the NULL pad, leading to a crash.

Prevent the crash by checking if the pad is NULL before using it, and
return an error if it is.

Cc: stable@vger.kernel.org # 6.1
Fixes: cf21f328fc ("media: nxp: Add i.MX8 ISI driver")
Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://lore.kernel.org/r/20231201150614.63300-1-marex@denx.de
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:17 +02:00
Laurent Pinchart
0a76902247 media: mc: Fix flags handling when creating pad links
[ Upstream commit 422f7af75d ]

The media_create_pad_link() function doesn't correctly clear reject link
type flags, nor does it set the DATA_LINK flag. It only works because
the MEDIA_LNK_FL_DATA_LINK flag's value is 0.

Fix it by returning an error if any link type flag is set. This doesn't
introduce any regression, as nobody calls the media_create_pad_link()
function with link type flags (easily checked by grepping for the flag
in the source code, there are very few hits).

Set the MEDIA_LNK_FL_DATA_LINK explicitly, which is a no-op that the
compiler will optimize out, but is still useful to make the code more
explicit and easier to understand.

Cc: stable@vger.kernel.org # 6.1
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:17 +02:00
Laurent Pinchart
cc088ebf8b media: mc: Add local pad to pipeline regardless of the link state
[ Upstream commit 78f0daa026 ]

When building pipelines by following links, the
media_pipeline_explore_next_link() function only traverses enabled
links. The remote pad of a disabled link is not added to the pipeline,
and neither is the local pad. While the former is correct as disabled
links should not be followed, not adding the local pad breaks processing
of the MEDIA_PAD_FL_MUST_CONNECT flag.

The MEDIA_PAD_FL_MUST_CONNECT flag is checked in the
__media_pipeline_start() function that iterates over all pads after
populating the pipeline. If the pad is not present, the check gets
skipped, rendering it useless.

Fix this by adding the local pad of all links regardless of their state,
only skipping the remote pad for disabled links.

Cc: stable@vger.kernel.org # 6.1
Fixes: ae21987283 ("media: mc: entity: Rewrite media_pipeline_start()")
Reported-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Closes: https://lore.kernel.org/linux-media/7658a15a-80c5-219f-2477-2a94ba6c6ba1@kontron.de
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:17 +02:00
Gui-Dong Han
dc5e4f2404 media: xc4000: Fix atomicity violation in xc4000_get_frequency
[ Upstream commit 36d503ad54 ]

In xc4000_get_frequency():
	*freq = priv->freq_hz + priv->freq_offset;
The code accesses priv->freq_hz and priv->freq_offset without holding any
lock.

In xc4000_set_params():
	// Code that updates priv->freq_hz and priv->freq_offset
	...

xc4000_get_frequency() and xc4000_set_params() may execute concurrently,
risking inconsistent reads of priv->freq_hz and priv->freq_offset. Since
these related data may update during reading, it can result in incorrect
frequency calculation, leading to atomicity violations.

This possible bug is found by an experimental static analysis tool
developed by our team, BassCheck[1]. This tool analyzes the locking APIs
to extract function pairs that can be concurrently executed, and then
analyzes the instructions in the paired functions to identify possible
concurrency bugs including data races and atomicity violations. The above
possible bug is reported when our tool analyzes the source code of
Linux 6.2.

To address this issue, it is proposed to add a mutex lock pair in
xc4000_get_frequency() to ensure atomicity. With this patch applied, our
tool no longer reports the possible bug, with the kernel configuration
allyesconfig for x86_64. Due to the lack of associated hardware, we cannot
test the patch in runtime testing, and just verify it according to the
code logic.

[1] https://sites.google.com/view/basscheck/

Fixes: 4c07e32884 ("[media] xc4000: Fix get_frequency()")
Cc: stable@vger.kernel.org
Reported-by: BassCheck <bass@buaa.edu.cn>
Signed-off-by: Gui-Dong Han <2045gemini@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:17 +02:00
Ming Qian
168cffba43 media: amphion: Abort vpu parsing directly in seek
Driver abort vpu decoding when both output and capture queues are off,
but if seek in parsing the sequence header, driver may miss aborting the
parsing. so just abort the vpu parsing directly in seek.

Meanwhile if capture is off unexpectedly, we still need to abort the
decoding and return capture buffers.

Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
2024-04-01 15:21:33 +09:00
Ming Qian
69bd9bfd4e media: imx-jpeg: Support for negotiating bytesperline with client
This mxc-jpeg driver doesn't allow the client to set the bytesperline,
but for some android cts case, it need to negotiate the bytesperline
between decoder and display, and fail the case if driver doesn't support
negotiating bytesperline

The jpegdec and jpegenc does support to set bytesperline which is
multiple of 2, and greater than the value calulated by driver.

Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
2024-04-01 15:21:33 +09:00
Peng Fan
b4ebd56fb4 LF-11722 Update copyright for scmi and isi
Add NXP Copyright following patch creation time.

Reviewed-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
2024-04-01 14:04:08 +08:00
Alice Yuan
48a6b3a7dd LF-11619-3: capture: csi : remove unused clocks for mipi csi
As ic ticket TKT0639003 describes, the CSI1_PHY_REF clock (named "phy_clk"
in driver) is unused for imx8mm CSI. However other platforms like iMX7D
still requires "phy_clk", use devm_clk_get_optional() instead.

Test command:
gst-launch-1.0 -v v4l2src device=/dev/video1 num-buffers=20 !
"video/x-raw,format=YUY2,width=1920,height=1080" ! queue ! filesink
location=/home/root/video.yuyv &

Signed-off-by: Alice Yuan <alice.yuan@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2024-04-01 13:57:18 +08:00
Jason Liu
039a4cdb2c Linux 6.6.23
-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEE4n5dijQDou9mhzu83qZv95d3LNwFAmYDTh8ACgkQ3qZv95d3
 LNzBbhAAwSqAoBZBxApda8QQEVvF012dZG0btn0wJv2H3Bu8wasAhfD2pD5LxFZf
 Ru3EVgrBeupMKhZk/aeN5d2qSxn5mCiU4WnAwqDvjtsIicjmeeRaqcGGFFmZ6TyM
 KrK+NjxHu77L6dlkMZRLRugP/7WGGUI3G0fGj2HvJOlMRFHJSx8o4JeX1Yc10xDz
 MbySZBj4ZctjvP16dxehA44Grw08CTxnoPgrHn52TgncLGuQfcx+w+fXEDJfdRzP
 vS8D+8C4G8iwjyfKLnb/jytZR0jlVii3DkQXcIjUzGRQ4UEhfzvSn9C07zu80cPV
 iskQCo/IS1/2gD5M6OgVOjfR0yfF/NCOm692omEH6oQHjNu6QOxM2PpFpIYzm34r
 /4wnTMg58AMsNGp/D5bipl3X5B93pWDoCLq939ZU9688EaR1n/Xsh5+EXG0lKIux
 Eb4tk2z7zJt54/UQM+J2qhtJrqriflSl1dTBxpuZb2abUrq5ewQgNyqhb0hXBc5f
 F5SU5O+dkntQGcUQ1GBSWk5B5q8oXmqY9reIeuhhRYI0w0Y+Xt+jeQHhQSU0j7ne
 DLv5uG32HTR9p8z1jidJJY8VL3MuCpMzrfFkZsEUEut0haF8FhpGIxZ+YjNYcgRt
 f57z1Sf5Gzr+fpM1q8TesHI8+7MEh7Fel+elyWpvnidJfMNx4t8=
 =mu/j
 -----END PGP SIGNATURE-----

Merge tag 'v6.6.23' into lf-6.6.y

Linux 6.6.23

* tag 'v6.6.23': (630 commits)
  Linux 6.6.23
  x86/efistub: Don't clear BSS twice in mixed mode
  x86/efistub: Clear decompressor BSS in native EFI entrypoint
  ...

Signed-off-by: Jason Liu <jason.hui.liu@nxp.com>

 Conflicts:
	arch/arm64/boot/dts/freescale/imx8mp-evk.dts
	drivers/gpio/Kconfig
	drivers/spi/spi-imx.c
2024-04-01 11:00:10 +08:00
Arnd Bergmann
7334b815d2 media: mediatek: vcodec: avoid -Wcast-function-type-strict warning
[ Upstream commit bfb1b99802 ]

The ipi handler here tries hard to maintain const-ness of its argument,
but by doing that causes a warning about function type casts:

drivers/media/platform/mediatek/vcodec/common/mtk_vcodec_fw_vpu.c:38:32: error: cast from 'mtk_vcodec_ipi_handler' (aka 'void (*)(void *, unsigned int, void *)') to 'ipi_handler_t' (aka 'void (*)(const void *, unsigned int, void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
   38 |         ipi_handler_t handler_const = (ipi_handler_t)handler;
      |                                       ^~~~~~~~~~~~~~~~~~~~~~

Remove the hack and just use a non-const argument.

Fixes: bf1d556ad4 ("media: mtk-vcodec: abstract firmware interface")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:53 -04:00
Zhipeng Lu
7393c681f9 media: ttpci: fix two memleaks in budget_av_attach
[ Upstream commit d0b07f712b ]

When saa7146_register_device and saa7146_vv_init fails, budget_av_attach
should free the resources it allocates, like the error-handling of
ttpci_budget_init does. Besides, there are two fixme comment refers to
such deallocations.

Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:53 -04:00
Zhipeng Lu
f31c1cc374 media: go7007: fix a memleak in go7007_load_encoder
[ Upstream commit b9b683844b ]

In go7007_load_encoder, bounce(i.e. go->boot_fw), is allocated without
a deallocation thereafter. After the following call chain:

saa7134_go7007_init
  |-> go7007_boot_encoder
        |-> go7007_load_encoder
  |-> kfree(go)

go is freed and thus bounce is leaked.

Fixes: 95ef39403f ("[media] go7007: remember boot firmware")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:53 -04:00
Arnd Bergmann
8fad9c5bb0 media: dvb-frontends: avoid stack overflow warnings with clang
[ Upstream commit 7a4cf27d1f ]

A previous patch worked around a KASAN issue in stv0367, now a similar
problem showed up with clang:

drivers/media/dvb-frontends/stv0367.c:1222:12: error: stack frame size (3624) exceeds limit (2048) in 'stv0367ter_set_frontend' [-Werror,-Wframe-larger-than]
 1214 | static int stv0367ter_set_frontend(struct dvb_frontend *fe)

Rework the stv0367_writereg() function to be simpler and mark both
register access functions as noinline_for_stack so the temporary
i2c_msg structures do not get duplicated on the stack when KASAN_STACK
is enabled.

Fixes: 3cd890dbe2 ("media: dvb-frontends: fix i2c access helpers for KASAN")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Justin Stitt <justinstitt@google.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:53 -04:00
Edward Adam Davis
8e60b99f6b media: pvrusb2: fix uaf in pvr2_context_set_notify
[ Upstream commit 0a0b79ea55 ]

[Syzbot reported]
BUG: KASAN: slab-use-after-free in pvr2_context_set_notify+0x2c4/0x310 drivers/media/usb/pvrusb2/pvrusb2-context.c:35
Read of size 4 at addr ffff888113aeb0d8 by task kworker/1:1/26

CPU: 1 PID: 26 Comm: kworker/1:1 Not tainted 6.8.0-rc1-syzkaller-00046-gf1a27f081c1f #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/25/2024
Workqueue: usb_hub_wq hub_event
Call Trace:
 <TASK>
 __dump_stack lib/dump_stack.c:88 [inline]
 dump_stack_lvl+0xd9/0x1b0 lib/dump_stack.c:106
 print_address_description mm/kasan/report.c:377 [inline]
 print_report+0xc4/0x620 mm/kasan/report.c:488
 kasan_report+0xda/0x110 mm/kasan/report.c:601
 pvr2_context_set_notify+0x2c4/0x310 drivers/media/usb/pvrusb2/pvrusb2-context.c:35
 pvr2_context_notify drivers/media/usb/pvrusb2/pvrusb2-context.c:95 [inline]
 pvr2_context_disconnect+0x94/0xb0 drivers/media/usb/pvrusb2/pvrusb2-context.c:272

Freed by task 906:
kasan_save_stack+0x33/0x50 mm/kasan/common.c:47
kasan_save_track+0x14/0x30 mm/kasan/common.c:68
kasan_save_free_info+0x3f/0x60 mm/kasan/generic.c:640
poison_slab_object mm/kasan/common.c:241 [inline]
__kasan_slab_free+0x106/0x1b0 mm/kasan/common.c:257
kasan_slab_free include/linux/kasan.h:184 [inline]
slab_free_hook mm/slub.c:2121 [inline]
slab_free mm/slub.c:4299 [inline]
kfree+0x105/0x340 mm/slub.c:4409
pvr2_context_check drivers/media/usb/pvrusb2/pvrusb2-context.c:137 [inline]
pvr2_context_thread_func+0x69d/0x960 drivers/media/usb/pvrusb2/pvrusb2-context.c:158

[Analyze]
Task A set disconnect_flag = !0, which resulted in Task B's condition being met
and releasing mp, leading to this issue.

[Fix]
Place the disconnect_flag assignment operation after all code in pvr2_context_disconnect()
to avoid this issue.

Reported-and-tested-by: syzbot+ce750e124675d4599449@syzkaller.appspotmail.com
Fixes: e5be15c638 ("V4L/DVB (7711): pvrusb2: Fix race on module unload")
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:53 -04:00
Alexander Stein
81d998e183 media: i2c: imx290: Fix IMX920 typo
[ Upstream commit 6fc62efa26 ]

Replace IMX920 by IMX290.

Fixes: b4ab57b07c ("media: i2c: imx290: Add crop selection targets support")
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:51 -04:00
Sakari Ailus
069e1bd0ad media: ivsc: csi: Swap SINK and SOURCE pads
[ Upstream commit 48f5fd8967 ]

This patch swaps SINK and SOURCE pads of the MEI CSI sub-device. While
this does change the UAPI by swapping the pads, the driver has never been
usable in upstream kernel as the Intel IPU6 driver it depends on any
functionality has not yet been merged.

Fixes: 29006e196a ("media: pci: intel: ivsc: Add CSI submodule")
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:51 -04:00
Arnd Bergmann
5b8d21f7ed media: pvrusb2: fix pvr2_stream_callback casts
[ Upstream commit 30baa4a96b ]

clang-16 complains about a control flow integrity (KCFI) issue in pvrusb2,
which casts three different prototypes into pvr2_stream_callback:

drivers/media/usb/pvrusb2/pvrusb2-v4l2.c:1070:30: error: cast from 'void (*)(struct pvr2_v4l2_fh *)' to 'pvr2_stream_callback' (aka 'void (*)(void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
 1070 |         pvr2_stream_set_callback(sp,(pvr2_stream_callback)pvr2_v4l2_notify,fh);
      |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/media/usb/pvrusb2/pvrusb2-context.c:110:6: error: cast from 'void (*)(struct pvr2_context *)' to 'void (*)(void *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict]
  110 |                                         (void (*)(void *))pvr2_context_notify,
      |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/media/usb/pvrusb2/pvrusb2-dvb.c:152:6: error: cast from 'void (*)(struct pvr2_dvb_adapter *)' to 'pvr2_stream_callback' (aka 'void (*)(void *)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
  152 |                                  (pvr2_stream_callback) pvr2_dvb_notify, adap);
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Change the functions to actually take a void* argument so the cast is no longer
needed.

Fixes: bb8ce9d914 ("V4L/DVB (7682): pvrusb2-dvb: finish up stream & buffer handling")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:49 -04:00
Daniil Dulov
1ff1f8c388 media: pvrusb2: remove redundant NULL check
[ Upstream commit 95ac1210fb ]

Pointer dip->stream cannot be NULL due to a shift, thus remove redundant
NULL check.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: c74e006268 ("V4L/DVB (5059): Pvrusb2: Be smarter about mode restoration")
Signed-off-by: Daniil Dulov <d.dulov@aladdin.ru>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:49 -04:00
Daniil Dulov
79159e7c48 media: go7007: add check of return value of go7007_read_addr()
[ Upstream commit 0b70530ee7 ]

If go7007_read_addr() returns error channel is not assigned a value.
In this case go to allocfail.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: 866b8695d6 ("Staging: add the go7007 video driver")
Signed-off-by: Daniil Dulov <d.dulov@aladdin.ru>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:49 -04:00
Jernej Skrabec
8b50270c4a media: sun8i-di: Fix chroma difference threshold
[ Upstream commit 856525e8db ]

While there is no good explanation what this value does, vendor driver
uses value 31 for it. Align driver with it.

Fixes: a4260ea495 ("media: sun4i: Add H3 deinterlace driver")
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:49 -04:00
Jernej Skrabec
9fd05afd5e media: sun8i-di: Fix power on/off sequences
[ Upstream commit cff104e33b ]

According to user manual, reset line should be deasserted before clocks
are enabled. Also fix power down sequence to be reverse of that.

Fixes: a4260ea495 ("media: sun4i: Add H3 deinterlace driver")
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:49 -04:00
Jernej Skrabec
5e56f933d2 media: sun8i-di: Fix coefficient writes
[ Upstream commit 794b581f8c ]

Currently coefficients are applied only once, since they don't change.
However, this is done before enable bit is set and thus it doesn't get
applied properly.

Fix that by applying coefficients after enable bit is set. While this
means that it will be done evey time, it doesn't bring much time
penalty.

Fixes: a4260ea495 ("media: sun4i: Add H3 deinterlace driver")
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:49 -04:00
Zhipeng Lu
779e8db7ef media: edia: dvbdev: fix a use-after-free
[ Upstream commit 8c64f4cdf4 ]

In dvb_register_device, *pdvbdev is set equal to dvbdev, which is freed
in several error-handling paths. However, *pdvbdev is not set to NULL
after dvbdev's deallocation, causing use-after-frees in many places,
for example, in the following call chain:

budget_register
  |-> dvb_dmxdev_init
        |-> dvb_register_device
  |-> dvb_dmxdev_release
        |-> dvb_unregister_device
              |-> dvb_remove_device
                    |-> dvb_device_put
                          |-> kref_put

When calling dvb_unregister_device, dmxdev->dvbdev (i.e. *pdvbdev in
dvb_register_device) could point to memory that had been freed in
dvb_register_device. Thereafter, this pointer is transferred to
kref_put and triggering a use-after-free.

Link: https://lore.kernel.org/linux-media/20240203134046.3120099-1-alexious@zju.edu.cn
Fixes: b619010247 ("V4L/DVB (5244): Dvbdev: fix illegal re-usage of fileoperations struct")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:45 -04:00
Zhipeng Lu
90029b9c97 media: v4l2-mem2mem: fix a memleak in v4l2_m2m_register_entity
[ Upstream commit 8f94b49a5b ]

The entity->name (i.e. name) is allocated in v4l2_m2m_register_entity
but isn't freed in its following error-handling paths. This patch
adds such deallocation to prevent memleak of entity->name.

Fixes: be2fff6563 ("media: add helpers for memory-to-memory media controller")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:45 -04:00
Zhipeng Lu
4c86c772fe media: v4l2-tpg: fix some memleaks in tpg_alloc
[ Upstream commit 8cf9c50510 ]

In tpg_alloc, resources should be deallocated in each and every
error-handling paths, since they are allocated in for statements.
Otherwise there would be memleaks because tpg_free is called only when
tpg_alloc return 0.

Fixes: 63881df94d ("[media] vivid: add the Test Pattern Generator")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:45 -04:00
Nikita Zhandarovich
b64cc91c6d media: em28xx: annotate unchecked call to media_device_register()
[ Upstream commit fd61d77a3d ]

Static analyzers generate alerts for an unchecked call to
`media_device_register()`. However, in this case, the device will work
reliably without the media controller API.

Add a comment above the call to prevent future unnecessary changes.

Suggested-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Fixes: 37ecc7b127 ("[media] em28xx: add media controller support")
Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:45 -04:00
Julien Massot
9a5b6b47a3 media: v4l2: cci: print leading 0 on error
[ Upstream commit 58ab1f9e14 ]

In some error cases leading '0' for register address
were missing.

Fixes: 613cbb91e9 ("media: Add MIPI CCI register access helper functions")
Signed-off-by: Julien Massot <julien.massot@collabora.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:44 -04:00
Julien Massot
ae532eb08a media: cadence: csi2rx: use match fwnode for media link
[ Upstream commit 448699c522 ]

Since commit 1029939b37 ("media: v4l: async: Simplify async sub-device fwnode matching"),
async connections are matched using the async sub-device fwnode, not that
of the endpoint. Fix this by using the fwnode of the connection match to
find the pad.

Fixes: 1029939b37 ("media: v4l: async: Simplify async sub-device fwnode matching")
Signed-off-by: Julien Massot <julien.massot@collabora.com>
Reviewed-by: Jai Luthra <j-luthra@ti.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:43 -04:00
Alexander Stein
edbb3226c9 media: tc358743: register v4l2 async device only after successful setup
[ Upstream commit 87399f1ff9 ]

Ensure the device has been setup correctly before registering the v4l2
async device, thus allowing userspace to access.

Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Robert Foss <rfoss@kernel.org>
Fixes: 4c5211a100 ("[media] tc358743: register v4l2 asynchronous subdevice")
Signed-off-by: Robert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240110090111.458115-1-alexander.stein@ew.tq-group.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:43 -04:00
Tomi Valkeinen
b39b4d207d media: rkisp1: Fix IRQ handling due to shared interrupts
[ Upstream commit ffb635bb39 ]

The driver requests the interrupts as IRQF_SHARED, so the interrupt
handlers can be called at any time. If such a call happens while the ISP
is powered down, the SoC will hang as the driver tries to access the
ISP registers.

This can be reproduced even without the platform sharing the IRQ line:
Enable CONFIG_DEBUG_SHIRQ and unload the driver, and the board will
hang.

Fix this by adding a new field, 'irqs_enabled', which is used to bail
out from the interrupt handler when the ISP is not operational.

Link: https://lore.kernel.org/r/20231218-rkisp-shirq-fix-v1-2-173007628248@ideasonboard.com

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-03-26 18:19:09 -04:00
Jason Liu
8eb8dd316c This is the 6.6.20 stable release
-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmXjYIIACgkQONu9yGCS
 aT5mvw/9GnG2BWbZp9BgVzBnT00CXnIpiGlsoSU0I0Uiso3XqpNYBu7jIZ+vmsqz
 3H2bpkToEwJgg40I+w3iRaY84FWJZtl6HWtXydVQghQzXdA7qSuKBmbqQdUGKqZq
 Uqy7SFabkqQmlmF+RX1tYsgj7Vg3tqThERLUKQRhZIRa+Xek6Izi16RKEXcBNoXv
 vN+Q6AJ6vgjzHdw/UndsTH48bA/NofLlGapf7ZRGaSO7vY6bO5N23Xeg8gBIUh3M
 RHYf0ubKOvOw6LfZrE8BAbLd9Om2IHRAwHTqvDUNaIOl6y7exwCCIMK2lDdlzQ3W
 7gug4HzlQjVz93OtL8MjLnfINOO7en65gyqvwit9N7O7nJKvuIMtt5vVam+h4ikB
 xF/QmFj95GNeRLwBmOJxOS89KyC8BrjE3PfYtL1mUO9joH8vZBccon6WIV7C2u5M
 d+0UglxC4lNTJ3s3FcnrzEKCn5YaE8WvFYQX0xvFQL3GWGDkyrNaafqoz19a8yd2
 ndf3xUh5QKYWI2UGhqV6FdfYC9BolEh/niMKrJYCEJ6BroO3nzh1L8keC+MHbJwp
 Yuu9FCT+vNDKfR/HQwUhUGX/3wyBKb8jqzDXUB2s4FLPUSBX+/RAso13FWua1TGd
 E432ZXaobuUx3+kHsqB+0dc99QVblnMFMPEoM4ye3lYHzq8PDJ0=
 =7IL4
 -----END PGP SIGNATURE-----

Merge tag 'v6.6.20' into lf-6.6.y

This is the 6.6.20 stable release

* tag 'v6.6.20': (3154 commits)
  Linux 6.6.20
  fs/ntfs3: fix build without CONFIG_NTFS3_LZX_XPRESS
  Linux 6.6.19
  ...

Signed-off-by: Jason Liu <jason.hui.liu@nxp.com>

 Conflicts:
	arch/arm64/boot/dts/freescale/imx8mm.dtsi
	arch/arm64/boot/dts/freescale/imx8mq.dtsi
	drivers/clk/imx/clk-imx8qxp.c
	drivers/dma/fsl-edma.c
	drivers/firmware/arm_scmi/perf.c
	drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
	drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
	drivers/net/ethernet/freescale/fec_main.c
	drivers/scsi/scsi_error.c
	drivers/spi/spi-imx.c
	sound/soc/fsl/fsl_sai.c
2024-03-11 14:59:44 +08:00
Sean Young
93136132d1 media: rc: bpf attach/detach requires write permission
commit 6a9d552483 upstream.

Note that bpf attach/detach also requires CAP_NET_ADMIN.

Cc: stable@vger.kernel.org
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-02-23 09:25:07 +01:00
Tomi Valkeinen
889a5f329e media: Revert "media: rkisp1: Drop IRQF_SHARED"
commit a107d643b2 upstream.

This reverts commit 85d2a31fe4.

The rkisp1 does share interrupt lines on some platforms, after all. Thus
we need to revert this, and implement a fix for the rkisp1 shared irq
handling in a follow-up patch.

Closes: https://lore.kernel.org/all/87o7eo8vym.fsf@gmail.com/
Link: https://lore.kernel.org/r/20231218-rkisp-shirq-fix-v1-1-173007628248@ideasonboard.com

Reported-by: Mikhail Rudenko <mike.rudenko@gmail.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-02-23 09:25:01 +01:00
Zhipeng Lu
7219a692ff media: ir_toy: fix a memleak in irtoy_tx
[ Upstream commit dc9ceb90c4 ]

When irtoy_command fails, buf should be freed since it is allocated by
irtoy_tx, or there is a memleak.

Fixes: 4114978dcd ("media: ir_toy: prevent device from hanging during transmit")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-23 09:24:57 +01:00
Aurelien Jarno
7a62d444a2 media: solo6x10: replace max(a, min(b, c)) by clamp(b, a, c)
commit 31e97d7c9a upstream.

This patch replaces max(a, min(b, c)) by clamp(b, a, c) in the solo6x10
driver.  This improves the readability and more importantly, for the
solo6x10-p2m.c file, this reduces on my system (x86-64, gcc 13):

 - the preprocessed size from 121 MiB to 4.5 MiB;

 - the build CPU time from 46.8 s to 1.6 s;

 - the build memory from 2786 MiB to 98MiB.

In fine, this allows this relatively simple C file to be built on a
32-bit system.

Reported-by: Jiri Slaby <jirislaby@gmail.com>
Closes: https://lore.kernel.org/lkml/18c6df0d-45ed-450c-9eda-95160a2bbb8e@gmail.com/
Cc:  <stable@vger.kernel.org> # v6.7+
Suggested-by: David Laight <David.Laight@ACULAB.COM>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: David Laight <David.Laight@ACULAB.COM>
Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: <regressions@leemhuis.info>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-02-16 19:10:56 +01:00
Kieran Bingham
777ab143a0 media: i2c: imx335: Fix hblank min/max values
[ Upstream commit d7b95ad7a8 ]

The V4L2_CID_HBLANK control is marked as readonly and can only be a
single value.

Set the minimum and maximum value to match the mode value.

Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:28 +00:00
Su Hui
7190073513 media: ddbridge: fix an error code problem in ddb_probe
[ Upstream commit 09b4195021 ]

Error code is assigned to 'stat', return 'stat' rather than '-1'.

Signed-off-by: Su Hui <suhui@nfschina.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:28 +00:00
Ming Qian
7c180bf296 media: amphion: remove mutext lock in condition of wait_event
[ Upstream commit f9c8ddce2f ]

mutext_lock should not be called in condition of wait_event, otherwise,
when CONFIG_DEBUG_ATOMIC_SLEEP is enabled, we may meet the following
warning:
do not call blocking ops when !TASK_RUNNING; state=2
WARNING: CPU: 5 PID: 741 at kernel/sched/core.c:9859
__might_sleep+0x80/0xa4
Hardware name: Freescale i.MX8QM MEK (DT)
pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)  pc :
__might_sleep+0x80/0xa4  lr : __might_sleep+0x80/0xa4  sp : ffffffc0123738a0
x29: ffffffc0123738a0 x28: ffffffc009194c48 x27: ffffffc00bbc1050
x26: ffffff8814b282f0 x25: ffffff8814b280d0 x24: ffffff8814b28080
x23: 0000000000000001 x22: 0000000000000032 x21: ffffffc00bbc1000
x20: 000000000000011b x19: ffffffc009324670 x18: 00000000fffffffd
x17: 30303c5b20746120 x16: 74657320323d6574 x15: 617473203b474e49
x14: 00058b5b8b9aa1f1 x13: ffffffc00903cda0 x12: 00000000d744fcc9
x11: 000000000000001c x10: 00000000000009a0 x9 : ffffffc0090201f4
x8 : ffffff8828245000 x7 : 0000000000000001 x6 : 0000000000000001
x5 : 00000000410fd080 x4 : 0000000000000002 x3 : ffffff8815aab4c8
x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffffff8828244600
Call trace:
 __might_sleep+0x80/0xa4
 mutex_lock+0x2c/0x80
 sync_session_response+0x110/0x310
 vpu_session_send_cmd+0x18c/0x244
 vpu_session_start+0x38/0x70
 vdec_start_session+0x1b4/0x3e0
 vpu_vb2_start_streaming+0xa0/0x1c4
 vb2_start_streaming+0x74/0x160
 vb2_core_qbuf+0x488/0x650
 vb2_qbuf+0x9c/0x100
 v4l2_m2m_qbuf+0x7c/0x224
 v4l2_m2m_ioctl_qbuf+0x20/0x2c
 v4l_qbuf+0x50/0x6c
 __video_do_ioctl+0x174/0x3f0
 video_usercopy+0x210/0x7cc
 video_ioctl2+0x20/0x30
 v4l2_ioctl+0x48/0x6c

we need to refine check_is_responsed() to remove the mutext_lock, each
cmd has a monotonically increasing id, and cmds are executed
sequentially, so we can check the id of the last reponsed cmd, then
determine whether a command has been responded or not.

Signed-off-by: Ming Qian <ming.qian@nxp.com>
CC: Xiaolei Wang <xiaolei.wang@windriver.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:28 +00:00
Laurent Pinchart
8a31520642 media: rkisp1: resizer: Stop manual allocation of v4l2_subdev_state
[ Upstream commit efa28efd9c ]

Supported media bus codes on the resizer sink pad are identical to the
ISP source pad. The .enum_mbus_code() handler thus delegates the
enumeration to the ISP's operation. This is problematic for two
reasons:

- Format enumeration on the ISP source pad is dependent on the format
  configured on the ISP sink pad for the same subdev state (TRY or
  ACTIVE), while format enumeration on the resizer sink pad should
  return all formats supported by the resizer subdev, regardless of the
  ISP configuration.

- Delegating the operation involves creating a fake v4l2_subdev_state on
  the stack to pass to the ISP .enum_mbus_code() handler. This gets in
  the way of evolution of both the ISP enumeration handler and, more
  generally, the V4L2 subdev state infrastructure.

Fix those two issues by implementing format enumeration manually for the
resizer.

Link: https://lore.kernel.org/r/20231126020948.2700-1-laurent.pinchart@ideasonboard.com

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:28 +00:00
Tomi Valkeinen
fab4834383 media: rkisp1: Fix IRQ disable race issue
[ Upstream commit 870565f063 ]

In rkisp1_isp_stop() and rkisp1_csi_disable() the driver masks the
interrupts and then apparently assumes that the interrupt handler won't
be running, and proceeds in the stop procedure. This is not the case, as
the interrupt handler can already be running, which would lead to the
ISP being disabled while the interrupt handler handling a captured
frame.

This brings up two issues: 1) the ISP could be powered off while the
interrupt handler is still running and accessing registers, leading to
board lockup, and 2) the interrupt handler code and the code that
disables the streaming might do things that conflict.

It is not clear to me if 2) causes a real issue, but 1) can be seen with
a suitable delay (or printk in my case) in the interrupt handler,
leading to board lockup.

Link: https://lore.kernel.org/r/20231207-rkisp-irq-fix-v3-4-358a2c871a3c@ideasonboard.com

Tested-by: Adam Ford <aford173@gmail.com>  #imx8mp-beacon
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Tomi Valkeinen
e28e80cda4 media: rkisp1: Store IRQ lines
[ Upstream commit 0753874617 ]

Store the IRQ lines used by the driver for easy access. These are needed
in future patches which fix IRQ race issues.

Link: https://lore.kernel.org/r/20231207-rkisp-irq-fix-v3-3-358a2c871a3c@ideasonboard.com

Tested-by: Adam Ford <aford173@gmail.com>  #imx8mp-beacon
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Tomi Valkeinen
a32c20cf93 media: rkisp1: Fix IRQ handler return values
[ Upstream commit 3eb7910e1b ]

The IRQ handler rkisp1_isr() calls sub-handlers, all of which returns an
irqreturn_t value, but rkisp1_isr() ignores those values and always
returns IRQ_HANDLED.

Fix this by collecting the return values, and returning IRQ_HANDLED or
IRQ_NONE as appropriate.

Link: https://lore.kernel.org/r/20231207-rkisp-irq-fix-v3-2-358a2c871a3c@ideasonboard.com

Tested-by: Adam Ford <aford173@gmail.com>  #imx8mp-beacon
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Tomi Valkeinen
e08195de19 media: rkisp1: Drop IRQF_SHARED
[ Upstream commit 85d2a31fe4 ]

In all known platforms the ISP has dedicated IRQ lines, but for some
reason the driver uses IRQF_SHARED.

Supporting IRQF_SHARED properly requires handling interrupts even when
our device is disabled, and the driver does not handle this. To avoid
adding such code, and to be sure the driver won't accidentally be used
in a platform with shared interrupts, let's drop the IRQF_SHARED flag.

Link: https://lore.kernel.org/r/20231207-rkisp-irq-fix-v3-1-358a2c871a3c@ideasonboard.com

Tested-by: Adam Ford <aford173@gmail.com>  #imx8mp-beacon
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Ricardo Ribalda
5193d26a70 media: uvcvideo: Fix power line control for SunplusIT camera
[ Upstream commit 6180056b0e ]

The device does not implement the power line frequency control
correctly. It is a UVC 1.5 device, but implements the control as a UVC
1.1 device.

Add the corresponding control mapping override.

Bus 003 Device 002: ID 2b7e:b752 SunplusIT Inc HD Camera
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.01
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x2b7e
  idProduct          0xb752
  bcdDevice            0.04
  iManufacturer           1 SunplusIT Inc
  iProduct                2 HD Camera
  iSerial                 3 01.00.00
  bNumConfigurations      1

Cc: Yunke Cao <yunkec@chromium.org>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Ricardo Ribalda
051400c305 media: uvcvideo: Fix power line control for a Chicony camera
[ Upstream commit dba3e70191 ]

The device does not implement the control properly.

Fixes v4l2-compliance error:

info: checking control 'Power Line Frequency' (0x00980918)
fail: v4l2-test-controls.cpp(552): could not set valid menu item 3

Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Michael Tretter
6ca8d2c068 media: rockchip: rga: fix swizzling for RGB formats
[ Upstream commit 9e7dc39260 ]

When using 32 bit RGB formats, the RGA on the rk3568 produces wrong
colors as the wrong color channels are read or written.  The reason is
that the format description for the channel swizzeling is wrong and the
wrong bits are configured. For example, when converting ARGB32 to NV12,
the alpha channel is used as blue channel.. This doesn't happen if the
color format is the same on both sides.

Fix the color_swap settings of the formats to correctly handle 32 bit
RGB formats.

For RGA_COLOR_FMT_XBGR8888, the RGA_COLOR_ALPHA_SWAP bit doesn't have an
effect. Thus, it isn't possible to handle the V4L2_PIX_FMT_XRGB32. Thus,
it is removed from the list of supported formats.

Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Ghanshyam Agrawal
df16808b16 media: stk1160: Fixed high volume of stk1160_dbg messages
[ Upstream commit b3695e86d2 ]

The function stk1160_dbg gets called too many times, which causes
the output to get flooded with messages. Since stk1160_dbg uses
printk, it is now replaced with printk_ratelimited.

Suggested-by: Phillip Potter <phil@philpotter.co.uk>
Signed-off-by: Ghanshyam Agrawal <ghanshyam1898@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-02-05 20:14:27 +00:00
Alexander Stein
cca7638637 media: i2c: imx290: Properly encode registers as little-endian
[ Upstream commit 60fc87a695 ]

The conversion to CCI also converted the multi-byte register access to
big-endian. Correct the register definition by using the correct
little-endian ones.

Fixes: af73323b97 ("media: imx290: Convert to new CCI register access helpers")
Cc: stable@vger.kernel.org
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
[Sakari Ailus: Fixed the Fixes: tag.]
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-31 16:19:10 -08:00
Alexander Stein
8798fdc284 media: v4l2-cci: Add support for little-endian encoded registers
[ Upstream commit d92e7a013f ]

Some sensors, e.g. Sony IMX290, are using little-endian registers. Add
support for those by encoding the endianness into Bit 20 of the register
address.

Fixes: af73323b97 ("media: imx290: Convert to new CCI register access helpers")
Cc: stable@vger.kernel.org
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
[Sakari Ailus: Fixed commit message.]
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-31 16:19:10 -08:00
Sakari Ailus
8d2cd1724e media: v4l: cci: Add macros to obtain register width and address
[ Upstream commit cd93cc245d ]

Add CCI_REG_WIDTH() macro to obtain register width in bits and similarly,
CCI_REG_WIDTH_BYTES() to obtain it in bytes.

Also add CCI_REG_ADDR() macro to obtain the address of a register.

Use both macros in v4l2-cci.c, too.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Stable-dep-of: d92e7a013f ("media: v4l2-cci: Add support for little-endian encoded registers")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-31 16:19:09 -08:00
Zheng Wang
8254d54d00 media: mtk-jpeg: Fix use after free bug due to error path handling in mtk_jpeg_dec_device_run
commit 206c857dd1 upstream.

In mtk_jpeg_probe, &jpeg->job_timeout_work is bound with
mtk_jpeg_job_timeout_work.

In mtk_jpeg_dec_device_run, if error happens in
mtk_jpeg_set_dec_dst, it will finally start the worker while
mark the job as finished by invoking v4l2_m2m_job_finish.

There are two methods to trigger the bug. If we remove the
module, it which will call mtk_jpeg_remove to make cleanup.
The possible sequence is as follows, which will cause a
use-after-free bug.

CPU0                  CPU1
mtk_jpeg_dec_...    |
  start worker	    |
                    |mtk_jpeg_job_timeout_work
mtk_jpeg_remove     |
  v4l2_m2m_release  |
    kfree(m2m_dev); |
                    |
                    | v4l2_m2m_get_curr_priv
                    |   m2m_dev->curr_ctx //use

If we close the file descriptor, which will call mtk_jpeg_release,
it will have a similar sequence.

Fix this bug by starting timeout worker only if started jpegdec worker
successfully. Then v4l2_m2m_job_finish will only be called in
either mtk_jpeg_job_timeout_work or mtk_jpeg_dec_device_run.

Fixes: b2f0d2724b ("[media] vcodec: mediatek: Add Mediatek JPEG Decoder Driver")
Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: stable@vger.kernel.org
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:55 -08:00
Zheng Wang
26f3ae1aa8 media: mtk-jpeg: Fix timeout schedule error in mtk_jpegdec_worker.
commit 38e1857933 upstream.

In mtk_jpegdec_worker, if error occurs in mtk_jpeg_set_dec_dst, it
will start the timeout worker and invoke v4l2_m2m_job_finish at
the same time. This will break the logic of design for there should
be only one function to call v4l2_m2m_job_finish. But now the timeout
handler and mtk_jpegdec_worker will both invoke it.

Fix it by start the worker only if mtk_jpeg_set_dec_dst successfully
finished.

Fixes: da4ede4b7f ("media: mtk-jpeg: move data/code inside CONFIG_OF blocks")
Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: stable@vger.kernel.org
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:55 -08:00
Alain Volmat
9399d61bf5 media: i2c: st-mipid02: correct format propagation
commit b33cb0cbe2 upstream.

Use a copy of the struct v4l2_subdev_format when propagating
format from the sink to source pad in order to avoid impacting the
sink format returned to the application.

Thanks to Jacopo Mondi for pointing the issue.

Fixes: 6c01e6f3f2 ("media: st-mipid02: Propagate format from sink to source pad")
Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Cc: stable@vger.kernel.org
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:55 -08:00
Michael Grzeschik
72a28c9283 media: videobuf2-dma-sg: fix vmap callback
commit 608ca5a60e upstream.

For dmabuf import users to be able to use the vaddr from another
videobuf2-dma-sg source, the exporter needs to set a proper vaddr on
vb2_dma_sg_dmabuf_ops_vmap callback. This patch adds vmap on map if
buf->vaddr was not set.

Cc: stable@kernel.org
Fixes: 7938f42181 ("dma-buf-map: Rename to iosys-map")
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Acked-by: Tomasz Figa <tfiga@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:55 -08:00
Bingbu Cao
240fd0215d media: ov01a10: Enable runtime PM before registering async sub-device
commit 47a78052db upstream.

As the sensor device maybe accessible right after its async sub-device is
registered, such as ipu-bridge will try to power up sensor by sensor's
client device's runtime PM from the async notifier callback, if runtime PM
is not enabled, it will fail.

So runtime PM should be ready before its async sub-device is registered
and accessible by others.

It also sets the runtime PM status to active as the sensor was turned
on by i2c-core.

Fixes: 0827b58dab ("media: i2c: add ov01a10 image sensor driver")
Cc: stable@vger.kernel.org
Signed-off-by: Bingbu Cao <bingbu.cao@intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:51 -08:00
Bingbu Cao
000339cb5d media: ov13b10: Enable runtime PM before registering async sub-device
commit 7b0454cfd8 upstream.

As the sensor device maybe accessible right after its async sub-device is
registered, such as ipu-bridge will try to power up sensor by sensor's
client device's runtime PM from the async notifier callback, if runtime PM
is not enabled, it will fail.

So runtime PM should be ready before its async sub-device is registered
and accessible by others.

Fixes: 7ee8505468 ("media: Add sensor driver support for the ov13b10 camera.")
Cc: stable@vger.kernel.org
Signed-off-by: Bingbu Cao <bingbu.cao@intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:51 -08:00
Bingbu Cao
92d25e02ee media: ov9734: Enable runtime PM before registering async sub-device
commit e242e9c144 upstream.

As the sensor device maybe accessible right after its async sub-device is
registered, such as ipu-bridge will try to power up sensor by sensor's
client device's runtime PM from the async notifier callback, if runtime PM
is not enabled, it will fail.

So runtime PM should be ready before its async sub-device is registered
and accessible by others.

Fixes: d3f863a63f ("media: i2c: Add ov9734 image sensor driver")
Cc: stable@vger.kernel.org
Signed-off-by: Bingbu Cao <bingbu.cao@intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:51 -08:00
Bingbu Cao
252ae106ea media: imx355: Enable runtime PM before registering async sub-device
commit efa5fe19c0 upstream.

As the sensor device maybe accessible right after its async sub-device is
registered, such as ipu-bridge will try to power up sensor by sensor's
client device's runtime PM from the async notifier callback, if runtime PM
is not enabled, it will fail.

So runtime PM should be ready before its async sub-device is registered
and accessible by others.

Fixes: df0b5c4a7d ("media: add imx355 camera sensor driver")
Cc: stable@vger.kernel.org
Signed-off-by: Bingbu Cao <bingbu.cao@intel.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-31 16:18:50 -08:00
Aymen Sghaier
ba03214175 ILIE-12: media: nxp: neoisp: Update compatible string
Rename compatible string from fsl,neoisp to nxp,neoisp to be aligned
with dt-bindings documentation.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:58 +08:00
Aymen Sghaier
1b9567e743 ILIE-33: media: nxp: neoisp: Rename dcg and vs to input0 and input1
DCG and VS names are being renamed in the ISP block guide.
This patch aligns the driver sources with the new block guide version.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:26 +08:00
Aymen Sghaier
5ce7a7a889 ILIE-30: media: nxp: neoisp: Fix colorspace selection regarding v4l2 buffer type
Set V4L2_COLORSPACE_RAW for output video buffer type
Set V4L2_COLORSPACE_SRGB for capture v4l2 buffer type

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:26 +08:00
Aymen Sghaier
121f43e78b ILIE-19: media: nxp: neoisp: Fix yuv colors
If YUV format is selected for output, the colors shown on the screen are
corrupted, blue appears green and red appears brown and so on.
This patch fixes the GCM block parameters to see correct colors.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:26 +08:00
Aymen Sghaier
df04d28256 ILIE-27: media: nxp: neoisp: Add event subscriber ops to subdevice
V4L2_EVENT_FRAME_SYNC event is generated but related ioctl is not
enabled.
This patch adds support for event subscribe ioctl.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:26 +08:00
Aymen Sghaier
3571388e96 ILIE-26: media: nxp: neoisp: Add sequence number in video capture v4l2_buffers
Add per neoisp instance a frame sequence number to provide for each
frame done event

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:26 +08:00
Aymen Sghaier
9d2b63e515 ILIE-12: media: nxp: neoisp: Queue frame_sync_event before isp start
V4L2_EVENT_FRAME_SYNC is queued only after isp processing done, which is
not expected by pipeline handler.
This patch moves the event before the isp processing to comply with
pipeline handler expectation.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:26 +08:00
Aymen Sghaier
ab6f693d93 ILIE-12: media: nxp: neoisp: Remove huge amount of logs at probe
At probe neoisp driver is logging each device node register which is
huge and not needed
This patch moves them to debug level and keeps only probe done log as
notification level.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:25 +08:00
Aymen Sghaier
e75025ff9a ILIE-12: media: nxp: neoisp: Add missing neoisp subdevice for pipeline handler
Media entity is created widtout subdevice node which is blocking for
pipeline handler setup.
This patch adds the neoisp subdevice node creation.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:25 +08:00
Aymen Sghaier
bf34b6e7ba ILIE-12: media: nxp: neoisp: Fix stats pointer error when disabled
Even when statistics node is disabled for tests and error pointer is
observed while isp is running.
This patch checks if stats are disabled before generating the error.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:25 +08:00
Aymen Sghaier
7430cac4d0 ILIE-12: media: nxp: neoisp: Fix rgb settings after playing yuv
Once neoisp processed yuv capture format, rgb capture format is broken
and user will get corrupted frames
This patch fix restoring rgb settings in such scenario.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:25 +08:00
Julien Vuillaumier
a7d6512d9c ILIE-17: media: v4l2-core: Add meta neoisp formats description
A warning is emitted when meta neoisp formats description is requested,
this patch adds the missing descriptions for the following formats:
 - V4L2_META_FMT_NEO_ISP_PARAMS
 - V4L2_META_FMT_NEO_ISP_STATS

Signed-off-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:25 +08:00
Aymen Sghaier
313aaa2fc5 ILIE-12: media: nxp: neoisp: Fix high resolution frames processing by neoisp
When using frames resolution bigger than 2024x1024 like 1920x1080
neoisp is generating error with unsupported resolution while hardware is
able to process up to 4096 line width frames.
This patch increase the accepted resolutions to 4096x4096.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:25 +08:00
Aymen Sghaier
7370ead52d ILIE-18: media: nxp: neoisp: Fix streaming mode using gstreamer
Gstreamer pipeline is generating a bus error because isp is starting
without waiting for frame node buffer to be queued.
This patch adds a condition to not start processing if no frame node
buffer has been queued, to avoid this bus error.

Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-26 17:26:25 +08:00
Christophe JAILLET
ee3e64d1da media: dvb-frontends: m88ds3103: Fix a memory leak in an error handling path of m88ds3103_probe()
[ Upstream commit 5b2f885e2f ]

If an error occurs after a successful i2c_mux_add_adapter(), then
i2c_mux_del_adapters() should be called to free some resources, as
already done in the remove function.

Fixes: e6089feca4 ("media: m88ds3103: Add support for ds3103b demod")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:35 -08:00
Dan Carpenter
de28d63ad3 media: dvbdev: drop refcount on error path in dvb_device_open()
[ Upstream commit a2dd235df4 ]

If call to file->f_op->open() fails, then call dvb_device_put(dvbdev).

Fixes: 0fc044b2b5 ("media: dvbdev: adopts refcnt to avoid UAF")
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:35 -08:00
Tomi Valkeinen
f2295f1769 media: rkisp1: Fix media device memory leak
[ Upstream commit 452f604a46 ]

Add missing calls to media_device_cleanup() to fix memory leak.

Link: https://lore.kernel.org/r/20231122-rkisp-fixes-v2-1-78bfb63cdcf8@ideasonboard.com

Fixes: d65dd85281 ("media: staging: rkisp1: add Rockchip ISP1 base driver")
Reviewed-by: Tommaso Merciai <tomm.merciai@gmail.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:35 -08:00
Tomi Valkeinen
c9354bffaa media: imx-mipi-csis: Drop extra clock enable at probe()
[ Upstream commit fb387fcb5c ]

The driver always enables the clocks at probe() and disables them only
at remove(). It is not clear why the driver does this, as it supports
runtime PM, and enables and disables the clocks in the runtime resume
and suspend callbacks. Also, in the case runtime PM is not available,
the driver calls the resume and suspend callbacks manually from probe()
and remove().

Drop the unnecessary clock enable, thus enabling the clocks only when
actually needed.

Link: https://lore.kernel.org/r/20231122-imx-csis-v2-2-e44b8dc4cb66@ideasonboard.com

Fixes: 7807063b86 ("media: staging/imx7: add MIPI CSI-2 receiver subdev for i.MX7")
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:35 -08:00
Tomi Valkeinen
0e3535ee77 media: imx-mipi-csis: Fix clock handling in remove()
[ Upstream commit 5705b0e0eb ]

The driver always calls mipi_csis_runtime_suspend() and
mipi_csis_clk_disable() in remove(). This causes multiple WARNs from the
kernel, as the clocks get disabled too many times.

Fix the remove() to call mipi_csis_runtime_suspend() and
mipi_csis_clk_disable() in a way that reverses what is done in probe().

Link: https://lore.kernel.org/r/20231122-imx-csis-v2-1-e44b8dc4cb66@ideasonboard.com

Fixes: 7807063b86 ("media: staging/imx7: add MIPI CSI-2 receiver subdev for i.MX7")
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:35 -08:00
Hans Verkuil
54ce93d7e6 media: bttv: add back vbi hack
[ Upstream commit 3f1faa154a ]

The old (now removed) videobuf framework had an optional vbi hack where
the sequence number of the frame counter was copied in the last 4 bytes
of the buffer. This hack was active only for the read() interface
(so not for streaming I/O), and it was enabled by bttv. This allowed
applications that used read() for the VBI data to match it with the
corresponding video frame.

When bttv was converted to vb2 this hack was forgotten, but some old
applications rely on this.

So add this back, but this time in the bttv driver rather than in the
vb2 framework.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Fixes: b7ec3212a7 ("media: bttv: convert to vb2")
Tested-by: Dr. David Alan Gilbert <dave@treblig.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:35 -08:00
Hans Verkuil
e8fa30fa71 media: bttv: start_streaming should return a proper error code
[ Upstream commit 0d75bb6ae1 ]

The start_streaming callback returned 0 or 1 instead of a
proper error code. Fix that.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Fixes: b7ec3212a7 ("media: bttv: convert to vb2")
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:34 -08:00
Zhipeng Lu
1e2c9e7418 media: cx231xx: fix a memleak in cx231xx_init_isoc
[ Upstream commit 5d3c8990e2 ]

The dma_q->p_left_data alloced by kzalloc should be freed in all the
following error handling paths. However, it hasn't been freed in the
allocation error paths of dev->video_mode.isoc_ctl.urb and
dev->video_mode.isoc_ctl.transfer_buffer.

On the other hand, the dma_q->p_left_data did be freed in the
error-handling paths after that of dev->video_mode.isoc_ctl.urb and
dev->video_mode.isoc_ctl.transfer_buffer, by calling
cx231xx_uninit_isoc(dev). So the same free operation should be done in
error-handling paths of those two allocation.

Fixes: 64fbf44455 ("[media] cx231xx: Added support for Carraera, Shelby, RDx_253S and VIDEO_GRABBER")
Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:34 -08:00
Sebastian Reichel
b7062628ca media: v4l: async: Fix duplicated list deletion
[ Upstream commit 3de6ee94aa ]

The list deletion call dropped here is already called from the
helper function in the line before. Having a second list_del()
call results in either a warning (with CONFIG_DEBUG_LIST=y):

list_del corruption, c46c8198->next is LIST_POISON1 (00000100)

If CONFIG_DEBUG_LIST is disabled the operation results in a
kernel error due to NULL pointer dereference.

Fixes: 28a1295795 ("media: v4l: async: Allow multiple connections between entities")
Signed-off-by: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:33 -08:00
Alexander Stein
c082791b6a media: amphion: Fix VPU core alias name
[ Upstream commit f033c87fda ]

Starting with commit f6038de293 ("arm64: dts: imx8qm: Fix VPU core
alias name") the alias for VPU cores uses dashes instead of underscores.
Adjust the alias stem accordingly. Fixes the errors:
amphion-vpu-core 2d040000.vpu-core: can't get vpu core id
amphion-vpu-core 2d050000.vpu-core: can't get vpu core id

Fixes: f6038de293 ("arm64: dts: imx8qm: Fix VPU core alias name")
Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:32 -08:00
Paul Kocialkowski
682588d38a media: verisilicon: Hook the (TRY_)DECODER_CMD stateless ioctls
[ Upstream commit 6c0d9e12b1 ]

The (TRY_)DECODER_CMD ioctls are used to support flushing when holding
capture buffers is supported. This is the case of this driver but the
ioctls were never hooked to the ioctl ops.

Add them to correctly support flushing.

Fixes: 340ce50f75 ("media: hantro: Enable HOLD_CAPTURE_BUF for H.264")
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:32 -08:00
Paul Kocialkowski
f581023e32 media: visl: Hook the (TRY_)DECODER_CMD stateless ioctls
[ Upstream commit 3907f6ef8e ]

The (TRY_)DECODER_CMD ioctls are used to support flushing when holding
capture buffers is supported. This is the case of this driver but the
ioctls were never hooked to the ioctl ops.

Add them to correctly support flushing.

Fixes: 0c078e310b ("media: visl: add virtual stateless decoder driver")
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:32 -08:00
Zheng Wang
2cb808af77 media: mtk-jpeg: Remove cancel worker in mtk_jpeg_remove to avoid the crash of multi-core JPEG devices
[ Upstream commit d8212c5c87 ]

This patch reverts commit c677d7ae83
("media: mtk-jpeg: Fix use after free bug due to uncanceled work").
The job_timeout_work is initialized only for
the single-core JPEG device so it will cause the crash for multi-core
JPEG devices.

Fix it by removing the cancel_delayed_work_sync function.

Fixes: c677d7ae83 ("media: mtk-jpeg: Fix use after free bug due to uncanceled work")
Signed-off-by: Zheng Wang <zyytlz.wz@163.com>
Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:32 -08:00
Ricardo B. Marliere
2cf0005d31 media: pvrusb2: fix use after free on context disconnection
[ Upstream commit ded85b0c0e ]

Upon module load, a kthread is created targeting the
pvr2_context_thread_func function, which may call pvr2_context_destroy
and thus call kfree() on the context object. However, that might happen
before the usb hub_event handler is able to notify the driver. This
patch adds a sanity check before the invalid read reported by syzbot,
within the context disconnection call stack.

Reported-and-tested-by: syzbot+621409285c4156a009b3@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/all/000000000000a02a4205fff8eb92@google.com/

Fixes: e5be15c638 ("V4L/DVB (7711): pvrusb2: Fix race on module unload")
Signed-off-by: Ricardo B. Marliere <ricardo@marliere.net>
Acked-by: Mike Isely <isely@pobox.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-25 15:35:32 -08:00
Guoniu.zhou
6cbc4aa1e6 LF-11224: media: nxp: imx8-isi: add QoS setting for iMX95 ISI
Add QoS setting for iMX95 ISI.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
Tested-by: Jared Hu <jared.hu@nxp.com>
Acked-by: Jason Liu <jason.hui.liu@nxp.com>
2024-01-16 20:54:12 +08:00
Bryan O'Donoghue
e53b78e3cf media: qcom: camss: Comment CSID dt_id field
commit f910d3ba78 upstream.

Digging into the documentation we find that the DT_ID bitfield is used to
map the six bit DT to a two bit ID code. This value is concatenated to the
VC bitfield to create a CID value. DT_ID is the two least significant bits
of CID and VC the most significant bits.

Originally we set dt_id = vc * 4 in and then subsequently set dt_id = vc.

commit 3c4ed72a16 ("media: camss: sm8250: Virtual channels for CSID")
silently fixed the multiplication by four which would give a better
value for the generated CID without mentioning what was being done or why.

Next up I haplessly changed the value back to "dt_id = vc * 4" since there
didn't appear to be any logic behind it.

Hans asked what the change was for and I honestly couldn't remember the
provenance of it, so I dug in.

Link: https://lore.kernel.org/linux-arm-msm/edd4bf9b-0e1b-883c-1a4d-50f4102c3924@xs4all.nl/

Add a comment so the next hapless programmer doesn't make this same
mistake.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-01-10 17:17:02 +01:00
Bryan O'Donoghue
88a884dec1 media: qcom: camss: Fix genpd cleanup
[ Upstream commit f69791c397 ]

Right now we never release the power-domains properly on the error path.
Add a routine to be reused for this purpose and appropriate jumps in
probe() to run that routine where necessary.

Fixes: 2f6f8af672 ("media: camss: Refactor VFE power domain toggling")
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-10 17:16:54 +01:00
Bryan O'Donoghue
3c97918a8a media: qcom: camss: Fix V4L2 async notifier error path
[ Upstream commit b278080a89 ]

Previously the jump label err_cleanup was used higher in the probe()
function to release the async notifier however the async notifier
registration was moved later in the code rendering the previous four jumps
redundant.

Rename the label from err_cleanup to err_v4l2_device_unregister to capture
what the jump does.

Fixes: 51397a4ec75d ("media: qcom: Initialise V4L2 async notifier later")
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
[hverkuil: fix old name in commit log: err_v4l2_device_register -> err_v4l2_device_unregister]
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-01-10 17:16:54 +01:00
Guoniu.zhou
d141f1ea04 LF-11117: media: imx8-isi: fix system hang issue when do software reboot
During ISI driver probe, it will do irq register clean up operation,
but doesn't enable clock and power, so meet system hang issue. So
adding the pm runtime during the process to fix this issue.

Signed-off-by: Jacky Bai <ping.bai@nxp.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2023-12-26 16:20:20 +08:00
Mirela Rabulea
82b8ebcacd LF-11113-2: media: os08a20: Rename os08a20 to 0s08a20_mipi
There is another driver named os08a20.ko in vvcam repository,
even if it is in another folder, it is causing build conflicts.
Keep the vvcam driver name, os08a20, so imx8mp customers are not
confused, and rename the kernel driver to os08a20_mipi, including
the compatible.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
Reviewed-by: Alice Yuan <alice.yuan@nxp.com>
2023-12-25 10:53:29 +02:00
Aymen Sghaier
f862a36a84 ILIE-12: media: platform: Kconfig: Add neoisp build support
Update Kconfig and Makefile in media platfrom nxp folder to build neoisp

Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
2023-12-21 21:27:55 +01:00
Aymen Sghaier
f787966697 ILIE-12: media: platform: Add NXP neoisp driver
First NXP neoisp driver version with the following contents:

* Support of raw Bayer images input: (tested V4L2 formats)
 - V4L2_PIX_FMT_SBGGR8
 - V4L2_PIX_FMT_SBGGR12
 - V4L2_PIX_FMT_SGBRG8
 - V4L2_PIX_FMT_SGRBG8
 - V4L2_PIX_FMT_SRGGB8
 - V4L2_PIX_FMT_SRGGB16
* Support of RGB/YUV output formats: (tested V4L2 formats)
 - V4L2_PIX_FMT_RGB24 (RGB-8-8-8)
 - V4L2_PIX_FMT_YUYV (YUV 4:2:2)
 - V4L2_PIX_FMT_YUV24 (YUV3 4:4:4)
* Single camera context support
* Only DCG input is supported - not VS
* Only Frame output is supported - not IR
* Params and stats nodes are supported

This driver is highly inspired from "Raspberry Pi PiSP Backend (BE) ISP driver",
 developed by "David Plowman <david.plowman@raspberrypi.com>" and
"Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>"
It leverages the ability of handling multiple camera streams with only
one ISP hardware.

Reviewed-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Signed-off-by: Aymen Sghaier <aymen.sghaier@nxp.com>
2023-12-21 21:27:55 +01:00
Mirela Rabulea
e8e5d79ee3 LF-10968: media: os08a20: Fix checkpatch errors
Fix multiple errors from cleanfile and checkpatch scripts.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
2023-12-15 15:32:25 +02:00
Mirela Rabulea
51c7fbbb9a LF-10968: media: os08a20: Fix runtime PM usage count underflow
The usage of VVSENSORIOC_S_STREAM from user-space side is
unpaired, there is one enable and two disables, causing:
[ 4663.131145] os08a20 1-0036: Runtime PM usage count underflow!

Fix VVSENSORIOC_S_STREAM.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2023-12-15 15:32:16 +02:00
Mirela Rabulea
3c8bb0ad57 LF-10968: media: os08a20: Use os08a20 version from p24 release
Update to the latest available version of the VSI release.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
2023-12-15 15:32:15 +02:00
Mirela Rabulea
f5cc1f00e9 LF-10968: media: os08a20: Add V4L2_CID_LINK_FREQ control
For now, it's just one hardcoded default value for 1080p RAW10.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2023-12-15 15:31:33 +02:00
Mirela Rabulea
c92e35ba61 LF-10968: media: os08a20: Use runtime PM
Switch to using runtime PM for power management, the
s_power is obsolete. Follow the changes from:
commit 85644a9b37 ("media: ov5640: Use runtime PM")

Also rename probe_err_free_entiny label.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
2023-12-15 15:06:55 +02:00
Mirela Rabulea
c76e725846 LF-10968: media: os08a20: Add os08a20 driver from VSI p17 release
This is the VSI driver for Omnivision os08a20 raw sensor,
using MIPI-CSI2 interface.

Tested on imx8mp and imx95.
The default mode is 1080p, RAW10.

Signed-off-by: Mirela Rabulea <mirela.rabulea@nxp.com>
2023-12-15 15:06:55 +02:00
Guoniu.zhou
403c112dc3 LF-10821-02: media: nxp: don't print message when error number is -EPROBE_DEFER
Check the return value and don't print error message when return
error is -EPROBE_DEFER to avoid confusion.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2023-12-13 18:34:12 +08:00
Guoniu.zhou
bf6ec954c6 LF-10822: media: nxp: Create a 1:N mapping between pixel link and ISI channels
Create a 1:N mapping between pixel link inputs and outputs to pipelines
by according to the number of pixel links inputs and ISI channels. The
algorithm will divide the ISI channel equally to each pixel link input
which connect to a remote device.

Signed-off-by: Guoniu.zhou <guoniu.zhou@nxp.com>
Reviewed-by: Robby Cai <robby.cai@nxp.com>
2023-12-07 09:55:09 +08:00
Jason Liu
f75d905095 Merge tag 'v6.6.3' into lf-6.6.y
This is the 6.6.3 stable release

* tag 'v6.6.3': (526 commits)
  Linux 6.6.3
  drm/amd/display: Change the DMCUB mailbox memory location from FB to inbox
  drm/amd/display: Clear dpcd_sink_ext_caps if not set
  ...

Signed-off-by: Jason Liu <jason.hui.liu@nxp.com>

 Conflicts:
	arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi
	drivers/usb/dwc3/core.c
2023-11-30 09:41:12 -06:00
Jason Liu
6d09067baf Merge tag 'v6.6.2' into lf-6.6.y
This is the 6.6.2 stable release

* tag 'v6.6.2': (634 commits)
  Linux 6.6.2
  btrfs: make found_logical_ret parameter mandatory for function queue_scrub_stripe()
  btrfs: use u64 for buffer sizes in the tree search ioctls
  ...

Signed-off-by: Jason Liu <jason.hui.liu@nxp.com>

Conflicts:
	drivers/clk/imx/clk-imx8mq.c
	drivers/clk/imx/clk-imx8qxp.c
	drivers/media/i2c/ov5640.c
	drivers/misc/pci_endpoint_test.c
2023-11-30 09:40:58 -06:00
Andrey Konovalov
ed9f1ea918 media: qcom: camss: Fix csid-gen2 for test pattern generator
commit 87889f1b7e upstream.

In the current driver csid Test Pattern Generator (TPG) doesn't work.
This change:
- fixes writing frame width and height values into CSID_TPG_DT_n_CFG_0
- fixes the shift by one between test_pattern control value and the
  actual pattern.
- drops fixed VC of 0x0a which testing showed prohibited some test
  patterns in the CSID to produce output.
So that TPG starts working, but with the below limitations:
- only test_pattern=9 works as it should
- test_pattern=8 and test_pattern=7 produce black frame (all zeroes)
- the rest of test_pattern's don't work (yavta doesn't get the data)
- regardless of the CFA pattern set by 'media-ctl -V' the actual pixel
  order is always the same (RGGB for any RAW8 or RAW10P format in
  4608x2592 resolution).

Tested with:

RAW10P format, VC0:
 media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4608x2592 field:none]'
 media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4608x2592 field:none]'
 media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
 v4l2-ctl -d /dev/v4l-subdev6 -c test_pattern=9
 yavta -B capture-mplane --capture=3 -n 3 -f SRGGB10P -s 4608x2592 /dev/video0

RAW10P format, VC1:
 media-ctl -V '"msm_csid0":2[fmt:SRGGB10/4608x2592 field:none]'
 media-ctl -V '"msm_vfe0_rdi1":0[fmt:SRGGB10/4608x2592 field:none]'
 media-ctl -l '"msm_csid0":2->"msm_vfe0_rdi1":0[1]'
 v4l2-ctl -d /dev/v4l-subdev6 -c test_pattern=9
 yavta -B capture-mplane --capture=3 -n 3 -f SRGGB10P -s 4608x2592 /dev/video1

RAW8 format, VC0:
 media-ctl --reset
 media-ctl -V '"msm_csid0":0[fmt:SRGGB8/4608x2592 field:none]'
 media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB8/4608x2592 field:none]'
 media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
 yavta -B capture-mplane --capture=3 -n 3 -f SRGGB8 -s 4608x2592 /dev/video0

Fixes: eebe6d00e9 ("media: camss: Add support for CSID hardware version Titan 170")
Cc: stable@vger.kernel.org
Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-28 17:20:15 +00:00
Bryan O'Donoghue
e09e1ddc69 media: qcom: camss: Fix invalid clock enable bit disjunction
commit d8f7e1a60d upstream.

define CSIPHY_3PH_CMN_CSI_COMMON_CTRL5_CLK_ENABLE BIT(7)

disjunction for gen2 ? BIT(7) : is a nop we are setting the same bit
either way.

Fixes: 4abb21309f ("media: camss: csiphy: Move to hardcode CSI Clock Lane number")
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-28 17:20:14 +00:00
Bryan O'Donoghue
5fbdccc9f8 media: qcom: camss: Fix set CSI2_RX_CFG1_VC_MODE when VC is greater than 3
commit e655d1ae97 upstream.

VC_MODE = 0 implies a two bit VC address.
VC_MODE = 1 is required for VCs with a larger address than two bits.

Fixes: eebe6d00e9 ("media: camss: Add support for CSID hardware version Titan 170")
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-28 17:20:14 +00:00
Bryan O'Donoghue
f6cc8265eb media: qcom: camss: Fix missing vfe_lite clocks check
commit b6e1bdca46 upstream.

check_clock doesn't account for vfe_lite which means that vfe_lite will
never get validated by this routine. Add the clock name to the expected set
to remediate.

Fixes: 7319cdf189 ("media: camss: Add support for VFE hardware version Titan 170")
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-28 17:20:14 +00:00
Bryan O'Donoghue
4dac469b07 media: qcom: camss: Fix VFE-480 vfe_disable_output()
commit 7f24d29135 upstream.

vfe-480 is copied from vfe-17x and has the same racy idle timeout bug as in
17x.

Fix the vfe_disable_output() logic to no longer be racy and to conform
to the 17x way of quiescing and then resetting the VFE.

Fixes: 4edc8eae71 ("media: camss: Add initial support for VFE hardware version Titan 480")
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-28 17:20:14 +00:00
Bryan O'Donoghue
b1eaec007b media: qcom: camss: Fix VFE-17x vfe_disable_output()
commit 3143ad282f upstream.

There are two problems with the current vfe_disable_output() routine.

Firstly we rightly use a spinlock to protect output->gen2.active_num
everywhere except for in the IDLE timeout path of vfe_disable_output().
Even if that is not racy "in practice" somehow it is by happenstance not
by design.

Secondly we do not get consistent behaviour from this routine. On
sc8280xp 50% of the time I get "VFE idle timeout - resetting". In this
case the subsequent capture will succeed. The other 50% of the time, we
don't hit the idle timeout, never do the VFE reset and subsequent
captures stall indefinitely.

Rewrite the vfe_disable_output() routine to

- Quiesce write masters with vfe_wm_stop()
- Set active_num = 0

remembering to hold the spinlock when we do so followed by

- Reset the VFE

Testing on sc8280xp and sdm845 shows this to be a valid fix.

Fixes: 7319cdf189 ("media: camss: Add support for VFE hardware version Titan 170")
Cc: stable@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-11-28 17:20:14 +00:00