Re: Query regarding root hub reset

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

 



On Friday 26 December 2014 09:15 PM, Alan Stern wrote:
> On Thu, 25 Dec 2014, Peter Chen wrote:
>
>> Thanks for explaining it, but I am still not understand why we need unbind
>> the interface when we go to turn the port power off or reset the port if
>> the port is owned by kernel. I often need to do continual plug in/out
>> usb device test, in order to emulate it, I just toggle the power (vbus
>> on <--> vbus off), I did not find anything wrong.
> Power management in the kernel uses a simple rule: A device has to be 
> at full power while it is in use.
>
> A hub port is considered to be in use almost always, because a device
> could be plugged into it at any time.  There are a few exceptions to
> this.  For example, if a USB-2 device is plugged in then we know that
> nothing can be connected to its peer USB-3 port (since they use the
> same physical connector) and so the USB-3 port can be powered down.  
> Or if a device is in runtime suspend and it isn't enabled for wakeup
> then its port can be powered off.  Or if the firmware tells us that the
> port is not accessible to the user and nothing is plugged into it, then
> we know that it will never be used.
>
> Nevertheless, in general ports are always considered to be in use and
> therefore are not powered down.  If you want to change this, you have
> to add a mechanism (probably a sysfs file) to allow the user to tell
> the kernel that a particular port will not be used.  Then the kernel
> will be free to power-off that port.
>
> On Thu, 25 Dec 2014, Deepak Das wrote:
>
>> Above patch does make sense but the original question was the reason
>> behind the turning port power back on. There was a commit ca9c9d0   
>> which added the port power control sysfs entry, we ported that commit
>> back to our kernel for testing but power was turned back ON due to   
>> above reason.
> Well, of course.  That commit was not complete in itself; it was just
> part of a series.  And there have been many more commits (more than 20)  
> affecting that part of the hub driver since then.  You can't expect to
> back-port just one commit and have it do exactly what you want.
>
>> I don't see any strong reason to keep this feature of hub reset.
> We keep it because the hub driver wants ports to remain powered on as 
> long as they are in use.
>
>> In addition, Do you see any consequences if we allow userspace to control
>> port power if hub supports ?
> Yes.  The kernel does not allow userspace to control power to _any_ 
> device.  The kernel controls power, and it allows userspace to set the 
> power policy (within limits).
>
> The current port-power policy options are very limited.  There is no 
> way for the user to tell the kernel that a port isn't going to be used.  
> As I said to Peter above, you could add such a policy mechanism.
>
> Alan Stern
>
Kool, that was my argument with my client. We added a policy to
tell kernel that user wants to turn off the port . I already modified the port 
power policy mechanism by adding following check :-
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -4456,7 +4456,8 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1,
                        test_bit(port1, hub->removed_bits)) {
 
                /* maybe switch power back on (e.g. root hub was reset) */
-               if ((wHubCharacteristics & HUB_CHAR_LPSM) < 2
+               if ((hub->ports[port1 - 1]->port_power_policy == USB_PORT_POWER_ON) &&
+                               (wHubCharacteristics & HUB_CHAR_LPSM) < 2
                                && !port_is_power_on(hub, portstatus))
                        set_port_feature(hdev, port1, USB_PORT_FEAT_POWER);

but the issue is that they don't want to use sysfs because they want their code to be 
platform independent so they are using libusb. 
I understand and agree with your explaination regarding the power mechanism.
I think your previous patch where port should be claimed by userspace before turning the
power off is the only way to achieve it. If you agree then I will go ahead and make that
change. 
with warm regards,
Deepak Das

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



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

  Powered by Linux