1. 08 12月, 2011 1 次提交
  2. 18 9月, 2011 1 次提交
  3. 28 6月, 2011 1 次提交
    • G
      USB: ehci-ath79: fix a NULL pointer dereference · c27d5368
      Gabor Juhos 提交于
      Loading the ehci-hcd module on the ath79 platform causes
      a NULL pointer dereference:
      
      CPU 0 Unable to handle kernel paging request at virtual address 00000000, epc == c0252928, ra == c00de968
      Oops[#1]:
      Cpu 0
      $ 0   : 00000000 00000070 00000001 00000000
      $ 4   : 802cf870 0000117e ffffffff 8019c7bc
      $ 8   : 0000000a 00000002 00000001 fffffffb
      $12   : 8026ef20 0000000f ffffff80 802dad3c
      $16   : 8077a2d4 8077a200 c00f3484 8019ed84
      $20   : c00f0000 00000003 000000a0 80262c2c
      $24   : 00000002 80079da0
      $28   : 80788000 80789c80 80262b14 c00de968
      Hi    : 00000000
      Lo    : b61f0000
      epc   : c0252928 __mod_vermagic5+0xc260/0xc7e8 [ehci_hcd]
          Not tainted
      ra    : c00de968 usb_add_hcd+0x2a4/0x858 [usbcore]
      Status: 1000c003    KERNEL EXL IE
      Cause : 00800008
      BadVA : 00000000
      PrId  : 00019374 (MIPS 24Kc)
      Modules linked in: ehci_hcd(+) pppoe pppox ipt_REJECT xt_TCPMSS ipt_LOG
      xt_comment xt_multiport xt_mac xt_limit iptable_mangle iptable_filte
      r ip_tables xt_tcpudp x_tables ppp_async ppp_generic slhc ath mac80211
      usbcore nls_base input_polldev crc_ccitt cfg80211 compat input_core a
      rc4 aes_generic crypto_algapi
      Process insmod (pid: 379, threadinfo=80788000, task=80ca2180,
      tls=77fe52d0)
      Stack : c0253184 80c57d80 80789cac 8077a200 00000001 8019edc0 807fa800 8077a200
              8077a290 c00f3484 8019ed84 c00f0000 00000003 000000a0 80262c2c c00de968
              802d0000 800878cc c0253228 c02528e4 c0253184 80c57d80 80bf6800 80ca2180
              8007b75c 00000000 8077a200 802cf830 802d0000 00000003 fffffff4 00000015
              00000348 00000124 800b189c c024bb4c c0255000 801a27e8 c0253228 c02528e4
              ...
      Call Trace:
      [<c0252928>] __mod_vermagic5+0xc260/0xc7e8 [ehci_hcd]
      
      It is caused by:
      
        commit c430131a
        Author: Jan Andersson <jan@gaisler.com>
        Date:   Tue May 3 20:11:57 2011 +0200
      
            USB: EHCI: Support controllers with big endian capability regs
      
            The two first HC capability registers (CAPLENGTH and HCIVERSION)
            are defined as one 8-bit and one 16-bit register. Most HC
            implementations have selected to treat these registers as part
            of a 32-bit register, giving the same layout for both big and
            small endian systems.
      
            This patch adds a new quirk, big_endian_capbase, to support
            controllers with big endian register interfaces that treat
            HCIVERSION and CAPLENGTH as individual registers.
      Signed-off-by: NJan Andersson <jan@gaisler.com>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      The reading of the HC capability register has been moved by that
      commit to a place where the ehci->caps field is not initialized
      yet. This patch moves the reading of the register back to the
      original place.
      Acked-by: NJan Andersson <jan@gaisler.com>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGabor Juhos <juhosg@openwrt.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      c27d5368
  4. 10 6月, 2011 1 次提交
  5. 04 5月, 2011 1 次提交
  6. 14 4月, 2011 2 次提交
    • G
      USB: ehci: add workaround for Synopsys HC bug · 2f7ac6c1
      Gabor Juhos 提交于
      A Synopsys USB core used in various SoCs has a bug which might cause
      that the host controller not issuing ping.
      
      When software uses the Doorbell mechanism to remove queue heads, the
      host controller still has references to the removed queue head even
      after indicating an Interrupt on Async Advance. This happens if the last
      executed queue head's Next Link queue head is removed.
      
      Consequences of the defect:
      The Host controller fetches the removed queue head, using memory that
      would otherwise be deallocated.This results in incorrect transactions on
      both the USB and system memory. This may result in undefined behavior.
      
      Workarounds:
      
      1) If no queue head is active (no Status field's Active bit is set)
      after removing the queue heads, the software can write one of the valid
      queue head addresses to the ASYNCLISTADDR register and deallocate the
      removed queue head's memory after 2 microframes.
      
      If one or more of the queue heads is active (the Active bit is set in
      the Status field) after removing the queue heads, the software can delay
      memory deallocation after time X, where X is the time required for the
      Host Controller to go through all the queue heads once. X varies with
      the number of queue heads and the time required to process periodic
      transactions: if more periodic transactions must be performed, the Host
      Controller has less time to process asynchronous transaction processing.
      
      2) Do not use the Doorbell mechanism to remove the queue heads. Disable
      the Asynchronous Schedule Enable bit instead.
      
      The bug has been discussed on the linux-usb-devel mailing-list
      four years ago, the original thread can be found here:
      http://www.mail-archive.com/linux-usb-devel@lists.sourceforge.net/msg45345.html
      
      This patch implements the first workaround as suggested by David Brownell.
      
      The built-in USB host controller of the Atheros AR7130/AR7141/AR7161 SoCs
      requires this to work properly.
      Signed-off-by: NGabor Juhos <juhosg@openwrt.org>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      2f7ac6c1
    • G
      USB: ehci: add bus glue for the Atheros AR71XX/AR724X/AR91XX SoCs · 502fa841
      Gabor Juhos 提交于
      The Atheros AR71XX/AR91XX SoCs have a built-in EHCI controller.
      This patch adds the necessary glue code to make the generic EHCI
      driver usable for them.
      Signed-off-by: NGabor Juhos <juhosg@openwrt.org>
      Signed-off-by: NImre Kaloz <kaloz@openwrt.org>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      502fa841