Message ID | 20200529131205.31838-1-Sergey.Semin@baikalelectronics.ru (mailing list archive) |
---|---|
Headers | show |
Series | spi: dw: Add generic DW DMA controller support | expand |
On Fri, May 29, 2020 at 04:11:49PM +0300, Serge Semin wrote: > Baikal-T1 SoC provides a DW DMA controller to perform low-speed peripherals > Mem-to-Dev and Dev-to-Mem transaction. This is also applicable to the DW > APB SSI devices embedded into the SoC. Currently the DMA-based transfers > are supported by the DW APB SPI driver only as a middle layer code for > Intel MID/Elkhart PCI devices. Seeing the same code can be used for normal > platform DMAC device we introduced a set of patches to fix it within this > series. > > First of all we need to add the Tx and Rx DMA channels support into the DW > APB SSI binding. Then there are several fixes and cleanups provided as a > initial preparation for the Generic DMA support integration: add Tx/Rx > finish wait methods, clear DMAC register when done or stopped, Fix native > CS being unset, enable interrupts in accordance with DMA xfer mode, > discard static DW DMA slave structures, discard unused void priv pointer > and dma_width member of the dw_spi structure, provide the DMA Tx/Rx burst > length parametrisation and make sure it's optionally set in accordance > with the DMA max-burst capability. > > In order to have the DW APB SSI MMIO driver working with DMA we need to > initialize the paddr field with the physical base address of the DW APB SSI > registers space. Then we unpin the Intel MID specific code from the > generic DMA one and placed it into the spi-dw-pci.c driver, which is a > better place for it anyway. After that the naming cleanups are performed > since the code is going to be used for a generic DMAC device. Finally the > Generic DMA initialization can be added to the generic version of the > DW APB SSI IP. > > Last but not least we traditionally convert the legacy plain text-based > dt-binding file with yaml-based one and as a cherry on a cake replace > the manually written DebugFS registers read method with a ready-to-use > for the same purpose regset32 DebugFS interface usage. > > This patchset is rebased and tested on the spi/for-next (5.7-rc5): > base-commit: fe9fce6b2cf3 ("Merge remote-tracking branch 'spi/for-5.8' into spi-next") Mark, I leave few first patches for you to decide if it's right thing to do. So, if you are okay, I'm not against them, thanks! > Link: https://lore.kernel.org/linux-spi/20200508132943.9826-1-Sergey.Semin@baikalelectronics.ru/ > Changelog v2: > - Rebase on top of the spi repository for-next branch. > - Move bindings conversion patch to the tail of the series. > - Move fixes to the head of the series. > - Apply as many changes as possible to be applied the Generic DMA > functionality support is added and the spi-dw-mid is moved to the > spi-dw-dma driver. > - Discard patch "spi: dw: Fix dma_slave_config used partly uninitialized" > since the problem has already been fixed. > - Add new patch "spi: dw: Discard unused void priv pointer". > - Add new patch "spi: dw: Discard dma_width member of the dw_spi structure". > n_bytes member of the DW SPI data can be used instead. > - Build the DMA functionality into the DW APB SSI core if required instead > of creating a separate kernel module. > - Use conditional statement instead of the ternary operator in the ref > clock getter. > > Link: https://lore.kernel.org/linux-spi/20200515104758.6934-1-Sergey.Semin@baikalelectronics.ru/ > Changelog v3: > - Use spi_delay_exec() method to wait for the DMA operation completion. > - Explicitly initialize the dw_dma_slave members on stack. > - Discard the dws->fifo_len utilization in the Tx FIFO DMA threshold > setting from the patch where we just add the default burst length > constants. > - Use min() method to calculate the optimal burst values. > - Add new patch which moves the spi-dw.c source file to spi-dw-core.c in > order to preserve the DW APB SSI core driver name. > - Add commas in the debugfs_reg32 structure initializer and after the last > entry of the dw_spi_dbgfs_regs array. > > Link: https://lore.kernel.org/linux-spi/20200521012206.14472-1-Sergey.Semin@baikalelectronics.ru > Changelog v4: > - Get back ndelay() method to wait for an SPI transfer completion. > spi_delay_exec() isn't suitable for the atomic context. > > Link: https://lore.kernel.org/linux-spi/20200522000806.7381-1-Sergey.Semin@baikalelectronics.ru > Changelog v5: > - Refactor the Tx/Rx DMA-based SPI transfers wait methods. > - Add a new patch "spi: dw: Set xfer effective_speed_hz". > - Add a new patch "spi: dw: Return any value retrieved from the > dma_transfer callback" as a preparation patch before implementing > the local DMA, Tx SPI and Rx SPI transfers wait methods. > - Add a new patch "spi: dw: Locally wait for the DMA transactions > completion", which provides a local DMA transaction complete > method > - Create a dedicated patch which adds the Rx-done wait method: > "spi: dw: Add SPI Rx-done wait method to DMA-based transfer". > - Add more detailed description of the problems the Tx/Rx-wait > methods-related patches fix. > - Wait for the SPI Tx and Rx transfers being finished in the > mid_spi_dma_transfer() method executed in the task context. > - Use spi_delay_exec() to wait for the SPI Tx/Rx completion, since now > the driver calls the wait methods in the kernel thread context. > - Use SPI_DELAY_UNIT_SCK spi_delay unit for Tx-wait delay, since SPI > xfer's are now have the effective_speed_hz initialized. > - Rx-wait for a delay correlated with the APB/SSI synchronous clock > rate instead of using the SPI bus clock rate. > > Link: https://lore.kernel.org/linux-spi/20200529035915.20790-1-Sergey.Semin@baikalelectronics.ru > Changelog v6: > - Provide a more detailed description of the patch: > 2901db35bea1 ("spi: dw: Locally wait for the DMA transfers completion") > - Calculate the Rx delay with better accuracy by moving 4-multiplication > to the head of the formulae: > ns = 4U * NSEC_PER_SEC / dws->max_freq * nents. > > Co-developed-by: Georgy Vlasov <Georgy.Vlasov@baikalelectronics.ru> > Signed-off-by: Georgy Vlasov <Georgy.Vlasov@baikalelectronics.ru> > Co-developed-by: Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru> > Signed-off-by: Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru> > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > Cc: Maxim Kaurkin <Maxim.Kaurkin@baikalelectronics.ru> > Cc: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru> > Cc: Ekaterina Skachko <Ekaterina.Skachko@baikalelectronics.ru> > Cc: Vadim Vlasov <V.Vlasov@baikalelectronics.ru> > Cc: Alexey Kolotnikov <Alexey.Kolotnikov@baikalelectronics.ru> > Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Cc: Feng Tang <feng.tang@intel.com> > Cc: Rob Herring <robh+dt@kernel.org> > Cc: linux-mips@vger.kernel.org > Cc: linux-spi@vger.kernel.org > Cc: devicetree@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > > Serge Semin (16): > spi: dw: Set xfer effective_speed_hz > spi: dw: Return any value retrieved from the dma_transfer callback > spi: dw: Locally wait for the DMA transfers completion > spi: dw: Add SPI Tx-done wait method to DMA-based transfer > spi: dw: Add SPI Rx-done wait method to DMA-based transfer > spi: dw: Parameterize the DMA Rx/Tx burst length > spi: dw: Use DMA max burst to set the request thresholds > spi: dw: Fix Rx-only DMA transfers > spi: dw: Add core suffix to the DW APB SSI core source file > spi: dw: Move Non-DMA code to the DW PCIe-SPI driver > spi: dw: Remove DW DMA code dependency from DW_DMAC_PCI > spi: dw: Add DW SPI DMA/PCI/MMIO dependency on the DW SPI core > spi: dw: Cleanup generic DW DMA code namings > spi: dw: Add DMA support to the DW SPI MMIO driver > spi: dw: Use regset32 DebugFS method to create regdump file > dt-bindings: spi: Convert DW SPI binding to DT schema > > .../bindings/spi/snps,dw-apb-ssi.txt | 44 -- > .../bindings/spi/snps,dw-apb-ssi.yaml | 127 +++++ > .../devicetree/bindings/spi/spi-dw.txt | 24 - > drivers/spi/Kconfig | 15 +- > drivers/spi/Makefile | 5 +- > drivers/spi/{spi-dw.c => spi-dw-core.c} | 95 ++-- > drivers/spi/spi-dw-dma.c | 482 ++++++++++++++++++ > drivers/spi/spi-dw-mid.c | 382 -------------- > drivers/spi/spi-dw-mmio.c | 4 + > drivers/spi/spi-dw-pci.c | 50 +- > drivers/spi/spi-dw.h | 20 +- > 11 files changed, 719 insertions(+), 529 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.txt > create mode 100644 Documentation/devicetree/bindings/spi/snps,dw-apb-ssi.yaml > delete mode 100644 Documentation/devicetree/bindings/spi/spi-dw.txt > rename drivers/spi/{spi-dw.c => spi-dw-core.c} (82%) > create mode 100644 drivers/spi/spi-dw-dma.c > delete mode 100644 drivers/spi/spi-dw-mid.c > > -- > 2.26.2 >
On Fri, 29 May 2020 16:11:49 +0300, Serge Semin wrote: > Baikal-T1 SoC provides a DW DMA controller to perform low-speed peripherals > Mem-to-Dev and Dev-to-Mem transaction. This is also applicable to the DW > APB SSI devices embedded into the SoC. Currently the DMA-based transfers > are supported by the DW APB SPI driver only as a middle layer code for > Intel MID/Elkhart PCI devices. Seeing the same code can be used for normal > platform DMAC device we introduced a set of patches to fix it within this > series. > > [...] Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next Thanks! [01/15] spi: dw: Set xfer effective_speed_hz commit: de4c2875a5ff2c886df60f2086c6affca83f890a [02/15] spi: dw: Return any value retrieved from the dma_transfer callback commit: f0410bbf7d0fb80149e3b17d11d31f5b5197873e [03/15] spi: dw: Locally wait for the DMA transfers completion commit: bdbdf0f06337d3661b64c0288c291cb06624065e [04/15] spi: dw: Add SPI Tx-done wait method to DMA-based transfer commit: 1ade2d8a72f9240825f6be050f0d49c840f7daeb [05/15] spi: dw: Add SPI Rx-done wait method to DMA-based transfer commit: 33726eff3d98e643f7d7a0940f4024844b430c82 [06/15] spi: dw: Parameterize the DMA Rx/Tx burst length commit: c534df9d6225314d1403e4330a22d68c35e0eb55 [07/15] spi: dw: Use DMA max burst to set the request thresholds commit: 0b2b66514fc9971b3a6002ba038d74f77705fd34 [08/15] spi: dw: Fix Rx-only DMA transfers commit: 46164fde6b7890e7a3982d54549947c8394c0192 [09/15] spi: dw: Add core suffix to the DW APB SSI core source file commit: 77ccff803d27279ccc100dc906c6f456c8fa515c [10/15] spi: dw: Move Non-DMA code to the DW PCIe-SPI driver commit: 6c710c0cb6725bdbe647b958756685aed0295936 [11/15] spi: dw: Remove DW DMA code dependency from DW_DMAC_PCI commit: 06cfadb8c51b05c6b91c2d43e0fe72b3d643dced [12/15] spi: dw: Add DW SPI DMA/PCI/MMIO dependency on the DW SPI core commit: ecb3a67edfd353837dc23b538fb250d1dfd88e7b [13/15] spi: dw: Cleanup generic DW DMA code namings commit: 57784411728ff4d72ae051fdbba1e54fcb1f8d6f [14/15] spi: dw: Add DMA support to the DW SPI MMIO driver commit: 0fdad596d46b28d5c3e39d1897c5e3878b64d9a2 [15/15] spi: dw: Use regset32 DebugFS method to create regdump file commit: 8378449d1f79add31be77e77fc7df9f639878e9c All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark
Mark On Fri, May 29, 2020 at 06:18:32PM +0100, Mark Brown wrote: > On Fri, 29 May 2020 16:11:49 +0300, Serge Semin wrote: > > Baikal-T1 SoC provides a DW DMA controller to perform low-speed peripherals > > Mem-to-Dev and Dev-to-Mem transaction. This is also applicable to the DW > > APB SSI devices embedded into the SoC. Currently the DMA-based transfers > > are supported by the DW APB SPI driver only as a middle layer code for > > Intel MID/Elkhart PCI devices. Seeing the same code can be used for normal > > platform DMAC device we introduced a set of patches to fix it within this > > series. > > > > [...] > > Applied to > > https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next > > Thanks! > > [01/15] spi: dw: Set xfer effective_speed_hz > commit: de4c2875a5ff2c886df60f2086c6affca83f890a > [02/15] spi: dw: Return any value retrieved from the dma_transfer callback > commit: f0410bbf7d0fb80149e3b17d11d31f5b5197873e > [03/15] spi: dw: Locally wait for the DMA transfers completion > commit: bdbdf0f06337d3661b64c0288c291cb06624065e > [04/15] spi: dw: Add SPI Tx-done wait method to DMA-based transfer > commit: 1ade2d8a72f9240825f6be050f0d49c840f7daeb > [05/15] spi: dw: Add SPI Rx-done wait method to DMA-based transfer > commit: 33726eff3d98e643f7d7a0940f4024844b430c82 > [06/15] spi: dw: Parameterize the DMA Rx/Tx burst length > commit: c534df9d6225314d1403e4330a22d68c35e0eb55 > [07/15] spi: dw: Use DMA max burst to set the request thresholds > commit: 0b2b66514fc9971b3a6002ba038d74f77705fd34 > [08/15] spi: dw: Fix Rx-only DMA transfers > commit: 46164fde6b7890e7a3982d54549947c8394c0192 > [09/15] spi: dw: Add core suffix to the DW APB SSI core source file > commit: 77ccff803d27279ccc100dc906c6f456c8fa515c > [10/15] spi: dw: Move Non-DMA code to the DW PCIe-SPI driver > commit: 6c710c0cb6725bdbe647b958756685aed0295936 > [11/15] spi: dw: Remove DW DMA code dependency from DW_DMAC_PCI > commit: 06cfadb8c51b05c6b91c2d43e0fe72b3d643dced > [12/15] spi: dw: Add DW SPI DMA/PCI/MMIO dependency on the DW SPI core > commit: ecb3a67edfd353837dc23b538fb250d1dfd88e7b > [13/15] spi: dw: Cleanup generic DW DMA code namings > commit: 57784411728ff4d72ae051fdbba1e54fcb1f8d6f > [14/15] spi: dw: Add DMA support to the DW SPI MMIO driver > commit: 0fdad596d46b28d5c3e39d1897c5e3878b64d9a2 > [15/15] spi: dw: Use regset32 DebugFS method to create regdump file > commit: 8378449d1f79add31be77e77fc7df9f639878e9c You must have missed the patch 16: 0e8332aaf059 dt-bindings: spi: Convert DW SPI binding to DT schema As you can see it has been acked by Rob. So you can also merge it into your repo. Though It has to be rebased first due to the Dinh Nguyen patches recently merged in. Do you want me to do the rebasing? -Sergey > > All being well this means that it will be integrated into the linux-next > tree (usually sometime in the next 24 hours) and sent to Linus during > the next merge window (or sooner if it is a bug fix), however if > problems are discovered then the patch may be dropped or reverted. > > You may get further e-mails resulting from automated or manual testing > and review of the tree, please engage with people reporting problems and > send followup patches addressing any issues that are reported if needed. > > If any updates are required or you are submitting further changes they > should be sent as incremental updates against current git, existing > patches will not be replaced. > > Please add any relevant lists and maintainers to the CCs when replying > to this mail. > > Thanks, > Mark
On Fri, May 29, 2020 at 08:26:42PM +0300, Serge Semin wrote: > You must have missed the patch 16: > 0e8332aaf059 dt-bindings: spi: Convert DW SPI binding to DT schema > As you can see it has been acked by Rob. So you can also merge it into your > repo. Though It has to be rebased first due to the Dinh Nguyen patches > recently merged in. Do you want me to do the rebasing? Please rebase. TBH I'd not noticed Rob's review so I just left it waiting for that, there's such a huge backlog there it didn't occur to me that it might've been reviewed.
On Fri, May 29, 2020 at 06:33:25PM +0100, Mark Brown wrote: > On Fri, May 29, 2020 at 08:26:42PM +0300, Serge Semin wrote: > > > You must have missed the patch 16: > > 0e8332aaf059 dt-bindings: spi: Convert DW SPI binding to DT schema > > As you can see it has been acked by Rob. So you can also merge it into your > > repo. Though It has to be rebased first due to the Dinh Nguyen patches > > recently merged in. Do you want me to do the rebasing? > > Please rebase. TBH I'd not noticed Rob's review so I just left it > waiting for that, there's such a huge backlog there it didn't occur to > me that it might've been reviewed. Ok. I'll do the rebasing shortly. (also have to add the optional reset properties into the bindings) -Sergey
On Fri, May 29, 2020 at 08:26:42PM +0300, Serge Semin wrote: > On Fri, May 29, 2020 at 06:18:32PM +0100, Mark Brown wrote: > > On Fri, 29 May 2020 16:11:49 +0300, Serge Semin wrote: > > > Baikal-T1 SoC provides a DW DMA controller to perform low-speed peripherals > > > Mem-to-Dev and Dev-to-Mem transaction. This is also applicable to the DW > > > APB SSI devices embedded into the SoC. Currently the DMA-based transfers > > > are supported by the DW APB SPI driver only as a middle layer code for > > > Intel MID/Elkhart PCI devices. Seeing the same code can be used for normal > > > platform DMAC device we introduced a set of patches to fix it within this > > > series. > As you can see it has been acked by Rob. So you can also merge it into your > repo. Though It has to be rebased first due to the Dinh Nguyen patches > recently merged in. Do you want me to do the rebasing? I guess now you need to rebase it, because as I see the Dinh's patches are in the tree as well as yours.
On Fri, May 29, 2020 at 08:43:12PM +0300, Andy Shevchenko wrote: > On Fri, May 29, 2020 at 08:26:42PM +0300, Serge Semin wrote: > > On Fri, May 29, 2020 at 06:18:32PM +0100, Mark Brown wrote: > > > On Fri, 29 May 2020 16:11:49 +0300, Serge Semin wrote: > > > > Baikal-T1 SoC provides a DW DMA controller to perform low-speed peripherals > > > > Mem-to-Dev and Dev-to-Mem transaction. This is also applicable to the DW > > > > APB SSI devices embedded into the SoC. Currently the DMA-based transfers > > > > are supported by the DW APB SPI driver only as a middle layer code for > > > > Intel MID/Elkhart PCI devices. Seeing the same code can be used for normal > > > > platform DMAC device we introduced a set of patches to fix it within this > > > > series. > > > As you can see it has been acked by Rob. So you can also merge it into your > > repo. Though It has to be rebased first due to the Dinh Nguyen patches > > recently merged in. Do you want me to do the rebasing? > > I guess now you need to rebase it, because as I see the Dinh's patches are in > the tree as well as yours. Right. That's what I am doing at the moment.) -Sergey > > -- > With Best Regards, > Andy Shevchenko > >
On Fri, May 29, 2020 at 06:33:25PM +0100, Mark Brown wrote: > On Fri, May 29, 2020 at 08:26:42PM +0300, Serge Semin wrote: > > > You must have missed the patch 16: > > 0e8332aaf059 dt-bindings: spi: Convert DW SPI binding to DT schema > > As you can see it has been acked by Rob. So you can also merge it into your > > repo. Though It has to be rebased first due to the Dinh Nguyen patches > > recently merged in. Do you want me to do the rebasing? > > Please rebase. TBH I'd not noticed Rob's review so I just left it > waiting for that, there's such a huge backlog there it didn't occur to > me that it might've been reviewed. Hey, I'm down to about 10 patches now. I think I'll take the rest of the week off. Rob
On Fri, May 29, 2020 at 03:22:26PM -0600, Rob Herring wrote: > On Fri, May 29, 2020 at 06:33:25PM +0100, Mark Brown wrote: > > Please rebase. TBH I'd not noticed Rob's review so I just left it > > waiting for that, there's such a huge backlog there it didn't occur to > > me that it might've been reviewed. > Hey, I'm down to about 10 patches now. I think I'll take the rest of the > week off. Ah, nice! Good to hear.