Hi, On 01/19/2014 01:22 PM, Russell King - ARM Linux wrote:
On Sun, Jan 19, 2014 at 12:48:51AM +0100, Hans de Goede wrote:+ timeout = 0x100000; + do { + reg_val = sunxi_getbits(reg_base + AHCI_PHYCS0R, 0x7, 28); + } while (--timeout && (reg_val != 0x2)); + if (!timeout) { + dev_err(dev, "PHY power up failed.\n"); + return -EIO; + }This is not a good way to detect failure - there's several things wrong here. First, how long does sunxi_getbits() take? What does that depend on? Therefore, how long does it take to time out?
You're interpreting the timeout in the above code as an actual timeout, but that is not what it is, it is a means to avoid looping forever if something is seriously amiss. The only time I've ever seen the timeout trigger is when I forgot to enable some clks iirc. I can rename the variable from timeout to max_tries to make this more clear.
Secondly, what if the success condition becomes true at the same time that a timeout occurs?
We should never get anywhere near timeout becoming 0, so if both happen at the same time, then something is pretty seriously broken and the returning of an error as the code does now is the right thing to do. Regards, Hans -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
