From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dan Murphy Date: Wed, 24 Jul 2013 14:55:32 -0500 Subject: [U-Boot] [PATCH v3 6/7] USB: usb-hub: Add a weak function for resetting devices In-Reply-To: <201307180630.18420.marex@denx.de> References: <1374092167-27645-1-git-send-email-dmurphy@ti.com> <1374092167-27645-7-git-send-email-dmurphy@ti.com> <201307180630.18420.marex@denx.de> Message-ID: <51F03134.6080308@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Marek On 07/17/2013 11:30 PM, Marek Vasut wrote: > Dear Dan Murphy, > >> Add a __weak function that can be overridden to reset devices >> attached to an ehci devices after the FEAT_POWER has been submitted >> >> Signed-off-by: Dan Murphy >> --- >> v3 - Modified location of the weak function - >> http://patchwork.ozlabs.org/patch/258229/ >> >> common/usb_hub.c | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) >> >> diff --git a/common/usb_hub.c b/common/usb_hub.c >> index 774ba63..c655b75 100644 >> --- a/common/usb_hub.c >> +++ b/common/usb_hub.c >> @@ -62,6 +62,10 @@ >> static struct usb_hub_device hub_dev[USB_MAX_HUB]; >> static int usb_hub_index; >> >> +__weak void usb_hub_reset_devices(int port) >> +{ >> + return; >> +} >> >> static int usb_get_hub_descriptor(struct usb_device *dev, void *data, int >> size) { >> @@ -444,6 +448,14 @@ static int usb_hub_configure(struct usb_device *dev) >> "" : "no "); >> usb_hub_power_on(hub); >> >> + /* >> + * Reset any devices that may be in a bad state when applying >> + * the power. This is a __weak function. Resettig of the devices >> + * should occur in the board file of the device. >> + */ >> + for (i = 0; i < dev->maxchild; i++) >> + usb_hub_reset_devices(i + 1); >> + >> for (i = 0; i < dev->maxchild; i++) { >> ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1); >> unsigned short portstatus, portchange; > We hae like 10 reset hooks in the usb code, this means something just isn't > right. The device doesn't enumerate, right ? Have you tried waiting a little > after releasing the reset and before starting the EHCI ? > > Best regards, > Marek Vasut Sorry for the delay in the response I have been looking heavily into this. I see we have many reset hooks but they all seem to mean something for different components. The one I am introducing is for the device itself and made it weak as there are devices that work properly like the 3503. What I am finding is that I have to apply port power and then hit the device's reset line to get the device to enumerate. Or I can hold the 9730 device in reset throughout the full USB init sequence and upon releasing it after port power the device is detected. There is no opportunity to release the reset while the USB detection state machine is running I have contacted the vendor to see if there are any known anomalies with this part if there is then I can document this in the commit. Dan -- ------------------ Dan Murphy