Documentation/driver-api/media/drivers/ipu6.rst

Source file repositories/reference/linux-study-clean/Documentation/driver-api/media/drivers/ipu6.rst

File Facts

System
Linux kernel
Corpus path
Documentation/driver-api/media/drivers/ipu6.rst
Extension
.rst
Size
8982 bytes
Lines
191
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

.. SPDX-License-Identifier: GPL-2.0

==================
Intel IPU6 Driver
==================

Author: Bingbu Cao <bingbu.cao@intel.com>

Overview
=========

Intel IPU6 is the sixth generation of Intel Image Processing Unit used in some
Intel Chipsets such as Tiger Lake, Jasper Lake, Alder Lake, Raptor Lake and
Meteor Lake. IPU6 consists of two major systems: Input System (ISYS) and
Processing System (PSYS). IPU6 are visible on the PCI bus as a single device, it
can be found by ``lspci``:

``0000:00:05.0 Multimedia controller: Intel Corporation Device xxxx (rev xx)``

IPU6 has a 16 MB BAR in PCI configuration Space for MMIO registers which is
visible for driver.

Buttress
=========

The IPU6 is connecting to the system fabric with Buttress which is enabling host
driver to control the IPU6, it also allows IPU6 access the system memory to
store and load frame pixel streams and any other metadata.

Buttress mainly manages several system functionalities: power management,
interrupt handling, firmware authentication and global timer sync.

ISYS and PSYS Power flow
------------------------

IPU6 driver initialize the ISYS and PSYS power up or down request by setting the
Buttress frequency control register for ISYS and PSYS
(``IPU6_BUTTRESS_REG_IS_FREQ_CTL`` and ``IPU6_BUTTRESS_REG_PS_FREQ_CTL``) in
function:

.. c:function:: int ipu6_buttress_power(...)

Buttress forwards the request to Punit, after Punit execute the power up flow,
Buttress indicates driver that ISYS or PSYS is powered up by updating the power
status registers.

.. Note:: ISYS power up needs take place prior to PSYS power up, ISYS power down
	  needs take place after PSYS power down due to hardware limitation.

Interrupt
---------

IPU6 interrupt can be generated as MSI or INTA, interrupt will be triggered when
ISYS, PSYS, Buttress event or error happen, driver can get the interrupt cause
by reading the interrupt status register ``BUTTRESS_REG_ISR_STATUS``, driver
clears the irq status and then calls specific ISYS or PSYS irq handler.

.. c:function:: irqreturn_t ipu6_buttress_isr(int irq, ...)

Security and firmware authentication
-------------------------------------

To address the IPU6 firmware security concerns, the IPU6 firmware needs to
undergo an authentication process before it is allowed to executed on the IPU6
internal processors. The IPU6 driver will work with Converged Security Engine
(CSE) to complete authentication process. The CSE is responsible of
authenticating the IPU6 firmware. The authenticated firmware binary is copied
into an isolated memory region. Firmware authentication process is implemented
by CSE following an IPC handshake with the IPU6 driver. There are some Buttress
registers used by the CSE and the IPU6 driver to communicate with each other via

Annotation

Implementation Notes