* 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: Definition: Should be "qcom,msm-cam-smmu". =================================================================== Second Level Node - CAM SMMU context bank device or firmware device =================================================================== - compatible Usage: required Value type: Definition: Should be "qcom,msm-cam-smmu-cb" or "qcom,msm-cam-smmu-fw-dev". - memory-region Usage: optional Value type: Definition: Should specify the phandle of the memory region for firmware. allocation - iommus Usage: required Value type: Definition: first cell is phandle of the iommu, second cell is stream id and third cell is SMR mask. - label Usage: required Value type: 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. ============================================= Third Level Node - CAM SMMU memory map device ============================================= - iova-region-name Usage: required Value type: Definition: Should specify a string label to identify the IOVA region. - iova-region-start Usage: required Value type: Definition: Should specify start IOVA for region. - iova-region-len Usage: required Value type: Definition: Should specify length for IOVA region. - iova-region-id Usage: required Value type: 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: Definition: Should specify IOVA granularity for shared memory region. Example: qcom,cam_smmu@0 { 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"; }; }; }; };