1. 27 5月, 2013 1 次提交
  2. 13 4月, 2013 3 次提交
  3. 04 4月, 2013 1 次提交
    • S
      mmc: mxs-mmc: move to use generic DMA helper · 0e91e434
      Shawn Guo 提交于
      With the generic DMA device tree helper supported by mxs-dma driver,
      client devices only need to call dma_request_slave_channel() for
      requesting a DMA channel from dmaengine.
      
      Since mxs is a DT only platform now, along with the changes, the non-DT
      case checking in probe function also gets cleaned up.
      Signed-off-by: NShawn Guo <shawn.guo@linaro.org>
      Cc: Chris Ball <cjb@laptop.org>
      Cc: linux-mmc@vger.kernel.org
      Reviewed-by: NArnd Bergmann <arnd@arndb.de>
      0e91e434
  4. 25 2月, 2013 2 次提交
  5. 26 1月, 2013 1 次提交
  6. 07 12月, 2012 1 次提交
  7. 12 10月, 2012 1 次提交
    • M
      mmc: mxs-mmc: Fix merge issue causing build error · 4c5bb2e4
      Marek Vasut 提交于
      The following error appeared due to a merge problem; the patches:
      
      fc108d24 "mmc: mxs-mmc: fix deadlock caused by recursion loop"
      829c1bf4 "mmc: spi: Pull out parts shared between MMC and SPI"
      
      came in through separate branches and cause this build error when
      combined.
      
      drivers/mmc/host/mxs-mmc.c: In function 'mxs_mmc_enable_sdio_irq':
      drivers/mmc/host/mxs-mmc.c:527:3: error: 'struct mxs_mmc_host' has no member named 'base'
      drivers/mmc/host/mxs-mmc.c:527:3: error: 'struct mxs_mmc_host' has no member named 'devid'
      make[3]: *** [drivers/mmc/host/mxs-mmc.o] Error 1
      
      This patch corrects the issue.
      Signed-off-by: NMarek Vasut <marex@denx.de>
      Cc: Fabio Estevam <fabio.estevam@freescale.com>
      Cc: Shawn Guo <shawn.guo@linaro.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      4c5bb2e4
  8. 05 9月, 2012 2 次提交
    • L
      mmc: mxs-mmc: fix deadlock caused by recursion loop · fc108d24
      Lauri Hintsala 提交于
      Release the lock before mmc_signal_sdio_irq is called by
      mxs_mmc_enable_sdio_irq.
      
      Backtrace:
      [   65.470000] =============================================
      [   65.470000] [ INFO: possible recursive locking detected ]
      [   65.470000] 3.5.0-rc5 #2 Not tainted
      [   65.470000] ---------------------------------------------
      [   65.470000] ksdioirqd/mmc0/73 is trying to acquire lock:
      [   65.470000]  (&(&host->lock)->rlock#2){-.-...}, at: [<bf054120>] mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]
      [   65.470000]
      [   65.470000] but task is already holding lock:
      [   65.470000]  (&(&host->lock)->rlock#2){-.-...}, at: [<bf054120>] mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]
      [   65.470000]
      [   65.470000] other info that might help us debug this:
      [   65.470000]  Possible unsafe locking scenario:
      [   65.470000]
      [   65.470000]        CPU0
      [   65.470000]        ----
      [   65.470000]   lock(&(&host->lock)->rlock#2);
      [   65.470000]   lock(&(&host->lock)->rlock#2);
      [   65.470000]
      [   65.470000]  *** DEADLOCK ***
      [   65.470000]
      [   65.470000]  May be due to missing lock nesting notation
      [   65.470000]
      [   65.470000] 1 lock held by ksdioirqd/mmc0/73:
      [   65.470000]  #0:  (&(&host->lock)->rlock#2){-.-...}, at: [<bf054120>] mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]
      [   65.470000]
      [   65.470000] stack backtrace:
      [   65.470000] [<c0014990>] (unwind_backtrace+0x0/0xf4) from [<c005ccb8>] (__lock_acquire+0x14f8/0x1b98)
      [   65.470000] [<c005ccb8>] (__lock_acquire+0x14f8/0x1b98) from [<c005d3f8>] (lock_acquire+0xa0/0x108)
      [   65.470000] [<c005d3f8>] (lock_acquire+0xa0/0x108) from [<c02f671c>] (_raw_spin_lock_irqsave+0x48/0x5c)
      [   65.470000] [<c02f671c>] (_raw_spin_lock_irqsave+0x48/0x5c) from [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc])
      [   65.470000] [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]) from [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc])
      [   65.470000] [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc]) from [<c0219b38>] (sdio_irq_thread+0x1bc/0x274)
      [   65.470000] [<c0219b38>] (sdio_irq_thread+0x1bc/0x274) from [<c003c324>] (kthread+0x8c/0x98)
      [   65.470000] [<c003c324>] (kthread+0x8c/0x98) from [<c00101ac>] (kernel_thread_exit+0x0/0x8)
      [   65.470000] BUG: spinlock lockup suspected on CPU#0, ksdioirqd/mmc0/73
      [   65.470000]  lock: 0xc3358724, .magic: dead4ead, .owner: ksdioirqd/mmc0/73, .owner_cpu: 0
      [   65.470000] [<c0014990>] (unwind_backtrace+0x0/0xf4) from [<c01b46b0>] (do_raw_spin_lock+0x100/0x144)
      [   65.470000] [<c01b46b0>] (do_raw_spin_lock+0x100/0x144) from [<c02f6724>] (_raw_spin_lock_irqsave+0x50/0x5c)
      [   65.470000] [<c02f6724>] (_raw_spin_lock_irqsave+0x50/0x5c) from [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc])
      [   65.470000] [<bf054120>] (mxs_mmc_enable_sdio_irq+0x18/0xdc [mxs_mmc]) from [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc])
      [   65.470000] [<bf0541d0>] (mxs_mmc_enable_sdio_irq+0xc8/0xdc [mxs_mmc]) from [<c0219b38>] (sdio_irq_thread+0x1bc/0x274)
      [   65.470000] [<c0219b38>] (sdio_irq_thread+0x1bc/0x274) from [<c003c324>] (kthread+0x8c/0x98)
      [   65.470000] [<c003c324>] (kthread+0x8c/0x98) from [<c00101ac>] (kernel_thread_exit+0x0/0x8)
      Reported-by: NAttila Kinali <attila@kinali.ch>
      Signed-off-by: NLauri Hintsala <lauri.hintsala@bluegiga.com>
      Acked-by: NShawn Guo <shawn.guo@linaro.org>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      fc108d24
    • L
      mmc: mxs-mmc: fix deadlock in SDIO IRQ case · 1af36b2a
      Lauri Hintsala 提交于
      Release the lock before mmc_signal_sdio_irq is called by mxs_mmc_irq_handler.
      
      Backtrace:
      [   79.660000] =============================================
      [   79.660000] [ INFO: possible recursive locking detected ]
      [   79.660000] 3.4.0-00009-g3e96082-dirty #11 Not tainted
      [   79.660000] ---------------------------------------------
      [   79.660000] swapper/0 is trying to acquire lock:
      [   79.660000]  (&(&host->lock)->rlock#2){-.....}, at: [<c026ea3c>] mxs_mmc_enable_sdio_irq+0x18/0xd4
      [   79.660000]
      [   79.660000] but task is already holding lock:
      [   79.660000]  (&(&host->lock)->rlock#2){-.....}, at: [<c026f744>] mxs_mmc_irq_handler+0x1c/0xe8
      [   79.660000]
      [   79.660000] other info that might help us debug this:
      [   79.660000]  Possible unsafe locking scenario:
      [   79.660000]
      [   79.660000]        CPU0
      [   79.660000]        ----
      [   79.660000]   lock(&(&host->lock)->rlock#2);
      [   79.660000]   lock(&(&host->lock)->rlock#2);
      [   79.660000]
      [   79.660000]  *** DEADLOCK ***
      [   79.660000]
      [   79.660000]  May be due to missing lock nesting notation
      [   79.660000]
      [   79.660000] 1 lock held by swapper/0:
      [   79.660000]  #0:  (&(&host->lock)->rlock#2){-.....}, at: [<c026f744>] mxs_mmc_irq_handler+0x1c/0xe8
      [   79.660000]
      [   79.660000] stack backtrace:
      [   79.660000] [<c0014bd0>] (unwind_backtrace+0x0/0xf4) from [<c005f9c0>] (__lock_acquire+0x1948/0x1d48)
      [   79.660000] [<c005f9c0>] (__lock_acquire+0x1948/0x1d48) from [<c005fea0>] (lock_acquire+0xe0/0xf8)
      [   79.660000] [<c005fea0>] (lock_acquire+0xe0/0xf8) from [<c03a8460>] (_raw_spin_lock_irqsave+0x44/0x58)
      [   79.660000] [<c03a8460>] (_raw_spin_lock_irqsave+0x44/0x58) from [<c026ea3c>] (mxs_mmc_enable_sdio_irq+0x18/0xd4)
      [   79.660000] [<c026ea3c>] (mxs_mmc_enable_sdio_irq+0x18/0xd4) from [<c026f7fc>] (mxs_mmc_irq_handler+0xd4/0xe8)
      [   79.660000] [<c026f7fc>] (mxs_mmc_irq_handler+0xd4/0xe8) from [<c006bdd8>] (handle_irq_event_percpu+0x70/0x254)
      [   79.660000] [<c006bdd8>] (handle_irq_event_percpu+0x70/0x254) from [<c006bff8>] (handle_irq_event+0x3c/0x5c)
      [   79.660000] [<c006bff8>] (handle_irq_event+0x3c/0x5c) from [<c006e6d0>] (handle_level_irq+0x90/0x110)
      [   79.660000] [<c006e6d0>] (handle_level_irq+0x90/0x110) from [<c006b930>] (generic_handle_irq+0x38/0x50)
      [   79.660000] [<c006b930>] (generic_handle_irq+0x38/0x50) from [<c00102fc>] (handle_IRQ+0x30/0x84)
      [   79.660000] [<c00102fc>] (handle_IRQ+0x30/0x84) from [<c000f058>] (__irq_svc+0x38/0x60)
      [   79.660000] [<c000f058>] (__irq_svc+0x38/0x60) from [<c0010520>] (default_idle+0x2c/0x40)
      [   79.660000] [<c0010520>] (default_idle+0x2c/0x40) from [<c0010a90>] (cpu_idle+0x64/0xcc)
      [   79.660000] [<c0010a90>] (cpu_idle+0x64/0xcc) from [<c04ff858>] (start_kernel+0x244/0x2c8)
      [   79.660000] BUG: spinlock lockup on CPU#0, swapper/0
      [   79.660000]  lock: c398cb2c, .magic: dead4ead, .owner: swapper/0, .owner_cpu: 0
      [   79.660000] [<c0014bd0>] (unwind_backtrace+0x0/0xf4) from [<c01ddb1c>] (do_raw_spin_lock+0xf0/0x144)
      [   79.660000] [<c01ddb1c>] (do_raw_spin_lock+0xf0/0x144) from [<c03a8468>] (_raw_spin_lock_irqsave+0x4c/0x58)
      [   79.660000] [<c03a8468>] (_raw_spin_lock_irqsave+0x4c/0x58) from [<c026ea3c>] (mxs_mmc_enable_sdio_irq+0x18/0xd4)
      [   79.660000] [<c026ea3c>] (mxs_mmc_enable_sdio_irq+0x18/0xd4) from [<c026f7fc>] (mxs_mmc_irq_handler+0xd4/0xe8)
      [   79.660000] [<c026f7fc>] (mxs_mmc_irq_handler+0xd4/0xe8) from [<c006bdd8>] (handle_irq_event_percpu+0x70/0x254)
      [   79.660000] [<c006bdd8>] (handle_irq_event_percpu+0x70/0x254) from [<c006bff8>] (handle_irq_event+0x3c/0x5c)
      [   79.660000] [<c006bff8>] (handle_irq_event+0x3c/0x5c) from [<c006e6d0>] (handle_level_irq+0x90/0x110)
      [   79.660000] [<c006e6d0>] (handle_level_irq+0x90/0x110) from [<c006b930>] (generic_handle_irq+0x38/0x50)
      [   79.660000] [<c006b930>] (generic_handle_irq+0x38/0x50) from [<c00102fc>] (handle_IRQ+0x30/0x84)
      [   79.660000] [<c00102fc>] (handle_IRQ+0x30/0x84) from [<c000f058>] (__irq_svc+0x38/0x60)
      [   79.660000] [<c000f058>] (__irq_svc+0x38/0x60) from [<c0010520>] (default_idle+0x2c/0x40)
      [   79.660000] [<c0010520>] (default_idle+0x2c/0x40) from [<c0010a90>] (cpu_idle+0x64/0xcc)
      [   79.660000] [<c0010a90>] (cpu_idle+0x64/0xcc) from [<c04ff858>] (start_kernel+0x244/0x2c8)
      Signed-off-by: NLauri Hintsala <lauri.hintsala@bluegiga.com>
      Acked-by: NShawn Guo <shawn.guo@linaro.org>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      1af36b2a
  9. 18 8月, 2012 5 次提交
  10. 23 7月, 2012 2 次提交
  11. 06 6月, 2012 1 次提交
  12. 13 5月, 2012 8 次提交
  13. 12 5月, 2012 1 次提交
  14. 20 4月, 2012 1 次提交
  15. 27 3月, 2012 2 次提交
    • H
      mxs-dma : rewrite the last parameter of mxs_dma_prep_slave_sg() · 921de864
      Huang Shijie 提交于
      [1] Background :
          The GPMI does ECC read page operation with a DMA chain consist of three DMA
          Command Structures. The middle one of the chain is used to enable the BCH,
          and read out the NAND page.
      
          The WAIT4END(wait for command end) is a comunication signal between
          the GPMI and MXS-DMA.
      
      [2] The current DMA code sets the WAIT4END bit at the last one, such as:
      
          +-----+               +-----+                      +-----+
          | cmd | ------------> | cmd | ------------------>  | cmd |
          +-----+               +-----+                      +-----+
                                                                ^
                                                                |
                                                                |
                                                           set WAIT4END here
      
          This chain works fine in the mx23/mx28.
      
      [3] But in the new GPMI version (used in MX50/MX60), the WAIT4END bit should
          be set not only at the last DMA Command Structure,
          but also at the middle one, such as:
      
          +-----+               +-----+                      +-----+
          | cmd | ------------> | cmd | ------------------>  | cmd |
          +-----+               +-----+                      +-----+
                                   ^                            ^
                                   |                            |
                                   |                            |
                              set WAIT4END here too        set WAIT4END here
      
          If we do not set WAIT4END, the BCH maybe stalls in "ECC reading page" state.
          In the next ECC write page operation, a DMA-timeout occurs.
          This has been catched in the MX6Q board.
      
      [4] In order to fix the bug, rewrite the last parameter of mxs_dma_prep_slave_sg(),
          and use the dma_ctrl_flags:
          ---------------------------------------------------------
            DMA_PREP_INTERRUPT : append a new DMA Command Structrue.
            DMA_CTRL_ACK       : set the WAIT4END bit for this DMA Command Structure.
          ---------------------------------------------------------
      
      [5] changes to the relative drivers:
          <1> For mxs-mmc driver, just use the new flags, do not change any logic.
          <2> For gpmi-nand driver, and use the new flags to set the DMA
              chain, especially for ecc read page.
      Acked-by: NShawn Guo <shawn.guo@linaro.org>
      Signed-off-by: NHuang Shijie <b32955@freescale.com>
      Acked-by: NVinod Koul <vinod.koul@linux.intel.com>
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      921de864
    • H
      mxs-dma : move the mxs dma.h to a more common place · 39468604
      Huang Shijie 提交于
      Move the header to a more common place.
      The mxs dma engine is not only used in mx23/mx28, but also used
      in mx50/mx6q.  It will also be used in the future chips.
      
      Rename it to mxs-dma.h, and create a new folder include/linux/fsl/ to
      store the Freescale's header files.
      
      change mxs-dma driver, mxs-mmc driver, gpmi-nand driver, mxs-saif driver
      to the new header file.
      Acked-by: NShawn Guo <shawn.guo@linaro.org>
      Acked-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
      Signed-off-by: NHuang Shijie <b32955@freescale.com>
      Acked-by: NVinod Koul <vinod.koul@linux.intel.com>
      Acked-by: NChris Ball <cjb@laptop.org>
      Signed-off-by: NDavid Woodhouse <David.Woodhouse@intel.com>
      39468604
  16. 21 3月, 2012 1 次提交
  17. 12 1月, 2012 1 次提交
  18. 28 12月, 2011 1 次提交
  19. 24 12月, 2011 1 次提交
  20. 31 10月, 2011 1 次提交
  21. 27 10月, 2011 1 次提交
  22. 21 7月, 2011 1 次提交
    • K
      mmc: mxs-mmc: fix clock rate setting · d982dcdc
      Koen Beel 提交于
      Fix clock rate setting in the mxs-mmc driver. Previously, if div2 was 0
      then the value for TIMING_CLOCK_RATE would have been 255 instead of 0.
      The limits for div1 (TIMING_CLOCK_DIVIDE) and div2 (TIMING_CLOCK_RATE+1)
      were also not correctly defined.
      
      Can easily be reproduced on mx23evk: default clock for high speed sdio
      cards is 50 MHz. With a SSP_CLK of 28.8 MHz default), this resulted in
      an actual clock rate of about 56 kHz.  Tested on mx23evk.
      Signed-off-by: NKoen Beel <koen.beel@barco.com>
      Reviewed-by: NWolfram Sang <w.sang@pengutronix.de>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      d982dcdc
  23. 16 3月, 2011 1 次提交