@@ -568,10 +568,9 @@ apple_dart_setup_translation(struct apple_dart_domain *domain,
568
568
stream_map -> dart -> hw -> invalidate_tlb (stream_map );
569
569
}
570
570
571
- static int apple_dart_finalize_domain (struct iommu_domain * domain ,
571
+ static int apple_dart_finalize_domain (struct apple_dart_domain * dart_domain ,
572
572
struct apple_dart_master_cfg * cfg )
573
573
{
574
- struct apple_dart_domain * dart_domain = to_dart_domain (domain );
575
574
struct apple_dart * dart = cfg -> stream_maps [0 ].dart ;
576
575
struct io_pgtable_cfg pgtbl_cfg ;
577
576
int ret = 0 ;
@@ -597,17 +596,18 @@ static int apple_dart_finalize_domain(struct iommu_domain *domain,
597
596
.iommu_dev = dart -> dev ,
598
597
};
599
598
600
- dart_domain -> pgtbl_ops =
601
- alloc_io_pgtable_ops ( dart -> hw -> fmt , & pgtbl_cfg , domain );
599
+ dart_domain -> pgtbl_ops = alloc_io_pgtable_ops ( dart -> hw -> fmt , & pgtbl_cfg ,
600
+ & dart_domain -> domain );
602
601
if (!dart_domain -> pgtbl_ops ) {
603
602
ret = - ENOMEM ;
604
603
goto done ;
605
604
}
606
605
607
- domain -> pgsize_bitmap = pgtbl_cfg .pgsize_bitmap ;
608
- domain -> geometry .aperture_start = 0 ;
609
- domain -> geometry .aperture_end = (dma_addr_t )DMA_BIT_MASK (dart -> ias );
610
- domain -> geometry .force_aperture = true;
606
+ dart_domain -> domain .pgsize_bitmap = pgtbl_cfg .pgsize_bitmap ;
607
+ dart_domain -> domain .geometry .aperture_start = 0 ;
608
+ dart_domain -> domain .geometry .aperture_end =
609
+ (dma_addr_t )DMA_BIT_MASK (dart -> ias );
610
+ dart_domain -> domain .geometry .force_aperture = true;
611
611
612
612
dart_domain -> finalized = true;
613
613
@@ -662,7 +662,7 @@ static int apple_dart_attach_dev_paging(struct iommu_domain *domain,
662
662
if (cfg -> stream_maps [0 ].dart -> force_bypass )
663
663
return - EINVAL ;
664
664
665
- ret = apple_dart_finalize_domain (domain , cfg );
665
+ ret = apple_dart_finalize_domain (dart_domain , cfg );
666
666
if (ret )
667
667
return ret ;
668
668
@@ -758,6 +758,16 @@ static struct iommu_domain *apple_dart_domain_alloc_paging(struct device *dev)
758
758
759
759
mutex_init (& dart_domain -> init_lock );
760
760
761
+ if (dev ) {
762
+ struct apple_dart_master_cfg * cfg = dev_iommu_priv_get (dev );
763
+ int ret ;
764
+
765
+ ret = apple_dart_finalize_domain (dart_domain , cfg );
766
+ if (ret ) {
767
+ kfree (dart_domain );
768
+ return ERR_PTR (ret );
769
+ }
770
+ }
761
771
return & dart_domain -> domain ;
762
772
}
763
773
0 commit comments