[PATCH 0/7][SRU][OEM-5.10] Add Intel IPU6 driver

You-Sheng Yang vicamo.yang at canonical.com
Fri Mar 26 06:44:00 UTC 2021


BugLink: https://bugs.launchpad.net/bugs/1921345

[Impact]

There are new platforms with MIPI camera based on Intel IPU6(Imaging
Processing Unit version 6) currently unsupported in Ubuntu.

[Fix]

Intel IPU6 can be enabled by integration of following kernel driver,
firmware, userspace HAL libraries as well as a GStreamer source element:

  * https://github.com/intel/ipu6-drivers
  * https://github.com/intel/ipu6-camera-bins
  * https://github.com/intel/ipu6-camera-hal
  * https://github.com/intel/icamerasrc

This patchset took kernel patches from intel/ipu6-drivers.

[Test Case]

With kernel/firmware properly installed, the hardware should be ready for
further development:

  $ dmesg | grep ipu
  intel-ipu6 intel-ipu: enabling device (0000 -> 0002)
  intel-ipu6 intel-ipu: Device 0x9a19 (rev: 0x1)
  intel-ipu6 intel-ipu: physical base address 0x6054000000
  intel-ipu6 intel-ipu: mapped as: 0x0000000097793328
  intel-ipu6 intel-ipu: IPU in secure mode
  intel-ipu6 intel-ipu: IPC reset done
  intel-ipu6 intel-ipu: cpd file name: intel/ipu6_fw.bin
  intel-ipu6 intel-ipu: FW version: 20201222
  intel-ipu6 intel-ipu: Sending BOOT_LOAD to CSE
  intel-ipu6 intel-ipu: Sending AUTHENTICATE_RUN to CSE
  intel-ipu6 intel-ipu: CSE authenticate_run done
  intel-ipu6 intel-ipu: IPU driver version 1.0
  intel-ipu6-psys intel-ipu6-psys0: pkg_dir entry count:8
  intel-ipu6-psys intel-ipu6-psys0: psys probe minor: 0
  intel-ipu6-isys intel-ipu6-isys0: bind ov01a1s 20-0036 nlanes is 1
port is 1
  intel-ipu6-isys intel-ipu6-isys0: All sensor registration completed.
  intel-ipu6-isys intel-ipu6-isys0: stream on ov01a1s 20-0036

There should be nearly 24 video4linux devices created under /dev.

[Where problems could occur]

MIPI camera through Intel IPU6 takes also firmware blobs loaded in
runtime from user space, addtional softwares are also required to
fully enable it for oridinary use. The exposed video devices are hidden
from general users and a relay daemon+v4l2loopback is used to enable
use from existing applications.

>From kernel's point of view, there is still a known issue that it takes
root priviledge to access these devices.

[Other Info]

So far Intel has no plan to commit this driver to upstream yet, so it's
only nominated for oem-5.10. It will only be nominated to generic
kernels when the plan/requirements have changed.

The original driver Kconfig would disable VIDEO_IPU3_CIO2, but that's
reverted to avoid unnecessary changes to existing users.

Wang Yating (6):
  intel ipu drivers first release
  IPU driver release WW48
  IPU driver release WW48 with MCU
  IPU driver release WW52
  IPU driver release WW04
  UBUNTU: SAUCE: integrate IPU6 builds

