linux-mips
[Top] [All Lists]

Hi-Speed USB controller and au1500

To: linux-mips@linux-mips.org
Subject: Hi-Speed USB controller and au1500
From: "Yates, John" <jpy@sparta.com>
Date: Thu, 14 Oct 2004 13:35:27 -0400
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
Hello all,

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():

 
hub.c:                  usb_hub_port_connect_change()
usb.c:                  usb_set_address()
usb.c:                  usb_control_msg()
usb.c:                  usb_internal_control_msg()
usb.c:                  usb_start_wait_urb()
usb.c:                  usb_submit_urb()
usb.c:                  submit_urb()
hcd.c:                  hcd_submit_urb()        
host/ehci-hcd.c:                ehci_urb_enqueue()      (urb_enqueue
function ptr)
host/ehci-q.c:          submit_async()  
host/ehci-q.c:          qh_append_tds()
host/ehci-mem.c:                qh_get()
atomic.h                        atomic_inc()
atomic.h                        #define atomic_inc(v) atomic_add(1,(v)) <-
uses ll/sc

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
uhci drivers. 


Any help or direction will be greatly appreciated.

John

<Prev in Thread] Current Thread [Next in Thread>