diff --git a/drivers/dma/dw-edma/dw-edma-pcie.c b/drivers/dma/dw-edma/dw-edma-pcie.c index 50d2a53f798d..f79597a7ccf9 100644 --- a/drivers/dma/dw-edma/dw-edma-pcie.c +++ b/drivers/dma/dw-edma/dw-edma-pcie.c @@ -390,9 +390,9 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, if (!pdata) return -ENODEV; - struct dw_edma_pcie_data *vsec_data __free(kfree) = - kmalloc_obj(*vsec_data); - if (!vsec_data) + struct dw_edma_pcie_data *dma_data __free(kfree) = + kmemdup(pdata, sizeof(*dma_data), GFP_KERNEL); + if (!dma_data) return -ENOMEM; /* Enable PCI device */ @@ -402,25 +402,23 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, return err; } - memcpy(vsec_data, pdata, sizeof(struct dw_edma_pcie_data)); - /* Let device-specific discovery override the static template data. */ if (!match->parse_caps) return -EINVAL; - err = match->parse_caps(pdev, vsec_data); + err = match->parse_caps(pdev, dma_data); if (err) return err; /* Mapping PCI BAR regions */ - mask = BIT(vsec_data->rg.bar); - for (i = 0; i < vsec_data->wr_ch_cnt; i++) { - mask |= BIT(vsec_data->ll_wr[i].bar); - mask |= BIT(vsec_data->dt_wr[i].bar); + mask = BIT(dma_data->rg.bar); + for (i = 0; i < dma_data->wr_ch_cnt; i++) { + mask |= BIT(dma_data->ll_wr[i].bar); + mask |= BIT(dma_data->dt_wr[i].bar); } - for (i = 0; i < vsec_data->rd_ch_cnt; i++) { - mask |= BIT(vsec_data->ll_rd[i].bar); - mask |= BIT(vsec_data->dt_rd[i].bar); + for (i = 0; i < dma_data->rd_ch_cnt; i++) { + mask |= BIT(dma_data->ll_rd[i].bar); + mask |= BIT(dma_data->dt_rd[i].bar); } err = pcim_iomap_regions(pdev, mask, pci_name(pdev)); if (err) { @@ -443,7 +441,7 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, return -ENOMEM; /* IRQs allocation */ - nr_irqs = pci_alloc_irq_vectors(pdev, 1, vsec_data->irqs, + nr_irqs = pci_alloc_irq_vectors(pdev, 1, dma_data->irqs, PCI_IRQ_MSI | PCI_IRQ_MSIX); if (nr_irqs < 1) { pci_err(pdev, "fail to alloc IRQ vector (number of IRQs=%u)\n", @@ -454,23 +452,23 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, /* Data structure initialization */ chip->dev = dev; - chip->mf = vsec_data->mf; + chip->mf = dma_data->mf; chip->nr_irqs = nr_irqs; chip->ops = &dw_edma_pcie_plat_ops; - chip->cfg_non_ll = vsec_data->cfg_non_ll; + chip->cfg_non_ll = dma_data->cfg_non_ll; - chip->ll_wr_cnt = vsec_data->wr_ch_cnt; - chip->ll_rd_cnt = vsec_data->rd_ch_cnt; + chip->ll_wr_cnt = dma_data->wr_ch_cnt; + chip->ll_rd_cnt = dma_data->rd_ch_cnt; - chip->reg_base = pcim_iomap_table(pdev)[vsec_data->rg.bar]; + chip->reg_base = pcim_iomap_table(pdev)[dma_data->rg.bar]; if (!chip->reg_base) return -ENOMEM; - for (i = 0; i < chip->ll_wr_cnt && !vsec_data->cfg_non_ll; i++) { + for (i = 0; i < chip->ll_wr_cnt && !dma_data->cfg_non_ll; i++) { struct dw_edma_region *ll_region = &chip->ll_region_wr[i]; struct dw_edma_region *dt_region = &chip->dt_region_wr[i]; - struct dw_edma_block *ll_block = &vsec_data->ll_wr[i]; - struct dw_edma_block *dt_block = &vsec_data->dt_wr[i]; + struct dw_edma_block *ll_block = &dma_data->ll_wr[i]; + struct dw_edma_block *dt_block = &dma_data->dt_wr[i]; ll_region->vaddr.io = pcim_iomap_table(pdev)[ll_block->bar]; if (!ll_region->vaddr.io) @@ -478,7 +476,7 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, ll_region->vaddr.io += ll_block->off; ll_region->paddr = dw_edma_get_phys_addr(pdev, match, - vsec_data, ll_block->bar); + dma_data, ll_block->bar); ll_region->paddr += ll_block->off; ll_region->sz = ll_block->sz; @@ -488,16 +486,16 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, dt_region->vaddr.io += dt_block->off; dt_region->paddr = dw_edma_get_phys_addr(pdev, match, - vsec_data, dt_block->bar); + dma_data, dt_block->bar); dt_region->paddr += dt_block->off; dt_region->sz = dt_block->sz; } - for (i = 0; i < chip->ll_rd_cnt && !vsec_data->cfg_non_ll; i++) { + for (i = 0; i < chip->ll_rd_cnt && !dma_data->cfg_non_ll; i++) { struct dw_edma_region *ll_region = &chip->ll_region_rd[i]; struct dw_edma_region *dt_region = &chip->dt_region_rd[i]; - struct dw_edma_block *ll_block = &vsec_data->ll_rd[i]; - struct dw_edma_block *dt_block = &vsec_data->dt_rd[i]; + struct dw_edma_block *ll_block = &dma_data->ll_rd[i]; + struct dw_edma_block *dt_block = &dma_data->dt_rd[i]; ll_region->vaddr.io = pcim_iomap_table(pdev)[ll_block->bar]; if (!ll_region->vaddr.io) @@ -505,7 +503,7 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, ll_region->vaddr.io += ll_block->off; ll_region->paddr = dw_edma_get_phys_addr(pdev, match, - vsec_data, ll_block->bar); + dma_data, ll_block->bar); ll_region->paddr += ll_block->off; ll_region->sz = ll_block->sz; @@ -515,7 +513,7 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, dt_region->vaddr.io += dt_block->off; dt_region->paddr = dw_edma_get_phys_addr(pdev, match, - vsec_data, dt_block->bar); + dma_data, dt_block->bar); dt_region->paddr += dt_block->off; dt_region->sz = dt_block->sz; } @@ -533,31 +531,31 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, pci_dbg(pdev, "Version:\tUnknown (0x%x)\n", chip->mf); pci_dbg(pdev, "Registers:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p)\n", - vsec_data->rg.bar, vsec_data->rg.off, vsec_data->rg.sz, + dma_data->rg.bar, dma_data->rg.off, dma_data->rg.sz, chip->reg_base); for (i = 0; i < chip->ll_wr_cnt; i++) { pci_dbg(pdev, "L. List:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", - i, vsec_data->ll_wr[i].bar, - vsec_data->ll_wr[i].off, chip->ll_region_wr[i].sz, + i, dma_data->ll_wr[i].bar, + dma_data->ll_wr[i].off, chip->ll_region_wr[i].sz, chip->ll_region_wr[i].vaddr.io, &chip->ll_region_wr[i].paddr); pci_dbg(pdev, "Data:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", - i, vsec_data->dt_wr[i].bar, - vsec_data->dt_wr[i].off, chip->dt_region_wr[i].sz, + i, dma_data->dt_wr[i].bar, + dma_data->dt_wr[i].off, chip->dt_region_wr[i].sz, chip->dt_region_wr[i].vaddr.io, &chip->dt_region_wr[i].paddr); } for (i = 0; i < chip->ll_rd_cnt; i++) { pci_dbg(pdev, "L. List:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", - i, vsec_data->ll_rd[i].bar, - vsec_data->ll_rd[i].off, chip->ll_region_rd[i].sz, + i, dma_data->ll_rd[i].bar, + dma_data->ll_rd[i].off, chip->ll_region_rd[i].sz, chip->ll_region_rd[i].vaddr.io, &chip->ll_region_rd[i].paddr); pci_dbg(pdev, "Data:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", - i, vsec_data->dt_rd[i].bar, - vsec_data->dt_rd[i].off, chip->dt_region_rd[i].sz, + i, dma_data->dt_rd[i].bar, + dma_data->dt_rd[i].off, chip->dt_region_rd[i].sz, chip->dt_region_rd[i].vaddr.io, &chip->dt_region_rd[i].paddr); }