• Serge Semin's avatar
    spi: spi-dw: Remove extraneous locking · 0b6bfad4
    Serge Semin authored
    There is no point in having the commit 19b61392 ("spi: spi-dw: Add
    lock protect dw_spi rx/tx to prevent concurrent calls") applied. The
    commit author made an assumption that the problem with the rx data
    mismatch was due to the lack of the data protection. While most likely it
    was caused by the lack of the memory barrier. So having the
    commit bfda0445 ("spi: dw: use "smp_mb()" to avoid sending spi data
    error") applied would be enough to fix the problem.
    
    Indeed the spin unlock operation makes sure each memory operation issued
    before the release will be completed before it's completed. In other words
    it works as an implicit one way memory barrier. So having both smp_mb()
    and the spin_unlock_irqrestore() here is just redundant. One of them would
    be enough. It's better to leave the smp_mb() since the Tx/Rx buffers
    consistency is provided by the data transfer algorithm implementation:
    first we initialize the buffers pointers, then make sure the assignments
    are visible by the other CPUs by calling the smp_mb(), only after that
    enable the interrupt, which handler uses the buffers.
    Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
    Link: https://lore.kernel.org/r/20200920112914.26501-5-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    0b6bfad4
spi-dw-core.c 14.1 KB