1. 14 9月, 2012 1 次提交
    • Z
      dmaengine: mmp-pdma support · c8acd6aa
      Zhangfei Gao 提交于
      1. virtual channel vs. physical channel
      Virtual channel is managed by dmaengine
      Physical channel handling resource, such as irq
      Physical channel is alloced dynamically as descending priority,
      freed immediately when irq done.
      The availble highest priority physically channel will alwayes be alloced
      
      Issue pending list -> alloc highest dma physically channel available -> dma done -> free physically channel
      
      2. list: running list & pending list
      submit: desc list -> pending list
      issue_pending_list: if (IDLE) pending list -> running list; free pending list (RUN)
      irq: free running list (IDLE)
           check pendlist -> pending list -> running list; free pending list (RUN)
      
      3. irq:
      Each list generate one irq, calling callback
      One list may contain several desc chain, in such case, make sure only the last desc list generate irq.
      
      4. async
      Submit will add desc chain to pending list, which can be multi-called
      If multi desc chain is submitted, only the last desc would generate irq -> call back
      If IDLE, issue_pending_list start pending_list, transforming pendlist to running list
      If RUN, irq will start pending list
      
      5. test
      5.1 pxa3xx_nand on pxa910
      5.2 insmod dmatest.ko (threads_per_chan=y)
      By default drivers/dma/dmatest.c test every channel and test memcpy with 1 threads per channel
      Signed-off-by: NZhangfei Gao <zhangfei.gao@marvell.com>
      Acked-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NVinod Koul <vinod.koul@linux.intel.com>
      c8acd6aa
  2. 01 9月, 2012 1 次提交
  3. 31 8月, 2012 2 次提交
  4. 22 8月, 2012 2 次提交
    • J
      drivers/dma/amba-pl08x.c: fix error return code · 983d7beb
      Julia Lawall 提交于
      Convert a 0 error return code to a negative one, as returned elsewhere in the
      function.
      
      A simplified version of the semantic match that finds this problem is as
      follows: (http://coccinelle.lip6.fr/)
      
      // <smpl>
      @@
      identifier ret;
      expression e,e1,e2,e3,e4,x;
      @@
      
      (
      if (\(ret != 0\|ret < 0\) || ...) { ... return ...; }
      |
      ret = 0
      )
      ... when != ret = e1
      *x = \(kmalloc\|kzalloc\|kcalloc\|devm_kzalloc\|ioremap\|ioremap_nocache\|devm_ioremap\|devm_ioremap_nocache\)(...);
      ... when != x = e2
          when != ret = e3
      *if (x == NULL || ...)
      {
        ... when != ret = e4
      *  return ret;
      }
      // </smpl>
      Signed-off-by: NJulia Lawall <Julia.Lawall@lip6.fr>
      Signed-off-by: NVinod Koul <vinod.koul@linux.intel.com>
      983d7beb
    • J
      drivers/dma/sirf-dma.c: fix usage of devm functions · 94d3901c
      Julia Lawall 提交于
      Fix some problems with the use of devm_ functions.
      
      devm_kzalloc: devm_kfree is not needed
      
      devm_ioremap: iounmap should not be used, no free is needed
      
      devm_request_irq: the devm_free_irq is followed by irq_dispose_mapping.  I
      don't know if it is safe to move the freeing of the irq in this case, so I
      have just un-devm'd this function, since the implicit freeing is never
      taken advantage of.
      
      In the original code failure of of_address_to_resource jumped to free_mem,
      but should have jumped to irq_dispose, since irq_of_parse_and_map has
      completed at this point.
      
      In the original code unmap_mem was after irq_dispose, but it should have
      been before, again since irq_of_parse_and_map has completed at this point.
      
      One of these problems was found using the following semantic match:
      (http://coccinelle.lip6.fr/)
      
      // <smpl>
      @@
      expression x;
      @@
      
      *x = devm_ioremap(...)
      ...
      iounmap(x);
      // </smpl>
      Signed-off-by: NJulia Lawall <Julia.Lawall@lip6.fr>
      Acked-by: NBarry Song <Baohua.Song@csr.com>
      Signed-off-by: NVinod Koul <vinod.koul@linux.intel.com>
      94d3901c
  5. 01 8月, 2012 1 次提交
  6. 31 7月, 2012 5 次提交
  7. 27 7月, 2012 1 次提交
    • F
      dma: imx-dma: Fix kernel crash due to missing clock conversion · a2367db2
      Fabio Estevam 提交于
      With the new i.MX clock infrastructure we need to request the dma clocks
      seperately: ahb and ipg clocks.
      
      This fixes the following kernel crash and make audio to be functional again:
      
      root@freescale /home$ aplay audio48k16S.wav
      Playing WAVE 'audio48k16S.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
      pgd = c7b74000
      [00000000] *pgd=a7bb5831, *pte=00000000, *ppte=00000000
      Internal error: Oops: 17 [#1] PREEMPT ARM
      Modules linked in:
      CPU: 0    Not tainted  (3.5.0-rc5-next-20120702-00007-g3028b64 #1128)
      PC is at snd_dmaengine_pcm_get_chan+0x8/0x10
      LR is at snd_imx_pcm_hw_params+0x18/0xdc
      pc : [<c02d3cf8>]    lr : [<c02e95ec>]    psr: a0000013
      sp : c7b45e30  ip : ffffffff  fp : c7ae58e0
      r10: 00000000  r9 : c7ae981c  r8 : c7b88800
      r7 : c7ae5a60  r6 : c7ae5b20  r5 : c7ae9810  r4 : c7afa060
      r3 : 00000000  r2 : 00000001  r1 : c7b88800  r0 : c7afa060
      Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
      Control: 0005317f  Table: a7b74000  DAC: 00000015
      Process aplay (pid: 701, stack limit = 0xc7b44270)
      Stack: (0xc7b45e30 to 0xc7b46000)
      5e20:                                     00100000 00000029 c7b88800 c02db870
      5e40: c7ae5a60 c02d4594 00000010 01ae5a60 c7ae5a60 c7ae9810 c7ae9810 c7afa060
      5e60: c7ae5b20 c7ae5a60 c7b88800 c02e3ef0 c02e3e08 c7b1e400 c7afa060 c7b88800
      5e80: 00000000 c0014da8 c7b44000 00000000 bec566ac c02cd400 c7afa060 c7afa060
      5ea0: bec56800 c7b88800 c0014da8 c02cdd7c c04ee710 c04ee7b8 00000003 c005fc74
      5ec0: 00000000 7fffffff c7b45f00 c7afa060 c7b67420 c7ba3070 00000004 c0014da8
      5ee0: c7b44000 00000000 bec566ac c02ced88 c04e95f8 b6f5ab04 c7b45fb0 0145a468
      5f00: 0145a600 bec566bc bec56800 c7b67420 c7ba3070 c00d499c c7b45f18 c7b45f18
      5f20: 0000001a 00000004 00000001 c7b44000 c0527f40 00000009 00000008 00000000
      5f40: c7b44000 c002c9ec 00000001 c04f0ab0 c04ebec0 00000101 00000000 0000000a
      5f60: 60000093 c7b67420 bec56800 c25c4111 00000004 c0014da8 c7b44000 00000000
      5f80: bec566ac c00d4f38 b6ffb658 00000000 c0522d80 0145a468 b6fd5000 0145a418
      5fa0: 00000036 c0014c00 0145a468 b6fd5000 00000004 c25c4111 bec56800 00020001
      5fc0: 0145a468 b6fd5000 0145a418 00000036 0145a468 0145a600 bec566bc bec566ac
      5fe0: 0145a468 bec56388 b6f65ce4 b6dcebec 20000010 00000004 00000000 00000000
      [<c02d3cf8>] (snd_dmaengine_pcm_get_chan+0x8/0x10) from [<c02e95ec>] (snd_imx_pcm_hw_params+0x18/0xdc)
      [<c02e95ec>] (snd_imx_pcm_hw_params+0x18/0xdc) from [<c02e3ef0>] (soc_pcm_hw_params+0xe8/0x1f0)
      [<c02e3ef0>] (soc_pcm_hw_params+0xe8/0x1f0) from [<c02cd400>] (snd_pcm_hw_params+0x124/0x474)
      [<c02cd400>] (snd_pcm_hw_params+0x124/0x474) from [<c02cdd7c>] (snd_pcm_common_ioctl1+0x4b4/0xf74)
      [<c02cdd7c>] (snd_pcm_common_ioctl1+0x4b4/0xf74) from [<c02ced88>] (snd_pcm_playback_ioctl1+0x30/0x510)
      [<c02ced88>] (snd_pcm_playback_ioctl1+0x30/0x510) from [<c00d499c>] (do_vfs_ioctl+0x80/0x5e4)
      [<c00d499c>] (do_vfs_ioctl+0x80/0x5e4) from [<c00d4f38>] (sys_ioctl+0x38/0x60)
      [<c00d4f38>] (sys_ioctl+0x38/0x60) from [<c0014c00>] (ret_fast_syscall+0x0/0x2c)
      Code: e593000c e12fff1e e59030a0 e59330bc (e5930000)
      ---[ end trace fa518c8ba3a74e97 ]--
      Reported-by: NJavier Martin <javier.martin@vista-silicon.com>
      Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com>
      Acked-by: NSascha Hauer <s.hauer@pengutronix.de>
      Signed-off-by: NVinod Koul <vinod.koul@linux.intel.com>
      Cc: stable@vger.kernel.org
      a2367db2
  8. 26 7月, 2012 1 次提交
  9. 20 7月, 2012 5 次提交
  10. 16 7月, 2012 4 次提交
  11. 13 7月, 2012 5 次提交
  12. 01 7月, 2012 12 次提交