You-Sheng Yang (1):
  UBUNTU: [Config] updateconfigs for IPU6 driver

 debian.oem/config/config.common.ubuntu        |    6 +
 drivers/media/i2c/Kconfig                     |   33 +
 drivers/media/i2c/Makefile                    |    4 +
 drivers/media/i2c/hm11b1.c                    | 1366 +++++++++++++
 drivers/media/i2c/ov01a1s.c                   |  935 +++++++++
 drivers/media/i2c/pmic_dsc1.c                 |  158 ++
 drivers/media/i2c/pmic_dsc1.h                 |   33 +
 drivers/media/pci/Kconfig                     |    2 +-
 drivers/media/pci/intel/Kconfig               |   32 +
 drivers/media/pci/intel/Makefile              |   11 +-
 drivers/media/pci/intel/ipu-bus.c             |  255 +++
 drivers/media/pci/intel/ipu-bus.h             |   67 +
 drivers/media/pci/intel/ipu-buttress.c        | 1399 +++++++++++++
 drivers/media/pci/intel/ipu-buttress.h        |  129 ++
 drivers/media/pci/intel/ipu-cpd.c             |  465 +++++
 drivers/media/pci/intel/ipu-cpd.h             |  110 +
 drivers/media/pci/intel/ipu-dma.c             |  409 ++++
 drivers/media/pci/intel/ipu-dma.h             |   19 +
 drivers/media/pci/intel/ipu-fw-com.c          |  496 +++++
 drivers/media/pci/intel/ipu-fw-com.h          |   48 +
 drivers/media/pci/intel/ipu-fw-isys.c         |  700 +++++++
 drivers/media/pci/intel/ipu-fw-isys.h         |  826 ++++++++
 drivers/media/pci/intel/ipu-fw-psys.c         |  433 ++++
 drivers/media/pci/intel/ipu-fw-psys.h         |  394 ++++
 .../media/pci/intel/ipu-isys-csi2-be-soc.c    |  293 +++
 drivers/media/pci/intel/ipu-isys-csi2-be.c    |  325 +++
 drivers/media/pci/intel/ipu-isys-csi2-be.h    |   66 +
 drivers/media/pci/intel/ipu-isys-csi2.c       |  662 ++++++
 drivers/media/pci/intel/ipu-isys-csi2.h       |  164 ++
 drivers/media/pci/intel/ipu-isys-media.h      |   77 +
 drivers/media/pci/intel/ipu-isys-queue.c      | 1062 ++++++++++
 drivers/media/pci/intel/ipu-isys-queue.h      |  142 ++
 drivers/media/pci/intel/ipu-isys-subdev.c     |  657 ++++++
 drivers/media/pci/intel/ipu-isys-subdev.h     |  153 ++
 drivers/media/pci/intel/ipu-isys-tpg.c        |  311 +++
 drivers/media/pci/intel/ipu-isys-tpg.h        |   99 +
 drivers/media/pci/intel/ipu-isys-video.c      | 1768 +++++++++++++++++
 drivers/media/pci/intel/ipu-isys-video.h      |  181 ++
 drivers/media/pci/intel/ipu-isys.c            | 1473 ++++++++++++++
 drivers/media/pci/intel/ipu-isys.h            |  237 +++
 drivers/media/pci/intel/ipu-mmu.c             |  787 ++++++++
 drivers/media/pci/intel/ipu-mmu.h             |   67 +
 drivers/media/pci/intel/ipu-pdata.h           |  255 +++
 drivers/media/pci/intel/ipu-psys-compat32.c   |  226 +++
 drivers/media/pci/intel/ipu-psys.c            | 1617 +++++++++++++++
 drivers/media/pci/intel/ipu-psys.h            |  218 ++
 drivers/media/pci/intel/ipu-trace.c           |  882 ++++++++
 drivers/media/pci/intel/ipu-trace.h           |  312 +++
 drivers/media/pci/intel/ipu.c                 |  813 ++++++++
 drivers/media/pci/intel/ipu.h                 |  106 +
 drivers/media/pci/intel/ipu6/Makefile         |   62 +
 .../media/pci/intel/ipu6/ipu-fw-resources.c   |  103 +
 .../intel/ipu6/ipu-platform-buttress-regs.h   |  317 +++
 .../intel/ipu6/ipu-platform-isys-csi2-reg.h   |  277 +++
 .../media/pci/intel/ipu6/ipu-platform-isys.h  |   26 +
 .../media/pci/intel/ipu6/ipu-platform-psys.h  |   78 +
 .../media/pci/intel/ipu6/ipu-platform-regs.h  |  333 ++++
 .../pci/intel/ipu6/ipu-platform-resources.h   |  102 +
 drivers/media/pci/intel/ipu6/ipu-platform.h   |   33 +
 drivers/media/pci/intel/ipu6/ipu-resources.c  |  861 ++++++++
 .../media/pci/intel/ipu6/ipu6-fw-resources.c  |  582 ++++++
 drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c |  513 +++++
 drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h |   14 +
 drivers/media/pci/intel/ipu6/ipu6-isys-gpc.c  |  205 ++
 drivers/media/pci/intel/ipu6/ipu6-isys-phy.c  |  595 ++++++
 drivers/media/pci/intel/ipu6/ipu6-isys-phy.h  |  159 ++
 drivers/media/pci/intel/ipu6/ipu6-isys.c      |  322 +++
 .../media/pci/intel/ipu6/ipu6-l-scheduler.c   |  611 ++++++
 .../pci/intel/ipu6/ipu6-platform-resources.h  |  197 ++
 drivers/media/pci/intel/ipu6/ipu6-ppg.c       |  559 ++++++
 drivers/media/pci/intel/ipu6/ipu6-ppg.h       |   38 +
 drivers/media/pci/intel/ipu6/ipu6-psys-gpc.c  |  212 ++
 drivers/media/pci/intel/ipu6/ipu6-psys.c      | 1056 ++++++++++
 drivers/media/pci/intel/ipu6/ipu6.c           |  368 ++++
 .../pci/intel/ipu6/ipu6se-fw-resources.c      |  352 ++++
 .../intel/ipu6/ipu6se-platform-resources.h    |  127 ++
 drivers/usb/Kconfig                           |    2 +
 drivers/usb/Makefile                          |    2 +
 drivers/usb/intel_ulpss/Kconfig               |   11 +
 drivers/usb/intel_ulpss/Makefile              |    3 +
 drivers/usb/intel_ulpss/diag_stub.c           |  116 ++
 drivers/usb/intel_ulpss/diag_stub.h           |   19 +
 drivers/usb/intel_ulpss/gpio_stub.c           |  459 +++++
 drivers/usb/intel_ulpss/gpio_stub.h           |   13 +
 drivers/usb/intel_ulpss/i2c_stub.c            |  456 +++++
 drivers/usb/intel_ulpss/i2c_stub.h            |   21 +
 drivers/usb/intel_ulpss/mng_stub.c            |  244 +++
 drivers/usb/intel_ulpss/mng_stub.h            |   18 +
 .../usb/intel_ulpss/protocol_intel_ulpss.h    |  173 ++
 drivers/usb/intel_ulpss/ulpss_bridge.c        |  529 +++++
 drivers/usb/intel_ulpss/ulpss_bridge.h        |   77 +
 drivers/usb/intel_ulpss/usb_stub.c            |  285 +++
 drivers/usb/intel_ulpss/usb_stub.h            |   49 +
 include/media/ipu-isys.h                      |   44 +
 include/uapi/linux/ipu-isys.h                 |   15 +
 include/uapi/linux/ipu-psys.h                 |  121 ++
 96 files changed, 32040 insertions(+), 2 deletions(-)
 create mode 100644 drivers/media/i2c/hm11b1.c
 create mode 100644 drivers/media/i2c/ov01a1s.c
 create mode 100644 drivers/media/i2c/pmic_dsc1.c
 create mode 100644 drivers/media/i2c/pmic_dsc1.h
 create mode 100644 drivers/media/pci/intel/Kconfig
 create mode 100644 drivers/media/pci/intel/ipu-bus.c
 create mode 100644 drivers/media/pci/intel/ipu-bus.h
 create mode 100644 drivers/media/pci/intel/ipu-buttress.c
 create mode 100644 drivers/media/pci/intel/ipu-buttress.h
 create mode 100644 drivers/media/pci/intel/ipu-cpd.c
 create mode 100644 drivers/media/pci/intel/ipu-cpd.h
 create mode 100644 drivers/media/pci/intel/ipu-dma.c
 create mode 100644 drivers/media/pci/intel/ipu-dma.h
 create mode 100644 drivers/media/pci/intel/ipu-fw-com.c
 create mode 100644 drivers/media/pci/intel/ipu-fw-com.h
 create mode 100644 drivers/media/pci/intel/ipu-fw-isys.c
 create mode 100644 drivers/media/pci/intel/ipu-fw-isys.h
 create mode 100644 drivers/media/pci/intel/ipu-fw-psys.c
 create mode 100644 drivers/media/pci/intel/ipu-fw-psys.h
 create mode 100644 drivers/media/pci/intel/ipu-isys-csi2-be-soc.c
 create mode 100644 drivers/media/pci/intel/ipu-isys-csi2-be.c
 create mode 100644 drivers/media/pci/intel/ipu-isys-csi2-be.h
 create mode 100644 drivers/media/pci/intel/ipu-isys-csi2.c
 create mode 100644 drivers/media/pci/intel/ipu-isys-csi2.h
 create mode 100644 drivers/media/pci/intel/ipu-isys-media.h
 create mode 100644 drivers/media/pci/intel/ipu-isys-queue.c
 create mode 100644 drivers/media/pci/intel/ipu-isys-queue.h
 create mode 100644 drivers/media/pci/intel/ipu-isys-subdev.c
 create mode 100644 drivers/media/pci/intel/ipu-isys-subdev.h
 create mode 100644 drivers/media/pci/intel/ipu-isys-tpg.c
 create mode 100644 drivers/media/pci/intel/ipu-isys-tpg.h
 create mode 100644 drivers/media/pci/intel/ipu-isys-video.c
 create mode 100644 drivers/media/pci/intel/ipu-isys-video.h
 create mode 100644 drivers/media/pci/intel/ipu-isys.c
 create mode 100644 drivers/media/pci/intel/ipu-isys.h
 create mode 100644 drivers/media/pci/intel/ipu-mmu.c
 create mode 100644 drivers/media/pci/intel/ipu-mmu.h
 create mode 100644 drivers/media/pci/intel/ipu-pdata.h
 create mode 100644 drivers/media/pci/intel/ipu-psys-compat32.c
 create mode 100644 drivers/media/pci/intel/ipu-psys.c
 create mode 100644 drivers/media/pci/intel/ipu-psys.h
 create mode 100644 drivers/media/pci/intel/ipu-trace.c
 create mode 100644 drivers/media/pci/intel/ipu-trace.h
 create mode 100644 drivers/media/pci/intel/ipu.c
 create mode 100644 drivers/media/pci/intel/ipu.h
 create mode 100644 drivers/media/pci/intel/ipu6/Makefile
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-fw-resources.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-platform-buttress-regs.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-platform-isys-csi2-reg.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-platform-isys.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-platform-psys.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-platform-regs.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-platform-resources.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-platform.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu-resources.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-fw-resources.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-csi2.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-csi2.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-gpc.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-phy.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys-phy.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-isys.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-l-scheduler.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-platform-resources.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-ppg.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-ppg.h
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-psys-gpc.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6-psys.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6se-fw-resources.c
 create mode 100644 drivers/media/pci/intel/ipu6/ipu6se-platform-resources.h
 create mode 100644 drivers/usb/intel_ulpss/Kconfig
 create mode 100644 drivers/usb/intel_ulpss/Makefile
 create mode 100644 drivers/usb/intel_ulpss/diag_stub.c
 create mode 100644 drivers/usb/intel_ulpss/diag_stub.h
 create mode 100644 drivers/usb/intel_ulpss/gpio_stub.c
 create mode 100644 drivers/usb/intel_ulpss/gpio_stub.h
 create mode 100644 drivers/usb/intel_ulpss/i2c_stub.c
 create mode 100644 drivers/usb/intel_ulpss/i2c_stub.h
 create mode 100644 drivers/usb/intel_ulpss/mng_stub.c
 create mode 100644 drivers/usb/intel_ulpss/mng_stub.h
 create mode 100644 drivers/usb/intel_ulpss/protocol_intel_ulpss.h
 create mode 100644 drivers/usb/intel_ulpss/ulpss_bridge.c
 create mode 100644 drivers/usb/intel_ulpss/ulpss_bridge.h
 create mode 100644 drivers/usb/intel_ulpss/usb_stub.c
 create mode 100644 drivers/usb/intel_ulpss/usb_stub.h
 create mode 100644 include/media/ipu-isys.h
 create mode 100644 include/uapi/linux/ipu-isys.h
 create mode 100644 include/uapi/linux/ipu-psys.h

-- 
2.30.2




More information about the kernel-team mailing list