On Thu, Feb 14, 2019 at 10:58:13AM +0530, Nagarjuna Kristam wrote: > > > On 13-02-2019 18:46, Thierry Reding wrote: > > On Wed, Feb 13, 2019 at 01:56:24PM +0100, Thierry Reding wrote: > >> On Wed, Feb 13, 2019 at 04:08:15PM +0530, Nagarjuna Kristam wrote: > >>> > >>> > >>> On 04-02-2019 17:18, Thierry Reding wrote: > >>>> On Thu, Jan 03, 2019 at 03:34:54PM +0530, Nagarjuna Kristam wrote: > >>>>> Add binding details regarding nvidia,usb3-port-fake > >>>>> > >>>>> Signed-off-by: Nagarjuna Kristam <nkristam@xxxxxxxxxx> > >>>>> --- > >>>>> Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt | 3 +++ > >>>>> 1 file changed, 3 insertions(+) > >>>>> > >>>>> diff --git a/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt b/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt > >>>>> index 3742c15..21a5541 100644 > >>>>> --- a/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt > >>>>> +++ b/Documentation/devicetree/bindings/phy/nvidia,tegra124-xusb-padctl.txt > >>>>> @@ -158,6 +158,9 @@ Optional properties: > >>>>> is internal. In the absence of this property the port is considered to be > >>>>> external. > >>>>> - vbus-supply: phandle to a regulator supplying the VBUS voltage. > >>>>> +- nvidia,usb3-port-fake: A integer property whose presense informs that a > >>>>> + fake USB3 port needs to be mapped for corresponding USB2 port. This entry > >>>>> + is applicable only for Tegra210 based platforms which has USB2 only ports. > >>>> > >>>> You don't provide a rationale fo why this fake USB3 port needs to be > >>>> specified. Doesn't the OTG port work without the fake USB3 port? Why > >>>> does it need to be specified and which one should be used as fake? > >>>> > >>> > >>> Yes, on Tegra210 based platforms, USB2 only device/OTG ports don't work > >>> > >>>> You mention elsewhere that an unused USB3 port is used on Jetson TX1, > >>>> but what if there are no unused ports on a platform? Can we use any > >>>> USB3 port for this purpose? > >>>> > >>> > >>> If we dont have any unused port, we cannot get device mode working on USB2 only port. > >>> We cannot use any USB3 port, we need to use an un-used USB3 port, so that we can > >>> fake that corresponding USB2 only port as USB2 and USB3 port. > >> > >> Hm... seems to me like we should be able to do this without an extra > >> device tree property. Surely we can determine at runtime which of the > >> ports are actually unused and pick one? If it doesn't matter which one, > >> we can just pick the first one that's unused, or an unused one at > >> random. > > > > It's slightly more complicated than I thought because there's an > > optimization in tegra_xusb_add_usb3_port() that will cause only used > > ports to get registered. But I think we can do something like this > > (untested) to get hold of an unused one, since we only need the index > > of the port: > > > > static int tegra_xusb_find_unused_usb3_port(struct tegra_xusb_padctl *padctl) > > { > > struct device_node *np; > > unsigned int i; > > > > for (i = 0; i < padctl->soc->ports.usb3.count; i++) { > > np = tegra_xusb_find_port_node(padctl, "usb3", i); > > if (!np || !of_device_is_available(np)) > > return index; > > } > > > > return -ENODEV; > > } > > > > Thierry > > > > It not just about un-used USB3 port, we need to find which usb2 port > is registered as otg/device and then check if it doesnot have any > companion usb3 port. On this condition we need to assign unused usb3 > port as fake port. Yeah, we should only be running this code for the OTG port in the first place. Once we know which one the OTG port is it's easy to check whether it has a USB3 companion port. > Above is possible, however port_fake need is must for T210 and only > for device mode operation and not for other SOC or USB mode. > So shall i place SOC data(tegra210_xusb_padctl_soc) to read if port > fake is needed ? Yeah, something like "needs_usb3_for_otg" should do the trick. So to confirm whether I understand this correctly: if we want to do USB2 and USB3 device mode, then we'd usually have a USB2/USB3 port combo, in which case we wouldn't need a fake USB3 port. But if we have a USB2 only OTG port, then we need to program registers for the USB3 port in order to make USB2 only OTG work, but only on Tegra210. With Tegra186 and later we don't need this work around? > If yes, and no un-used port available, will mark case as warning(not > error) and make probe(tegra_xusb_padctl_probe) success irrespective of > this. Since port can be otg but can be designed to use only for Host > mode. Yes, sounds good. Or perhaps we can use the mode property to determine whether or not this should be a fatal error? For example if we've got an OTG port but it is designed to be used only in host mode, then we could require the mode to be set to "host". If it is set to "peripheral" or "otg" and we don't find an un-used USB3 port to use as fake, it could still be a fatal error so that people can fix their device tree. Right? > I am not sure if above complication is better than an dt entry. I understand that this may seem like a lot of complication, but there are two reasons why I think it's worth it. On one hand we don't want to add redundant information to device tree. Everything that can already be derived from the compatible string doesn't need to be explicitly added in device tree via extra properties. In this case we know that Tegra210 has this bug and we can identify the need for the workaround by looking at the compatible string. Similarly we know exactly what to do in order to work around the problem (i.e. find an unused port and use it as the fake companion port). On the other hand I think that this moves the complexity where it belongs: in the driver. If we document this behaviour in the device tree bindings, we need to be very explicit about what this means and very careful about how to word it so as not to confuse readers. It's also not entirely trivial for device tree authors to come up with the fake port index. They have to carefully check the design to see which one is unused. The driver can do a much better job at that, and then we don't have to burden the device tree authors with that task. Thierry
Attachment:
signature.asc
Description: PGP signature