[Freedreno] [DPU PATCH v5 1/5] dt-bindings: msm/dp: add bindings of DP/DP-PLL driver for Snapdragon
tanmay at codeaurora.org
tanmay at codeaurora.org
Tue Jun 9 00:15:12 UTC 2020
Thanks for reviews Stephen. Please find my comments according to new
design.
On 2020-04-23 16:41, Stephen Boyd wrote:
> Quoting Tanmay Shah (2020-03-31 17:30:27)
>> diff --git
>> a/Documentation/devicetree/bindings/display/msm/dp-sc7180.yaml
>> b/Documentation/devicetree/bindings/display/msm/dp-sc7180.yaml
>> new file mode 100644
>> index 0000000..761a01d
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/display/msm/dp-sc7180.yaml
>> @@ -0,0 +1,325 @@
>> +# SPDX-License-Identifier: GPL-2.0-only
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/display/msm/dp-sc7180.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Description of Qualcomm Display Port dt properties.
>
> This title should be something like
>
> "Qualcomm Display Port Controller"
>
Changed title as suggested.
>> +
>> +maintainers:
>> + - Chandan Uddaraju <chandanu at codeaurora.org>
>> + - Vara Reddy <varar at codeaurora.org>
>> +
>> +description: |
>> + Device tree bindings for MSM Display Port which supports DP host
>> controllers
>> + that are compatible with VESA Display Port interface specification.
>> +
>> +properties:
>> + "msm_dp":
>> + type: object
>> + description: |
>> + Node containing Display port register address bases, clocks,
>> power
>> supplies.
>> +
>> + properties:
>> + compatible:
>> + items:
>> + - const: qcom,dp-display
>> +
>> + cell-index:
>> + description: Specifies the controller instance.
>> +
>> + reg:
>> + description: Physical base address and length of controller's
>> registers.
>> +
>> + reg-names:
>> + description: |
>> + Names for different register regions defined above. The
>> required
>> region
>> + is mentioned below.
>> + items:
>> + - const: dp_ahb
>> + - const: dp_aux
>> + - const: dp_link
>> + - const: dp_p0
>> + - const: dp_phy
>> + - const: dp_ln_tx0
>> + - const: dp_ln_tx1
>> + - const: afprom_physical
>> + - const: dp_pll
>> + - const: usb3_dp_com
>> + - const: hdcp_physical
>> +
>> + interrupts:
>> + description: The interrupt signal from the DP block.
>> +
>> + clocks:
>> + description: List of clock specifiers for clocks needed by the
>> device.
>> +
>> + clock-names:
>> + description: |
>> + Device clock names in the same order as mentioned in clocks
>> property.
>> + The required clocks are mentioned below.
>> + items:
>> + - const: core_aux_clk
>> + - const: core_ref_clk_src
>> + - const: core_usb_ref_clk
>> + - const: core_usb_cfg_ahb_clk
>> + - const: core_usb_pipe_clk
>> + - const: ctrl_link_clk
>> + - const: ctrl_link_iface_clk
>> + - const: ctrl_pixel_clk
>> + - const: crypto_clk
>> + - const: pixel_clk_rcg
>> +
>> + pll-node:
>> + description: phandle to DP PLL node.
>> +
>> + vdda-1p2-supply:
>> + description: phandle to vdda 1.2V regulator node.
>> +
>> + vdda-0p9-supply:
>> + description: phandle to vdda 0.9V regulator node.
>> +
>> + aux-cfg0-settings:
>> + description: |
>> + Specifies the DP AUX configuration 0 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg1-settings:
>> + description: |
>> + Specifies the DP AUX configuration 1 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg2-settings:
>> + description: |
>> + Specifies the DP AUX configuration 2 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg3-settings:
>> + description: |
>> + Specifies the DP AUX configuration 3 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg4-settings:
>> + description: |
>> + Specifies the DP AUX configuration 4 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg5-settings:
>> + description: |
>> + Specifies the DP AUX configuration 5 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg6-settings:
>> + description: |
>> + Specifies the DP AUX configuration 6 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg7-settings:
>> + description: |
>> + Specifies the DP AUX configuration 7 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg8-settings:
>> + description: |
>> + Specifies the DP AUX configuration 8 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + aux-cfg9-settings:
>> + description: |
>> + Specifies the DP AUX configuration 9 settings.
>> + The first entry in this array corresponds to the register
>> offset
>> + within DP AUX, while the remaining entries indicate the
>> + programmable values.
>> +
>> + max-pclk-frequency-khz:
>> + description: Maximum displayport pixel clock supported for the
>> chipset.
>> +
>> + data-lanes:
>> + description: Maximum number of lanes that can be used for
>> Display
>> port.
>
> This should be an array of cells, not a single cell indicating the
> number of lanes.
>
Done. Now data-lanes is array of integers and size of array represents
maximum number of lanes supported.
>> +
>> + usbplug-cc-gpio:
>> + maxItems: 1
>> + description: Specifies the usbplug orientation gpio.
>> +
>> + aux-en-gpio:
>> + maxItems: 1
>> + description: Specifies the aux-channel enable gpio.
>> +
>> + aux-sel-gpio:
>> + maxItems: 1
>> + description: Specifies the sux-channel select gpio.
>> +
>> + ports:
>> + description: |
>> + Contains display port controller endpoint subnode.
>> + remote-endpoint: |
>> + For port at 0, set to phandle of the connected panel/bridge's
>> + input endpoint. For port at 1, set to the DPU interface
>> output.
>> + Documentation/devicetree/bindings/graph.txt and
>> +
>> Documentation/devicetree/bindings/media/video-interfaces.txt.
>> +
>> + "dp_pll":
>> + type: object
>> + description: Node contains properties of Display port pll and
>> phy
>> driver.
>> +
>> + properties:
>> + compatible:
>> + items:
>> + - const: qcom,dp-pll-10nm
>> +
>> + cell-index:
>> + description: Specifies the controller instance.
>> +
>> + reg:
>> + description: Physical base address and length of DP phy and
>> pll
>> registers.
>> +
>> + reg-names:
>> + description: |
>> + Names for different register regions defined above. The
>> required region
>> + is mentioned below.
>> + items:
>> + - const: pll_base
>> + - const: phy_base
>> + - const: ln_tx0_base
>> + - const: ln_tx1_base
>> + - const: gdsc_base
>> +
>> + clocks:
>> + description: List of clock specifiers for clocks needed by
>> the
>> device.
>> +
>> + clock-names:
>> + description: |
>> + Device clock names in the same order as mentioned in
>> clocks
>> property.
>> + The required clocks are mentioned below.
>> + items:
>> + - const: iface
>> + - const: ref
>> + - const: cfg_ahb
>> + - const: pipe
>> +
>> +examples:
>> + - |
>> + #include <dt-bindings/interrupt-controller/arm-gic.h>
>> + #include <dt-bindings/clock/qcom,dispcc-sdm845.h>
>> + #include <dt-bindings/clock/qcom,gcc-sdm845.h>
>> + #include <dt-bindings/clock/qcom,rpmh.h>
>> + #include <dt-bindings/gpio/gpio.h>
>> + msm_dp: displayport-controller at ae90000{
>> + cell-index = <0>;
>> + compatible = "qcom,dp-display";
>> + reg = <0 0xae90000 0 0x200>,
>> + <0 0xae90200 0 0x200>,
>> + <0 0xae90400 0 0xc00>,
>> + <0 0xae91000 0 0x400>,
>> + <0 0x88eaa00 0 0x200>,
>> + <0 0x88ea200 0 0x200>,
>> + <0 0x88ea600 0 0x200>,
>> + <0 0x780000 0 0x6228>,
>> + <0 0x088ea000 0 0x40>,
>> + <0 0x88e8000 0 0x20>,
>> + <0 0x0aee1000 0 0x034>;
>
> This needs to be split up into at least two nodes. Any address above
> that starts in 88e needs to be put into a new node underneath the qmp
> phy. That is the "DP PHY" that lives in the power domain of the USB+DP
> combo phy. The qfprom_physical reg property should be removed from here
> and this binding should use the nvmem binding to reach into the qfprom
> to read out things (I guess there's some sort of HDCP key in the
> qfprom?).
>
> After that I don't know why there are so many different reg properties
> for the DP controller here and why it needs to be split up. It looks
> like we should just map the register space from 0xae90000 up to
> 0xae91400 as one big register region and have the driver figure out how
> to operate on top of that. If it changes between SoC versions then we
> should have a more specific compatible that tells us what registers are
> in what place.
>
Done. Only one register region is specified here now in new bindings
i.e. dp_controller
starting from 0xae90000 upto 0xae91400. Removed rest of the module
offsets.
Driver will access each module using offset as required. Also PHY and
USB3 DPCOM
register bases are hard-coded in driver. Removed redundant qfprom and
hdcp registers from bindings.
>> + reg-names = "dp_ahb", "dp_aux", "dp_link",
>> + "dp_p0", "dp_phy", "dp_ln_tx0", "dp_ln_tx1",
>> + "qfprom_physical", "dp_pll",
>> + "usb3_dp_com", "hdcp_physical";
>> +
>> + interrupt-parent = <&display_subsystem>;
>> + interrupts = <12 0>;
>> +
>> + clocks = <&dispcc DISP_CC_MDSS_DP_AUX_CLK>,
>> + <&rpmhcc RPMH_CXO_CLK>,
>> + <&gcc GCC_USB3_PRIM_CLKREF_CLK>,
>> + <&gcc GCC_USB_PHY_CFG_AHB2PHY_CLK>,
>> + <&gcc GCC_USB3_PRIM_PHY_PIPE_CLK>,
>> + <&dispcc DISP_CC_MDSS_DP_LINK_CLK>,
>> + <&dispcc DISP_CC_MDSS_DP_LINK_INTF_CLK>,
>> + <&dispcc DISP_CC_MDSS_DP_PIXEL_CLK>,
>> + <&dispcc DISP_CC_MDSS_DP_CRYPTO_CLK>,
>> + <&dispcc DISP_CC_MDSS_DP_PIXEL_CLK_SRC>;
>> + clock-names = "core_aux_clk", "core_ref_clk_src",
>> + "core_usb_ref_clk", "core_usb_cfg_ahb_clk",
>> + "core_usb_pipe_clk", "ctrl_link_clk",
>> + "ctrl_link_iface_clk", "ctrl_pixel_clk",
>> + "crypto_clk", "pixel_clk_rcg";
>> +
>> + pll-node = <&dp_pll>;
>
> If the DP PLL and DP controller need to be controlled from two software
> entities, it may make sense to just combine that DP PLL into the
> controller node and have this node be a clk provider. The pll-node
> property is pretty ugly and should be removed.
>
Done. Removed PLL as separate node and combined PLL as module of DP
driver.
Removed pll-node property as well.
>> + vdda-1p2-supply = <&vreg_l3c_1p2>;
>> + vdda-0p9-supply = <&vreg_l4a_0p8>;
>> +
>> + aux-cfg0-settings = [20 00];
>> + aux-cfg1-settings = [24 13 23 1d];
>> + aux-cfg2-settings = [28 24];
>> + aux-cfg3-settings = [2c 00];
>> + aux-cfg4-settings = [30 0a];
>> + aux-cfg5-settings = [34 26];
>> + aux-cfg6-settings = [38 0a];
>> + aux-cfg7-settings = [3c 03];
>> + aux-cfg8-settings = [40 bb];
>> + aux-cfg9-settings = [44 03];
>
> This pile of properties is board specific configuration tuning or
> something? Can this go into the driver? Or can it be made more human
> readable? I seem to recall that the USB phy had similar properties and
> we made them into human readable properties when board integrators
> needed to change them. The easiest approach there is to put everything
> in the driver for now and then when something has to change for a board
> it gets punted out to the DT and that overrides the "default" settings
> that are used in the driver.
>
Made aux-cfg[0-9]-settingsproperties optional in bindings.
Added default configurations in driver and using them if these
properties
are not mentioned in dts.
>> +
>> + max-pclk-frequency-khz = <67500>;
>
> What is this? Why isn't this in the driver?
>
Done. Removed this property from bindings and setting default value in
driver.
>> + data-lanes = <2>;
>> +
>> + aux-en-gpio = <&msmgpio 55 1>;
>> + aux-sel-gpio = <&msmgpio 110 1>;
>> + usbplug-cc-gpio = <&msmgpio 90 1>;
>> +
>> + ports {
>> + #address-cells = <1>;
>> + #size-cells = <0>;
>> +
>> + port at 0 {
>> + reg = <0>;
>> + dp_in: endpoint {
>> + remote-endpoint = <&dpu_intf0_out>;
>> + };
>> + };
>> +
>> + port at 1 {
>> + reg = <1>;
>> + dp_out: endpoint {
>> + };
>> + };
>> + };
>> + };
>> +
>> + dp_pll: dp-pll at 088ea000 {
>> + compatible = "qcom,dp-pll-10nm";
>> + label = "DP PLL";
>> + cell-index = <0>;
>> + #clock-cells = <1>;
>> +
>> + reg = <0 0x088ea000 0 0x200>,
>> + <0 0x088eaa00 0 0x200>,
>> + <0 0x088ea200 0 0x200>,
>> + <0 0x088ea600 0 0x200>,
>> + <0 0x08803000 0 0x8>;
>> + reg-names = "pll_base", "phy_base", "ln_tx0_base",
>> + "ln_tx1_base", "gdsc_base";
>
> I guess the DP_PLL lives inside the qmp combo phy? That would match how
> the USB phy binding has been done there. This whole node should be
> combined with the DP phy node that will be placed as a child of the qmp
> phy wrapper (i.e. qcom,sc7180-qmp-usb3-phy compatible node). Might as
> well change that compatible from qcom,sc7180-qmp-usb3-phy to be
> qcom,sc7180-qmp-usb3-dp-phy too so that it can create the DP phy bits
> too.
>
Done. Removed whole dp_pll node from here and added PLL as module of DP
driver.
This required hard coding of few register bases in driver for now.
>> +
>> + clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
>> + <&gcc GCC_USB3_PRIM_CLKREF_CLK>,
>> + <&gcc GCC_USB_PHY_CFG_AHB2PHY_CLK>,
>> + <&gcc GCC_USB3_PRIM_PHY_PIPE_CLK>;
>> + clock-names = "iface_clk", "ref_clk",
>> + "cfg_ahb_clk", "pipe_clk";
>> + };
>> +
>> diff --git a/Documentation/devicetree/bindings/display/msm/dpu.txt
>> b/Documentation/devicetree/bindings/display/msm/dpu.txt
>> index 551ae26..7e99e45 100644
>> --- a/Documentation/devicetree/bindings/display/msm/dpu.txt
>> +++ b/Documentation/devicetree/bindings/display/msm/dpu.txt
>> @@ -63,8 +63,9 @@ Required properties:
>> Documentation/devicetree/bindings/graph.txt
>> Documentation/devicetree/bindings/media/video-interfaces.txt
>>
>> - Port 0 -> DPU_INTF1 (DSI1)
>> - Port 1 -> DPU_INTF2 (DSI2)
>> + Port 0 -> DPU_INTF0 (DP)
>> + Port 1 -> DPU_INTF1 (DSI1)
>> + Port 2 -> DPU_INTF2 (DSI2)
>
> DP should come last so that the port mapping doesn't have to change.
>
Done. Reverted Port mapping to old one i.e. Port0->DSI1, Port1->DSI2 and
Added Port2->DP mapping.
>>
>> Optional properties:
>> - assigned-clocks: list of clock specifiers for clocks needing rate
>> assignment
More information about the Freedreno
mailing list