mbox series

[v5,0/3] media: pci: intel: ivsc: Add driver of Intel Visual Sensing Controller(IVSC)

Message ID 1681096465-17287-1-git-send-email-wentong.wu@intel.com (mailing list archive)
Headers show
Series media: pci: intel: ivsc: Add driver of Intel Visual Sensing Controller(IVSC) | expand

Message

Wu, Wentong April 10, 2023, 3:14 a.m. UTC
Intel Visual Sensing Controller (IVSC), codenamed "Clover Falls", is a
companion chip designed to provide secure and low power vision capability
to IA platforms. IVSC is available in existing commercial platforms from
multiple OEMs.

The primary use case of IVSC is to bring in context awareness. IVSC
interfaces directly with the platform main camera sensor via a CSI-2 link
and processes the image data with the embedded AI engine. The detected
events are sent over I2C to ISH (Intel Sensor Hub) for additional data
fusion from multiple sensors. The fusion results are used to implement
advanced use cases like:
 - Face detection to unlock screen
 - Detect user presence to manage backlight setting or waking up system

Since the Image Processing Unit(IPU) used on the host processor needs to
configure the CSI-2 link in normal camera usages, the CSI-2 link and
camera sensor can only be used in mutually-exclusive ways by host IPU and
IVSC. By default the IVSC owns the CSI-2 link and camera sensor. The IPU
driver can take ownership of the CSI-2 link and camera sensor using the
interfaces exported via v4l2 sub-device.

Switching ownership requires an interface with two different hardware
modules inside IVSC. The software interface to these modules is via Intel
MEI (The Intel Management Engine) commands. These two hardware modules
have two different MEI UUIDs to enumerate. These hardware modules are:
 - ACE (Algorithm Context Engine): This module is for algorithm computing
when IVSC owns camera sensor. Also ACE module controls camera sensor's
ownership. This hardware module is used to set ownership of camera sensor.
 - CSI (Camera Serial Interface): This module is used to route camera
sensor data either to IVSC or to host for IPU driver and application.

IVSC also provides a privacy mode. When privacy mode is turned on, camera
sensor can't be used. This means that both ACE and host IPU can't get
image data. And when this mode is turned on, users are informed via v4l2
control API.

In summary, to acquire ownership of camera by IPU driver, first ACE
module needs to be informed of ownership and then to setup MIPI CSI-2
link for the camera sensor and IPU.

Implementation:
There are two different drivers to handle ACE and CSI hardware modules
inside IVSC.
 - ivsc_csi: MEI client driver to send commands and receive notifications
from CSI module.
 - ivsc_ace: MEI client driver to send commands and get status from ACE
module.
Interface is exposed via v4l2 sub-devcie APIs to acquire and release
camera sensor and CSI-2 link.

Below diagram shows connections of IVSC/ISH/IPU/Camera sensor.
-----------------------------------------------------------------------------
| Host Processor                                                            |
|                                                                           |
|       -----------------       -----------------       ---------------     |
|       |               |       |               |       |             | I2C |
|       |      IPU      |       |      ISH      |       |camera driver|--|  |
|       |               |       |               |       |             |  |  |
|       -----------------       -----------------       ---------------  |  |
|               |                       |                      |         |  |
|               |                       |               ---------------  |  |
|               |                       |               |             |  |  |
|               |                       |               | IVSC driver |  |  |
|               |                       |               |             |  |  |
|               |                       |               ---------------  |  |
|               |                       |                      |         |  |
----------------|-----------------------|----------------------|---------|---
                | CSI                   | I2C                  |SPI      |
                |                       |                      |         |
----------------|-----------------------|----------------      |         |
| IVSC          |                                       |      |         |
|               |                                       |      |         |
|       -----------------       -----------------       |      |         |
|       |               |       |               |       |      |         |
|       |      CSI      |       |      ACE      |       |------|         |
|       |               |       |               |       |                |
|       -----------------       -----------------       |                |
|               |                       | I2C           |                |
----------------|-----------------------|----------------                |
                | CSI                   |                                |
                |                       |                                |
            --------------------------------                             |
            |                              | I2C                         |
            |         camera sensor        |-----------------------------|
            |                              |
            --------------------------------

