These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / dma / hsu / hsu.c
index f42f71e..823ad72 100644 (file)
@@ -99,21 +99,13 @@ static void hsu_dma_chan_start(struct hsu_dma_chan *hsuc)
 
 static void hsu_dma_stop_channel(struct hsu_dma_chan *hsuc)
 {
-       unsigned long flags;
-
-       spin_lock_irqsave(&hsuc->lock, flags);
        hsu_chan_disable(hsuc);
        hsu_chan_writel(hsuc, HSU_CH_DCR, 0);
-       spin_unlock_irqrestore(&hsuc->lock, flags);
 }
 
 static void hsu_dma_start_channel(struct hsu_dma_chan *hsuc)
 {
-       unsigned long flags;
-
-       spin_lock_irqsave(&hsuc->lock, flags);
        hsu_dma_chan_start(hsuc);
-       spin_unlock_irqrestore(&hsuc->lock, flags);
 }
 
 static void hsu_dma_start_transfer(struct hsu_dma_chan *hsuc)
@@ -139,9 +131,9 @@ static u32 hsu_dma_chan_get_sr(struct hsu_dma_chan *hsuc)
        unsigned long flags;
        u32 sr;
 
-       spin_lock_irqsave(&hsuc->lock, flags);
+       spin_lock_irqsave(&hsuc->vchan.lock, flags);
        sr = hsu_chan_readl(hsuc, HSU_CH_SR);
-       spin_unlock_irqrestore(&hsuc->lock, flags);
+       spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
 
        return sr;
 }
@@ -154,7 +146,7 @@ irqreturn_t hsu_dma_irq(struct hsu_dma_chip *chip, unsigned short nr)
        u32 sr;
 
        /* Sanity check */
-       if (nr >= chip->pdata->nr_channels)
+       if (nr >= chip->hsu->nr_channels)
                return IRQ_NONE;
 
        hsuc = &chip->hsu->chan[nr];
@@ -273,14 +265,11 @@ static size_t hsu_dma_active_desc_size(struct hsu_dma_chan *hsuc)
        struct hsu_dma_desc *desc = hsuc->desc;
        size_t bytes = hsu_dma_desc_size(desc);
        int i;
-       unsigned long flags;
 
-       spin_lock_irqsave(&hsuc->lock, flags);
        i = desc->active % HSU_DMA_CHAN_NR_DESC;
        do {
                bytes += hsu_chan_readl(hsuc, HSU_CH_DxTSR(i));
        } while (--i >= 0);
-       spin_unlock_irqrestore(&hsuc->lock, flags);
 
        return bytes;
 }
@@ -327,24 +316,6 @@ static int hsu_dma_slave_config(struct dma_chan *chan,
        return 0;
 }
 
-static void hsu_dma_chan_deactivate(struct hsu_dma_chan *hsuc)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&hsuc->lock, flags);
-       hsu_chan_disable(hsuc);
-       spin_unlock_irqrestore(&hsuc->lock, flags);
-}
-
-static void hsu_dma_chan_activate(struct hsu_dma_chan *hsuc)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&hsuc->lock, flags);
-       hsu_chan_enable(hsuc);
-       spin_unlock_irqrestore(&hsuc->lock, flags);
-}
-
 static int hsu_dma_pause(struct dma_chan *chan)
 {
        struct hsu_dma_chan *hsuc = to_hsu_dma_chan(chan);
@@ -352,7 +323,7 @@ static int hsu_dma_pause(struct dma_chan *chan)
 
        spin_lock_irqsave(&hsuc->vchan.lock, flags);
        if (hsuc->desc && hsuc->desc->status == DMA_IN_PROGRESS) {
-               hsu_dma_chan_deactivate(hsuc);
+               hsu_chan_disable(hsuc);
                hsuc->desc->status = DMA_PAUSED;
        }
        spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
@@ -368,7 +339,7 @@ static int hsu_dma_resume(struct dma_chan *chan)
        spin_lock_irqsave(&hsuc->vchan.lock, flags);
        if (hsuc->desc && hsuc->desc->status == DMA_PAUSED) {
                hsuc->desc->status = DMA_IN_PROGRESS;
-               hsu_dma_chan_activate(hsuc);
+               hsu_chan_enable(hsuc);
        }
        spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
 
@@ -404,7 +375,6 @@ static void hsu_dma_free_chan_resources(struct dma_chan *chan)
 int hsu_dma_probe(struct hsu_dma_chip *chip)
 {
        struct hsu_dma *hsu;
-       struct hsu_dma_platform_data *pdata = chip->pdata;
        void __iomem *addr = chip->regs + chip->offset;
        unsigned short i;
        int ret;
@@ -415,25 +385,16 @@ int hsu_dma_probe(struct hsu_dma_chip *chip)
 
        chip->hsu = hsu;
 
-       if (!pdata) {
-               pdata = devm_kzalloc(chip->dev, sizeof(*pdata), GFP_KERNEL);
-               if (!pdata)
-                       return -ENOMEM;
-
-               chip->pdata = pdata;
+       /* Calculate nr_channels from the IO space length */
+       hsu->nr_channels = (chip->length - chip->offset) / HSU_DMA_CHAN_LENGTH;
 
-               /* Guess nr_channels from the IO space length */
-               pdata->nr_channels = (chip->length - chip->offset) /
-                                    HSU_DMA_CHAN_LENGTH;
-       }
-
-       hsu->chan = devm_kcalloc(chip->dev, pdata->nr_channels,
+       hsu->chan = devm_kcalloc(chip->dev, hsu->nr_channels,
                                 sizeof(*hsu->chan), GFP_KERNEL);
        if (!hsu->chan)
                return -ENOMEM;
 
        INIT_LIST_HEAD(&hsu->dma.channels);
-       for (i = 0; i < pdata->nr_channels; i++) {
+       for (i = 0; i < hsu->nr_channels; i++) {
                struct hsu_dma_chan *hsuc = &hsu->chan[i];
 
                hsuc->vchan.desc_free = hsu_dma_desc_free;
@@ -441,8 +402,6 @@ int hsu_dma_probe(struct hsu_dma_chip *chip)
 
                hsuc->direction = (i & 0x1) ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV;
                hsuc->reg = addr + i * HSU_DMA_CHAN_LENGTH;
-
-               spin_lock_init(&hsuc->lock);
        }
 
        dma_cap_set(DMA_SLAVE, hsu->dma.cap_mask);
@@ -471,7 +430,7 @@ int hsu_dma_probe(struct hsu_dma_chip *chip)
        if (ret)
                return ret;
 
-       dev_info(chip->dev, "Found HSU DMA, %d channels\n", pdata->nr_channels);
+       dev_info(chip->dev, "Found HSU DMA, %d channels\n", hsu->nr_channels);
        return 0;
 }
 EXPORT_SYMBOL_GPL(hsu_dma_probe);
@@ -483,7 +442,7 @@ int hsu_dma_remove(struct hsu_dma_chip *chip)
 
        dma_async_device_unregister(&hsu->dma);
 
-       for (i = 0; i < chip->pdata->nr_channels; i++) {
+       for (i = 0; i < hsu->nr_channels; i++) {
                struct hsu_dma_chan *hsuc = &hsu->chan[i];
 
                tasklet_kill(&hsuc->vchan.task);