Pegasos OHCI bug (was Re: PROBLEM: memory corrupting bug,
pacman at kosh.dhis.org
pacman at kosh.dhis.org
Fri Oct 29 08:07:53 EST 2010
Segher Boessenkool writes:
>
> > So is it wrong to leave the host controller enabled when the OS is booted?
>
> Yes. Or, rather, there should be some way for the client to turn off
> all dma and interrupt activity; if the client closes the ihandles in
> "/chosen", and perhaps calls "quiesce", that should be enough.
Sounds good to me, I only wish someone had written down what "quiesce" means.
> >
> > Almost all of my devices are under that PCI node. What will I prove by
> > disabling them?
>
> You should put it after "load", and before "go".
>
> It should give you a working system; it's a sledgehammer workaround.
I can do it a little more gracefully than that. This works to deactivate the
problem devices manually:
1 lbflip 80000000 8 + rl!
1 lbflip 80001000 8 + rl!
where 80000000 and 80001000 have been obtained from
/pci at 80000000/usb at 5/assigned-addresses and
/pci at 80000000/usb at 5,1/assigned-addresses; 8 is the offset of the
HcCommandStatus register; and the 1 bit is HostControllerReset (HCR).
Now I'm just trying to find the more correct way of doing it, without
hardcoded addresses. That'll be something like this:
search the device tree for OHCI nodes
for each OHCI node
get assigned-addresses
map-in
set HCR
wait for acknowledgement
map-out
which can be done any time before the quiesce call, since that marks the
point where the kernel assumes that there are no devices writing to memory.
Sound good?
--
Alan Curry
More information about the Linuxppc-dev
mailing list