---
v5:
 - probe mei_csi only after software node has been setup

v4:
 - call v4l2_ctrl_handler_free() if setting up the handler failed
 - set V4L2_CTRL_FLAG_READ_ONLY for privacy_ctrl
 - add dev_warn if failed to switch CSI-2 link to IVSC
 - use v4l2_fwnode_endpoint_alloc_parse to get num_data_lanes
 - add document about how sensor connected to IVSC is powered
 - move lock to mei_ace_send
 - check return value for device_link_add

Wentong Wu (3):
  media: pci: intel: ivsc: Add CSI submodule
  media: pci: intel: ivsc: Add ACE submodule
  ACPI: delay enumeration of devices with a _DEP pointing to IVSC device

 drivers/acpi/scan.c                    |   2 +
 drivers/media/pci/Kconfig              |   1 +
 drivers/media/pci/intel/Makefile       |   2 +
 drivers/media/pci/intel/ivsc/Kconfig   |  12 +
 drivers/media/pci/intel/ivsc/Makefile  |   9 +
 drivers/media/pci/intel/ivsc/mei_ace.c | 560 ++++++++++++++++++++++++
 drivers/media/pci/intel/ivsc/mei_csi.c | 772 +++++++++++++++++++++++++++++++++
 7 files changed, 1358 insertions(+)
 create mode 100644 drivers/media/pci/intel/ivsc/Kconfig
 create mode 100644 drivers/media/pci/intel/ivsc/Makefile
 create mode 100644 drivers/media/pci/intel/ivsc/mei_ace.c
 create mode 100644 drivers/media/pci/intel/ivsc/mei_csi.c

Comments

Wu, Wentong April 14, 2023, 8:32 a.m. UTC | #1
Hi,

Please help review this V5 patch set, thanks a lot!

BR,
Wentong

