Skip to content

20260211/q1.1.1a - initial d4xx-max96724 implementation for Intel IPU6 and IPU7#5

Draft
Pirouf wants to merge 79 commits intointel:mainfrom
Pirouf:20260211/Q1.1.1a-d4xx-max9672x
Draft

20260211/q1.1.1a - initial d4xx-max96724 implementation for Intel IPU6 and IPU7#5
Pirouf wants to merge 79 commits intointel:mainfrom
Pirouf:20260211/Q1.1.1a-d4xx-max9672x

Conversation

@Pirouf
Copy link

@Pirouf Pirouf commented Mar 5, 2026

  • d4xx-max96724 : intial implementation for intel IPU6 and IPU7
root@eci-rvp-ptl-gmsl-4:~/intel-mipi-gmsl-modules-20260115# ./helpers/rs-enum-ipu.sh -n
Bus     Camera  Sensor  Node Type       Video Node      RS Link
 ipu7   a-2     ir      Inactive        /dev/video37    /dev/video-rs-ir-8
 ipu7   a-2     depth   Stream(id=0)    /dev/video33    /dev/video-rs-depth-8
 ipu7   a-2     imu     Inactive        /dev/video38    /dev/video-rs-imu-8
 ipu7   a-2     color   Stream(id=2)    /dev/video35    /dev/video-rs-color-8
 i2c    a-2     d4xx    Firmware        /dev/d4xx-dfu-a-2       /dev/d4xx-dfu-8
 ipu7   b-2     ir      Inactive        /dev/video43    /dev/video-rs-ir-9
 ipu7   b-2     depth   Stream(id=6)    /dev/video39    /dev/video-rs-depth-9
 ipu7   b-2     imu     Inactive        /dev/video44    /dev/video-rs-imu-9
 ipu7   b-2     color   Stream(id=8)    /dev/video41    /dev/video-rs-color-9
 i2c    b-2     d4xx    Firmware        /dev/d4xx-dfu-b-2       /dev/d4xx-dfu-9
 ipu7   c-2     ir      Inactive        /dev/video45    /dev/video-rs-ir-10
 ipu7   c-2     depth   Stream(id=1)    /dev/video34    /dev/video-rs-depth-10
 ipu7   c-2     imu     Inactive        /dev/video46    /dev/video-rs-imu-10
 ipu7   c-2     color   Stream(id=3)    /dev/video36    /dev/video-rs-color-10
 i2c    c-2     d4xx    Firmware        /dev/d4xx-dfu-c-2       /dev/d4xx-dfu-10
 ipu7   d-2     ir      Inactive        /dev/video47    /dev/video-rs-ir-11
 ipu7   d-2     depth   Stream(id=7)    /dev/video40    /dev/video-rs-depth-11
 ipu7   d-2     imu     Inactive        /dev/video48    /dev/video-rs-imu-11
 ipu7   d-2     color   Stream(id=9)    /dev/video42    /dev/video-rs-color-11
 i2c    d-2     d4xx    Firmware        /dev/d4xx-dfu-d-2       /dev/d4xx-dfu-11

root@eci-rvp-ptl-gmsl-4:~/intel-mipi-gmsl-modules-20260115# rs-enumerate-devices -S
Device Name                   Serial Number       Firmware Version
Intel RealSense D457          241122303302        5.17.0.10
Intel RealSense D457          242422303692        5.17.0.10
Intel RealSense D457          242422304793        5.17.0.10
Intel RealSense D457          242422303456        5.17.0.10
Device info:
    Name                          :     Intel RealSense D457
    Serial Number                 :     241122303302
    Firmware Version              :     5.17.0.10
    Recommended Firmware Version  :     5.17.0.9
    Physical Port                 :     /dev/video-rs-depth-10
    Debug Op Code                 :     15
    Advanced Mode                 :     YES
    Product Id                    :     ABCD
    Camera Locked                 :     YES
    Product Line                  :     D400
    Asic Serial Number            :     321543110732
    Firmware Update Id            :     321543110732
    Dfu Device Path               :     /dev/d4xx-dfu-10
    Connection Type               :     GMSL

Device info:
    Name                          :     Intel RealSense D457
    Serial Number                 :     242422303692
    Firmware Version              :     5.17.0.10
    Recommended Firmware Version  :     5.17.0.9
    Physical Port                 :     /dev/video-rs-depth-11
    Debug Op Code                 :     15
    Advanced Mode                 :     YES
    Product Id                    :     ABCD
    Camera Locked                 :     YES
    Product Line                  :     D400
    Asic Serial Number            :     250343111497
    Firmware Update Id            :     250343111497
    Dfu Device Path               :     /dev/d4xx-dfu-11
    Connection Type               :     GMSL

