@@ -160,36 +160,40 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
160160 const struct pci_device_id * pid )
161161{
162162 struct dw_edma_pcie_data * pdata = (void * )pid -> driver_data ;
163- struct dw_edma_pcie_data vsec_data ;
163+ struct dw_edma_pcie_data * vsec_data __free ( kfree ) = NULL ;
164164 struct device * dev = & pdev -> dev ;
165165 struct dw_edma_chip * chip ;
166166 int err , nr_irqs ;
167167 int i , mask ;
168168
169+ vsec_data = kmalloc (sizeof (* vsec_data ), GFP_KERNEL );
170+ if (!vsec_data )
171+ return - ENOMEM ;
172+
169173 /* Enable PCI device */
170174 err = pcim_enable_device (pdev );
171175 if (err ) {
172176 pci_err (pdev , "enabling device failed\n" );
173177 return err ;
174178 }
175179
176- memcpy (& vsec_data , pdata , sizeof (struct dw_edma_pcie_data ));
180+ memcpy (vsec_data , pdata , sizeof (struct dw_edma_pcie_data ));
177181
178182 /*
179183 * Tries to find if exists a PCIe Vendor-Specific Extended Capability
180184 * for the DMA, if one exists, then reconfigures it.
181185 */
182- dw_edma_pcie_get_vsec_dma_data (pdev , & vsec_data );
186+ dw_edma_pcie_get_vsec_dma_data (pdev , vsec_data );
183187
184188 /* Mapping PCI BAR regions */
185- mask = BIT (vsec_data . rg .bar );
186- for (i = 0 ; i < vsec_data . wr_ch_cnt ; i ++ ) {
187- mask |= BIT (vsec_data . ll_wr [i ].bar );
188- mask |= BIT (vsec_data . dt_wr [i ].bar );
189+ mask = BIT (vsec_data -> rg .bar );
190+ for (i = 0 ; i < vsec_data -> wr_ch_cnt ; i ++ ) {
191+ mask |= BIT (vsec_data -> ll_wr [i ].bar );
192+ mask |= BIT (vsec_data -> dt_wr [i ].bar );
189193 }
190- for (i = 0 ; i < vsec_data . rd_ch_cnt ; i ++ ) {
191- mask |= BIT (vsec_data . ll_rd [i ].bar );
192- mask |= BIT (vsec_data . dt_rd [i ].bar );
194+ for (i = 0 ; i < vsec_data -> rd_ch_cnt ; i ++ ) {
195+ mask |= BIT (vsec_data -> ll_rd [i ].bar );
196+ mask |= BIT (vsec_data -> dt_rd [i ].bar );
193197 }
194198 err = pcim_iomap_regions (pdev , mask , pci_name (pdev ));
195199 if (err ) {
@@ -212,7 +216,7 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
212216 return - ENOMEM ;
213217
214218 /* IRQs allocation */
215- nr_irqs = pci_alloc_irq_vectors (pdev , 1 , vsec_data . irqs ,
219+ nr_irqs = pci_alloc_irq_vectors (pdev , 1 , vsec_data -> irqs ,
216220 PCI_IRQ_MSI | PCI_IRQ_MSIX );
217221 if (nr_irqs < 1 ) {
218222 pci_err (pdev , "fail to alloc IRQ vector (number of IRQs=%u)\n" ,
@@ -223,22 +227,22 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
223227 /* Data structure initialization */
224228 chip -> dev = dev ;
225229
226- chip -> mf = vsec_data . mf ;
230+ chip -> mf = vsec_data -> mf ;
227231 chip -> nr_irqs = nr_irqs ;
228232 chip -> ops = & dw_edma_pcie_plat_ops ;
229233
230- chip -> ll_wr_cnt = vsec_data . wr_ch_cnt ;
231- chip -> ll_rd_cnt = vsec_data . rd_ch_cnt ;
234+ chip -> ll_wr_cnt = vsec_data -> wr_ch_cnt ;
235+ chip -> ll_rd_cnt = vsec_data -> rd_ch_cnt ;
232236
233- chip -> reg_base = pcim_iomap_table (pdev )[vsec_data . rg .bar ];
237+ chip -> reg_base = pcim_iomap_table (pdev )[vsec_data -> rg .bar ];
234238 if (!chip -> reg_base )
235239 return - ENOMEM ;
236240
237241 for (i = 0 ; i < chip -> ll_wr_cnt ; i ++ ) {
238242 struct dw_edma_region * ll_region = & chip -> ll_region_wr [i ];
239243 struct dw_edma_region * dt_region = & chip -> dt_region_wr [i ];
240- struct dw_edma_block * ll_block = & vsec_data . ll_wr [i ];
241- struct dw_edma_block * dt_block = & vsec_data . dt_wr [i ];
244+ struct dw_edma_block * ll_block = & vsec_data -> ll_wr [i ];
245+ struct dw_edma_block * dt_block = & vsec_data -> dt_wr [i ];
242246
243247 ll_region -> vaddr .io = pcim_iomap_table (pdev )[ll_block -> bar ];
244248 if (!ll_region -> vaddr .io )
@@ -262,8 +266,8 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
262266 for (i = 0 ; i < chip -> ll_rd_cnt ; i ++ ) {
263267 struct dw_edma_region * ll_region = & chip -> ll_region_rd [i ];
264268 struct dw_edma_region * dt_region = & chip -> dt_region_rd [i ];
265- struct dw_edma_block * ll_block = & vsec_data . ll_rd [i ];
266- struct dw_edma_block * dt_block = & vsec_data . dt_rd [i ];
269+ struct dw_edma_block * ll_block = & vsec_data -> ll_rd [i ];
270+ struct dw_edma_block * dt_block = & vsec_data -> dt_rd [i ];
267271
268272 ll_region -> vaddr .io = pcim_iomap_table (pdev )[ll_block -> bar ];
269273 if (!ll_region -> vaddr .io )
@@ -295,31 +299,31 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
295299 pci_dbg (pdev , "Version:\tUnknown (0x%x)\n" , chip -> mf );
296300
297301 pci_dbg (pdev , "Registers:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p)\n" ,
298- vsec_data . rg .bar , vsec_data . rg .off , vsec_data . rg .sz ,
302+ vsec_data -> rg .bar , vsec_data -> rg .off , vsec_data -> rg .sz ,
299303 chip -> reg_base );
300304
301305
302306 for (i = 0 ; i < chip -> ll_wr_cnt ; i ++ ) {
303307 pci_dbg (pdev , "L. List:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
304- i , vsec_data . ll_wr [i ].bar ,
305- vsec_data . ll_wr [i ].off , chip -> ll_region_wr [i ].sz ,
308+ i , vsec_data -> ll_wr [i ].bar ,
309+ vsec_data -> ll_wr [i ].off , chip -> ll_region_wr [i ].sz ,
306310 chip -> ll_region_wr [i ].vaddr .io , & chip -> ll_region_wr [i ].paddr );
307311
308312 pci_dbg (pdev , "Data:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
309- i , vsec_data . dt_wr [i ].bar ,
310- vsec_data . dt_wr [i ].off , chip -> dt_region_wr [i ].sz ,
313+ i , vsec_data -> dt_wr [i ].bar ,
314+ vsec_data -> dt_wr [i ].off , chip -> dt_region_wr [i ].sz ,
311315 chip -> dt_region_wr [i ].vaddr .io , & chip -> dt_region_wr [i ].paddr );
312316 }
313317
314318 for (i = 0 ; i < chip -> ll_rd_cnt ; i ++ ) {
315319 pci_dbg (pdev , "L. List:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
316- i , vsec_data . ll_rd [i ].bar ,
317- vsec_data . ll_rd [i ].off , chip -> ll_region_rd [i ].sz ,
320+ i , vsec_data -> ll_rd [i ].bar ,
321+ vsec_data -> ll_rd [i ].off , chip -> ll_region_rd [i ].sz ,
318322 chip -> ll_region_rd [i ].vaddr .io , & chip -> ll_region_rd [i ].paddr );
319323
320324 pci_dbg (pdev , "Data:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
321- i , vsec_data . dt_rd [i ].bar ,
322- vsec_data . dt_rd [i ].off , chip -> dt_region_rd [i ].sz ,
325+ i , vsec_data -> dt_rd [i ].bar ,
326+ vsec_data -> dt_rd [i ].off , chip -> dt_region_rd [i ].sz ,
323327 chip -> dt_region_rd [i ].vaddr .io , & chip -> dt_region_rd [i ].paddr );
324328 }
325329
0 commit comments