Having them declared is redundant since each struct dw_dma_chan has
the same structure embedded and the structure from the passed dma_chan
private pointer will be copied there as a result of the next calls
chain:
dma_request_channel() -> find_candidate() -> dma_chan_get() ->
device_alloc_chan_resources() = dwc_alloc_chan_resources() ->
dw_dma_filter().
So just remove the static dw_dma_chan structures and use a locally
declared data instance with dst_id/src_id set to the same values as
the static copies used to have.

Co-developed-by: Georgy Vlasov <georgy.vla...@baikalelectronics.ru>
Signed-off-by: Georgy Vlasov <georgy.vla...@baikalelectronics.ru>
Co-developed-by: Ramil Zaripov <ramil.zari...@baikalelectronics.ru>
Signed-off-by: Ramil Zaripov <ramil.zari...@baikalelectronics.ru>
Signed-off-by: Serge Semin <sergey.se...@baikalelectronics.ru>
Cc: Alexey Malahov <alexey.mala...@baikalelectronics.ru>
Cc: Thomas Bogendoerfer <tsbog...@alpha.franken.de>
Cc: Paul Burton <paulbur...@kernel.org>
Cc: Ralf Baechle <r...@linux-mips.org>
Cc: Andy Shevchenko <andriy.shevche...@linux.intel.com>
Cc: Arnd Bergmann <a...@arndb.de>
Cc: Rob Herring <robh...@kernel.org>
Cc: linux-m...@vger.kernel.org
Cc: devicet...@vger.kernel.org

---

Changelog v3:
- Explicitly initialize the dw_dma_slave members on stack.
---
 drivers/spi/spi-dw-mid.c | 19 ++++++++-----------
 drivers/spi/spi-dw.h     |  2 --
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/drivers/spi/spi-dw-mid.c b/drivers/spi/spi-dw-mid.c
index cf99832ba271..8446bad0528c 100644
--- a/drivers/spi/spi-dw-mid.c
+++ b/drivers/spi/spi-dw-mid.c
@@ -21,9 +21,6 @@
 #define RX_BUSY                0
 #define TX_BUSY                1
 
-static struct dw_dma_slave mid_dma_tx = { .dst_id = 1 };
-static struct dw_dma_slave mid_dma_rx = { .src_id = 0 };
-
 static bool mid_spi_dma_chan_filter(struct dma_chan *chan, void *param)
 {
        struct dw_dma_slave *s = param;
@@ -37,9 +34,11 @@ static bool mid_spi_dma_chan_filter(struct dma_chan *chan, 
void *param)
 
 static int mid_spi_dma_init_mfld(struct device *dev, struct dw_spi *dws)
 {
+       struct dw_dma_slave slave = {
+               .src_id = 0,
+               .dst_id = 0
+       };
        struct pci_dev *dma_dev;
-       struct dw_dma_slave *tx = dws->dma_tx;
-       struct dw_dma_slave *rx = dws->dma_rx;
        dma_cap_mask_t mask;
 
        /*
@@ -54,14 +53,14 @@ static int mid_spi_dma_init_mfld(struct device *dev, struct 
dw_spi *dws)
        dma_cap_set(DMA_SLAVE, mask);
 
        /* 1. Init rx channel */
-       rx->dma_dev = &dma_dev->dev;
-       dws->rxchan = dma_request_channel(mask, mid_spi_dma_chan_filter, rx);
+       slave.dma_dev = &dma_dev->dev;
+       dws->rxchan = dma_request_channel(mask, mid_spi_dma_chan_filter, 
&slave);
        if (!dws->rxchan)
                goto err_exit;
 
        /* 2. Init tx channel */
-       tx->dma_dev = &dma_dev->dev;
-       dws->txchan = dma_request_channel(mask, mid_spi_dma_chan_filter, tx);
+       slave.dst_id = 1;
+       dws->txchan = dma_request_channel(mask, mid_spi_dma_chan_filter, 
&slave);
        if (!dws->txchan)
                goto free_rxchan;
 
@@ -386,8 +385,6 @@ static const struct dw_spi_dma_ops mfld_dma_ops = {
 
 static void dw_spi_mid_setup_dma_mfld(struct dw_spi *dws)
 {
-       dws->dma_tx = &mid_dma_tx;
-       dws->dma_rx = &mid_dma_rx;
        dws->dma_ops = &mfld_dma_ops;
 }
 
diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h
index 81364f501b7e..60e9e430ce7b 100644
--- a/drivers/spi/spi-dw.h
+++ b/drivers/spi/spi-dw.h
@@ -146,8 +146,6 @@ struct dw_spi {
        unsigned long           dma_chan_busy;
        dma_addr_t              dma_addr; /* phy address of the Data register */
        const struct dw_spi_dma_ops *dma_ops;
-       void                    *dma_tx;
-       void                    *dma_rx;
 
        /* Bus interface info */
        void                    *priv;
-- 
2.25.1

Reply via email to