> Andrey Savochkin <saw@saw.sw.com.sg> writes:
>
> > Someone who experiences such timeouts needs to figure out how much
> > time it really can take before a command is accepted. Some time ago
> > the timeout was increased by the factor of 10, and now the current
> > timeout looks being insufficient. It might be a problem with the
> > time of specific commands or specific chip revisions. Or some
> > hardware is too clever and somehow optimizes those repeated read
> > operations, so that they no longer take a fixed number of bus
> > cycles.
>
[SNIPPED...]
This may not be a timing problem, but rather a problem that was
attempted to be fixed with some timing change.
Possible problem (and solution). Given:
writel(value, pci_reg);
status = readl(pci_reg);
The second readl() may (read will) complete before the writel().
This is because writes to the PCI bus may be posted (queued). The
first read will force all writes to complete, however the value
read may be something that was not yet affected by the write.
writel(value, pci_reg);
status = readl(pci_reg);
status = readl(pci_reg);
Would fix, but gcc may "optimize" one of these away, therefore I
suggest reading something, within the boards address space that
is never used, i.e., some offset that gives the model number or
something. It must actually respond to a read because otherwise
performance will degrade while waiting for the PCI bus error.
Cheers,
Dick Johnson
Penguin : Linux version 2.4.1 on an i686 machine (799.53 BogoMips).
I was going to compile a list of innovations that could be
attributed to Microsoft. Once I realized that Ctrl-Alt-Del
was handled in the BIOS, I found that there aren't any.
-
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/