1. 11 5月, 2016 8 次提交
    • M
      ata: sata_dwc_460ex: use "dmas" DT property to find dma channel · 50b43375
      Mans Rullgard 提交于
      Currently this driver only works with a DesignWare DMA engine which it
      registers manually using the second "reg" address range and interrupt
      number from the DT node.
      
      This patch makes the driver instead use the "dmas" property if present,
      otherwise optionally falling back on the old way so existing device
      trees can continue to work.
      
      With this change, there is no longer any reason to depend on the 460EX
      machine type so drop that from Kconfig.
      Tested-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NMans Rullgard <mans@mansr.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      50b43375
    • A
      ata: sata_dwc_460ex: don't call ata_sff_qc_issue() on DMA commands · 077028ec
      Andy Shevchenko 提交于
      ata_sff_qc_issue() can't handle DMA commands and thus we have to avoid it for
      them. Do call ata_bmdma_qc_issue() instead for this case. Note that the former
      one distinguishes PIO and DMA mode and behaves accordingly.
      Suggested-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      077028ec
    • M
      ata: sata_dwc_460ex: skip dma setup for non-dma commands · ae4c3485
      Mans Rullgard 提交于
      Calling dmaengine_prep_slave_sg() for non-dma ATA commands is
      unnecessary at best and could be harmful if the dma driver reacts
      badly to this.  It also causes this driver to print a bogus error
      message in these cases.
      
      This patch changes sata_dwc_qc_issue() to only do the dma setup
      for dma commands and also reports an error to libata if if fails.
      Tested-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NMans Rullgard <mans@mansr.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      ae4c3485
    • A
      ata: sata_dwc_460ex: DMA is always a flow controller · 59a75cef
      Andy Shevchenko 提交于
      In the original code the DMA is always a flow controller. Set this accordingly
      in updated code.
      Tested-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      59a75cef
    • A
      ata: sata_dwc_460ex: burst size must be in items not bytes · 4ea8c205
      Andy Shevchenko 提交于
      The burst size as defined by DMAengine API is in items of address width. Derive
      burst size from AHB_DMA_BRST_DFLT (64 bytes) by dividing it to
      DMA_SLAVE_BUSWIDTH_4_BYTES (4 bytes) that gives us 16 items.
      Tested-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      4ea8c205
    • A
      ata: sata_dwc_460ex: set dma_boundary to 0x1fff · 6689dfac
      Andy Shevchenko 提交于
      The original code states:
      
      	Make sure a LLI block is not created that will span 8K max FIS
      	boundary. If the block spans such a FIS boundary, there is a chance
      	that a DMA burst will cross that boundary -- this results in an error
      	in the host controller.
      
      Since we have switched to generic DMAengine API we satisfy above by setting
      dma_boundary value to 0x1fff.
      Suggested-by: NMans Rullgard <mans@mansr.com>
      Tested-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      6689dfac
    • C
      ata: sata_dwc_460ex: fix crash on offline links without an attached drive · a7e6de54
      Christian Lamparter 提交于
      This patch fixes Machine Check "Data Write PLB Error" which happens
      when libata-sff's ata_sff_dev_select is trying to write into the
      device_addr in order to select a drive. However, SATA has no master
      or slave devices like the old ATA Bus, therefore selecting a
      different drive is kind of pointless.
      
      Data Write PLB Error
      Oops: Machine check, sig: 7 [#1]
      PowerPC 44x Platform
      Modules linked in:
      CPU: 0 PID: 508 Comm: scsi_eh_0 Not tainted 4.6.0-rc3-next-20160412+ #10
      [...]
      NIP [c027e820] ata_sff_dev_select+0x3c/0x44
      LR [c027e810] ata_sff_dev_select+0x2c/0x44
      Call Trace:
      [cec31cd0] [c027da00] ata_sff_postreset+0x40/0xb4 (unreliable)
      [cec31ce0] [c027a03c] ata_eh_reset+0x5cc/0x928
      [cec31d60] [c027a840] ata_eh_recover+0x330/0x10bc
      [cec31df0] [c027bae0] ata_do_eh+0x4c/0xa4
      [...]
      Signed-off-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      a7e6de54
    • M
      ata: sata_dwc_460ex: remove incorrect locking · 55e610cd
      Mans Rullgard 提交于
      This lock is already taken in ata_scsi_queuecmd() a few levels up the
      call stack so attempting to take it here is an error.  Moreover, it is
      pointless in the first place since it only protects a single, atomic
      assignment.
      
      Enabling lock debugging gives the following output:
      
      =============================================
      [ INFO: possible recursive locking detected ]
      4.4.0-rc5+ #189 Not tainted
      ---------------------------------------------
      kworker/u2:3/37 is trying to acquire lock:
       (&(&host->lock)->rlock){-.-...}, at: [<90283294>] sata_dwc_exec_command_by_tag.constprop.14+0x44/0x8c
      
      but task is already holding lock:
       (&(&host->lock)->rlock){-.-...}, at: [<902761ac>] ata_scsi_queuecmd+0x2c/0x330
      
      other info that might help us debug this:
       Possible unsafe locking scenario:
      
             CPU0
             ----
        lock(&(&host->lock)->rlock);
        lock(&(&host->lock)->rlock);
      
       *** DEADLOCK ***
       May be due to missing lock nesting notation
      
      4 locks held by kworker/u2:3/37:
       #0:  ("events_unbound"){.+.+.+}, at: [<9003a0a4>] process_one_work+0x12c/0x430
       #1:  ((&entry->work)){+.+.+.}, at: [<9003a0a4>] process_one_work+0x12c/0x430
       #2:  (&bdev->bd_mutex){+.+.+.}, at: [<9011fd54>] __blkdev_get+0x50/0x380
       #3:  (&(&host->lock)->rlock){-.-...}, at: [<902761ac>] ata_scsi_queuecmd+0x2c/0x330
      
      stack backtrace:
      CPU: 0 PID: 37 Comm: kworker/u2:3 Not tainted 4.4.0-rc5+ #189
      Workqueue: events_unbound async_run_entry_fn
      Stack : 90b38e30 00000021 00000003 9b2a6040 00000000 9005f3f0 904fc8dc 00000025
              906b96e4 00000000 90528648 9b3336c4 904fc8dc 9009bf18 00000002 00000004
              00000000 00000000 9b3336c4 9b3336e4 904fc8dc 9003d074 00000000 90500000
              9005e738 00000000 00000000 00000000 00000000 00000000 00000000 00000000
              6e657665 755f7374 756f626e 0000646e 00000000 00000000 9b00ca00 9b025000
                ...
      Call Trace:
      [<90009d6c>] show_stack+0x88/0xa4
      [<90057744>] __lock_acquire+0x1ce8/0x2154
      [<900583e4>] lock_acquire+0x64/0x8c
      [<9045ff10>] _raw_spin_lock_irqsave+0x54/0x78
      [<90283294>] sata_dwc_exec_command_by_tag.constprop.14+0x44/0x8c
      [<90283484>] sata_dwc_qc_issue+0x1a8/0x24c
      [<9026b39c>] ata_qc_issue+0x1f0/0x410
      [<90273c6c>] ata_scsi_translate+0xb4/0x200
      [<90276234>] ata_scsi_queuecmd+0xb4/0x330
      [<9025800c>] scsi_dispatch_cmd+0xd0/0x128
      [<90259934>] scsi_request_fn+0x58c/0x638
      [<901a3e50>] __blk_run_queue+0x40/0x5c
      [<901a83d4>] blk_queue_bio+0x27c/0x28c
      [<901a5914>] generic_make_request+0xf0/0x188
      [<901a5a54>] submit_bio+0xa8/0x194
      [<9011adcc>] submit_bh_wbc.isra.23+0x15c/0x17c
      [<9011c908>] block_read_full_page+0x3e4/0x428
      [<9009e2e0>] do_read_cache_page+0xac/0x210
      [<9009fd90>] read_cache_page+0x18/0x24
      [<901bbd18>] read_dev_sector+0x38/0xb0
      [<901bd174>] msdos_partition+0xb4/0x5c0
      [<901bcb8c>] check_partition+0x140/0x274
      [<901bba60>] rescan_partitions+0xa0/0x2b0
      [<9011ff68>] __blkdev_get+0x264/0x380
      [<901201ac>] blkdev_get+0x128/0x36c
      [<901b9378>] add_disk+0x3c0/0x4bc
      [<90268268>] sd_probe_async+0x100/0x224
      [<90043a44>] async_run_entry_fn+0x50/0x124
      [<9003a11c>] process_one_work+0x1a4/0x430
      [<9003a4f4>] worker_thread+0x14c/0x4fc
      [<900408f4>] kthread+0xd0/0xe8
      [<90004338>] ret_from_kernel_thread+0x14/0x1c
      
      Fixes: 62936009 ("[libata] Add 460EX on-chip SATA driver, sata_dwc_460ex")
      Tested-by: NChristian Lamparter <chunkeey@googlemail.com>
      Signed-off-by: NMans Rullgard <mans@mansr.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      55e610cd
  2. 02 5月, 2016 1 次提交
  3. 14 4月, 2016 1 次提交
    • A
      dmaengine: dw: rename masters to reflect actual topology · c422025c
      Andy Shevchenko 提交于
      The source and destination masters are reflecting buses or their layers to
      where the different devices can be connected. The patch changes the master
      names to reflect which one is related to which independently on the transfer
      direction.
      
      The outcome of the change is that the memory data width is now always limited
      by a data width of the master which is dedicated to communicate to memory.
      
      The patch will not break anything since all current users have the same data
      width for all masters. Though it would be nice to revisit avr32 platforms to
      check what is the actual hardware topology in use there. It seems that it has
      one bus and two masters on it as stated by Table 8-2, that's why everything
      works independently on the master in use. The purpose of the sequential patch
      is to fix the driver for configuration of more than one bus.
      
      The change is done in the assumption that src_master and dst_master are
      reflecting a connection to the memory and peripheral correspondently on avr32
      and otherwise on the rest.
      Acked-by: NHans-Christian Egtvedt <egtvedt@samfundet.no>
      Acked-by: NMark Brown <broonie@kernel.org>
      Signed-off-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: NVinod Koul <vinod.koul@intel.com>
      c422025c
  4. 31 3月, 2015 1 次提交
  5. 25 3月, 2015 3 次提交
  6. 08 1月, 2015 6 次提交
  7. 07 1月, 2015 1 次提交
  8. 20 10月, 2014 1 次提交
  9. 27 3月, 2014 1 次提交
  10. 14 2月, 2014 1 次提交
  11. 11 11月, 2013 1 次提交
    • R
      powerpc: add missing explicit OF includes for ppc · c11eede6
      Rob Herring 提交于
      Commit b5b4bb3f (of: only include prom.h on sparc) removed implicit
      includes of of_*.h headers by powerpc's prom.h. Some components were
      missed in initial clean-up patch, so add the necessary includes to fix
      powerpc builds.
      Signed-off-by: NRob Herring <rob.herring@calxeda.com>
      Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Matt Mackall <mpm@selenic.com>
      Cc: Herbert Xu <herbert@gondor.apana.org.au>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Vinod Koul <vinod.koul@intel.com>
      Cc: Dan Williams <dan.j.williams@intel.com>
      Cc: linuxppc-dev@lists.ozlabs.org
      Cc: linux-ide@vger.kernel.org
      Cc: linux-crypto@vger.kernel.org
      c11eede6
  12. 14 12月, 2012 1 次提交
  13. 26 7月, 2012 2 次提交
  14. 09 1月, 2012 1 次提交
    • A
      SATA/PATA: convert drivers/ata/* to use module_platform_driver() · 99c8ea3e
      Axel Lin 提交于
      This patch converts the drivers in drivers/ata/* to use the
      module_platform_driver() macro which makes the code smaller and a bit
      simpler.
      
      Cc: Viresh Kumar <viresh.kumar@st.com>
      Cc: Jeff Garzik <jgarzik@pobox.com>
      Cc: Arnaud Patard <arnaud.patard@rtp-net.org>
      Cc: Alessandro Zummo <a.zummo@towertech.it>
      Cc: Sylvain Munaut <tnt@246tNt.com>
      Cc: Anton Vorontsov <avorontsov@ru.mvista.com>
      Cc: Marek Vasut <marek.vasut@gmail.com>
      Cc: Florian Fainelli <florian@openwrt.org>
      Cc: Mark Miesfeld <mmiesfeld@amcc.com>
      Cc: Ashish Kalra <ashish.kalra@freescale.com>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Signed-off-by: NAxel Lin <axel.lin@gmail.com>
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      99c8ea3e
  15. 19 8月, 2011 1 次提交
    • J
      drivers/ata/sata_dwc_460ex.c: add missing kfree · a081da63
      Julia Lawall 提交于
      Currently, error handling code in this function calls the function
      sata_dwc_port_stop, but this function has essentially no effect if hsdevp
      has not been stored in ap, which is the case throughout this function.  The
      only effect is to print a debugging message including ap->print_id.
      
      The code is rewritten to not call sata_dwc_port_stop, but instead to jump
      to a local label that prints the original error message and the print_id
      information.  In the case where hsdevp has been already allocated (but not
      yet stored in ap), this value is freed as well.
      
      A simplified version of the semantic match that finds this problem is as
      follows: (http://coccinelle.lip6.fr/)
      
      // <smpl>
      @exists@
      local idexpression x;
      statement S,S1;
      expression E;
      identifier fl;
      expression *ptr != NULL;
      @@
      
      x = \(kmalloc\|kzalloc\|kcalloc\)(...);
      ...
      if (x == NULL) S
      <... when != x
           when != if (...) { <+...kfree(x)...+> }
           when any
           when != true x == NULL
      x->fl
      ...>
      (
      if (x == NULL) S1
      |
      if (...) { ... when != x
                     when forall
      (
       return \(0\|<+...x...+>\|ptr\);
      |
      * return ...;
      )
      }
      )
      // </smpl>
      Signed-off-by: NJulia Lawall <julia@diku.dk>
      Signed-off-by: NJeff Garzik <jgarzik@pobox.com>
      a081da63
  16. 26 7月, 2011 1 次提交
  17. 24 7月, 2011 1 次提交
  18. 27 6月, 2011 1 次提交
  19. 24 6月, 2011 1 次提交
  20. 02 3月, 2011 6 次提交