Skip to content
  1. Aug 06, 2013
    • P33M's avatar
      dwc_otg: prevent OOPSes during device disconnects · 2b17a4d3
      P33M authored
      The dwc_otg_urb_enqueue function is thread-unsafe. In particular the
      access of urb->hcpriv, usb_hcd_link_urb_to_ep, dwc_otg_urb->qtd and
      friends does not occur within a critical section and so if a device
      was unplugged during activity there was a high chance that the
      usbcore hub_thread would try to disable the endpoint with partially-
      formed entries in the URB queue. This would result in BUG() or null
      pointer dereferences.
      
      Fix so that access of urb->hcpriv, enqueuing to the hardware and
      adding to usbcore endpoint URB lists is contained within a single
      critical section.
      2b17a4d3
    • P33M's avatar
      dwc_otg: whitespace cleanup in dwc_otg_urb_enqueue · 2f57accf
      P33M authored
      2f57accf
    • Gordon Hollingworth's avatar
      Fix function tracing · 8cc4c0a6
      Gordon Hollingworth authored
      8cc4c0a6
    • P33M's avatar
      dwc_otg: fiq: prevent FIQ thrash and incorrect state passing to IRQ · 80cc8cfb
      P33M authored
      In the case of a transaction to a device that had previously aborted
      due to an error, several interrupts are enabled to reset the error
      count when a device responds. This has the side-effect of making the
      FIQ thrash because the hardware will generate multiple instances of
      a NAK on an IN bulk/interrupt endpoint and multiple instances of ACK
      on an OUT bulk/interrupt endpoint. Make the FIQ mask and clear the
      associated interrupts.
      
      Additionally, on non-split transactions make sure that only unmasked
      interrupts are cleared. This caused a hard-to-trigger but serious
      race condition when you had the combination of an endpoint awaiting
      error recovery and a transaction completed on an endpoint - due to
      the sequencing and timing of interrupts generated by the dwc_otg core,
      it was possible to confuse the IRQ handler.
      80cc8cfb
    • P33M's avatar
      dwc_otg: mask correct interrupts after transaction error recovery · 52f9f3e2
      P33M authored
      The dwc_otg driver will unmask certain interrupts on a transaction
      that previously halted in the error state in order to reset the
      QTD error count. The various fine-grained interrupt handlers do not
      consider that other interrupts besides themselves were unmasked.
      
      By disabling the two other interrupts only ever enabled in DMA mode
      for this purpose, we can avoid unnecessary function calls in the
      IRQ handler. This will also prevent an unneccesary FIQ interrupt
      from being generated if the FIQ is enabled.
      52f9f3e2
    • popcornmix's avatar
      88ebb927
    • popcornmix's avatar
      sdhci-bcm2807: Increase sync_after_dma timeout · bfc96cee
      popcornmix authored
      The current timeout is being hit with some cards that complete successfully with a longer timeout.
      The timeout is not handled well, and is believed to be a code path that causes corruption.
      872a8ff7 suggests that crappy cards can take up to 3 seconds to respond
      bfc96cee
    • Gordon Hollingworth's avatar
      USB fix using a FIQ to implement split transactions · fac03c01
      Gordon Hollingworth authored
      This commit adds a FIQ implementaion that schedules
      the split transactions using a FIQ so we don't get
      held off by the interrupt latency of Linux
      fac03c01
    • Mike Bradley's avatar
      dwc_otg: Call usb_hcd_unlink_urb_from_ep with lock held in completion handler · bc43f802
      Mike Bradley authored
      usb_hcd_unlink_urb_from_ep must be called with the HCD lock held.  Calling it
      asynchronously in the tasklet was not safe (regression in
      c4564d4a).
      
      This change unlinks it from the endpoint prior to queueing it for handling in
      the tasklet, and also adds a check to ensure the urb is OK to be unlinked
      before doing so.
      
      NULL pointer dereference kernel oopses had been observed in usb_hcd_giveback_urb
      when a USB device was unplugged/replugged during data transfer.  This effect
      was reproduced using automated USB port power control, hundreds of replug
      events were performed during active transfers to confirm that the problem was
      eliminated.
      bc43f802
    • Siarhei Siamashka's avatar
      bcm2708_fb: DMA acceleration for fb_copyarea · 428b68dc
      Siarhei Siamashka authored
      Based on http://www.raspberrypi.org/phpBB3/viewtopic.php?p=62425#p62425
      
      
      Also used Simon's dmaer_master module as a reference for tweaking DMA
      settings for better performance.
      
      For now busylooping only. IRQ support might be added later.
      With non-overclocked Raspberry Pi, the performance is ~360 MB/s
      for simple copy or ~260 MB/s for two-pass copy (used when dragging
      windows to the right).
      
      In the case of using DMA channel 0, the performance improves
      to ~440 MB/s.
      
      For comparison, VFP optimized CPU copy can only do ~114 MB/s in
      the same conditions (hindered by reading uncached source buffer).
      
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      428b68dc
    • Siarhei Siamashka's avatar
      fbdev: add FBIOCOPYAREA ioctl · 6f75f225
      Siarhei Siamashka authored
      Based on the patch authored by Ali Gholami Rudi at
          https://lkml.org/lkml/2009/7/13/153
      
      
      
      Provide an ioctl for userspace applications, but only if this operation
      is hardware accelerated (otherwide it does not make any sense).
      
      Signed-off-by: default avatarSiarhei Siamashka <siarhei.siamashka@gmail.com>
      6f75f225
    • Harm Hanemaaijer's avatar
      Speed up console framebuffer imageblit function · 78652370
      Harm Hanemaaijer authored
      
      
      Especially on platforms with a slower CPU but a relatively high
      framebuffer fill bandwidth, like current ARM devices, the existing
      console monochrome imageblit function used to draw console text is
      suboptimal for common pixel depths such as 16bpp and 32bpp. The existing
      code is quite general and can deal with several pixel depths. By creating
      special case functions for 16bpp and 32bpp, by far the most common pixel
      formats used on modern systems, a significant speed-up is attained
      which can be readily felt on ARM-based devices like the Raspberry Pi
      and the Allwinner platform, but should help any platform using the
      fb layer.
      
      The special case functions allow constant folding, eliminating a number
      of instructions including divide operations, and allow the use of an
      unrolled loop, eliminating instructions with a variable shift size,
      reducing source memory access instructions, and eliminating excessive
      branching. These unrolled loops also allow much better code optimization
      by the C compiler. The code that selects which optimized variant is used
      is also simplified, eliminating integer divide instructions.
      
      The speed-up, measured by timing 'cat file.txt' in the console, varies
      between 40% and 70%, when testing on the Raspberry Pi and Allwinner
      ARM-based platforms, depending on font size and the pixel depth, with
      the greater benefit for 32bpp.
      
      Signed-off-by: default avatarHarm Hanemaaijer <fgenfb@yahoo.com>
      78652370
    • popcornmix's avatar
      Avoid responding to unexpected I2C interrupts · c5f17ff6
      popcornmix authored
      c5f17ff6
    • popcornmix's avatar
      Only init gpio pins of selected i2c bus · 4f577522
      popcornmix authored
      4f577522
  2. May 31, 2013
  3. May 29, 2013
  4. May 17, 2013
  5. May 12, 2013