I am having a problem using a PCI USB 2.0 Hi-Speed controller (EHCI) with
the dbau1500 eval kit with kernel 2.4.26. I have traced the problem down to
a call to atomic_add() (in include/asm-mips/atomic.h) that uses assembly to
access ll/sc registers of the mips architecture. If I override CPU options
and disable ll/sc when configuring the kernel, everything works fine.
However this causes the atomic_add() to use
local_irq_save()/local_irq_restore(). I am assuming this will cause quite a
performance hit since atomic_add() gets called all over the place. I should
include that the ll/sc version of atomic_add() seems to work fine until the
call from the usb infrastructure.
Below is a code trail that leads to the call to atomic_add():
host/ehci-hcd.c: ehci_urb_enqueue() (urb_enqueue
atomic.h #define atomic_inc(v) atomic_add(1,(v)) <-
To reproduce my results:
Plug in a Hi-Speed USB 2.0 controller into your pci slot and boot with a usb
ehci enabled kernel. Be sure to disable the non-pci usb host that is
built-in to the au1500 when building the kernel. (I have tried two
controllers (NEC and ALi) with identical results.)
Plug a Hi-Speed device (thumb drive or external HD) into the controller.
(system stops responding here)
Low/Full speed devices work without a problem because they use the ohci or
Any help or direction will be greatly appreciated.