Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:gcomes.obs:ipu6
intel-ipu6
85136315f01494fb30b505aafb1ba08e24d280a2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 85136315f01494fb30b505aafb1ba08e24d280a2.patch of Package intel-ipu6
From 85136315f01494fb30b505aafb1ba08e24d280a2 Mon Sep 17 00:00:00 2001 From: Hans de Goede <hdegoede@redhat.com> Date: Tue, 5 Mar 2024 20:56:24 +0100 Subject: [PATCH] ipu6-isys: Fix probe() failure with kernel >= 6.7 media_entity_pads_init() from kernel >= 6.7 requires the passed in pads to have one of MEDIA_PAD_FL_SINK or MEDIA_PAD_FL_SOURCE set in their flags before calling media_entity_pads_init(). The ipu6 code was only setting these flags later, causing media_entity_pads_init() to fail with -EINVAL causing ipu_isys_probe() to fail. Use the num_sink and num_source parameters to ipu_isys_subdev_init() to set the MEDIA_PAD_FL_SINK / _FL_SOURCE flags there before calling media_entity_pads_init() to fix this and drop the setting of these flags in the caller since this is no longer necessary. Closes: https://github.com/intel/ipu6-drivers/issues/205 Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/media/pci/intel/ipu-isys-csi2-be-soc.c | 3 --- drivers/media/pci/intel/ipu-isys-csi2-be.c | 4 +--- drivers/media/pci/intel/ipu-isys-csi2.c | 4 +--- drivers/media/pci/intel/ipu-isys-subdev.c | 14 +++++++++++++- drivers/media/pci/intel/ipu-isys-tpg.c | 1 - 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/drivers/media/pci/intel/ipu-isys-csi2-be-soc.c b/drivers/media/pci/intel/ipu-isys-csi2-be-soc.c index 2c94491480e1..e18176f4775a 100644 --- a/drivers/media/pci/intel/ipu-isys-csi2-be-soc.c +++ b/drivers/media/pci/intel/ipu-isys-csi2-be-soc.c @@ -298,9 +298,6 @@ int ipu_isys_csi2_be_soc_init(struct ipu_isys_csi2_be_soc *csi2_be_soc, if (rval) goto fail; - csi2_be_soc->asd.pad[CSI2_BE_SOC_PAD_SINK].flags = MEDIA_PAD_FL_SINK; - csi2_be_soc->asd.pad[CSI2_BE_SOC_PAD_SOURCE].flags = - MEDIA_PAD_FL_SOURCE; csi2_be_soc->asd.valid_tgts[CSI2_BE_SOC_PAD_SOURCE].crop = true; for (i = 0; i < NR_OF_CSI2_BE_SOC_PADS; i++) diff --git a/drivers/media/pci/intel/ipu-isys-csi2-be.c b/drivers/media/pci/intel/ipu-isys-csi2-be.c index 1b885ef21e5b..b430a20e35ca 100644 --- a/drivers/media/pci/intel/ipu-isys-csi2-be.c +++ b/drivers/media/pci/intel/ipu-isys-csi2-be.c @@ -307,9 +307,7 @@ int ipu_isys_csi2_be_init(struct ipu_isys_csi2_be *csi2_be, if (rval) goto fail; - csi2_be->asd.pad[CSI2_BE_PAD_SINK].flags = MEDIA_PAD_FL_SINK - | MEDIA_PAD_FL_MUST_CONNECT; - csi2_be->asd.pad[CSI2_BE_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE; + csi2_be->asd.pad[CSI2_BE_PAD_SINK].flags |= MEDIA_PAD_FL_MUST_CONNECT; csi2_be->asd.valid_tgts[CSI2_BE_PAD_SOURCE].crop = true; csi2_be->asd.set_ffmt = csi2_be_set_ffmt; diff --git a/drivers/media/pci/intel/ipu-isys-csi2.c b/drivers/media/pci/intel/ipu-isys-csi2.c index 2dad9ce7dfcc..fedc6d474175 100644 --- a/drivers/media/pci/intel/ipu-isys-csi2.c +++ b/drivers/media/pci/intel/ipu-isys-csi2.c @@ -534,9 +534,7 @@ int ipu_isys_csi2_init(struct ipu_isys_csi2 *csi2, if (rval) goto fail; - csi2->asd.pad[CSI2_PAD_SINK].flags = MEDIA_PAD_FL_SINK - | MEDIA_PAD_FL_MUST_CONNECT; - csi2->asd.pad[CSI2_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE; + csi2->asd.pad[CSI2_PAD_SINK].flags |= MEDIA_PAD_FL_MUST_CONNECT; src = index; csi2->asd.source = IPU_FW_ISYS_STREAM_SRC_CSI2_PORT0 + src; diff --git a/drivers/media/pci/intel/ipu-isys-subdev.c b/drivers/media/pci/intel/ipu-isys-subdev.c index b9f48d41f844..29b98ba67d04 100644 --- a/drivers/media/pci/intel/ipu-isys-subdev.c +++ b/drivers/media/pci/intel/ipu-isys-subdev.c @@ -787,7 +787,12 @@ int ipu_isys_subdev_init(struct ipu_isys_subdev *asd, unsigned int num_sink, unsigned int sd_flags) { - int rval = -EINVAL; + int i, rval = -EINVAL; + + if ((num_source + num_sink) != num_pads) { + dev_err(&asd->isys->adev->dev, "%s: invalid num pads, source, sink combo\n", __func__); + return -EINVAL; + } mutex_init(&asd->mutex); @@ -818,6 +823,13 @@ int ipu_isys_subdev_init(struct ipu_isys_subdev *asd, !asd->valid_tgts) return -ENOMEM; + for (i = 0; i < num_sink; i++) + asd->pad[i].flags = MEDIA_PAD_FL_SINK; + + /* Continue from above loop */ + for (;i < num_pads; i++) + asd->pad[i].flags = MEDIA_PAD_FL_SOURCE; + rval = media_entity_pads_init(&asd->sd.entity, num_pads, asd->pad); if (rval) goto out_mutex_destroy; diff --git a/drivers/media/pci/intel/ipu-isys-tpg.c b/drivers/media/pci/intel/ipu-isys-tpg.c index b8e3e1f9018b..c02770648729 100644 --- a/drivers/media/pci/intel/ipu-isys-tpg.c +++ b/drivers/media/pci/intel/ipu-isys-tpg.c @@ -291,7 +291,6 @@ int ipu_isys_tpg_init(struct ipu_isys_tpg *tpg, #else tpg->asd.sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; #endif - tpg->asd.pad[TPG_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE; tpg->asd.source = IPU_FW_ISYS_STREAM_SRC_MIPIGEN_PORT0 + index; tpg->asd.supported_codes = tpg_supported_codes;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor