Message ID | 20191007014509.25180-5-masneyb@onstation.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/msm: external HDMI support for Nexus 5 phone | expand |
Quoting Brian Masney (2019-10-06 18:45:08) > diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi > index 7fc23e422cc5..af02eace14e2 100644 > --- a/arch/arm/boot/dts/qcom-msm8974.dtsi > +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi > @@ -1335,6 +1342,77 @@ > clocks = <&mmcc MDSS_AHB_CLK>; > clock-names = "iface"; > }; > + > + hdmi: hdmi-tx@fd922100 { > + status = "disabled"; > + > + compatible = "qcom,hdmi-tx-8974"; > + reg = <0xfd922100 0x35c>, > + <0xfc4b8000 0x60f0>; > + reg-names = "core_physical", > + "qfprom_physical"; Is this the qfprom "uncorrected" physical address? If so, why can't this node use an nvmem to read whatever it needs out of the qfprom? > + > + interrupt-parent = <&mdss>; > + interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; > + > + power-domains = <&mmcc MDSS_GDSC>; > +
On Tue, Oct 08, 2019 at 07:21:30PM -0700, Stephen Boyd wrote: > Quoting Brian Masney (2019-10-06 18:45:08) > > diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi > > index 7fc23e422cc5..af02eace14e2 100644 > > --- a/arch/arm/boot/dts/qcom-msm8974.dtsi > > +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi > > @@ -1335,6 +1342,77 @@ > > clocks = <&mmcc MDSS_AHB_CLK>; > > clock-names = "iface"; > > }; > > + > > + hdmi: hdmi-tx@fd922100 { > > + status = "disabled"; > > + > > + compatible = "qcom,hdmi-tx-8974"; > > + reg = <0xfd922100 0x35c>, > > + <0xfc4b8000 0x60f0>; > > + reg-names = "core_physical", > > + "qfprom_physical"; > > Is this the qfprom "uncorrected" physical address? If so, why can't this > node use an nvmem to read whatever it needs out of the qfprom? The MSM HDMI code is configured to look for this reg-name here: https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/msm/hdmi/hdmi.c#L582 There is a qcom,qfprom configured for this board in DTS, however its at a different address range, so maybe there are multiple qfproms? https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/qcom-msm8974.dtsi#L424 msm8996.dtsi has the same style of configuration: https://elixir.bootlin.com/linux/latest/source/arch/arm64/boot/dts/qcom/msm8996.dtsi#L956 https://elixir.bootlin.com/linux/latest/source/arch/arm64/boot/dts/qcom/msm8996.dtsi#L1736 Brian
Quoting Brian Masney (2019-10-08 23:05:20) > On Tue, Oct 08, 2019 at 07:21:30PM -0700, Stephen Boyd wrote: > > Quoting Brian Masney (2019-10-06 18:45:08) > > > diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi > > > index 7fc23e422cc5..af02eace14e2 100644 > > > --- a/arch/arm/boot/dts/qcom-msm8974.dtsi > > > +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi > > > @@ -1335,6 +1342,77 @@ > > > clocks = <&mmcc MDSS_AHB_CLK>; > > > clock-names = "iface"; > > > }; > > > + > > > + hdmi: hdmi-tx@fd922100 { > > > + status = "disabled"; > > > + > > > + compatible = "qcom,hdmi-tx-8974"; > > > + reg = <0xfd922100 0x35c>, > > > + <0xfc4b8000 0x60f0>; > > > + reg-names = "core_physical", > > > + "qfprom_physical"; > > > > Is this the qfprom "uncorrected" physical address? If so, why can't this > > node use an nvmem to read whatever it needs out of the qfprom? > > The MSM HDMI code is configured to look for this reg-name here: > > https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/msm/hdmi/hdmi.c#L582 > > There is a qcom,qfprom configured for this board in DTS, however its at > a different address range, so maybe there are multiple qfproms? > > https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/qcom-msm8974.dtsi#L424 > > msm8996.dtsi has the same style of configuration: > > https://elixir.bootlin.com/linux/latest/source/arch/arm64/boot/dts/qcom/msm8996.dtsi#L956 > https://elixir.bootlin.com/linux/latest/source/arch/arm64/boot/dts/qcom/msm8996.dtsi#L1736 > There's only one qfprom and there's the address space that's "uncorrected" which is not supposed to be used and there's the space that is "corrected" and is supposed to be used. It looks like this is poking the uncorrected space and it should probably stop doing that and use the nvmem provider instead. Maybe someone with docs for this chip and 8996 can help confirm this.
On Wed, Oct 09, 2019 at 08:39:26AM -0700, Stephen Boyd wrote: > Quoting Brian Masney (2019-10-08 23:05:20) > > On Tue, Oct 08, 2019 at 07:21:30PM -0700, Stephen Boyd wrote: > > > Quoting Brian Masney (2019-10-06 18:45:08) > > > > diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi > > > > index 7fc23e422cc5..af02eace14e2 100644 > > > > --- a/arch/arm/boot/dts/qcom-msm8974.dtsi > > > > +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi > > > > @@ -1335,6 +1342,77 @@ > > > > clocks = <&mmcc MDSS_AHB_CLK>; > > > > clock-names = "iface"; > > > > }; > > > > + > > > > + hdmi: hdmi-tx@fd922100 { > > > > + status = "disabled"; > > > > + > > > > + compatible = "qcom,hdmi-tx-8974"; > > > > + reg = <0xfd922100 0x35c>, > > > > + <0xfc4b8000 0x60f0>; > > > > + reg-names = "core_physical", > > > > + "qfprom_physical"; > > > > > > Is this the qfprom "uncorrected" physical address? If so, why can't this > > > node use an nvmem to read whatever it needs out of the qfprom? > > > > The MSM HDMI code is configured to look for this reg-name here: > > > > https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/msm/hdmi/hdmi.c#L582 > > > > There is a qcom,qfprom configured for this board in DTS, however its at > > a different address range, so maybe there are multiple qfproms? > > > > https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/qcom-msm8974.dtsi#L424 > > > > msm8996.dtsi has the same style of configuration: > > > > https://elixir.bootlin.com/linux/latest/source/arch/arm64/boot/dts/qcom/msm8996.dtsi#L956 > > https://elixir.bootlin.com/linux/latest/source/arch/arm64/boot/dts/qcom/msm8996.dtsi#L1736 > > > > There's only one qfprom and there's the address space that's > "uncorrected" which is not supposed to be used and there's the space > that is "corrected" and is supposed to be used. It looks like this is > poking the uncorrected space and it should probably stop doing that and > use the nvmem provider instead. Maybe someone with docs for this chip > and 8996 can help confirm this. Do you know of any publicly-available documentation that describes the "uncorrected" and "corrected" addresses? I got that qfprom address for the HDMI from here: https://github.com/AICP/kernel_lge_hammerhead/blob/n7.1/arch/arm/boot/dts/msm8974-mdss.dtsi#L101 I assume the downstream kernel probably doesn't have the corrected address anywhere else? Brian
diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi index 7fc23e422cc5..af02eace14e2 100644 --- a/arch/arm/boot/dts/qcom-msm8974.dtsi +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi @@ -1258,6 +1258,13 @@ port@0 { reg = <0>; + mdp5_intf3_out: endpoint { + remote-endpoint = <&hdmi_in>; + }; + }; + + port@1 { + reg = <1>; mdp5_intf1_out: endpoint { remote-endpoint = <&dsi0_in>; }; @@ -1335,6 +1342,77 @@ clocks = <&mmcc MDSS_AHB_CLK>; clock-names = "iface"; }; + + hdmi: hdmi-tx@fd922100 { + status = "disabled"; + + compatible = "qcom,hdmi-tx-8974"; + reg = <0xfd922100 0x35c>, + <0xfc4b8000 0x60f0>; + reg-names = "core_physical", + "qfprom_physical"; + + interrupt-parent = <&mdss>; + interrupts = <8 IRQ_TYPE_LEVEL_HIGH>; + + power-domains = <&mmcc MDSS_GDSC>; + + clocks = <&mmcc MDSS_MDP_CLK>, + <&mmcc MDSS_AHB_CLK>, + <&mmcc MDSS_HDMI_CLK>, + <&mmcc MDSS_HDMI_AHB_CLK>, + <&mmcc MDSS_EXTPCLK_CLK>; + clock-names = "mdp_core", + "iface", + "core", + "alt_iface", + "extp"; + + hpd-5v-supply = <&pm8941_5vs2>; + core-vdda-supply = <&pm8941_l12>; + core-vcc-supply = <&pm8941_s3>; + + phys = <&hdmi_phy>; + phy-names = "hdmi_phy"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + hdmi_in: endpoint { + remote-endpoint = <&mdp5_intf3_out>; + }; + }; + + port@1 { + reg = <1>; + }; + }; + }; + + hdmi_phy: hdmi-phy@fd922500 { + status = "disabled"; + + compatible = "qcom,hdmi-phy-8974"; + reg = <0xfd922500 0x7c>, + <0xfd922700 0xd4>; + reg-names = "hdmi_phy", + "hdmi_pll"; + + clocks = <&mmcc MDSS_AHB_CLK>, + <&mmcc MDSS_HDMI_AHB_CLK>; + clock-names = "iface", + "alt_iface"; + + core-vdda-supply = <&pm8941_l12>; + vddio-supply = <&pm8941_s3>; + + power-domains = <&mmcc MDSS_GDSC>; + + #phy-cells = <0>; + }; }; };