Skip to content
  1. Aug 07, 2013
  2. Aug 06, 2013
    • GP Orcullo's avatar
      added missing BCM_DMA_FEATURE_BULK · cb48f89d
      GP Orcullo authored
      cb48f89d
    • P33M's avatar
      dwc_otg: fix potential sleep while atomic during urb enqueue · 832001d4
      P33M authored
      Fixes a regression introduced with eb1b482a. Kmalloc called from
      dwc_otg_hcd_qtd_add / dwc_otg_hcd_qtd_create did not always have
      the GPF_ATOMIC flag set. Force this flag when inside the larger
      critical section.
      832001d4
    • Philip Taylor's avatar
      vchiq_util: Fix race condition in push/pop · f5f887a2
      Philip Taylor authored
      The lack of memory barriers could (very rarely) result in
      vchiu_queue_pop reading the next value before it had been written
      (getting either NULL, or a value that had been popped once already).
      f5f887a2
    • Matthew Hails's avatar
      VCHIQ: Fix mem leak of USER_SERVICE_T objects. · 1c6e0bb0
      Matthew Hails authored
      The userdata for VCHIQ services created through the ioctl API is
      a kmalloced structure. These objects were getting leaked, most
      notably in vchiq_release(), where the service could be closed,
      freed and removed from the service list before the wait-to-die
      loop was entered.
      
      This change adds a userdata termination callback, and implements
      it in the case where USER_SERVICE_T is used for the service
      userdata.
      1c6e0bb0
    • P33M's avatar
      dwc_otg: fiq_split: use TTs with more granularity · e5938d1a
      P33M authored
      This fixes certain issues with split transaction scheduling.
      
      - Isochronous multi-packet OUT transactions now hog the TT until
        they are completed - this prevents hubs aborting transactions
        if they get a periodic start-split out-of-order
      - Don't perform TT allocation on non-periodic endpoints - this
        allows simultaneous use of the TT's bulk/control and periodic
        transaction buffers
      
      This commit will mainly affect USB audio playback.
      e5938d1a
    • P33M's avatar
      dwc_otg: make channel halts with unknown state less damaging · 337e06ee
      P33M authored
      If the IRQ received a channel halt interrupt through the FIQ
      with no other bits set, the IRQ would not release the host
      channel and never complete the URB.
      
      Add catchall handling to treat as a transaction error and retry.
      337e06ee
    • P33M's avatar
      dwc_otg: prevent BUG() in TT allocation if hub address is > 16 · 449aa55a
      P33M authored
      A fixed-size array is used to track TT allocation. This was
      previously set to 16 which caused a crash because
      dwc_otg_hcd_allocate_port would read past the end of the array.
      
      This was hit if a hub was plugged in which enumerated as addr > 16,
      due to previous device resets or unplugs.
      
      Also add #ifdef FIQ_DEBUG around hcd->hub_port_alloc[], which grows
      to a large size if 128 hub addresses are supported. This field is
      for debug only for tracking which frame an allocate happened in.
      449aa55a
    • 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
  3. May 31, 2013
  4. May 29, 2013
  5. May 17, 2013
  6. May 12, 2013