Skip to content

d4xx : initial max9296 and max96724 IPU6/IPU7 support#3

Open
Pirouf wants to merge 55 commits intointel:mainfrom
Pirouf:20260112/add-d4xx-support
Open

d4xx : initial max9296 and max96724 IPU6/IPU7 support#3
Pirouf wants to merge 55 commits intointel:mainfrom
Pirouf:20260112/add-d4xx-support

Conversation

@Pirouf
Copy link

@Pirouf Pirouf commented Jan 20, 2026

* ipu-acpi: Copy ipu-acpi over from ipu6-drivers

Baseline commit c8029a6769b4a1c0f6e051cc226c48ac08e41949

Signed-off-by: hepengpx <pengpengx.he@intel.com>
Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
* media, i2c: build  dkms modules
* media: i2c: Copy over max9x from ipu6-drivers

Baseline on c8029a6769b4a1c0f6e051cc226c48ac08e41949

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
…pi v6.12, v6.17 and v6.18 support

Debian dkms build all dependencies from `ipu6-drivers` and `ipu7-drivers` github repositories
based of baseline PTL release for iot on 2025-12-30.

The upstream linux v6.12, v6.17 and v6.18 `v4l2-core` layers exact copies are maintained here to
allow `v4l2_subdev_enable_streams_api=true` support
(`=false` by default in kernel.org and Canonical Ubuntu)

* dkms: use ipu6-drivers and ipu7-drivers git-submodule to build ISYS and PSYS depends
* dkms : allow both with intel-lts and canonical linux headers
* v4l2-core : add v6.17 v4l2_subdev_enable_streams_api support
* v4l2-core : add v6.12 v4l2_subdev_enable_streams_api support
* ipu6-isys : add intel-lts out-of-tree patches
* ipu7-isys : add video VIDIOC_S_EXT_CTRLS callbacks by streamid
* ipu7-isys : add d4xx pixel format support
* ipu7-isys : allow virtual-channels on 16 csi2 input video capture
* v4l2-core : workaround ar0234 v4l2-cci deps missing on linux-lts 6.12 images

Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
@Pirouf Pirouf force-pushed the 20260112/add-d4xx-support branch from f95a8b5 to 5750d8c Compare January 27, 2026 14:23
Pirouf pushed a commit to Pirouf/Intel-mipi-gmsl-modules that referenced this pull request Jan 27, 2026
* d4xx: kernel6 intel#3 dmipx/ipu6-drivers@15ddce4
* d4xx: kernel6 intel#2 dmipx/ipu6-drivers@e113eca
* d4xx: kernel6 dmipx/ipu6-drivers@7726252

Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com>
Pirouf pushed a commit to Pirouf/Intel-mipi-gmsl-modules that referenced this pull request Jan 27, 2026
* max929x: backported kernel6 intel#3 dmipx/ipu6-drivers@cd6786f
* max929x: backported kernel6 intel#2  dmipx/ipu6-drivers@6883c69
* max929x: backported kernel6 dmipx/ipu6-drivers@f5caff7

Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com>
Pirouf pushed a commit to Pirouf/Intel-mipi-gmsl-modules that referenced this pull request Jan 27, 2026
* max929x: backported kernel6 intel#3 dmipx/ipu6-drivers@cd6786f
* max929x: backported kernel6 intel#2  dmipx/ipu6-drivers@6883c69
* max929x: backported kernel6 dmipx/ipu6-drivers@f5caff7

Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com>
@Pirouf Pirouf force-pushed the 20260112/add-d4xx-support branch 3 times, most recently from 660d921 to 087c638 Compare January 28, 2026 10:19
Pirouf and others added 17 commits January 29, 2026 22:35
Signed-off-by: florent pirou <florent.pirou@intel.com>
* maintain intel-ipu6-dkms (20250703+iotgipu6-0eci1) backward compat

Signed-off-by: florent pirou <florent.pirou@intel.com>
RealSense PRQ d4xx version is 1.0.1.20.
- support for sensor vc.
- support for sensor state.
- sensor own v4l2 controls.
- max9295/6 serdes drivers and control for multiple pipe.
- aggregation support

Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
* d4xx: kernel6 intel#3 dmipx/ipu6-drivers@15ddce4
* d4xx: kernel6 intel#2 dmipx/ipu6-drivers@e113eca
* d4xx: kernel6 dmipx/ipu6-drivers@7726252

