[U-Boot] [PATCH] powerpc/usb: fix bug of CPU hang when missing USB PHY clock

Andy Fleming afleming at gmail.com
Fri Oct 19 23:21:59 CEST 2012


On Thu, Oct 18, 2012 at 4:04 AM, Marek Vasut <marex at denx.de> wrote:
> Dear Liu Shengzhou-B36685,

>> > > >
>> > > > > +/* Check USB PHY clock valid */
>> > > > > +static int usb_phy_clk_valid(struct usb_ehci *ehci) {
>> > > > > +     if ((!(in_be32(&ehci->control) & PHY_CLK_VALID)) &&
>> > > > > +                     (!in_be32(&ehci->prictrl))) {
>> > > >
>> > > > (!A && !B) condition can certainly be done without the double
>> > > > negation ;-)
>> > >
>> > > [Shengzhou] Yes, using !(A||B) is also okay:)
>> >
>> > Good, you did your logic homework well. Now go one step further:
>> >
>> > if (a || b)
>> >
>> >  return 1;
>>
>> [Shengzhou] No, this doesn't work, b is 0 at initial time, but b is 1 at
>> the second time, a is depend on the register PHY_CLK_VALID bit, We just
>> want to check it at the first time and then think it is always valid after
>> that, it's using a trick:)
>
> Good point, I was just testing you of course ;-)


I may just be dim. Why is this a good point? If
in_be32(&ehci->prictrl) is non-zero, then this function will return
'1'. If (in_be32(&ehci->control) & PHY_CLK_VALID) is non-zero, this
function will return 1.

What am I missing?

Andy


More information about the U-Boot mailing list