@@ -341,14 +341,22 @@ static bool pci_endpoint_test_copy(struct pci_endpoint_test *test, size_t size)
341
341
goto err ;
342
342
}
343
343
344
- orig_src_addr = dma_alloc_coherent (dev , size + alignment ,
345
- & orig_src_phys_addr , GFP_KERNEL );
344
+ orig_src_addr = kzalloc (size + alignment , GFP_KERNEL );
346
345
if (!orig_src_addr ) {
347
346
dev_err (dev , "Failed to allocate source buffer\n" );
348
347
ret = false;
349
348
goto err ;
350
349
}
351
350
351
+ get_random_bytes (orig_src_addr , size + alignment );
352
+ orig_src_phys_addr = dma_map_single (dev , orig_src_addr ,
353
+ size + alignment , DMA_TO_DEVICE );
354
+ if (dma_mapping_error (dev , orig_src_phys_addr )) {
355
+ dev_err (dev , "failed to map source buffer address\n" );
356
+ ret = false;
357
+ goto err_src_phys_addr ;
358
+ }
359
+
352
360
if (alignment && !IS_ALIGNED (orig_src_phys_addr , alignment )) {
353
361
src_phys_addr = PTR_ALIGN (orig_src_phys_addr , alignment );
354
362
offset = src_phys_addr - orig_src_phys_addr ;
@@ -364,15 +372,21 @@ static bool pci_endpoint_test_copy(struct pci_endpoint_test *test, size_t size)
364
372
pci_endpoint_test_writel (test , PCI_ENDPOINT_TEST_UPPER_SRC_ADDR ,
365
373
upper_32_bits (src_phys_addr ));
366
374
367
- get_random_bytes (src_addr , size );
368
375
src_crc32 = crc32_le (~0 , src_addr , size );
369
376
370
- orig_dst_addr = dma_alloc_coherent (dev , size + alignment ,
371
- & orig_dst_phys_addr , GFP_KERNEL );
377
+ orig_dst_addr = kzalloc (size + alignment , GFP_KERNEL );
372
378
if (!orig_dst_addr ) {
373
379
dev_err (dev , "Failed to allocate destination address\n" );
374
380
ret = false;
375
- goto err_orig_src_addr ;
381
+ goto err_dst_addr ;
382
+ }
383
+
384
+ orig_dst_phys_addr = dma_map_single (dev , orig_dst_addr ,
385
+ size + alignment , DMA_FROM_DEVICE );
386
+ if (dma_mapping_error (dev , orig_dst_phys_addr )) {
387
+ dev_err (dev , "failed to map destination buffer address\n" );
388
+ ret = false;
389
+ goto err_dst_phys_addr ;
376
390
}
377
391
378
392
if (alignment && !IS_ALIGNED (orig_dst_phys_addr , alignment )) {
@@ -399,16 +413,22 @@ static bool pci_endpoint_test_copy(struct pci_endpoint_test *test, size_t size)
399
413
400
414
wait_for_completion (& test -> irq_raised );
401
415
416
+ dma_unmap_single (dev , orig_dst_phys_addr , size + alignment ,
417
+ DMA_FROM_DEVICE );
418
+
402
419
dst_crc32 = crc32_le (~0 , dst_addr , size );
403
420
if (dst_crc32 == src_crc32 )
404
421
ret = true;
405
422
406
- dma_free_coherent ( dev , size + alignment , orig_dst_addr ,
407
- orig_dst_phys_addr );
423
+ err_dst_phys_addr :
424
+ kfree ( orig_dst_addr );
408
425
409
- err_orig_src_addr :
410
- dma_free_coherent (dev , size + alignment , orig_src_addr ,
411
- orig_src_phys_addr );
426
+ err_dst_addr :
427
+ dma_unmap_single (dev , orig_src_phys_addr , size + alignment ,
428
+ DMA_TO_DEVICE );
429
+
430
+ err_src_phys_addr :
431
+ kfree (orig_src_addr );
412
432
413
433
err :
414
434
return ret ;
@@ -436,14 +456,23 @@ static bool pci_endpoint_test_write(struct pci_endpoint_test *test, size_t size)
436
456
goto err ;
437
457
}
438
458
439
- orig_addr = dma_alloc_coherent (dev , size + alignment , & orig_phys_addr ,
440
- GFP_KERNEL );
459
+ orig_addr = kzalloc (size + alignment , GFP_KERNEL );
441
460
if (!orig_addr ) {
442
461
dev_err (dev , "Failed to allocate address\n" );
443
462
ret = false;
444
463
goto err ;
445
464
}
446
465
466
+ get_random_bytes (orig_addr , size + alignment );
467
+
468
+ orig_phys_addr = dma_map_single (dev , orig_addr , size + alignment ,
469
+ DMA_TO_DEVICE );
470
+ if (dma_mapping_error (dev , orig_phys_addr )) {
471
+ dev_err (dev , "failed to map source buffer address\n" );
472
+ ret = false;
473
+ goto err_phys_addr ;
474
+ }
475
+
447
476
if (alignment && !IS_ALIGNED (orig_phys_addr , alignment )) {
448
477
phys_addr = PTR_ALIGN (orig_phys_addr , alignment );
449
478
offset = phys_addr - orig_phys_addr ;
@@ -453,8 +482,6 @@ static bool pci_endpoint_test_write(struct pci_endpoint_test *test, size_t size)
453
482
addr = orig_addr ;
454
483
}
455
484
456
- get_random_bytes (addr , size );
457
-
458
485
crc32 = crc32_le (~0 , addr , size );
459
486
pci_endpoint_test_writel (test , PCI_ENDPOINT_TEST_CHECKSUM ,
460
487
crc32 );
@@ -477,7 +504,11 @@ static bool pci_endpoint_test_write(struct pci_endpoint_test *test, size_t size)
477
504
if (reg & STATUS_READ_SUCCESS )
478
505
ret = true;
479
506
480
- dma_free_coherent (dev , size + alignment , orig_addr , orig_phys_addr );
507
+ dma_unmap_single (dev , orig_phys_addr , size + alignment ,
508
+ DMA_TO_DEVICE );
509
+
510
+ err_phys_addr :
511
+ kfree (orig_addr );
481
512
482
513
err :
483
514
return ret ;
@@ -504,14 +535,21 @@ static bool pci_endpoint_test_read(struct pci_endpoint_test *test, size_t size)
504
535
goto err ;
505
536
}
506
537
507
- orig_addr = dma_alloc_coherent (dev , size + alignment , & orig_phys_addr ,
508
- GFP_KERNEL );
538
+ orig_addr = kzalloc (size + alignment , GFP_KERNEL );
509
539
if (!orig_addr ) {
510
540
dev_err (dev , "Failed to allocate destination address\n" );
511
541
ret = false;
512
542
goto err ;
513
543
}
514
544
545
+ orig_phys_addr = dma_map_single (dev , orig_addr , size + alignment ,
546
+ DMA_FROM_DEVICE );
547
+ if (dma_mapping_error (dev , orig_phys_addr )) {
548
+ dev_err (dev , "failed to map source buffer address\n" );
549
+ ret = false;
550
+ goto err_phys_addr ;
551
+ }
552
+
515
553
if (alignment && !IS_ALIGNED (orig_phys_addr , alignment )) {
516
554
phys_addr = PTR_ALIGN (orig_phys_addr , alignment );
517
555
offset = phys_addr - orig_phys_addr ;
@@ -535,11 +573,15 @@ static bool pci_endpoint_test_read(struct pci_endpoint_test *test, size_t size)
535
573
536
574
wait_for_completion (& test -> irq_raised );
537
575
576
+ dma_unmap_single (dev , orig_phys_addr , size + alignment ,
577
+ DMA_FROM_DEVICE );
578
+
538
579
crc32 = crc32_le (~0 , addr , size );
539
580
if (crc32 == pci_endpoint_test_readl (test , PCI_ENDPOINT_TEST_CHECKSUM ))
540
581
ret = true;
541
582
542
- dma_free_coherent (dev , size + alignment , orig_addr , orig_phys_addr );
583
+ err_phys_addr :
584
+ kfree (orig_addr );
543
585
err :
544
586
return ret ;
545
587
}
@@ -667,6 +709,12 @@ static int pci_endpoint_test_probe(struct pci_dev *pdev,
667
709
init_completion (& test -> irq_raised );
668
710
mutex_init (& test -> mutex );
669
711
712
+ if ((dma_set_mask_and_coherent (& pdev -> dev , DMA_BIT_MASK (48 )) != 0 ) &&
713
+ dma_set_mask_and_coherent (& pdev -> dev , DMA_BIT_MASK (32 )) != 0 ) {
714
+ dev_err (dev , "Cannot set DMA mask\n" );
715
+ return - EINVAL ;
716
+ }
717
+
670
718
err = pci_enable_device (pdev );
671
719
if (err ) {
672
720
dev_err (dev , "Cannot enable PCI device\n" );
@@ -783,15 +831,25 @@ static void pci_endpoint_test_remove(struct pci_dev *pdev)
783
831
pci_disable_device (pdev );
784
832
}
785
833
834
+ static const struct pci_endpoint_test_data default_data = {
835
+ .test_reg_bar = BAR_0 ,
836
+ .alignment = SZ_4K ,
837
+ .irq_type = IRQ_TYPE_MSI ,
838
+ };
839
+
786
840
static const struct pci_endpoint_test_data am654_data = {
787
841
.test_reg_bar = BAR_2 ,
788
842
.alignment = SZ_64K ,
789
843
.irq_type = IRQ_TYPE_MSI ,
790
844
};
791
845
792
846
static const struct pci_device_id pci_endpoint_test_tbl [] = {
793
- { PCI_DEVICE (PCI_VENDOR_ID_TI , PCI_DEVICE_ID_TI_DRA74x ) },
794
- { PCI_DEVICE (PCI_VENDOR_ID_TI , PCI_DEVICE_ID_TI_DRA72x ) },
847
+ { PCI_DEVICE (PCI_VENDOR_ID_TI , PCI_DEVICE_ID_TI_DRA74x ),
848
+ .driver_data = (kernel_ulong_t )& default_data ,
849
+ },
850
+ { PCI_DEVICE (PCI_VENDOR_ID_TI , PCI_DEVICE_ID_TI_DRA72x ),
851
+ .driver_data = (kernel_ulong_t )& default_data ,
852
+ },
795
853
{ PCI_DEVICE (PCI_VENDOR_ID_FREESCALE , 0x81c0 ) },
796
854
{ PCI_DEVICE_DATA (SYNOPSYS , EDDA , NULL ) },
797
855
{ PCI_DEVICE (PCI_VENDOR_ID_TI , PCI_DEVICE_ID_TI_AM654 ),
0 commit comments