diff options
| author | Greg Kroah-Hartman <[email protected]> | 2022-01-30 15:00:39 +0100 | 
|---|---|---|
| committer | Greg Kroah-Hartman <[email protected]> | 2022-01-30 15:00:39 +0100 | 
| commit | 7ab004dbcbee38b8a70798835d3ffcd97a985a5e (patch) | |
| tree | 0caa6cb97801736046823ca785a5ba36bf684ac6 /drivers/usb/dwc3/dwc3-xilinx.c | |
| parent | 710f8af199ee9d72dd87083edd55c5ee250ee6f4 (diff) | |
| parent | 26291c54e111ff6ba87a164d85d4a4e134b7315c (diff) | |
Merge tag 'v5.17-rc2' into char-misc-next
We need the char/misc fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'drivers/usb/dwc3/dwc3-xilinx.c')
| -rw-r--r-- | drivers/usb/dwc3/dwc3-xilinx.c | 23 | 
1 files changed, 18 insertions, 5 deletions
| diff --git a/drivers/usb/dwc3/dwc3-xilinx.c b/drivers/usb/dwc3/dwc3-xilinx.c index 9cc3ad701a29..e14ac15e24c3 100644 --- a/drivers/usb/dwc3/dwc3-xilinx.c +++ b/drivers/usb/dwc3/dwc3-xilinx.c @@ -102,14 +102,26 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data)  	int			ret;  	u32			reg; -	usb3_phy = devm_phy_get(dev, "usb3-phy"); -	if (PTR_ERR(usb3_phy) == -EPROBE_DEFER) { -		ret = -EPROBE_DEFER; +	usb3_phy = devm_phy_optional_get(dev, "usb3-phy"); +	if (IS_ERR(usb3_phy)) { +		ret = PTR_ERR(usb3_phy); +		dev_err_probe(dev, ret, +			      "failed to get USB3 PHY\n");  		goto err; -	} else if (IS_ERR(usb3_phy)) { -		usb3_phy = NULL;  	} +	/* +	 * The following core resets are not required unless a USB3 PHY +	 * is used, and the subsequent register settings are not required +	 * unless a core reset is performed (they should be set properly +	 * by the first-stage boot loader, but may be reverted by a core +	 * reset). They may also break the configuration if USB3 is actually +	 * in use but the usb3-phy entry is missing from the device tree. +	 * Therefore, skip these operations in this case. +	 */ +	if (!usb3_phy) +		goto skip_usb3_phy; +  	crst = devm_reset_control_get_exclusive(dev, "usb_crst");  	if (IS_ERR(crst)) {  		ret = PTR_ERR(crst); @@ -188,6 +200,7 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data)  		goto err;  	} +skip_usb3_phy:  	/*  	 * This routes the USB DMA traffic to go through FPD path instead  	 * of reaching DDR directly. This traffic routing is needed to |