> -----Original Message-----
> From: Wu, Wentong <wentong.wu@intel.com>
> Sent: Monday, April 10, 2023 11:14 AM
> To: sakari.ailus@linux.intel.com; hdegoede@redhat.com; djrscally@gmail.com;
> 
> Intel Visual Sensing Controller (IVSC), codenamed "Clover Falls", is a companion
> chip designed to provide secure and low power vision capability to IA platforms.
> IVSC is available in existing commercial platforms from multiple OEMs.
> 
> The primary use case of IVSC is to bring in context awareness. IVSC interfaces
> directly with the platform main camera sensor via a CSI-2 link and processes the
> image data with the embedded AI engine. The detected events are sent over I2C
> to ISH (Intel Sensor Hub) for additional data fusion from multiple sensors. The
> fusion results are used to implement advanced use cases like:
>  - Face detection to unlock screen
>  - Detect user presence to manage backlight setting or waking up system
> 
> Since the Image Processing Unit(IPU) used on the host processor needs to
> configure the CSI-2 link in normal camera usages, the CSI-2 link and camera
> sensor can only be used in mutually-exclusive ways by host IPU and IVSC. By
> default the IVSC owns the CSI-2 link and camera sensor. The IPU driver can take
> ownership of the CSI-2 link and camera sensor using the interfaces exported via
> v4l2 sub-device.
> 
> Switching ownership requires an interface with two different hardware modules
> inside IVSC. The software interface to these modules is via Intel MEI (The Intel
> Management Engine) commands. These two hardware modules have two
> different MEI UUIDs to enumerate. These hardware modules are:
>  - ACE (Algorithm Context Engine): This module is for algorithm computing when
> IVSC owns camera sensor. Also ACE module controls camera sensor's ownership.
> This hardware module is used to set ownership of camera sensor.
>  - CSI (Camera Serial Interface): This module is used to route camera sensor data
> either to IVSC or to host for IPU driver and application.
> 
> IVSC also provides a privacy mode. When privacy mode is turned on, camera
> sensor can't be used. This means that both ACE and host IPU can't get image
> data. And when this mode is turned on, users are informed via v4l2 control API.
> 
> In summary, to acquire ownership of camera by IPU driver, first ACE module
> needs to be informed of ownership and then to setup MIPI CSI-2 link for the
> camera sensor and IPU.
> 
> Implementation:
> There are two different drivers to handle ACE and CSI hardware modules inside
> IVSC.
>  - ivsc_csi: MEI client driver to send commands and receive notifications from
> CSI module.
>  - ivsc_ace: MEI client driver to send commands and get status from ACE module.
> Interface is exposed via v4l2 sub-devcie APIs to acquire and release camera
> sensor and CSI-2 link.
> 
> Below diagram shows connections of IVSC/ISH/IPU/Camera sensor.
> -----------------------------------------------------------------------------
> | Host Processor                                                            |
> |                                                                           |
> |       -----------------       -----------------       ---------------     |
> |       |               |       |               |       |             | I2C |
> |       |      IPU      |       |      ISH      |       |camera driver|--|  |
> |       |               |       |               |       |             |  |  |
> |       -----------------       -----------------       ---------------  |  |
> |               |                       |                      |         |  |
> |               |                       |               ---------------  |  |
> |               |                       |               |             |  |  |
> |               |                       |               | IVSC driver |  |  |
> |               |                       |               |             |  |  |
> |               |                       |               ---------------  |  |
> |               |                       |                      |         |  |
> ----------------|-----------------------|----------------------|---------|---
>                 | CSI                   | I2C                  |SPI      |
>                 |                       |                      |         |
> ----------------|-----------------------|----------------      |         |
> | IVSC          |                                       |      |         |
> |               |                                       |      |         |
> |       -----------------       -----------------       |      |         |
> |       |               |       |               |       |      |         |
> |       |      CSI      |       |      ACE      |       |------|         |
> |       |               |       |               |       |                |
> |       -----------------       -----------------       |                |
> |               |                       | I2C           |                |
> ----------------|-----------------------|----------------                |
>                 | CSI                   |                                |
>                 |                       |                                |
>             --------------------------------                             |
>             |                              | I2C                         |
>             |         camera sensor        |-----------------------------|
>             |                              |
>             --------------------------------
> 
> ---
> v5:
>  - probe mei_csi only after software node has been setup
> 
> v4:
>  - call v4l2_ctrl_handler_free() if setting up the handler failed
>  - set V4L2_CTRL_FLAG_READ_ONLY for privacy_ctrl
>  - add dev_warn if failed to switch CSI-2 link to IVSC
>  - use v4l2_fwnode_endpoint_alloc_parse to get num_data_lanes
>  - add document about how sensor connected to IVSC is powered
>  - move lock to mei_ace_send
>  - check return value for device_link_add
> 
> Wentong Wu (3):
>   media: pci: intel: ivsc: Add CSI submodule
>   media: pci: intel: ivsc: Add ACE submodule
>   ACPI: delay enumeration of devices with a _DEP pointing to IVSC device
> 
>  drivers/acpi/scan.c                    |   2 +
>  drivers/media/pci/Kconfig              |   1 +
>  drivers/media/pci/intel/Makefile       |   2 +
>  drivers/media/pci/intel/ivsc/Kconfig   |  12 +
>  drivers/media/pci/intel/ivsc/Makefile  |   9 +
>  drivers/media/pci/intel/ivsc/mei_ace.c | 560 ++++++++++++++++++++++++
> drivers/media/pci/intel/ivsc/mei_csi.c | 772
> +++++++++++++++++++++++++++++++++
>  7 files changed, 1358 insertions(+)
>  create mode 100644 drivers/media/pci/intel/ivsc/Kconfig
>  create mode 100644 drivers/media/pci/intel/ivsc/Makefile
>  create mode 100644 drivers/media/pci/intel/ivsc/mei_ace.c
>  create mode 100644 drivers/media/pci/intel/ivsc/mei_csi.c
> 
> --
> 2.7.4