Re: [PATCH 1/2] usb: dwc3: core: add Gen2 polarity detection support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Sep 27, 2024 at 03:25:56PM +0800, Michael Wu wrote:
> According to the DWC31 Enhanced SuperSpeed USB3.1 Controller Programming
> Guide, for Gen2 polarity detection, link uses data block (0011b) sync
> header for SYNC OS instead of control block (1100b).
> 
> Added 'snps,inv-sync-hdr-quirk' a DT property to set this bit 30 of
> LLUCTL if the third-party PHY doesn't correct the sync header of the
> SYNC OS in the case of inverse polarity.
> 
> Signed-off-by: Michael Wu <michael@xxxxxxxxxxxxxxxxx>
> ---
>  drivers/usb/dwc3/core.c | 24 ++++++++++++++++--------
>  drivers/usb/dwc3/core.h |  6 ++++++
>  2 files changed, 22 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index 734de2a8bd212..72fddfcbdd0c3 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -1434,15 +1434,20 @@ static int dwc3_core_init(struct dwc3 *dwc)
>  
>  	dwc3_config_threshold(dwc);
>  
> -	/*
> -	 * Modify this for all supported Super Speed ports when
> -	 * multiport support is added.
> -	 */
> -	if (hw_mode != DWC3_GHWPARAMS0_MODE_GADGET &&
> -	    (DWC3_IP_IS(DWC31)) &&
> -	    dwc->maximum_speed == USB_SPEED_SUPER) {
> +	if (DWC3_IP_IS(DWC31)) {
>  		reg = dwc3_readl(dwc->regs, DWC3_LLUCTL);
> -		reg |= DWC3_LLUCTL_FORCE_GEN1;
> +
> +		/*
> +		 * Modify this for all supported Super Speed ports when
> +		 * multiport support is added.
> +		 */
> +		if (hw_mode != DWC3_GHWPARAMS0_MODE_GADGET &&
> +		    dwc->maximum_speed == USB_SPEED_SUPER)
> +			reg |= DWC3_LLUCTL_FORCE_GEN1;
> +
> +		if (dwc->inv_sync_hdr_quirk)
> +			reg |= DWC3_LLUCTL_INV_SYNC_HDR;
> +
>  		dwc3_writel(dwc->regs, DWC3_LLUCTL, reg);
>  	}
>  
> @@ -1774,6 +1779,9 @@ static void dwc3_get_properties(struct dwc3 *dwc)
>  	dwc->dis_split_quirk = device_property_read_bool(dev,
>  				"snps,dis-split-quirk");
>  
> +	dwc->inv_sync_hdr_quirk = device_property_read_bool(dev,
> +				"snps,inv-sync-hdr-quirk");

Bindings are *always* before their users.

Best regards,
Krzysztof





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux