| * Qualcomm Technologies, Inc. MSM Camera CPAS |
| |
| The MSM camera CPAS device provides dependency definitions for |
| enabling Camera CPAS HW and provides the Client definitions |
| for all HW blocks that use CPAS driver for BW voting. These |
| definitions consist of various properties that define the list |
| of clients supported, AHB, AXI master-slave IDs used for BW |
| voting. |
| |
| ======================= |
| Required Node Structure |
| ======================= |
| The camera CPAS device must be described in four levels of device nodes. The |
| first level describes the overall CPAS device. Within it, second level nodes |
| describe the list of AXI ports that map different clients for AXI BW voting. |
| Third level nodes describe the details of each AXI port having name, mnoc, |
| camnoc AXI Bus information. Fourth level nodes describe the details of Bus |
| master-slave IDs, ab, ib values for mnoc, camnoc bus interface. |
| |
| ================================== |
| First Level Node - CAM CPAS device |
| ================================== |
| - cell-index |
| Usage: required |
| Value type: <u32> |
| Definition: Node instance number. |
| |
| - compatible |
| Usage: required |
| Value type: <string> |
| Definition: Should be "qcom,cam-cpas". |
| |
| - label |
| Usage: required |
| Value type: <string> |
| Definition: Should be "cpas". |
| |
| - arch-compat |
| Usage: required |
| Value type: <string> |
| Definition: Should be "cpas_top" or "camss_top". |
| |
| - reg-names |
| Usage: required |
| Value type: <string> |
| Definition: Name of the register resources. |
| |
| - reg |
| Usage: required |
| Value type: <u32> |
| Definition: Register values. |
| |
| - reg-cam-base |
| Usage: required |
| Value type: <u32> |
| Definition: Offset of the register space compared to |
| to Camera base register space. |
| |
| - interrupt-names |
| Usage: optional |
| Value type: <string> |
| Definition: Name of the interrupt. |
| |
| - interrupts |
| Usage: optional |
| Value type: <u32> |
| Definition: Interrupt associated with CAMNOC HW. |
| |
| - qcom,cpas-hw-ver |
| Usage: required |
| Value type: <u32> |
| Definition: CAM HW Version information. |
| |
| - camnoc-axi-min-ib-bw |
| Usage: optional |
| Value type: <u64> |
| Definition: Min camnoc axi bw for the given target. |
| |
| - regulator-names |
| Usage: required |
| Value type: <string> |
| Definition: Name of the regulator resources for CPAS HW. |
| |
| - camss-vdd-supply |
| Usage: required |
| Value type: <phandle> |
| Definition: Regulator reference corresponding to the names listed |
| in "regulator-names". |
| |
| - clock-names |
| Usage: required |
| Value type: <string> |
| Definition: List of clock names required for CPAS HW. |
| |
| - clocks |
| Usage: required |
| Value type: <phandle> |
| Definition: List of clocks used for CPAS HW. |
| |
| - src-clock-name |
| Usage: required |
| Value type: <string> |
| Definition: Source clock name. |
| |
| - clock-rates |
| Usage: required |
| Value type: <u32> |
| Definition: List of clocks rates. |
| |
| - clock-cntl-level |
| Usage: required |
| Value type: <string> |
| Definition: List of strings corresponds clock-rates levels. |
| Supported strings: minsvs, lowsvs, svs, svs_l1, nominal, turbo. |
| |
| - control-camnoc-axi-clk |
| Usage: optional |
| Value type: <empty> |
| Definition: Bool property specifying whether to control camnoc axi |
| clock from cpas driver. |
| |
| - camnoc-bus-width |
| Usage: required if control-camnoc-axi-clk is enabled |
| Value type: <u32> |
| Definition: camnoc bus width. |
| |
| - camnoc-axi-clk-bw-margin-perc |
| Usage: optional |
| Value type: <u32> |
| Definition: Percentage value to be added to camnoc bw while calculating |
| camnoc axi clock frequency. |
| |
| - qcom,msm-bus,name |
| - qcom,msm-bus,num-cases |
| - qcom,msm-bus,num-paths |
| - qcom,msm-bus,vectors-KBps |
| Please refer Documentation/devicetree/bindings/arm/msm/msm_bus.txt |
| for the properties above. |
| |
| - vdd-corners |
| Usage: required |
| Value type: <u32> |
| Definition: List of vdd corners to map for ahb level. |
| |
| - vdd-corner-ahb-mapping |
| Usage: required |
| Value type: <string> |
| Definition: List of ahb level strings corresponds to vdd-corners. |
| Supported strings: suspend, svs, nominal, turbo |
| |
| - client-id-based |
| Usage: required |
| Value type: <empty> |
| Definition: Bool property specifying whether CPAS clients are ID based. |
| |
| - client-names |
| Usage: required |
| Value type: <string> |
| Definition: List of Clients supported by CPAS. |
| |
| - client-axi-port-names |
| Usage: required |
| Value type: <string> |
| Definition: AXI Port name for each client. |
| |
| - client-bus-camnoc-based |
| Usage: required |
| Value type: <empty> |
| Definition: Bool property specifying whether Clients are connected |
| through CAMNOC for AXI access. |
| |
| - qcom,cam-cx-ipeak: |
| Usage: optional |
| Value type: <phandle bit> |
| phandle - phandle of CX Ipeak device node |
| bit - Every bit corresponds to a client of CX Ipeak |
| Definition: CX Ipeak is a mitigation scheme which throttles camera frequency |
| if all the clients are running at their respective threshold |
| frequencies to limit CX peak current. |
| driver in the relevant register. |
| |
| =================================================================== |
| Third Level Node - CAM AXI Port properties |
| =================================================================== |
| - qcom,axi-port-name |
| Usage: required |
| Value type: <string> |
| Definition: Name of the AXI Port. |
| |
| - ib-bw-voting-needed |
| Usage: optional |
| Value type: <bool> |
| Definition: Determines if this port votes for ib bw dynamically. |
| |
| =================================================================== |
| Fourth Level Node - CAM AXI Bus properties |
| =================================================================== |
| |
| - qcom,msm-bus,name |
| - qcom,msm-bus,num-cases |
| - qcom,msm-bus,num-paths |
| - qcom,msm-bus,vectors-KBps |
| Please refer Documentation/devicetree/bindings/arm/msm/msm_bus.txt |
| for the properties above. |
| |
| - qcom,msm-bus-vector-dyn-vote |
| Usage: optional |
| Value type: <empty> |
| Definition: Bool property specifying whether this bus client |
| is dynamic vote based. |
| |
| Example: |
| |
| qcom,cam-cpas@ac40000 { |
| cell-index = <0>; |
| compatible = "qcom,cam-cpas"; |
| label = "cpas"; |
| arch-compat = "cpas_top"; |
| status = "ok"; |
| reg-names = "cam_cpas_top", "cam_camnoc"; |
| reg = <0xac40000 0x1000>, |
| <0xac42000 0x5000>; |
| reg-cam-base = <0x40000 0x42000>; |
| interrupt-names = "cpas_camnoc"; |
| interrupts = <0 459 0>; |
| qcom,cpas-hw-ver = <0x170100>; /* Titan v170 v1.0.0 */ |
| regulator-names = "camss-vdd"; |
| camss-vdd-supply = <&titan_top_gdsc>; |
| clock-names = "gcc_ahb_clk", |
| "gcc_axi_clk", |
| "soc_ahb_clk", |
| "cpas_ahb_clk", |
| "slow_ahb_clk_src", |
| "camnoc_axi_clk"; |
| clocks = <&clock_gcc GCC_CAMERA_AHB_CLK>, |
| <&clock_gcc GCC_CAMERA_AXI_CLK>, |
| <&clock_camcc CAM_CC_SOC_AHB_CLK>, |
| <&clock_camcc CAM_CC_CPAS_AHB_CLK>, |
| <&clock_camcc CAM_CC_SLOW_AHB_CLK_SRC>, |
| <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>; |
| src-clock-name = "slow_ahb_clk_src"; |
| clock-rates = <0 0 0 0 80000000 0>; |
| clock-cntl-level = "turbo"; |
| qcom,cam-cx-ipeak = <&cx_ipeak_lm 2>; |
| control-camnoc-axi-clk; |
| camnoc-bus-width = <32>; |
| camnoc-axi-clk-bw-margin-perc = <10>; |
| qcom,msm-bus,name = "cam_ahb"; |
| qcom,msm-bus,num-cases = <4>; |
| qcom,msm-bus,num-paths = <1>; |
| qcom,msm-bus,vectors-KBps = |
| <MSM_BUS_MASTER_AMPSS_M0 |
| MSM_BUS_SLAVE_CAMERA_CFG 0 0>, |
| <MSM_BUS_MASTER_AMPSS_M0 |
| MSM_BUS_SLAVE_CAMERA_CFG 0 300000>, |
| <MSM_BUS_MASTER_AMPSS_M0 |
| MSM_BUS_SLAVE_CAMERA_CFG 0 640000>, |
| <MSM_BUS_MASTER_AMPSS_M0 |
| MSM_BUS_SLAVE_CAMERA_CFG 0 640000>; |
| client-id-based; |
| client-names = |
| "ife0", "ife1", "ife2", "ipe0", |
| "ipe1", "cam-cdm-intf0", "cpas-cdm0", "bps0", |
| "icp0", "jpeg-dma0", "jpeg0", "fd0"; |
| client-axi-port-names = |
| "cam_hf_1", "cam_hf_2", "cam_hf_2", "cam_sf_1", |
| "cam_sf_1", "cam_sf_1", "cam_sf_1", "cam_sf_1", |
| "cam_sf_1", "cam_sf_1", "cam_sf_1", "cam_sf_1"; |
| client-bus-camnoc-based; |
| qcom,axi-port-list { |
| qcom,axi-port1 { |
| qcom,axi-port-name = "cam_hf_1"; |
| qcom,axi-port-mnoc { |
| qcom,msm-bus,name = "cam_hf_1_mnoc"; |
| qcom,msm-bus-vector-dyn-vote; |
| qcom,msm-bus,num-cases = <2>; |
| qcom,msm-bus,num-paths = <1>; |
| qcom,msm-bus,vectors-KBps = |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>, |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>; |
| }; |
| qcom,axi-port-camnoc { |
| qcom,msm-bus,name = "cam_hf_1_camnoc"; |
| qcom,msm-bus-vector-dyn-vote; |
| qcom,msm-bus,num-cases = <2>; |
| qcom,msm-bus,num-paths = <1>; |
| qcom,msm-bus,vectors-KBps = |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>, |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>; |
| }; |
| }; |
| qcom,axi-port2 { |
| qcom,axi-port-name = "cam_hf_2"; |
| qcom,axi-port-mnoc { |
| qcom,msm-bus,name = "cam_hf_2_mnoc"; |
| qcom,msm-bus-vector-dyn-vote; |
| qcom,msm-bus,num-cases = <2>; |
| qcom,msm-bus,num-paths = <1>; |
| qcom,msm-bus,vectors-KBps = |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>, |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>; |
| }; |
| qcom,axi-port-camnoc { |
| qcom,msm-bus,name = "cam_hf_1_camnoc"; |
| qcom,msm-bus-vector-dyn-vote; |
| qcom,msm-bus,num-cases = <2>; |
| qcom,msm-bus,num-paths = <1>; |
| qcom,msm-bus,vectors-KBps = |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>, |
| <MSM_BUS_MASTER_CAMNOC_HF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>; |
| }; |
| }; |
| qcom,axi-port3 { |
| qcom,axi-port-name = "cam_sf_1"; |
| qcom,axi-port-mnoc { |
| qcom,msm-bus,name = "cam_sf_1_mnoc"; |
| qcom,msm-bus-vector-dyn-vote; |
| qcom,msm-bus,num-cases = <2>; |
| qcom,msm-bus,num-paths = <1>; |
| qcom,msm-bus,vectors-KBps = |
| <MSM_BUS_MASTER_CAMNOC_SF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>, |
| <MSM_BUS_MASTER_CAMNOC_SF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>; |
| }; |
| qcom,axi-port-camnoc { |
| qcom,msm-bus,name = "cam_sf_1_camnoc"; |
| qcom,msm-bus-vector-dyn-vote; |
| qcom,msm-bus,num-cases = <2>; |
| qcom,msm-bus,num-paths = <1>; |
| qcom,msm-bus,vectors-KBps = |
| <MSM_BUS_MASTER_CAMNOC_SF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>, |
| <MSM_BUS_MASTER_CAMNOC_SF |
| MSM_BUS_SLAVE_EBI_CH0 0 0>; |
| }; |
| }; |
| }; |
| }; |