On 10.02.2012 14:00, Sebastian Andrzej Siewior wrote:
On Wed, Feb 08, 2012 at 11:10:13AM +0100, Thomas Dahlmann wrote:
On disconnect the controller is reset (all buffers and registers are
cleared) and device interrupts are enabled after that to be able to
react on upcoming connects. At first I implemented the
disconnect/reset in the ISR and as mentioned I got system hangs due
to some kind of PCI core hang inside the CS5536 controller. I worked
together with the chip designers of CS5536 to find the root cause but
if I remember right we could not find it. Doing the reset out of ISR
solved the problem. This development happened around 2006 so I cannot
remember all circumstances.
Hmm. Maybe an additional delay is required after some kind of operation.
When I remeber right it was not a problem of a delay but that the CPU
and Southbridge are in interrupt cycle. Doing the reset inside interrupt
cycle could deadlock the southbridge for some reason. So the reset had
to be outside of interrupt cycle / ISR.
If you could get rid of global variables by using the work queue instead
of tasklet I would think we should use the work queue.
I have the time I will bring up a CS5536 system and try it out.
I have to do that after work. Currently I have to solve some family
issues so this will not happen during the next 2 weeks.
As mentioned it would be great if you could submit the patch as
you proposed.
Thanks for your help!
Thomas
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html