Device info:
    Name                          :     Intel RealSense D457
    Serial Number                 :     242422304793
    Firmware Version              :     5.17.0.10
    Recommended Firmware Version  :     5.17.0.9
    Physical Port                 :     /dev/video-rs-depth-8
    Debug Op Code                 :     15
    Advanced Mode                 :     YES
    Product Id                    :     ABCD
    Camera Locked                 :     YES
    Product Line                  :     D400
    Asic Serial Number            :     252143110007
    Firmware Update Id            :     252143110007
    Dfu Device Path               :     /dev/d4xx-dfu-8
    Connection Type               :     GMSL

Device info:
    Name                          :     Intel RealSense D457
    Serial Number                 :     242422303456
    Firmware Version              :     5.17.0.10
    Recommended Firmware Version  :     5.17.0.9
    Physical Port                 :     /dev/video-rs-depth-9
    Debug Op Code                 :     15
    Advanced Mode                 :     YES
    Product Id                    :     ABCD
    Camera Locked                 :     YES
    Product Line                  :     D400
    Asic Serial Number            :     245543111541
    Firmware Update Id            :     245543111541
    Dfu Device Path               :     /dev/d4xx-dfu-9
    Connection Type               :     GMSL

root@eci-rvp-ptl-gmsl-4:~/intel-mipi-gmsl-modules-20260115# media-ctl -d /dev/media0 -e "Intel IPU7 CSI2 2" -p
Media controller API version 6.17.2

Media device information
------------------------
driver          intel-ipu7
model           ipu7
serial
bus info        PCI:0000:00:05.0
hw revision     0x80867270
driver version  6.17.2

