[PATCH v2] usb: dwc3-meson-g12a: add power-on/off of the PHYs

Neil Armstrong narmstrong at baylibre.com
Fri Apr 24 11:03:35 CEST 2020


On 24/04/2020 09:41, Marek Vasut wrote:
> On 4/24/20 9:18 AM, Neil Armstrong wrote:
>> On 21/04/2020 10:17, Neil Armstrong via groups.io wrote:
>>> Power on/off the PHYs to enable power to the USB ports, fixing USB support
>>> on Khadas VIM3/VIM3L boards.
>>>
>>> The G12A USB complex has at least 2 USB2 PHYs, but one is muxed between the
>>> DWC2 and DWC3 controller and the other one directly connected to the DWC3
>>> controller. The USB3+PCIe combo PHY is muxed between the DWC3 controller
>>> and a DW-PCIE controller.
>>> All PHYs are optional, but it's type (usb2/usb3) and position are important
>>> to determine it's capabilities, thus they are stored in a fixed size
>>> array and the phy-name determines it's position, it's position determining
>>> it's type and functionnalities.
>>> This is why we need to loop over the array to power on all the DT provided
>>> PHYs.
>>>
>>> Signed-off-by: Neil Armstrong <narmstrong at baylibre.com>
>>> ---
>>> Changes since v1:
>>> - removed extra space before semicolon
>>> - added clarification in commit message
>>>
>>>  drivers/usb/dwc3/dwc3-meson-g12a.c | 16 ++++++++++++++++
>>>  1 file changed, 16 insertions(+)
>>>
>>> diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c
>>> index d4453f8784..de964d6c10 100644
>>> --- a/drivers/usb/dwc3/dwc3-meson-g12a.c
>>> +++ b/drivers/usb/dwc3/dwc3-meson-g12a.c
>>> @@ -408,6 +408,15 @@ static int dwc3_meson_g12a_probe(struct udevice *dev)
>>>  			goto err_phy_init;
>>>  	}
>>>  
>>> +	for (i = 0; i < PHY_COUNT; ++i) {
>>> +		if (!priv->phys[i].dev)
>>> +			continue;
>>> +
>>> +		ret = generic_phy_power_on(&priv->phys[i]);
>>> +		if (ret)
>>> +			goto err_phy_init;
>>> +	}
>>> +
>>>  	return 0;
>>>  
>>>  err_phy_init:
>>> @@ -430,6 +439,13 @@ static int dwc3_meson_g12a_remove(struct udevice *dev)
>>>  
>>>  	clk_release_all(&priv->clk, 1);
>>>  
>>> +	for (i = 0; i < PHY_COUNT; ++i) {
>>> +		if (!priv->phys[i].dev)
>>> +			continue;
>>> +
>>> +		 generic_phy_power_off(&priv->phys[i]);
>>> +	}
>>> +
>>>  	for (i = 0 ; i < PHY_COUNT ; ++i) {
>>>  		if (!priv->phys[i].dev)
>>>  			continue;
>>>
>>
>> Applied to u-boot-amlogic
> 
> Did you apply V1 or V2 ?
> 

v2

Neil


More information about the U-Boot mailing list