1*4882a593SmuzhiyunQualcomm Technologies, Inc. DPU KMS 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunDescription: 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunDevice tree bindings for MSM Mobile Display Subsytem(MDSS) that encapsulates 6*4882a593Smuzhiyunsub-blocks like DPU display controller, DSI and DP interfaces etc. 7*4882a593SmuzhiyunThe DPU display controller is found in SDM845 SoC. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunMDSS: 10*4882a593SmuzhiyunRequired properties: 11*4882a593Smuzhiyun- compatible: "qcom,sdm845-mdss", "qcom,sc7180-mdss" 12*4882a593Smuzhiyun- reg: physical base address and length of contoller's registers. 13*4882a593Smuzhiyun- reg-names: register region names. The following region is required: 14*4882a593Smuzhiyun * "mdss" 15*4882a593Smuzhiyun- power-domains: a power domain consumer specifier according to 16*4882a593Smuzhiyun Documentation/devicetree/bindings/power/power_domain.txt 17*4882a593Smuzhiyun- clocks: list of clock specifiers for clocks needed by the device. 18*4882a593Smuzhiyun- clock-names: device clock names, must be in same order as clocks property. 19*4882a593Smuzhiyun The following clocks are required: 20*4882a593Smuzhiyun * "iface" 21*4882a593Smuzhiyun * "bus" 22*4882a593Smuzhiyun * "core" 23*4882a593Smuzhiyun- interrupts: interrupt signal from MDSS. 24*4882a593Smuzhiyun- interrupt-controller: identifies the node as an interrupt controller. 25*4882a593Smuzhiyun- #interrupt-cells: specifies the number of cells needed to encode an interrupt 26*4882a593Smuzhiyun source, should be 1. 27*4882a593Smuzhiyun- iommus: phandle of iommu device node. 28*4882a593Smuzhiyun- #address-cells: number of address cells for the MDSS children. Should be 1. 29*4882a593Smuzhiyun- #size-cells: Should be 1. 30*4882a593Smuzhiyun- ranges: parent bus address space is the same as the child bus address space. 31*4882a593Smuzhiyun- interconnects : interconnect path specifier for MDSS according to 32*4882a593Smuzhiyun Documentation/devicetree/bindings/interconnect/interconnect.txt. Should be 33*4882a593Smuzhiyun 2 paths corresponding to 2 AXI ports. 34*4882a593Smuzhiyun- interconnect-names : MDSS will have 2 port names to differentiate between the 35*4882a593Smuzhiyun 2 interconnect paths defined with interconnect specifier. 36*4882a593Smuzhiyun 37*4882a593SmuzhiyunOptional properties: 38*4882a593Smuzhiyun- assigned-clocks: list of clock specifiers for clocks needing rate assignment 39*4882a593Smuzhiyun- assigned-clock-rates: list of clock frequencies sorted in the same order as 40*4882a593Smuzhiyun the assigned-clocks property. 41*4882a593Smuzhiyun 42*4882a593SmuzhiyunMDP: 43*4882a593SmuzhiyunRequired properties: 44*4882a593Smuzhiyun- compatible: "qcom,sdm845-dpu", "qcom,sc7180-dpu" 45*4882a593Smuzhiyun- reg: physical base address and length of controller's registers. 46*4882a593Smuzhiyun- reg-names : register region names. The following region is required: 47*4882a593Smuzhiyun * "mdp" 48*4882a593Smuzhiyun * "vbif" 49*4882a593Smuzhiyun- clocks: list of clock specifiers for clocks needed by the device. 50*4882a593Smuzhiyun- clock-names: device clock names, must be in same order as clocks property. 51*4882a593Smuzhiyun The following clocks are required. 52*4882a593Smuzhiyun * "bus" 53*4882a593Smuzhiyun * "iface" 54*4882a593Smuzhiyun * "core" 55*4882a593Smuzhiyun * "vsync" 56*4882a593Smuzhiyun- interrupts: interrupt line from DPU to MDSS. 57*4882a593Smuzhiyun- ports: contains the list of output ports from DPU device. These ports connect 58*4882a593Smuzhiyun to interfaces that are external to the DPU hardware, such as DSI, DP etc. 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun Each output port contains an endpoint that describes how it is connected to an 61*4882a593Smuzhiyun external interface. These are described by the standard properties documented 62*4882a593Smuzhiyun here: 63*4882a593Smuzhiyun Documentation/devicetree/bindings/graph.txt 64*4882a593Smuzhiyun Documentation/devicetree/bindings/media/video-interfaces.txt 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun Port 0 -> DPU_INTF1 (DSI1) 67*4882a593Smuzhiyun Port 1 -> DPU_INTF2 (DSI2) 68*4882a593Smuzhiyun 69*4882a593SmuzhiyunOptional properties: 70*4882a593Smuzhiyun- assigned-clocks: list of clock specifiers for clocks needing rate assignment 71*4882a593Smuzhiyun- assigned-clock-rates: list of clock frequencies sorted in the same order as 72*4882a593Smuzhiyun the assigned-clocks property. 73*4882a593Smuzhiyun 74*4882a593SmuzhiyunExample: 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun mdss: mdss@ae00000 { 77*4882a593Smuzhiyun compatible = "qcom,sdm845-mdss"; 78*4882a593Smuzhiyun reg = <0xae00000 0x1000>; 79*4882a593Smuzhiyun reg-names = "mdss"; 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun power-domains = <&clock_dispcc 0>; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun clocks = <&gcc GCC_DISP_AHB_CLK>, <&gcc GCC_DISP_AXI_CLK>, 84*4882a593Smuzhiyun <&clock_dispcc DISP_CC_MDSS_MDP_CLK>; 85*4882a593Smuzhiyun clock-names = "iface", "bus", "core"; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun assigned-clocks = <&clock_dispcc DISP_CC_MDSS_MDP_CLK>; 88*4882a593Smuzhiyun assigned-clock-rates = <300000000>; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>; 91*4882a593Smuzhiyun interrupt-controller; 92*4882a593Smuzhiyun #interrupt-cells = <1>; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun interconnects = <&rsc_hlos MASTER_MDP0 &rsc_hlos SLAVE_EBI1>, 95*4882a593Smuzhiyun <&rsc_hlos MASTER_MDP1 &rsc_hlos SLAVE_EBI1>; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun interconnect-names = "mdp0-mem", "mdp1-mem"; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun iommus = <&apps_iommu 0>; 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun #address-cells = <2>; 102*4882a593Smuzhiyun #size-cells = <1>; 103*4882a593Smuzhiyun ranges = <0 0 0xae00000 0xb2008>; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun mdss_mdp: mdp@ae01000 { 106*4882a593Smuzhiyun compatible = "qcom,sdm845-dpu"; 107*4882a593Smuzhiyun reg = <0 0x1000 0x8f000>, <0 0xb0000 0x2008>; 108*4882a593Smuzhiyun reg-names = "mdp", "vbif"; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun clocks = <&clock_dispcc DISP_CC_MDSS_AHB_CLK>, 111*4882a593Smuzhiyun <&clock_dispcc DISP_CC_MDSS_AXI_CLK>, 112*4882a593Smuzhiyun <&clock_dispcc DISP_CC_MDSS_MDP_CLK>, 113*4882a593Smuzhiyun <&clock_dispcc DISP_CC_MDSS_VSYNC_CLK>; 114*4882a593Smuzhiyun clock-names = "iface", "bus", "core", "vsync"; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun assigned-clocks = <&clock_dispcc DISP_CC_MDSS_MDP_CLK>, 117*4882a593Smuzhiyun <&clock_dispcc DISP_CC_MDSS_VSYNC_CLK>; 118*4882a593Smuzhiyun assigned-clock-rates = <0 0 300000000 19200000>; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun interrupts = <0 IRQ_TYPE_LEVEL_HIGH>; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun ports { 123*4882a593Smuzhiyun #address-cells = <1>; 124*4882a593Smuzhiyun #size-cells = <0>; 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun port@0 { 127*4882a593Smuzhiyun reg = <0>; 128*4882a593Smuzhiyun dpu_intf1_out: endpoint { 129*4882a593Smuzhiyun remote-endpoint = <&dsi0_in>; 130*4882a593Smuzhiyun }; 131*4882a593Smuzhiyun }; 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun port@1 { 134*4882a593Smuzhiyun reg = <1>; 135*4882a593Smuzhiyun dpu_intf2_out: endpoint { 136*4882a593Smuzhiyun remote-endpoint = <&dsi1_in>; 137*4882a593Smuzhiyun }; 138*4882a593Smuzhiyun }; 139*4882a593Smuzhiyun }; 140*4882a593Smuzhiyun }; 141*4882a593Smuzhiyun }; 142