[Freedreno] [v4] arm64: dts: sc7180: add display dt nodes

harigovi at codeaurora.org harigovi at codeaurora.org
Tue Feb 4 14:14:32 UTC 2020


On 2020-02-01 01:02, Doug Anderson wrote:
> Hi,
> 
> On Tue, Jan 28, 2020 at 5:25 AM Harigovindan P 
> <harigovi at codeaurora.org> wrote:
>> 
>> Add display, DSI hardware DT nodes for sc7180.
>> 
>> Signed-off-by: Harigovindan P <harigovi at codeaurora.org>
>> ---
>> 
>> Changes in v1:
>>         -Added display DT nodes for sc7180
>> Changes in v2:
>>         -Renamed node names
>>         -Corrected code alignments
>>         -Removed extra new line
>>         -Added DISP AHB clock for register access
>>         under display_subsystem node for global settings
>> Changes in v3:
>>         -Modified node names
>>         -Modified hard coded values
>>         -Removed mdss reg entry
>> Changes in v4:
>>         -Reverting mdp node name
>>         -Setting status to disabled in main SOC dtsi file
>>         -Replacing _ to - for node names
>>         -Adding clock dependency patch link
>>         -Splitting idp dt file to a separate patch
>> 
>> This patch has dependency on the below series
>> https://lkml.org/lkml/2019/12/27/73
>>  arch/arm64/boot/dts/qcom/sc7180.dtsi | 128 
>> +++++++++++++++++++++++++++++++++++
>>  1 file changed, 128 insertions(+)
>> 
>> diff --git a/arch/arm64/boot/dts/qcom/sc7180.dtsi 
>> b/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> index 3bc3f64..c3883af 100644
>> --- a/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/sc7180.dtsi
>> @@ -1184,6 +1184,134 @@
>>                         #power-domain-cells = <1>;
>>                 };
>> 
>> +               mdss: mdss at ae00000 {
>> +                       compatible = "qcom,sc7180-mdss";
>> +                       reg = <0 0x0ae00000 0 0x1000>;
>> +                       reg-names = "mdss";
>> +
>> +                       power-domains = <&dispcc MDSS_GDSC>;
>> +
>> +                       clocks = <&gcc GCC_DISP_AHB_CLK>,
>> +                                <&gcc GCC_DISP_HF_AXI_CLK>,
>> +                                <&dispcc DISP_CC_MDSS_AHB_CLK>,
>> +                                <&dispcc DISP_CC_MDSS_MDP_CLK>;
>> +                       clock-names = "iface", "gcc_bus", "ahb", 
>> "core";
> 
> The clock "ahb" is not in your bindings.  If it is truly needed,
> please update your bindings.
> 
> The clock "gcc_bus" is just called "bus" in the bindings.  Assuming
> this is the same clock, please use the name from the bindings.
> 
> 
>> +                       assigned-clocks = <&dispcc 
>> DISP_CC_MDSS_MDP_CLK>;
>> +                       assigned-clock-rates = <300000000>;
>> +
>> +                       interrupts = <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
>> +                       interrupt-controller;
>> +                       #interrupt-cells = <1>;
>> +
>> +                       iommus = <&apps_smmu 0x800 0x2>;
>> +
>> +                       #address-cells = <2>;
>> +                       #size-cells = <2>;
>> +                       ranges;
> 
> Do we need a:
>   status = "disabled";
> 
> I noticed that in sdm845 the top-level mdss node _does_ have that.  If
> someone was building a board with your chip and they had no display at
> all, would they want this node disabled?  If so then it should be
> disabled by default and boards should opt-in.
> 
> 
>> +                       mdss_mdp: mdp at ae01000 {
>> +                               compatible = "qcom,sc7180-dpu";
>> +                               reg = <0 0x0ae01000 0 0x8f000>,
>> +                                     <0 0x0aeb0000 0 0x2008>,
>> +                                     <0 0x0af03000 0 0x16>;
>> +                               reg-names = "mdp", "vbif", "disp_cc";
> 
> Did I already ask why you need the "disp_cc" register space?  If I
> didn't, can I ask now?  This is not in the bindings and I can't think
> of why you'd want it.  Does the code use it?  It doesn't seem to...
> 
> 
>> +                               clocks = <&dispcc 
>> DISP_CC_MDSS_AHB_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_ROT_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_MDP_LUT_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_MDP_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_VSYNC_CLK>;
>> +                               clock-names = "iface", "rot", "lut", 
>> "core",
>> +                                             "vsync";
> 
> Your bindings doc says that "bus" is required, yet you don't pass it.
> Should you?

"bus" is optional due to architecture change. Will update bindings in a 
new patch.

> 
> Your bindings doc says nothing about "rot" and "lut".  Presumably
> those should be added if they are actually needed?
> 
> 
>> +                               assigned-clocks = <&dispcc 
>> DISP_CC_MDSS_MDP_CLK>,
>> +                                                 <&dispcc 
>> DISP_CC_MDSS_VSYNC_CLK>;
>> +                               assigned-clock-rates = <300000000>,
>> +                                                      <19200000>;
>> +
>> +                               interrupt-parent = <&mdss>;
>> +                               interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
> 
> Do we need a:
>   status = "disabled";
> 
> I noticed that in sdm845 the mdss_mdp node _does_ have that.  NOTE:
> you'd only want to add it if it ever made sense to turn on the
> top-level mdss node but not this one.  If this should always be
> enabled at the exact same time as the top-level mdss node then there's
> no need to add the 'status = "disabled";'
> 
> If you decide that you don't need to add this, maybe you can submit a
> separate patch to remove it from sdm845?
> 
> 
>> +                               ports {
>> +                                       #address-cells = <1>;
>> +                                       #size-cells = <0>;
>> +
>> +                                       port at 0 {
>> +                                               reg = <0>;
>> +                                               dpu_intf1_out: 
>> endpoint {
>> +                                                       
>> remote-endpoint = <&dsi0_in>;
>> +                                               };
>> +                                       };
>> +                               };
>> +                       };
>> +
>> +                       dsi_controller: dsi-controller at ae94000 {
> 
> nit: Though "dsi-controller" is a sensible name, current binding
> examples show "dsi", not "dsi-controller".  The name "dsi" seems
> blessed by Rob Herring since it came from commit a3c463e0961c
> ("dt-bindings: msm/dsi: Some binding doc cleanups") which has his Ack,
> so I'd rather go with that.
> 
> 
>> +                               compatible = "qcom,mdss-dsi-ctrl";
>> +                               reg = <0 0x0ae94000 0 0x400>;
>> +                               reg-names = "dsi_ctrl";
>> +
>> +                               interrupt-parent = <&mdss>;
>> +                               interrupts = <4 IRQ_TYPE_LEVEL_HIGH>;
>> +
>> +                               clocks = <&dispcc 
>> DISP_CC_MDSS_BYTE0_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_BYTE0_INTF_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_PCLK0_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_ESC0_CLK>,
>> +                                        <&dispcc 
>> DISP_CC_MDSS_AHB_CLK>,
>> +                                        <&gcc GCC_DISP_HF_AXI_CLK>;
> 
> Comparing with sdm845 I notice that the last clock used to come from
> dispcc.  Now you're getting it from gcc.  Did the architecture
> actually change or are you working around a clock that should be
> exported by the dispcc but hasn't been finished yet?

Yes the architecture has changed.

> 
> 
>> +                               clock-names = "byte",
>> +                                             "byte_intf",
>> +                                             "pixel",
>> +                                             "core",
>> +                                             "iface",
>> +                                             "bus";
> 
> Your bindings doc says this about which clocks you need:
> 
> - clock-names: the following clocks are required:
>   * "mdp_core"
>   * "iface"
>   * "bus"
>   * "core_mmss"
>   * "byte"
>   * "pixel"
>   * "core"
>   For DSIv2, we need an additional clock:
>    * "src"
>   For DSI6G v2.0 onwards, we need also need the clock:
>    * "byte_intf"
> 
> ...seems like either the binding is wrong or you're missing a few
> clocks.  Which is it?
> 
> 
>> +                               phys = <&dsi_phy>;
>> +                               phy-names = "dsi";
>> +
>> +                               #address-cells = <1>;
>> +                               #size-cells = <0>;
>> +
>> +                               status = "disabled";
>> +
>> +                               ports {
>> +                                       #address-cells = <1>;
>> +                                       #size-cells = <0>;
>> +
>> +                                       port at 0 {
>> +                                               reg = <0>;
>> +                                               dsi0_in: endpoint {
>> +                                                       
>> remote-endpoint = <&dpu_intf1_out>;
>> +                                               };
>> +                                       };
>> +
>> +                                       port at 1 {
>> +                                               reg = <1>;
>> +                                               dsi0_out: endpoint {
>> +                                               };
>> +                                       };
>> +                               };
>> +                       };
>> +
>> +                       dsi_phy: dsi-phy at ae94400 {
>> +                               compatible = "qcom,dsi-phy-10nm";
>> +                               reg = <0 0x0ae94400 0 0x200>,
>> +                                     <0 0x0ae94600 0 0x280>,
>> +                                     <0 0x0ae94a00 0 0x1e0>;
>> +                               reg-names = "dsi_phy",
>> +                                           "dsi_phy_lane",
>> +                                           "dsi_pll";
>> +
>> +                               #clock-cells = <1>;
>> +                               #phy-cells = <0>;
>> +
>> +                               clocks = <&dispcc 
>> DISP_CC_MDSS_AHB_CLK>;
>> +                               clock-names = "iface";
> 
> Your bindings say:
> 
> - clock-names: the following clocks are required:
>   * "iface"
>   * "ref" (only required for new DTS files/entries)
> 
> I think you qualify as a "new" DTS file, so you should be providing 
> "ref".
> 
> 
>> +                               status = "disabled";
> 
> Bindings list "power-domains" as a required property.  Should the
> bindings be updated to make this optional, or should you be adding it?

Not needed. The supply will be picked from parent node. I will be 
removing power-domain as required property from dsi bindings in a new 
patch.

> 
> 
>> +                       };
>> +               };
>> +
>>                 pdc: interrupt-controller at b220000 {
> 
> nit: your sorting is still slightly off.  I can certainly apply your
> patch atop the dispcc device tree patch [1] now, which is good.  But
> the context clue in your patch that your stuff comes right before the
> 'pdc: interrupt-controller at b220000' means that you are being placed
> _after_ 'dispcc: clock-controller at af00000'.  You should be before it
> since ae00000 < af00000.
> 
> ...this may sound like making a big deal out of nothing, but keeping
> things sorted correctly is the best way to reduce merge conflicts when
> landing patches and that's a big deal.
> 
> --
> 
> Also, in response to your last patch [2] I said:
> 
>> ...speaking of which, can you please change your patch to replace the
>> bogus <0> in the dispcc for the DSI PHY, providing the clocks for
>> "dsi_phy_pll_byte" and "dsi_phy_pll_pixel"?  See
>> <https://crrev.com/c/2017974/3>
> 
> It doesn't appear that you've done this.  Can you?
> 
> 
> NOTE: as you can probably guess, my review was mostly this:
> - Compare your nodes with the nodes in a similar SoC (sdm845).
> - Compare your nodes with the examples in the bindings.
> - Compare your nodes with the text of the bindings.
> 
> Those are good things for you to do before you send out future patches
> to help make sure you didn't miss anything.
> 
> 
> -Doug
> 
> [1]
> https://lore.kernel.org/r/20200130131220.v3.15.I1a4b93fb005791e29a9dcf288fc8bd459a555a59@changeid
> [2]
> https://lore.kernel.org/r/CAD=FV=WKVGq+x1XFvZQvBcKVPdcVxQWJJmsqpAxY3t4dorvMYg@mail.gmail.com/


More information about the Freedreno mailing list