Hello Community!
I am developing an ISP board that connects to iMX8QM MEK.
The hardware configuration diagram is below.
The software is Linux 6.1.22, and the sensor driver is created based on gmsl-max9286.c.

Now I get an exception when starting Linux.
The sensor board outputs virtual channel 2ch via MIPI, and I have an inquiry regarding the kernel 2ch settings.
[ question 1 ]
I changed the kernel dts and sensor driver as shown below, but are there any mistakes in the settings?
dts:
&isi_0 {
status = "okay";
cap_device {
status = "okay";
};
m2m_device {
status = "okay";
};
};
&isi_1 {
status = "okay";
cap_device {
status = "okay";
};
};
&isi_2 {
status = "disabled"; //[sdi] to disabled
cap_device {
status = "disabled"; //[sdi] to disabled
};
};
&isi_3 {
status = "disabled"; //[sdi] to disabled
cap_device {
status = "disabled"; //[sdi] to disabled
};
};
&isi_4 {
status = "disabled"; //[sdi] to disabled
cap_device {
status = "disabled"; //[sdi] to disabled
};
};
&isi_5 {
status = "disabled"; //[sdi] to disabled
cap_device {
status = "disabled"; //[sdi] to disabled
};
};
&isi_6 {
status = "disabled"; //[sdi] to disabled
cap_device {
status = "disabled"; //[sdi] to disabled
};
};
&isi_7 {
status = "disabled"; //[sdi] to disabled
cap_device {
status = "disabled"; //[sdi] to disabled
};
};
&mipi_csi_0 {
#address-cells = <1>;
#size-cells = <0>;
virtual-channel;
status = "okay";
/* Camera 0 MIPI CSI-2 (CSIS0) */
port@0 {
reg = <0>;
mipi_csi0_ep: endpoint {
remote-endpoint = <&max9286_0_ep>;
data-lanes = <1 2 3 4>;
};
};
};
&i2c_mipi_csi0 {
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c_mipi_csi0>;
clock-frequency = <100000>;
status = "okay";
max9286_mipi@6a {
compatible = "sdi,isp_mipi";
reg = <0x6a>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_mipi_csi0>;
clocks = <&clk_dummy>;
clock-names = "capture_mclk";
mclk = <27000000>;
mclk_source = <0>;
pwn-gpios = <&lsio_gpio1 27 GPIO_ACTIVE_HIGH>;
virtual-channel;
status = "okay";
port {
max9286_0_ep: endpoint {
remote-endpoint = <&mipi_csi0_ep>;
data-lanes = <1 2 3 4>;
};
};
};
};
senser driver probe function:
#define MIPI_CSI2_SENS_VC0_PAD_SOURCE 0
#define MIPI_CSI2_SENS_VC1_PAD_SOURCE 1
#define MIPI_CSI2_SENS_VC2_PAD_SOURCE 2
#define MIPI_CSI2_SENS_VCX_PADS_NUM 2
struct sensor_data {
:
struct media_pad pads[MIPI_CSI2_SENS_VCX_PADS_NUM];
:
}
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
sd->entity.function = MEDIA_ENT_F_CAM_SENSOR;
max9286_data->pads[MIPI_CSI2_SENS_VC0_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
max9286_data->pads[MIPI_CSI2_SENS_VC1_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
retval = media_entity_pads_init(&sd->entity, MIPI_CSI2_SENS_VCX_PADS_NUM, max9286_data->pads);
Linux dmesg:
[ 2.428771] isp_mipi 2-006a: isp_mipi is found, name isp_mipi 2-006a
[ 10.169351] imx8_media_dev: module is from the staging directory, the quality is unknown, you have been warned.
[ 10.196793] mx8-img-md: Registered mxc_isi.0.capture as /dev/video3
[ 10.214497] mx8-img-md: Registered mxc_isi.1.capture as /dev/video4
[ 10.221031] mx8-img-md: Registered sensor subdevice: isp_mipi_cam 2-006a (1)
[ 10.241443] mx8-img-md: created link [mxc_isi.0] => [mxc_isi.0.capture]
[ 10.285198] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.0]
[ 10.304164] mx8-img-md: created link [mxc_isi.1] => [mxc_isi.1.capture]
[ 10.323244] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.1]
[ 10.364732] ------------[ cut here ]------------
[ 10.369366] WARNING: CPU: 0 PID: 337 at drivers/media/mc/mc-entity.c:1021 media_create_pad_link+0x8c/0x220
[ 10.379044] Modules linked in: flexcan(+) can_dev snd_soc_fsl_sai(+) snd_soc_fsl_audmix imx8_media_dev(C+) snd_soc_fsl_asrc snd_soc_fsl_utils snd_soc_fsl_esai caam error imx_dsp_rproc fuse
[ 10.395873] CPU: 0 PID: 337 Comm: (udev-worker) Tainted: G C 6.1.22 #51
[ 10.403888] Hardware name: Freescale i.MX8QM MEK (DT)
[ 10.408945] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 10.415911] pc : media_create_pad_link+0x8c/0x220
[ 10.420629] lr : media_create_pad_link+0x58/0x220
[ 10.425338] sp : ffff80000c1db6f0
[ 10.428655] x29: ffff80000c1db6f0 x28: ffff000811dcd080 x27: ffff0008119e0880
[ 10.435805] x26: 0000000000000004 x25: 0000000000000040 x24: ffff00081a5d6650
[ 10.442954] x23: 0000000000000002 x22: 0000000000000002 x21: 0000000000000003
[ 10.450096] x20: ffff000811dcd080 x19: ffff0008119e0880 x18: 0000000000000006
[ 10.457245] x17: 730a323d6461705f x16: 6b6e697320323d64 x15: 61705f656372756f
[ 10.464386] x14: 7320383639333836 x13: 383d736461705f6d x12: 756e3e2d6b6e6973
[ 10.471527] x11: 20323d736461705f x10: 0000000000000a70 x9 : ffff8000081e329c
[ 10.478668] x8 : ffff0008155655d0 x7 : 0000000000000000 x6 : 0000000000000015
[ 10.485809] x5 : ffff0008ff32ea18 x4 : ffff0008ff32ea18 x3 : 0000000000000000
[ 10.492950] x2 : 0000000000000000 x1 : ffff000815564b00 x0 : 0000000000000002
[ 10.500092] Call trace:
[ 10.502535] media_create_pad_link+0x8c/0x220
[ 10.506903] subdev_notifier_complete+0x4ac/0x6c0 [imx8_media_dev]
[ 10.513106] v4l2_async_nf_try_complete+0x84/0x9c
[ 10.517823] __v4l2_async_nf_register+0xe8/0x140
[ 10.522444] v4l2_async_nf_register+0x4c/0x74
[ 10.526805] mxc_md_probe+0x674/0xa40 [imx8_media_dev]
[ 10.531957] platform_probe+0x70/0xcc
[ 10.535623] really_probe+0xc8/0x3e0
[ 10.539203] __driver_probe_device+0x84/0x190
[ 10.543564] driver_probe_device+0x44/0x120
[ 10.547751] __driver_attach+0xfc/0x204
[ 10.551591] bus_for_each_dev+0x7c/0xe0
[ 10.555431] driver_attach+0x2c/0x40
[ 10.559010] bus_add_driver+0x184/0x240
[ 10.562850] driver_register+0x80/0x13c
[ 10.566690] __platform_driver_register+0x30/0x3c
[ 10.571399] mxc_md_driver_init+0x28/0x1000 [imx8_media_dev]
[ 10.577071] do_one_initcall+0x60/0x2d0
[ 10.580911] do_init_module+0x50/0x1f0
[ 10.584664] load_module+0x1c44/0x2024
[ 10.588418] __do_sys_finit_module+0xac/0x12c
[ 10.592779] __arm64_sys_finit_module+0x28/0x34
[ 10.597313] invoke_syscall+0x50/0x120
[ 10.601066] el0_svc_common.constprop.0+0xd4/0xf4
[ 10.605775] do_el0_svc+0x34/0xd0
[ 10.609093] el0_svc+0x2c/0x84
[ 10.612154] el0t_64_sync_handler+0xf4/0x120
[ 10.616426] el0t_64_sync+0x18c/0x190
[ 10.620093] ---[ end trace 0000000000000000 ]---
[ 10.636501] mx8-img-md: subdev_notifier_complete error exit
[ 10.642194] mxc-md bus@58000000:camera: Sensor register failed
[ 10.648142] mxc-md: probe of bus@58000000:camera failed with error -22
The causes of the exception are as follows.
drivers/media/mc/mc-entity.c:1035
WARN_ON(source_pad >= source->num_pads) ||
This is because source_pad=2, source->num_pads=2.
[ question 2 ]
I think gmsl-max9286.c is virtual channel 4ch. With this 4ch setting, no exception occurs, but is it okay to use the 4ch setting even with 2ch output?
All suggestions welcome.
Best regards.