On Wed, 2003-05-14 at 16:30, Greg KH wrote:
> On Wed, May 14, 2003 at 04:06:33PM -0500, Paul Fulghum wrote:
> > On Tue, 2003-05-13 at 13:11, Greg KH wrote:
> >
> > I was looking over the PIIX3 datasheet and noticed
> > that the USBSTS_RD bit is only valid when the
> > device is in the suspended state.
> >
> > This bit is being acted on regardless of the
> > suspend state of the controller in the ISR.
> > Could this be why the driver is detecting
> > false 'resume' signals and calling wakeup_hc()
> > when it shouldn't?
> >
> > Maybe the code should be something like:
> >
> > if (uhci->is_suspended && (status & USBSTS_RD))
> > wakeup_hc(uhci);
>
> That's basically what the code I sent you did :)
Yes, that's right.
In this case suspend_hc() is being called anyways, so
the controller *is* in the suspended state.
suspend_hc() and wakeup_hc() are spinning back
and forth forever.
For some reason I thought this was firing without
a call to suspend_hc(), but I verified it with printks.
I tried it both with is_suspended, and again testing
USBCMD_EGSM in the command register (Greg's patch)
with same results.
So it is a good check to add to qualify USBSTS_RD,
but in this case it looks like the mainboard implementation
is FUBAR and bogus resume messages are being
recognized by the controller.
Is there some transient period after setting USBCMD_EGSM
before which the controller is not officially in the
suspended state that might cause a spurious
USBSTS_RD indication? (seems unlikely)
> > in the ISR to qualify acting on that status bit.
> > Alternatively, USBCMD_EGSM (BIT3) of the USBCMD
> > register could be tested to qualify action on
> > the state of USBSTS_RD
> >
> > I'm going to test this now, but I wanted to
> > know what you think.
>
> I think it's correct, but I don't think it will solve your problem. I
> would be very happy to be wrong though.
You are right (IMO) that it is correct and should be added,
and you are also right in that it does not solve this problem.
-- Paul Fulghum, paulkf@microgate.com Microgate Corporation, http://www.microgate.com- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Thu May 15 2003 - 22:00:54 EST