- entity 293: Intel IPU7 CSI2 2 (17 pads, 20 links, 16 routes)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev2
        routes:
                0/0 -> 1/0 [ACTIVE]
                0/2 -> 3/2 [ACTIVE]
                0/4 -> 5/4 [INACTIVE]
                0/5 -> 6/5 [INACTIVE]
                0/6 -> 7/6 [ACTIVE]
                0/8 -> 9/8 [ACTIVE]
                0/10 -> 11/10 [INACTIVE]
                0/11 -> 12/11 [INACTIVE]
                0/1 -> 2/1 [ACTIVE]
                0/3 -> 4/3 [ACTIVE]
                0/12 -> 13/12 [INACTIVE]
                0/13 -> 14/13 [INACTIVE]
                0/7 -> 8/7 [ACTIVE]
                0/9 -> 10/9 [ACTIVE]
                0/14 -> 15/14 [INACTIVE]
                0/15 -> 16/15 [INACTIVE]
        pad0: SINK,MUST_CONNECT
                [stream:0 fmt:UYVY8_1X16/640x480 field:none]
                [stream:2 fmt:YUYV8_1X16/640x480 field:none]
                [stream:6 fmt:UYVY8_1X16/640x480 field:none]
                [stream:8 fmt:YUYV8_1X16/640x480 field:none]
                [stream:1 fmt:UYVY8_1X16/640x480 field:none]
                [stream:3 fmt:YUYV8_1X16/640x480 field:none]
                [stream:7 fmt:UYVY8_1X16/640x480 field:none]
                [stream:9 fmt:YUYV8_1X16/640x480 field:none]
                <- "DS5 mux a-2":0 [ENABLED,IMMUTABLE]
                <- "DS5 mux b-2":0 [ENABLED,IMMUTABLE]
                <- "DS5 mux c-2":0 [ENABLED,IMMUTABLE]
                <- "DS5 mux d-2":0 [ENABLED,IMMUTABLE]
        pad1: SOURCE
                [stream:0 fmt:UYVY8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 32":0 [ENABLED]
        pad2: SOURCE
                [stream:1 fmt:UYVY8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 33":0 [ENABLED]
        pad3: SOURCE
                [stream:2 fmt:YUYV8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 34":0 [ENABLED]
        pad4: SOURCE
                [stream:3 fmt:YUYV8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 35":0 [ENABLED]
        pad5: SOURCE
                -> "Intel IPU7 ISYS Capture 36":0 [ENABLED]
        pad6: SOURCE
                -> "Intel IPU7 ISYS Capture 37":0 [ENABLED]
        pad7: SOURCE
                [stream:6 fmt:UYVY8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 38":0 [ENABLED]
        pad8: SOURCE
                [stream:7 fmt:UYVY8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 39":0 [ENABLED]
        pad9: SOURCE
                [stream:8 fmt:YUYV8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 40":0 [ENABLED]
        pad10: SOURCE
                [stream:9 fmt:YUYV8_1X16/640x480 field:none
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "Intel IPU7 ISYS Capture 41":0 [ENABLED]
        pad11: SOURCE
                -> "Intel IPU7 ISYS Capture 42":0 [ENABLED]
        pad12: SOURCE
                -> "Intel IPU7 ISYS Capture 43":0 [ENABLED]
        pad13: SOURCE
                -> "Intel IPU7 ISYS Capture 44":0 [ENABLED]
        pad14: SOURCE
                -> "Intel IPU7 ISYS Capture 45":0 [ENABLED]
        pad15: SOURCE
                -> "Intel IPU7 ISYS Capture 46":0 [ENABLED]
        pad16: SOURCE
                -> "Intel IPU7 ISYS Capture 47":0 [ENABLED]

Pirouf and others added 30 commits March 5, 2026 10:18
* 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>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
This change is to extract correct kernel version from BKC naming.

Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
DRIVER_VERSION_SUFFIX dkms version suffix will be passed to kernel module version.

Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
Baseline on c8029a6769b4a1c0f6e051cc226c48ac08e41949

Signed-off-by: Khai Wen Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
Signed-off-by: Khai Wen, Ng <khai.wen.ng@intel.com>
IPU6 on K6.12, IPU7 on K6.17

Signed-off-by: Khai Wen, Ng <khai.wen.ng@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
* v4l2-core : workaround ar0234 v4l2-cci deps missing on linux-lts 6.12 images

Signed-off-by: florent pirou <florent.pirou@intel.com>
* ipu6-isys, ipu7-isys: add d4xx video VIDIOC_S_EXT_CTRLS by streamid, add d4xx frame fmt
* dkms: avoid dh_source issues
* isys-video: ignore default raw colorspace that can not be overritten by v4l2src gst plugin
```
gst-launch-1.0 -e -v  v4l2src device=/dev/video-rs-color-0 ! 'video/x-raw, width=640, height=480, format=YUY2, pixel-aspect-ratio=1/1' ! videoconvert ! fakesink
```
* ipu6-isys, ipu7-isys: 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>
* 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>
Arun-Prasad-V and others added 15 commits March 5, 2026 10:59
…s (#285)

* Added err and dmesg in ds5_get_hwmc if response length is 0
* Added comments and replaced hard coded HWMC addresses
* Add D41x support
* Fix D41x resolutions
* Relax Start stream TO
* Use only ds5_[raw]_<read/write> wrapper and not regmap_raw_<read/write> directly
Signed-off-by: florent pirou <florent.pirou@intel.com>
* assume d457 fw 5.16.0 or higher by default
* fix d4xx binding and v4l2 streamid mapping
* fix rs-depth Z16 pixel-format error
* add d4xx to udev rules
* d4xx bind media controller reset
* force d4xx isys vidcap in video group
* add d4xx module param max96724 csi mapping
* derive stream sink and source from isys pad index
* workaround csi subdev sink stream d4xx format mismatch
* fix d4xx C and D set_fmt
* manage inactive routes during binding
* helper: ignore pad fmt init on d4x inactive routes
* helper: activate all sensor routes for d4xx single camera binding
* helpers: detect d4xx vidcap with inactive routes
* helpers: fix d4xx media-ctl link binding syntaxe
* helpers: workaround the GMSL D eight active route per-csi2 limit
* helpers: bind all d4xx sensors if singular camera

Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
@Pirouf Pirouf changed the title 20260211/q1.1.1a d4xx max9672x 20260211/q1.1.1a - initial d4xx-max96724 implementation for Intel IPU6 and IPU7 Mar 5, 2026
@Pirouf Pirouf marked this pull request as draft March 5, 2026 19:06
@Pirouf Pirouf force-pushed the 20260211/Q1.1.1a-d4xx-max9672x branch 3 times, most recently from 37da0d9 to f41d409 Compare March 6, 2026 12:32
Pirouf and others added 8 commits March 20, 2026 04:20
Signed-off-by: florent pirou <florent.pirou@intel.com>
Signed-off-by: florent pirou <florent.pirou@intel.com>
… walk

* ipu7-isys: fetch csi-phy frame desc walking through all active routes
* ipu7-isys: clear csi phy frame desc
* ipu7-isys, ipu6-isys: fix Y8I css pixelformat
* ipu7-isys: workaround csi2 unsupported YUYV8_1X16 css pixelformat

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

* d4xx-max96724: control pipe set and reset per deser link source
* d4xx-max96724: enable csi output right after set pipes
* d4xx-max96724: disable max96712 legacy-mode compile option
* d4xx-max96724: reduce i2c channel-control scope, add src-link pipe aggregation

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>
* debian: initial dpkg rules, control and debconf
* submodule: Pin IPU6 drivers depends to 71e2e426f3e16f8bc42bf2f88a21fa95eeca5923
* submodule: Pin IPU7 drivers depends to 57304c286317ece4c0a74a52c4733486c57444ce
* dkms: remove one-size-don't-fit-all dkms conf
* README: rewrite the cumbersome getting started
* patches: WA `media-ctl` 1-digit stream-id limitation on `v4l-utils` v1.32 latest stable

Signed-off-by: florent pirou <florent.pirou@intel.com>
@Pirouf Pirouf force-pushed the 20260211/Q1.1.1a-d4xx-max9672x branch from f41d409 to 58fbc0a Compare March 20, 2026 14:31
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.

9 participants