@@ -161,36 +161,40 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
161
161
const struct pci_device_id * pid )
162
162
{
163
163
struct dw_edma_pcie_data * pdata = (void * )pid -> driver_data ;
164
- struct dw_edma_pcie_data vsec_data ;
164
+ struct dw_edma_pcie_data * vsec_data __free ( kfree ) = NULL ;
165
165
struct device * dev = & pdev -> dev ;
166
166
struct dw_edma_chip * chip ;
167
167
int err , nr_irqs ;
168
168
int i , mask ;
169
169
170
+ vsec_data = kmalloc (sizeof (* vsec_data ), GFP_KERNEL );
171
+ if (!vsec_data )
172
+ return - ENOMEM ;
173
+
170
174
/* Enable PCI device */
171
175
err = pcim_enable_device (pdev );
172
176
if (err ) {
173
177
pci_err (pdev , "enabling device failed\n" );
174
178
return err ;
175
179
}
176
180
177
- memcpy (& vsec_data , pdata , sizeof (struct dw_edma_pcie_data ));
181
+ memcpy (vsec_data , pdata , sizeof (struct dw_edma_pcie_data ));
178
182
179
183
/*
180
184
* Tries to find if exists a PCIe Vendor-Specific Extended Capability
181
185
* for the DMA, if one exists, then reconfigures it.
182
186
*/
183
- dw_edma_pcie_get_vsec_dma_data (pdev , & vsec_data );
187
+ dw_edma_pcie_get_vsec_dma_data (pdev , vsec_data );
184
188
185
189
/* Mapping PCI BAR regions */
186
- mask = BIT (vsec_data . rg .bar );
187
- for (i = 0 ; i < vsec_data . wr_ch_cnt ; i ++ ) {
188
- mask |= BIT (vsec_data . ll_wr [i ].bar );
189
- mask |= BIT (vsec_data . dt_wr [i ].bar );
190
+ mask = BIT (vsec_data -> rg .bar );
191
+ for (i = 0 ; i < vsec_data -> wr_ch_cnt ; i ++ ) {
192
+ mask |= BIT (vsec_data -> ll_wr [i ].bar );
193
+ mask |= BIT (vsec_data -> dt_wr [i ].bar );
190
194
}
191
- for (i = 0 ; i < vsec_data . rd_ch_cnt ; i ++ ) {
192
- mask |= BIT (vsec_data . ll_rd [i ].bar );
193
- mask |= BIT (vsec_data . dt_rd [i ].bar );
195
+ for (i = 0 ; i < vsec_data -> rd_ch_cnt ; i ++ ) {
196
+ mask |= BIT (vsec_data -> ll_rd [i ].bar );
197
+ mask |= BIT (vsec_data -> dt_rd [i ].bar );
194
198
}
195
199
err = pcim_iomap_regions (pdev , mask , pci_name (pdev ));
196
200
if (err ) {
@@ -213,7 +217,7 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
213
217
return - ENOMEM ;
214
218
215
219
/* IRQs allocation */
216
- nr_irqs = pci_alloc_irq_vectors (pdev , 1 , vsec_data . irqs ,
220
+ nr_irqs = pci_alloc_irq_vectors (pdev , 1 , vsec_data -> irqs ,
217
221
PCI_IRQ_MSI | PCI_IRQ_MSIX );
218
222
if (nr_irqs < 1 ) {
219
223
pci_err (pdev , "fail to alloc IRQ vector (number of IRQs=%u)\n" ,
@@ -224,22 +228,22 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
224
228
/* Data structure initialization */
225
229
chip -> dev = dev ;
226
230
227
- chip -> mf = vsec_data . mf ;
231
+ chip -> mf = vsec_data -> mf ;
228
232
chip -> nr_irqs = nr_irqs ;
229
233
chip -> ops = & dw_edma_pcie_plat_ops ;
230
234
231
- chip -> ll_wr_cnt = vsec_data . wr_ch_cnt ;
232
- chip -> ll_rd_cnt = vsec_data . rd_ch_cnt ;
235
+ chip -> ll_wr_cnt = vsec_data -> wr_ch_cnt ;
236
+ chip -> ll_rd_cnt = vsec_data -> rd_ch_cnt ;
233
237
234
- chip -> reg_base = pcim_iomap_table (pdev )[vsec_data . rg .bar ];
238
+ chip -> reg_base = pcim_iomap_table (pdev )[vsec_data -> rg .bar ];
235
239
if (!chip -> reg_base )
236
240
return - ENOMEM ;
237
241
238
242
for (i = 0 ; i < chip -> ll_wr_cnt ; i ++ ) {
239
243
struct dw_edma_region * ll_region = & chip -> ll_region_wr [i ];
240
244
struct dw_edma_region * dt_region = & chip -> dt_region_wr [i ];
241
- struct dw_edma_block * ll_block = & vsec_data . ll_wr [i ];
242
- struct dw_edma_block * dt_block = & vsec_data . dt_wr [i ];
245
+ struct dw_edma_block * ll_block = & vsec_data -> ll_wr [i ];
246
+ struct dw_edma_block * dt_block = & vsec_data -> dt_wr [i ];
243
247
244
248
ll_region -> vaddr .io = pcim_iomap_table (pdev )[ll_block -> bar ];
245
249
if (!ll_region -> vaddr .io )
@@ -263,8 +267,8 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
263
267
for (i = 0 ; i < chip -> ll_rd_cnt ; i ++ ) {
264
268
struct dw_edma_region * ll_region = & chip -> ll_region_rd [i ];
265
269
struct dw_edma_region * dt_region = & chip -> dt_region_rd [i ];
266
- struct dw_edma_block * ll_block = & vsec_data . ll_rd [i ];
267
- struct dw_edma_block * dt_block = & vsec_data . dt_rd [i ];
270
+ struct dw_edma_block * ll_block = & vsec_data -> ll_rd [i ];
271
+ struct dw_edma_block * dt_block = & vsec_data -> dt_rd [i ];
268
272
269
273
ll_region -> vaddr .io = pcim_iomap_table (pdev )[ll_block -> bar ];
270
274
if (!ll_region -> vaddr .io )
@@ -298,31 +302,31 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev,
298
302
pci_dbg (pdev , "Version:\tUnknown (0x%x)\n" , chip -> mf );
299
303
300
304
pci_dbg (pdev , "Registers:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p)\n" ,
301
- vsec_data . rg .bar , vsec_data . rg .off , vsec_data . rg .sz ,
305
+ vsec_data -> rg .bar , vsec_data -> rg .off , vsec_data -> rg .sz ,
302
306
chip -> reg_base );
303
307
304
308
305
309
for (i = 0 ; i < chip -> ll_wr_cnt ; i ++ ) {
306
310
pci_dbg (pdev , "L. List:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
307
- i , vsec_data . ll_wr [i ].bar ,
308
- vsec_data . ll_wr [i ].off , chip -> ll_region_wr [i ].sz ,
311
+ i , vsec_data -> ll_wr [i ].bar ,
312
+ vsec_data -> ll_wr [i ].off , chip -> ll_region_wr [i ].sz ,
309
313
chip -> ll_region_wr [i ].vaddr .io , & chip -> ll_region_wr [i ].paddr );
310
314
311
315
pci_dbg (pdev , "Data:\tWRITE CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
312
- i , vsec_data . dt_wr [i ].bar ,
313
- vsec_data . dt_wr [i ].off , chip -> dt_region_wr [i ].sz ,
316
+ i , vsec_data -> dt_wr [i ].bar ,
317
+ vsec_data -> dt_wr [i ].off , chip -> dt_region_wr [i ].sz ,
314
318
chip -> dt_region_wr [i ].vaddr .io , & chip -> dt_region_wr [i ].paddr );
315
319
}
316
320
317
321
for (i = 0 ; i < chip -> ll_rd_cnt ; i ++ ) {
318
322
pci_dbg (pdev , "L. List:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
319
- i , vsec_data . ll_rd [i ].bar ,
320
- vsec_data . ll_rd [i ].off , chip -> ll_region_rd [i ].sz ,
323
+ i , vsec_data -> ll_rd [i ].bar ,
324
+ vsec_data -> ll_rd [i ].off , chip -> ll_region_rd [i ].sz ,
321
325
chip -> ll_region_rd [i ].vaddr .io , & chip -> ll_region_rd [i ].paddr );
322
326
323
327
pci_dbg (pdev , "Data:\tREAD CH%.2u, BAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n" ,
324
- i , vsec_data . dt_rd [i ].bar ,
325
- vsec_data . dt_rd [i ].off , chip -> dt_region_rd [i ].sz ,
328
+ i , vsec_data -> dt_rd [i ].bar ,
329
+ vsec_data -> dt_rd [i ].off , chip -> dt_region_rd [i ].sz ,
326
330
chip -> dt_region_rd [i ].vaddr .io , & chip -> dt_region_rd [i ].paddr );
327
331
}
328
332
0 commit comments