Signed-off-by: Dmitry Perchanov <dmitry.perchanov@intel.com>
* Kernel 6.6.15 release for Ubuntu (#216)

Signed-off-by: zouxiaoh <xiaohong.zou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
ref-by: https://patches.linaro.org/project/linux-media/patch/20231213140450.21359-3-laurent.pinchart@ideasonboard.com/

The subdev .[gs]_frame_interval are video operations, but they operate
on pads (and even on streams). Not only is this confusing, it causes
practical issues for drivers as the operations don't receive a subdev
state pointer, requiring manual state handling.

To improve the situation, turn the operations into pad operations, and
extend them to receive a state pointer like other pad operations.

While at it, rename the operations to .[gs]et_frame_interval at the same
time to match the naming scheme of other pad operations. This isn't
strictly necessary, but given that all drivers using those operations
need to be modified, handling the rename separately would generate more
churn for very little gain (if at all).

Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
* enable `v4l2-ctl --set-ctrl v4l2_cid_link_freq=` runtime override
* add D4XX_LINK_FREQ_750MHZ to MTL CSI D-PHY
* add MTL CSI2 D-PHY debug messages

Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
* d4xx :  kernel NULL pointer dereference

[ 1950.081452] #PF: supervisor write access in kernel mode
[ 1950.086655] #PF: error_code(0x0002) - not-present page
[ 1950.216966] Call Trace:
[ 1950.219401]  <TASK>
[ 1950.221504]  ? show_regs+0x6d/0x80
[ 1950.224902]  ? __die+0x24/0x80
[ 1950.227952]  ? page_fault_oops+0x99/0x1b0
[ 1950.231948]  ? do_user_addr_fault+0x31d/0x6b0
[ 1950.236283]  ? exc_page_fault+0x83/0x1b0
[ 1950.240190]  ? asm_exc_page_fault+0x27/0x30
[ 1950.244358]  ? mutex_lock+0x1d/0x50
[ 1950.247827]  ? mutex_lock+0x12/0x50
[ 1950.251301]  max9296_reset_control+0x26/0xf0 [max9296]
[ 1950.256425]  ds5_remove+0xba/0x2e0 [d4xx]
[ 1950.260423]  i2c_device_remove+0x25/0xc0
[ 1950.264338]  device_remove+0x40/0x80
[ 1950.267899]  device_release_driver_internal+0x20b/0x270
[ 1950.273096]  driver_detach+0x4a/0xa0
[ 1950.276655]  bus_remove_driver+0x83/0x110
[ 1950.280641]  driver_unregister+0x2f/0x60
[ 1950.284542]  i2c_del_driver+0x46/0x90
[ 1950.288191]  ds5_i2c_driver_exit+0x10/0x18 [d4xx]

Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Josh Watts and others added 14 commits January 29, 2026 22:35
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
* deserializer link setup graceful fallback when no csi-link aggregation is possible (e.g. serializer not responding)

```
[   75.854983] d4xx 2-0012: configure GMSL port B
[   76.092278] max9295 2-0064: max9295_setup_control: update address reassignment 0x40->0x64
[   76.100995] max9295 2-0064: max9295_write_reg:i2c write failed, 0x0 = c8
[   76.108082] max9295 2-0064: max9295_write_reg:i2c write failed, 0x10 = 22
[   76.115152] max9295 2-0064: max9295_setup_control: ERROR: ser device not found
[   76.122556] d4xx 2-0012: gmsl serializer invalid source
[   76.127955] max9296 2-0048: max9296_setup_control: set SerDes GMSL A & B dual-link)
[   76.244858] max9296 2-0048: max9296_setup_control:  checking serializer sources (count/ref=1/2 -> src[1]=GMSL B)
[   76.255190] max9296 2-0048: max9296_setup_control: restore SerDes GMSL A single-link
[   76.372275] d4xx 2-0012: gmsl serdes setup gracefully fallback
[   76.378294] d4xx 2-0012: max9295 communication failed : -524
[   76.384156] max9295 2-0064: [MAX9295]: remove GMSL Serializer
[   76.390186] d4xx: probe of 2-0012 failed with error -524
[   76.395939] intel-ipu6-isys intel-ipu6-isys0: can't create new i2c subdev
```

Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
…y api

* d4xx: compile ipu7 and ipu6  isys-video
* d4xx: add sensor subdev stream set/get fmt ops
* d4xx: add mux subdev stream set/get fmt ops
* d4xx: add mux enable and disable streams v4l2 ops
* d4xx: make modules suffix versioning same as dkms

Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
* d4xx : add max96724 Deserializer support
* d4xx : add max96712/max96722 Deserializer support
+------------------------------------------------------------------------+
|                   MAX967xx Deserializer                                |
+------------------------------------------------------------------------+
| GMSL2 Input Side                MIPI CSI-2 Output Side                 |
| ___________________             ______________________                 |
|                                                                        |
| Link A ─┬─ Pipe X ──┐                                                  |
|         ├─ Pipe Y   |                                                  |
|         ├─ Pipe Z   |  VIDEO_PIPE_SEL    Video Pipe Mapping   MIPI PHY |
|         └─ Pipe U   |  (0x00F0/0x00F1)   (0x090B-0x09CB)      Output   |
|                     |                                                  |
| Link B ─┬─ Pipe X ──┼─────────────────► Pipe 0 ──► VC0 ──┐             |
|         ├─ Pipe Y   |                                    |             |
|         ├─ Pipe Z   |                   Pipe 1 ──► VC1 ──┤             |
|         └─ Pipe U   |                                    | ──► CPHY0+1  ──► IPU7 CPHY0+PHY1
|                     |                   Pipe 2 ──► VC2 ──┤    x4-lanes |
| Link C ─┬─ Pipe X ──┤                                    |    (csi2-0) |
|         ├─ Pipe Y   |                   Pipe 3 ──► VC3 ──┘             |
|         ├─ Pipe Z   |                                                  |
|         └─ Pipe U   |                                                  |
|                     |                                                  |
| Link D ─┬─ Pipe X ──┘                                                  |
|         ├─ Pipe Y                                                      |
|         ├─ Pipe Z                                                      |
|         └─ Pipe U                                                      |
+------------------------------------------------------------------------+

Signed-off-by: Florent Pirou <florent.pirou@intel.com>
```
[   68.734388] d4xx 1-0012: ds5_read(): i2c read 0x5020: 0xdead
[   68.734390] d4xx 1-0012: ds5_chrdev_init()
[   68.734411] sysfs: cannot create duplicate filename '/devices/virtual/d4xx-class/D4XX d4xx-dfu a-'
[   68.734413] CPU: 6 UID: 0 PID: 2327 Comm: modprobe Tainted: G        W  OE       6.17.0-1006-oem #6-Ubuntu PREEMPT(voluntary)
[   68.734415] Tainted: [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
[   68.734416] Hardware name: Intel Corporation Panther Lake Client Platform/PTL-UH DDR5 Embedded CRB, BIOS PTLPFWI1.R00.3332.D52.2509040547 09/04/2025
[   68.734417] Call Trace:
[   68.734418]  <TASK>
[   68.734421]  dump_stack_lvl+0x76/0xa0
[   68.734425]  dump_stack+0x10/0x20
[   68.734426]  sysfs_warn_dup+0x8a/0xb0
[   68.734430]  sysfs_create_dir_ns+0xde/0xf0
[   68.734433]  kobject_add_internal+0xa8/0x2f0
[   68.734436]  kobject_add+0x92/0x100
[   68.734437]  ? get_device_parent+0xd0/0x210
[   68.734441]  device_add+0xdf/0x720
[   68.734443]  device_create_groups_vargs+0x118/0x140
[   68.734445]  device_create+0x50/0x80
[   68.734450]  ds5_probe+0xcbd/0x17f0 [d4xx]
[   68.734455]  i2c_device_probe+0x198/0x390
[   68.734457]  really_probe+0xee/0x3c0
[   68.734459]  __driver_probe_device+0x8c/0x180
[   68.734461]  driver_probe_device+0x24/0xd0
[   68.734462]  __device_attach_driver+0xcd/0x170
[   68.734463]  ? __pfx___device_attach_driver+0x10/0x10
[   68.734464]  bus_for_each_drv+0x93/0xf0
[   68.734465]  __device_attach+0xb5/0x1d0
[   68.734467]  device_initial_probe+0x13/0x20
[   68.734468]  bus_probe_device+0x9f/0xb0
[   68.734469]  device_add+0x511/0x720
[   68.734470]  device_register+0x1a/0x30
[   68.734472]  i2c_new_client_device+0x209/0x460
[   68.734474]  v4l2_i2c_new_subdev_board+0x5e/0x100 [videodev]
[   68.734486]  isys_probe+0xa23/0xd90 [intel_ipu7_isys]
[   68.734493]  ? __pfx_isys_probe+0x10/0x10 [intel_ipu7_isys]
[   68.734497]  auxiliary_bus_probe+0x3e/0xa0
[   68.734499]  really_probe+0xee/0x3c0
[   68.734500]  __driver_probe_device+0x8c/0x180
[   68.734501]  driver_probe_device+0x24/0xd0
[   68.734503]  __driver_attach+0x10b/0x210
[   68.734504]  ? __pfx___driver_attach+0x10/0x10
[   68.734505]  bus_for_each_dev+0x89/0xf0
[   68.734506]  driver_attach+0x1e/0x30
[   68.734507]  bus_add_driver+0x14e/0x290
[   68.734508]  driver_register+0x5e/0x130
[   68.734510]  __auxiliary_driver_register+0x73/0xf0
[   68.734511]  ? __pfx_isys_driver_init+0x10/0x10 [intel_ipu7_isys]
[   68.734516]  isys_driver_init+0x23/0xff0 [intel_ipu7_isys]
[   68.734519]  do_one_initcall+0x5a/0x340
[   68.734522]  do_init_module+0x97/0x2c0
[   68.734526]  load_module+0x99c/0xac0
[   68.734527]  init_module_from_file+0x95/0x100
[   68.734529]  idempotent_init_module+0x10f/0x300
[   68.734531]  __x64_sys_finit_module+0x73/0xe0
[   68.734533]  x64_sys_call+0x1784/0x2680
[   68.734534]  do_syscall_64+0x80/0xa20
[   68.734537]  ? __rseq_handle_notify_resume+0x36/0x70
[   68.734540]  ? arch_exit_to_user_mode_prepare.isra.0+0xc2/0xe0
[   68.734541]  ? do_syscall_64+0xb6/0xa20
[   68.734543]  ? putname+0x65/0x90
[   68.734546]  ? do_sys_openat2+0xa2/0xf0
[   68.734549]  ? __x64_sys_openat+0x54/0xa0
[   68.734550]  ? arch_exit_to_user_mode_prepare.isra.0+0xd/0xe0
[   68.734552]  ? do_syscall_64+0xb6/0xa20
[   68.734553]  ? arch_exit_to_user_mode_prepare.isra.0+0xd/0xe0
[   68.734554]  ? do_syscall_64+0xb6/0xa20
[   68.734555]  ? exc_page_fault+0x90/0x1b0
[   68.734556]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   68.734558] RIP: 0033:0x79620e92728d
[   68.734560] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 5b bb 0d 00 f7 d8 64 89 01 48
[   68.734561] RSP: 002b:00007ffcdc3577e8 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[   68.734562] RAX: ffffffffffffffda RBX: 000055d7420a7340 RCX: 000079620e92728d
[   68.734563] RDX: 0000000000000004 RSI: 000055d7420b21a0 RDI: 0000000000000010
[   68.734564] RBP: 00007ffcdc3578a0 R08: 0000000000000040 R09: 00007ffcdc357830
[   68.734564] R10: 000079620ea03b20 R11: 0000000000000246 R12: 000055d7420b21a0
[   68.734565] R13: 0000000000040000 R14: 000055d7420a7070 R15: 000055d7420b21a0
[   68.734566]  </TASK>
[   68.734566] kobject: kobject_add_internal failed for D4XX d4xx-dfu a- with -EEXIST, don't try to register things with the same name in the same directory.
[   68.734574] d4xx 1-0012: Could not create device
[   68.734592] d4xx 1-0012: graceful fallback due to unresponsive d4xx, isolated SerDes GMSL A single-link
[   68.734593] d4xx 1-0012: remove unresponding serializer i2c device 0x42

```

Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
* helpers: bind d4xx either from ipu6 or ipu7, extend ipu6 upto csi port 5

Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
@Pirouf Pirouf force-pushed the 20260112/add-d4xx-support branch from 677761a to 6a7930b Compare January 29, 2026 22:36
Pirouf added 15 commits February 2, 2026 09:42
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
* d4xx : fix librealsense2 v4l2 backend pipeline config `rs2_pipeline_start_with_config` call returns an error in rs-depth Z16 pixel-format
```
There are 1 connected RealSense devices.

Using device 0, an Intel RealSense D457
    Serial number: 242422303456
    Firmware version: 5.13.1.53

The connected device doesn't support depth streaming!
```
Signed-off-by: Florent Pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
…start

Signed-off-by: florent pirou <florent.pirou@intel.com>
…i output enable

Signed-off-by: florent pirou <florent.pirou@intel.com>
…e csi output enable

Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
…reset

Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants