dmaengine: dw: keep entire platform data in struct dw_dma
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 27 Apr 2016 11:15:39 +0000 (14:15 +0300)
committerVinod Koul <vinod.koul@intel.com>
Mon, 2 May 2016 10:01:05 +0000 (15:31 +0530)
Keep the entire platform data in the struct dw_dma.
It makes the driver a bit cleaner.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/dw/core.c
drivers/dma/dw/platform.c
drivers/dma/dw/regs.h
include/linux/platform_data/dma-dw.h

index 992da255b8e657c0ad4238e0ec8d6d53ee6bfecc..30843a17b438c4d0b372233a5be0249f3a136335 100644 (file)
@@ -665,7 +665,7 @@ dwc_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src,
        u8                      m_master = dwc->m_master;
        unsigned int            src_width;
        unsigned int            dst_width;
-       unsigned int            data_width = dw->data_width[m_master];
+       unsigned int            data_width = dw->pdata->data_width[m_master];
        u32                     ctllo;
        u8                      lms = DWC_LLP_LMS(m_master);
 
@@ -745,7 +745,7 @@ dwc_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
        dma_addr_t              reg;
        unsigned int            reg_width;
        unsigned int            mem_width;
-       unsigned int            data_width = dw->data_width[m_master];
+       unsigned int            data_width = dw->pdata->data_width[m_master];
        unsigned int            i;
        struct scatterlist      *sg;
        size_t                  total_len = 0;
@@ -1444,7 +1444,6 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
        struct dw_dma           *dw;
        bool                    autocfg = false;
        unsigned int            dw_params;
-       unsigned int            max_blk_size = 0;
        unsigned int            i;
        int                     err;
 
@@ -1452,6 +1451,10 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
        if (!dw)
                return -ENOMEM;
 
+       dw->pdata = devm_kzalloc(chip->dev, sizeof(*dw->pdata), GFP_KERNEL);
+       if (!dw->pdata)
+               return -ENOMEM;
+
        dw->regs = chip->regs;
        chip->dw = dw;
 
@@ -1467,11 +1470,8 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
                        goto err_pdata;
                }
 
-               pdata = devm_kzalloc(chip->dev, sizeof(*pdata), GFP_KERNEL);
-               if (!pdata) {
-                       err = -ENOMEM;
-                       goto err_pdata;
-               }
+               /* Reassign the platform data pointer */
+               pdata = dw->pdata;
 
                /* Get hardware configuration parameters */
                pdata->nr_channels = (dw_params >> DW_PARAMS_NR_CHAN & 7) + 1;
@@ -1480,7 +1480,7 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
                        pdata->data_width[i] =
                                4 << (dw_params >> DW_PARAMS_DATA_WIDTH(i) & 3);
                }
-               max_blk_size = dma_readl(dw, MAX_BLK_SIZE);
+               pdata->block_size = dma_readl(dw, MAX_BLK_SIZE);
 
                /* Fill platform data with the default values */
                pdata->is_private = true;
@@ -1490,6 +1490,11 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
        } else if (pdata->nr_channels > DW_DMA_MAX_NR_CHANNELS) {
                err = -EINVAL;
                goto err_pdata;
+       } else {
+               memcpy(dw->pdata, pdata, sizeof(*dw->pdata));
+
+               /* Reassign the platform data pointer */
+               pdata = dw->pdata;
        }
 
        dw->chan = devm_kcalloc(chip->dev, pdata->nr_channels, sizeof(*dw->chan),
@@ -1499,11 +1504,6 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
                goto err_pdata;
        }
 
-       /* Get hardware configuration parameters */
-       dw->nr_masters = pdata->nr_masters;
-       for (i = 0; i < dw->nr_masters; i++)
-               dw->data_width[i] = pdata->data_width[i];
-
        /* Calculate all channel mask before DMA setup */
        dw->all_chan_mask = (1 << pdata->nr_channels) - 1;
 
@@ -1570,7 +1570,7 @@ int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata)
                         * up to 0x0a for 4095.
                         */
                        dwc->block_size =
-                               (4 << ((max_blk_size >> 4 * i) & 0xf)) - 1;
+                               (4 << ((pdata->block_size >> 4 * i) & 0xf)) - 1;
                        dwc->nollp =
                                (dwc_params >> DWC_PARAMS_MBLK_EN & 0x1) == 0;
                } else {
index 2420fb7267bc1832e3cef04cfc333a3a269f4d16..0a49011633b967c05598cd89847993d603ef1b45 100644 (file)
@@ -47,8 +47,8 @@ static struct dma_chan *dw_dma_of_xlate(struct of_phandle_args *dma_spec,
 
        if (WARN_ON(slave.src_id >= DW_DMA_MAX_NR_REQUESTS ||
                    slave.dst_id >= DW_DMA_MAX_NR_REQUESTS ||
-                   slave.m_master >= dw->nr_masters ||
-                   slave.p_master >= dw->nr_masters))
+                   slave.m_master >= dw->pdata->nr_masters ||
+                   slave.p_master >= dw->pdata->nr_masters))
                return NULL;
 
        dma_cap_zero(cap);
index 0ab02eb23bfc631518c2f23ca355503582dcfdb1..4b7bd783404663a5953cf457430d4348d5aeeee9 100644 (file)
@@ -281,9 +281,8 @@ struct dw_dma {
        u8                      all_chan_mask;
        u8                      in_use;
 
-       /* hardware configuration */
-       unsigned char           nr_masters;
-       unsigned char           data_width[DW_DMA_MAX_NR_MASTERS];
+       /* platform data */
+       struct dw_dma_platform_data     *pdata;
 };
 
 static inline struct dw_dma_regs __iomem *__dw_regs(struct dw_dma *dw)
index ad768111c350e2cec3d218ca2f46e85202e2afd7..d15d8ba8cc240c7b846936692b604c0e2488f177 100644 (file)
@@ -55,7 +55,7 @@ struct dw_dma_platform_data {
 #define CHAN_PRIORITY_ASCENDING                0       /* chan0 highest */
 #define CHAN_PRIORITY_DESCENDING       1       /* chan7 highest */
        unsigned char   chan_priority;
-       unsigned short  block_size;
+       unsigned int    block_size;
        unsigned char   nr_masters;
        unsigned char   data_width[DW_DMA_MAX_NR_MASTERS];
 };
This page took 0.032366 seconds and 5 git commands to generate.