Re: Pegasos OHCI bug (was Re: PROBLEM: memory corrupting bug,
From: <hidden>
Date: 2010-10-28 21:08:00
Also in:
lkml
Segher Boessenkool writes:
quoted
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.
quoted
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@80000000/usb@5/assigned-addresses and
/pci@80000000/usb@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