1. 15 Sep, 2019 2 commits
  2. 13 Sep, 2019 3 commits
  3. 11 Sep, 2019 9 commits
  4. 10 Sep, 2019 1 commit
    • Lukas Wunner's avatar
      spi: bcm2835: Work around DONE bit erratum · 4c524191
      Lukas Wunner authored and Mark Brown's avatar Mark Brown committed
      Commit 3bd7f658
      
       ("spi: bcm2835: Overcome sglist entry length
      limitation") amended the BCM2835 SPI driver with support for DMA
      transfers whose buffers are not aligned to 4 bytes and require more than
      one sglist entry.
      
      When testing this feature with upcoming commits to speed up TX-only and
      RX-only transfers, I noticed that SPI transmission sometimes breaks.
      A function introduced by the commit, bcm2835_spi_transfer_prologue(),
      performs one or two PIO transmissions as a prologue to the actual DMA
      transmission.  It turns out that the breakage goes away if the DONE bit
      in the CS register is set when ending such a PIO transmission.
      
      The DONE bit signifies emptiness of the TX FIFO.  According to the spec,
      the bit is of type RO, so writing it should never have any effect.
      Perhaps the spec is wrong and the bit is actually of type RW1C.
      E.g. the I2C controller on the BCM2835 does have an RW1C DONE bit which
      needs to be cleared by the driver.  Another, possibly more likely
      explanation is that it's a hardware erratum since the issue does not
      occur consistently.
      
      Either way, amend bcm2835_spi_transfer_prologue() to always write the
      DONE bit.
      
      Usually a transmission is ended by bcm2835_spi_reset_hw().  If the
      transmission was successful, the TX FIFO is empty and thus the DONE bit
      is set when bcm2835_spi_reset_hw() reads the CS register.  The bit is
      then written back to the register, so we happen to do the right thing.
      
      However if DONE is not set, e.g. because transmission is aborted with
      a non-empty TX FIFO, the bit won't be written by bcm2835_spi_reset_hw()
      and it seems possible that transmission might subsequently break.  To be
      on the safe side, likewise amend bcm2835_spi_reset_hw() to always write
      the bit.
      
      Tested-by: default avatarNuno Sá <nuno.sa@analog.com>
      Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
      Acked-by: default avatarStefan Wahren <wahrenst@gmx.net>
      Acked-by: default avatarMartin Sperl <kernel@martin.sperl.org>
      Link: https://lore.kernel.org/r/edb004dff4af6106f6bfcb89e1a96391e96eb857.1564825752.git.lukas@wunner.de
      
      
      Signed-off-by: Mark Brown's avatarMark Brown <broonie@kernel.org>
      4c524191
  5. 09 Sep, 2019 1 commit
  6. 08 Sep, 2019 4 commits
  7. 07 Sep, 2019 4 commits
  8. 06 Sep, 2019 16 commits