git-subtree-dir: qcom/camera git-subtree-mainline:8263fe365e
git-subtree-split:a1378b76f0
148 lines
4.5 KiB
Plaintext
148 lines
4.5 KiB
Plaintext
* Qualcomm Technologies, Inc. MSM Camera SMMU
|
|
|
|
The MSM camera SMMU device provides SMMU context bank definitions
|
|
for all HW blocks that need to map IOVA to physical memory. These
|
|
definitions consist of various properties that define how the
|
|
IOVA address space is laid out for each HW block in the camera
|
|
subsystem.
|
|
|
|
=======================
|
|
Required Node Structure
|
|
=======================
|
|
The camera SMMU device must be described in three levels of device nodes. The
|
|
first level describes the overall SMMU device. Within it, second level nodes
|
|
describe individual context banks that map different stream ids. There can
|
|
also be second level nodes describing firmware device nodes. Each HW block
|
|
such as IFE, ICP maps into these second level device nodes. All context bank
|
|
specific properties that define how the IOVA is laid out is contained within
|
|
third level device nodes within the second level device nodes.
|
|
|
|
During the kernel initialization all the devices are probed recursively and
|
|
a device pointer is created for each context bank keeping track of the IOVA
|
|
mapping information.
|
|
|
|
Duplicate regions of the same type are not allowed within the same
|
|
context bank. All context banks must contain an IO region at the very least.
|
|
|
|
==================================
|
|
First Level Node - CAM SMMU device
|
|
==================================
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Should be "qcom,msm-cam-smmu".
|
|
|
|
===================================================================
|
|
Second Level Node - CAM SMMU context bank device or firmware device
|
|
===================================================================
|
|
- compatible
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Should be "qcom,msm-cam-smmu-cb" or "qcom,msm-cam-smmu-fw-dev".
|
|
|
|
- memory-region
|
|
Usage: optional
|
|
Value type: <phandle>
|
|
Definition: Should specify the phandle of the memory region for firmware.
|
|
allocation
|
|
|
|
- iommus
|
|
Usage: required
|
|
Value type: <phandle u32 u32>
|
|
Definition: first cell is phandle of the iommu, second cell is stream id
|
|
and third cell is SMR mask.
|
|
|
|
- label
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Should specify a string label to identify the context bank.
|
|
|
|
- qcom,secure-cb
|
|
Usage: optional
|
|
Value type: boolean
|
|
Definition: Specifies if the context bank is a secure context bank.
|
|
|
|
- qti,smmu-proxy-cb-id
|
|
Usage: optional for secure camera 2.0, required for 2.5
|
|
Value type: <u32>
|
|
Definition: Specifies that the SMMU proxy client is camera.
|
|
|
|
=============================================
|
|
Third Level Node - CAM SMMU memory map device
|
|
=============================================
|
|
- iova-region-name
|
|
Usage: required
|
|
Value type: <string>
|
|
Definition: Should specify a string label to identify the IOVA region.
|
|
|
|
- iova-region-start
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: Should specify start IOVA for region.
|
|
|
|
- iova-region-len
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: Should specify length for IOVA region.
|
|
|
|
- iova-region-id
|
|
Usage: required
|
|
Value type: <u32>
|
|
Definition: Should specify the numerical identifier for IOVA region.
|
|
Allowed values are: 0x00 to 0x03
|
|
- Firmware region: 0x00
|
|
- Shared region: 0x01
|
|
- Scratch region: 0x02
|
|
- IO region: 0x03
|
|
|
|
- iova-granularity
|
|
Usage: optional
|
|
Value type: <u32>
|
|
Definition: Should specify IOVA granularity for shared memory region.
|
|
|
|
Example:
|
|
qcom,cam_smmu {
|
|
compatible = "qcom,msm-cam-smmu";
|
|
|
|
msm_cam_smmu_icp {
|
|
compatible = "qcom,msm-cam-smmu-cb";
|
|
iommus = <&apps_smmu 0x1078>,
|
|
<&apps_smmu 0x1020>,
|
|
<&apps_smmu 0x1028>,
|
|
<&apps_smmu 0x1040>,
|
|
<&apps_smmu 0x1048>,
|
|
<&apps_smmu 0x1030>,
|
|
<&apps_smmu 0x1050>;
|
|
label = "icp";
|
|
icp_iova_mem_map: iova-mem-map {
|
|
iova-mem-region-firmware {
|
|
/* Firmware region is 5MB */
|
|
iova-region-name = "firmware";
|
|
iova-region-start = <0x0>;
|
|
iova-region-len = <0x500000>;
|
|
iova-region-id = <0x0>;
|
|
status = "ok";
|
|
};
|
|
|
|
iova-mem-region-shared {
|
|
/* Shared region is 100MB long */
|
|
iova-region-name = "shared";
|
|
iova-region-start = <0x7400000>;
|
|
iova-region-len = <0x6400000>;
|
|
iova-region-id = <0x1>;
|
|
iova-granularity = <0x15>;
|
|
status = "ok";
|
|
};
|
|
|
|
iova-mem-region-io {
|
|
/* IO region is approximately 3.5 GB */
|
|
iova-region-name = "io";
|
|
iova-region-start = <0xd800000>;
|
|
iova-region-len = <0xd2800000>;
|
|
iova-region-id = <0x3>;
|
|
status = "ok";
|
|
};
|
|
};
|
|
};
|
|
};
|