1. 03 6月, 2015 1 次提交
    • M
      spi: restore rx/tx_buf in case of unset CONFIG_HAS_DMA · 4b786458
      Martin Sperl 提交于
      The case where spi_master sets the flags SPI_MASTER_MUST_RX/TX while
      CONFIG_HAS_DMA is unset (which is unlikley) together with a driver
      that reuses spi_messages with rx/tx_buff set to NULL, can result in:
      * data disclosure over the SPI (for tx_buf == NULL)
      * memory corruption (for rx_buf == NULL)
      
      This happenes when dummy_rx/dummy_tx are changing address due to krealloc
      or free and an allocation of the memory by a different part of the kernel.
      Signed-off-by: NMartin Sperl <kernel@martin.sperl.org>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      4b786458
  2. 12 5月, 2015 1 次提交
  3. 17 4月, 2015 1 次提交
    • R
      spi: check tx_buf and rx_buf in spi_unmap_msg · f8bb820d
      Robin Gong 提交于
      Some spi device drivers use the same tx_buf and rx_buf repeatly for better
      performance such as driver/input/touchsreen/ads7846.c, but spi core grab tx_buf
      /rx_buf of transfer and set them as dummy_tx/dummy_rx once they are NULL. Thus,
      in the second time the tx_buf/rx_buf will be replaced by dummy_tx/dummy_rx and
      the data which produced by the last tx or rx may be wrongly sent to the device
      or handled by the upper level protocol. This patch just keep the orignal value
      of tx_buf/rx_buf if they are NULL after this transfer processed.
      Signed-off-by: NRobin Gong <b38343@freescale.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      f8bb820d
  4. 08 4月, 2015 1 次提交
    • G
      spi: Make master->handle_err() callback optional to avoid crashes · ff61eb42
      Geert Uytterhoeven 提交于
      If a driver doesn't implement the master->handle_err() callback and an
      SPI transfer fails, the kernel will crash with a NULL pointer
      dereference:
      
          Unable to handle kernel NULL pointer dereference at virtual address 00000000
          pgd = c0003000
          [00000000] *pgd=80000040004003, *pmd=00000000
          Internal error: Oops: 80000206 [#1] SMP ARM
          Modules linked in:
          CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.0.0-rc7-koelsch-05861-g1fc9fdd4add4f783 #1046
          Hardware name: Generic R8A7791 (Flattened Device Tree)
          task: eec359c0 ti: eec54000 task.ti: eec54000
          PC is at 0x0
          LR is at spi_transfer_one_message+0x1cc/0x1f0
      
      Make the master->handle_err() callback optional to avoid the crash.
      
      Also fix a spelling mistake in the callback documentation while we're at
      it.
      
      Fixes: b716c4ff ("spi: introduce master->handle_err() callback")
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      ff61eb42
  5. 26 3月, 2015 1 次提交
    • D
      spi: of: do explicitly request modules for of-registered devices · 22de3ef9
      Dmitry Torokhov 提交于
      Trying to register an SPI device asynchronously (via async_schedule() call)
      results in an ugly complaint from request_module() warning about potential
      deadlock (because request_module tries to wait for async works to
      complete, the caller is also an async work in this case).
      
      While we could try to switch to using request_module_nowait(), other buses,
      as well as SPI itself when not using device tree, do not try to load
      modules explicitly, but rather rely on the standard infrastructure (such as
      udev) to execute module loading. There is no reason why SPI OF-described
      devices should be treated differently.
      Signed-off-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      22de3ef9
  6. 18 3月, 2015 1 次提交
  7. 16 3月, 2015 1 次提交
  8. 09 3月, 2015 1 次提交
    • L
      spi: Remove support for legacy PM · ea022bbb
      Lars-Peter Clausen 提交于
      All SPI drivers have been converted from legacy suspend/resume callbacks to
      dev_pm_ops. So we can finally remove support for legacy PM from the SPI
      core.
      
      Since there aren't any special bus specific things to do during
      suspend/resume and since the PM core will automatically fallback directly to
      using the device's PM ops if no bus PM ops are specified there is no need to
      have any special SPI bus PM ops.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      ea022bbb
  9. 07 3月, 2015 1 次提交
  10. 05 2月, 2015 1 次提交
  11. 22 12月, 2014 1 次提交
  12. 11 12月, 2014 4 次提交
    • M
      spi: Only idle the message pump in the worker kthread · fc9e0f71
      Mark Brown 提交于
      In order to avoid the situation where the kthread is waiting for another
      context to make the hardware idle let the message pump know if it's being
      called from the worker thread context and if it isn't then defer to the
      worker thread instead of idling the hardware immediately. This will ensure
      that if this situation happens we block rather than busy waiting.
      Signed-off-by: NMark Brown <broonie@kernel.org>
      fc9e0f71
    • M
      spi: Pump transfers inside calling context for spi_sync() · 0461a414
      Mark Brown 提交于
      If we are using the standard SPI message pump (which all drivers should be
      transitioning over to) then special case the message enqueue and instead of
      starting the worker thread to push messages to the hardware do so in the
      context of the caller if the controller is idle. This avoids a context
      switch in the common case where the controller has a single user in a
      single thread, for short PIO transfers there may be no need to context
      switch away from the calling context to complete the transfer.
      
      The code is a bit more complex than is desirable in part due to the need
      to handle drivers not using the standard queue and in part due to handling
      the various combinations of bus locking and asynchronous submission in
      interrupt context.
      
      It is still suboptimal since it will still wake the message pump for each
      transfer in order to schedule idling of the hardware and if multiple
      contexts are using the controller simultaneously a caller may end up
      pumping a message for some random other thread rather than for itself,
      and if the thread ends up deferring due to another context idling the
      hardware then it will just busy wait.  It can, however, have the benefit
      of aggregating power up and down of the hardware when a caller performs
      a series of transfers back to back without any need for the use of
      spi_async().
      Signed-off-by: NMark Brown <broonie@kernel.org>
      0461a414
    • M
      spi: Check to see if the device is processing a message before we idle · 983aee5d
      Mark Brown 提交于
      cur_msg is updated under the queue lock and holds the message we are
      currently processing. Since currently we only ever do removals in the
      pump kthread it doesn't matter in what order we do things but we want
      to be able to push things out from the submitting thread so pull the
      check to see if we're currently handling a message before we check to
      see if the queue is idle.
      Signed-off-by: NMark Brown <broonie@kernel.org>
      983aee5d
    • M
      spi: Move queue data structure initialisation to main master init · 5424d43e
      Mark Brown 提交于
      Since most devices now do use the standard queue and in order to avoid
      initialisation ordering issues being introduced by further refactorings
      to improve performance move the initialisation of the queue and the lock
      for it to the main master allocation.
      Signed-off-by: NMark Brown <broonie@kernel.org>
      5424d43e
  13. 05 12月, 2014 1 次提交
  14. 04 12月, 2014 1 次提交
    • F
      spi: Check for spi_of_notifier when CONFIG_OF_DYNAMIC=y · 5267720e
      Fabio Estevam 提交于
      Since commit ce79d54a ("spi/of: Add OF notifier handler") the
      following warning is seen on a imx53 system that has CONFIG_OF_DYNAMIC=n:
      
      [    0.048119] ------------[ cut here ]------------
      [    0.048146] WARNING: CPU: 0 PID: 1 at drivers/spi/spi.c:2419 spi_init+0x60/0xa8()
      [    0.048158] Modules linked in:
      [    0.048183] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.18.0-rc6-next-20141126-00003-g9388e85 #2080
      [    0.048193] Hardware name: Freescale i.MX53 (Device Tree Support)
      [    0.048203] Backtrace:
      [    0.048235] [<80011f74>] (dump_backtrace) from [<80012110>] (show_stack+0x18/0x1c)
      [    0.048246]  r6:00000973 r5:00000000 r4:00000000 r3:00000000
      [    0.048284] [<800120f8>] (show_stack) from [<806b3ad8>] (dump_stack+0x88/0xa4)
      [    0.048312] [<806b3a50>] (dump_stack) from [<8002a55c>] (warn_slowpath_common+0x80/0xbc)
      [    0.048320]  r5:8096cfcc r4:00000000
      [    0.048343] [<8002a4dc>] (warn_slowpath_common) from [<8002a5bc>] (warn_slowpath_null+0x24/0x2c)
      [    0.048354]  r8:8096cf6c r7:809355ec r6:ddcd7c00 r5:812029e4 r4:00000000
      [    0.048389] [<8002a598>] (warn_slowpath_null) from [<8096cfcc>] (spi_init+0x60/0xa8)
      [    0.048405] [<8096cf6c>] (spi_init) from [<80008a7c>] (do_one_initcall+0x88/0x1e0)
      [    0.048415]  r5:8099e018 r4:8099e018
      [    0.048438] [<800089f4>] (do_one_initcall) from [<80935e38>] (kernel_init_freeable+0x110/0x1e0)
      [    0.048448]  r10:80980700 r9:809806e4 r8:000000cc r7:809355ec r6:809f8940 r5:00000002
      [    0.048478]  r4:8098d744
      [    0.048508] [<80935d28>] (kernel_init_freeable) from [<806ae574>] (kernel_init+0x10/0xf4)
      [    0.048517]  r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:806ae564
      [    0.048547]  r4:00000000
      [    0.048565] [<806ae564>] (kernel_init) from [<8000ed68>] (ret_from_fork+0x14/0x2c)
      [    0.048574]  r4:00000000 r3:00000000
      [    0.048616] ---[ end trace 405a65d177dae4fd ]---
      
      Only check of_reconfig_notifier_register() in the CONFIG_OF_DYNAMIC=y case,
      as intended by commit ce79d54a.
      Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com>
      Signed-off-by: NGrant Likely <grant.likely@linaro.org>
      5267720e
  15. 25 11月, 2014 2 次提交
  16. 17 11月, 2014 1 次提交
    • C
      spi: Fix mapping from vmalloc-ed buffer to scatter list · c1aefbdd
      Charles Keepax 提交于
      We can only use page_address on memory that has been mapped using kmap,
      when the buffer passed to the SPI has been allocated by vmalloc the page
      has not necessarily been mapped through kmap. This means sometimes
      page_address will return NULL causing the pointer we pass to sg_set_buf
      to be invalid.
      
      As we only call page_address so that we can pass a virtual address to
      sg_set_buf which will then immediately call virt_to_page on it, fix this
      by calling sg_set_page directly rather then relying on the sg_set_buf
      helper.
      Signed-off-by: NCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      c1aefbdd
  17. 30 9月, 2014 1 次提交
  18. 24 9月, 2014 1 次提交
  19. 22 9月, 2014 1 次提交
  20. 20 8月, 2014 1 次提交
  21. 13 8月, 2014 1 次提交
  22. 26 7月, 2014 1 次提交
  23. 11 7月, 2014 2 次提交
  24. 21 6月, 2014 2 次提交
  25. 26 5月, 2014 1 次提交
  26. 04 5月, 2014 1 次提交
  27. 03 5月, 2014 1 次提交
  28. 19 4月, 2014 1 次提交
    • G
      spi: core: Ignore unsupported Dual/Quad Transfer Mode bits · 83596fbe
      Geert Uytterhoeven 提交于
      The availability of SPI Dual or Quad Transfer Mode as indicated by the
      "spi-tx-bus-width" and "spi-rx-bus-width" properties in the device tree is
      a hardware property of the SPI master, SPI slave, and board wiring.  Hence
      the SPI core should not reject an SPI slave because an SPI master driver
      doesn't (yet) support Dual or Quad Transfer Mode.
      
      Change the lack of Dual or Quad Transfer Mode support in the SPI master
      driver from an error condition to a warning condition, and ignore the
      unsupported mode bits, falling back to Single Transfer Mode, to avoid
      breakages when running old kernels with new device trees.
      
      Fixes: f477b7fb (spi: DUAL and QUAD support)
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      Cc: stable@vger.kernel.org
      83596fbe
  29. 15 4月, 2014 2 次提交
    • Z
      spi: add "spi-lsb-first" to devicetree · cd6339e6
      Zhao Qiang 提交于
      add optional property devicetree for SPI slave nodes
      into devicetree so that LSB mode can be enabled by devicetree.
      Signed-off-by: NZhao Qiang <B45475@freescale.com>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      cd6339e6
    • H
      spi: core: Increase timeout value · eee668a9
      Harini Katakam 提交于
      The existing timeout value in wait_for_completion_timeout is
      calculated from the transfer length and speed with tolerance of 10msec.
      This is too low because this is used for error conditions such as
      hardware hang etc.
      The xfer->speed_hz considered may not be the actual speed set
      because the best clock divisor is chosen from a limited set such that
      the actual speed <= requested speed. This will lead to timeout being
      less than actual transfer time.
      Considering acceptable latencies, this timeout can be set to a
      value double the expected transfer plus 100 msecs.
      This patch adds the same in the core.
      Signed-off-by: NHarini Katakam <harinik@xilinx.com>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      eee668a9
  30. 30 3月, 2014 1 次提交
  31. 26 3月, 2014 1 次提交
    • M
      spi: Do not require a completion · 1e25cd47
      Mark Brown 提交于
      There is no real reason why we require transfers to have a completion and
      the only user of the completion now checks to see if one has been provided
      before using it so stop enforcing this. This makes it more convenient for
      drivers to chain multiple asynchronous transfers together.
      Signed-off-by: NMark Brown <broonie@linaro.org>
      1e25cd47
  32. 17 3月, 2014 1 次提交
  33. 04 3月, 2014 1 次提交