lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 4 Sep 2020 15:29:09 +0300
From:   Dmitry Baryshkov <dmitry.baryshkov@...aro.org>
To:     Jonathan Marek <jonathan@...ek.ca>,
        Stephen Boyd <swboyd@...omium.org>,
        Kishon Vijay Abraham I <kishon@...com>,
        Vinod Koul <vkoul@...nel.org>
Cc:     linux-kernel@...r.kernel.org, linux-arm-msm@...r.kernel.org,
        Jeykumar Sankaran <jsanka@...eaurora.org>,
        Chandan Uddaraju <chandanu@...eaurora.org>,
        Vara Reddy <varar@...eaurora.org>,
        Tanmay Shah <tanmay@...eaurora.org>,
        Bjorn Andersson <bjorn.andersson@...aro.org>,
        Manu Gautam <mgautam@...eaurora.org>,
        Sandeep Maheswaram <sanm@...eaurora.org>,
        Douglas Anderson <dianders@...omium.org>,
        Sean Paul <seanpaul@...omium.org>,
        Stephen Boyd <sboyd@...nel.org>,
        Rob Clark <robdclark@...omium.org>
Subject: Re: [PATCH v2 07/10] phy: qcom-qmp: Add support for DP in USB3+DP
 combo phy

On 03/09/2020 23:43, Jonathan Marek wrote:
> On 9/2/20 7:02 PM, Stephen Boyd wrote:
>> Add support for the USB3 + DisplayPort (DP) "combo" phy to the qmp phy
>> driver. We already have support for the USB3 part of the combo phy, so
>> most additions are for the DP phy.
>>
>> Split up the qcom_qmp_phy{enable,disable}() functions into the phy init,
>> power on, power off, and exit functions that the common phy framework
>> expects so that the DP phy can add even more phy ops like
>> phy_calibrate() and phy_configure(). This allows us to initialize the DP
>> PHY and configure the AUX channel before powering on the PHY at the link
>> rate that was negotiated during link training.
>>
>> The general design is as follows:
>>
>>    1) DP controller calls phy_init() to initialize the PHY and configure
>>    the dp_com register region.
>>
>>    2) DP controller calls phy_configure() to tune the link rate and
>>    voltage swing and pre-emphasis settings.
>>
>>    3) DP controller calls phy_power_on() to enable the PLL and power on
>>    the phy.
>>
>>    4) DP controller calls phy_configure() again to tune the voltage swing
>>    and pre-emphasis settings determind during link training.
>>
>>    5) DP controller calls phy_calibrate() some number of times to change
>>    the aux settings if the aux channel times out during link training.
>>
>>    6) DP controller calls phy_power_off() if the link rate is to be
>>    changed and goes back to step 2 to try again at a different link rate.
>>
>>    5) DP controller calls phy_power_off() and then phy_exit() to power
>>    down the PHY when it is done.
>>
>> The DP PHY contains a PLL that is different from the one used for the
>> USB3 PHY. Instead of a pipe clk there is a link clk and a pixel clk
>> output from the DP PLL after going through various dividers. Introduce
>> clk ops for these two clks that just tell the child clks what the
>> frequency of the pixel and link are. When the phy link rate is
>> configured we call clk_set_rate() to update the child clks in the
>> display clk controller on what rate is in use. The clk frequencies
>> always differ based on the link rate (i.e. 1.6Gb/s 2.7Gb/s, 5.4Gb/s, or
>> 8.1Gb/s corresponding to various transmission modes like HBR1, HBR2 or
>> HBR3) so we simply store the link rate and use that to calculate the clk
>> frequencies.
>>
>> The PLL enable sequence is a little different from other QMP phy PLLs so
>> we power on the PLL in qcom_qmp_phy_configure_dp_phy() that gets called
>> from phy_power_on(). This should probably be split out better so that
>> each phy has a way to run the final PLL/PHY enable sequence.
>>
>> This code is based on a submission of this phy and PLL in the drm
>> subsystem.
> 
> I updated my upstream-based sm8150/sm8250 displayport stack [1] to use 
> these patches.

I have tried your branch on my RB5 with two different dongles. Both 
dongles provide the same behaviour:
  - on first plug I see VDM Tx errors,
  - after I unplug and replug the dongle, PD phy seems to be stuck on 
sending capabilities.

See attached logs.

Also I had to add typec_unregister_port(port->typec_port); to 
IS_ERR(alt) in your tcpm.c hack.

I'm currently finishing the driver for the mux/redriver, will retry 
testing afterwards.

> This commit [2] might interest you, so that you can consider what needs 
> to change between v3 and v4 PHYs. Note some of the V4 registers have the 
> same address as V3, so the diff could be smaller.
> 
> Do you have any plan for dealing with the SS PHY and DP PHY conflicting 
> with each other? For example, PHY_MODE_CTRL needs to be "DP_MODE" for 
> 4-lane DP, "DP_MODE | USB3_MODE" for 2-lane DP + USB3, and (AFAIK) 
> "USB3_MODE" for superspeedplus usb (and it seems this gates some clocks, 
> so you can't read/write dp tx2 registers in 2-lane DP mode for example). 
> From your cover letter it sounds like this isn't relevant to your 
> hardware, but it looks like both PHYs are writing to the dp_com region 
> which is still problematic. (in the branch I linked, I disabled the SS 
> PHY to test the DP PHY)
> 
> Also some issues I noticed:
> - used QSERDES_COM_RESETSM_CNTRL instead of 
> QSERDES_V3_COM_RESETSM_CNTRL2, which has different value
> - in sc7180_dpphy_cfg, .regs is NULL, which results in NULL references
> 
> [1] https://github.com/flto/linux/commits/sm8x50-hdk-display
> [2] 
> https://github.com/flto/linux/commit/ccf56912bd5e652b4daebec1300961a9d51342b1 
> 


-- 
With best wishes
Dmitry

View attachment "dp-hdmi.txt" of type "text/plain" (26817 bytes)

View attachment "dp-vga.txt" of type "text/plain" (27245 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