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 <narmstr...@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 ?

Reply via email to