@@ -2765,58 +2765,27 @@ static void arm_smmu_get_resv_regions(struct device *dev,
27652765 iommu_dma_get_resv_regions (dev , head );
27662766}
27672767
2768- static bool arm_smmu_dev_has_feature (struct device * dev ,
2769- enum iommu_dev_features feat )
2770- {
2771- struct arm_smmu_master * master = dev_iommu_priv_get (dev );
2772-
2773- if (!master )
2774- return false;
2775-
2776- switch (feat ) {
2777- case IOMMU_DEV_FEAT_IOPF :
2778- return arm_smmu_master_iopf_supported (master );
2779- case IOMMU_DEV_FEAT_SVA :
2780- return arm_smmu_master_sva_supported (master );
2781- default :
2782- return false;
2783- }
2784- }
2785-
2786- static bool arm_smmu_dev_feature_enabled (struct device * dev ,
2787- enum iommu_dev_features feat )
2788- {
2789- struct arm_smmu_master * master = dev_iommu_priv_get (dev );
2790-
2791- if (!master )
2792- return false;
2793-
2794- switch (feat ) {
2795- case IOMMU_DEV_FEAT_IOPF :
2796- return master -> iopf_enabled ;
2797- case IOMMU_DEV_FEAT_SVA :
2798- return arm_smmu_master_sva_enabled (master );
2799- default :
2800- return false;
2801- }
2802- }
2803-
28042768static int arm_smmu_dev_enable_feature (struct device * dev ,
28052769 enum iommu_dev_features feat )
28062770{
28072771 struct arm_smmu_master * master = dev_iommu_priv_get (dev );
28082772
2809- if (!arm_smmu_dev_has_feature ( dev , feat ) )
2773+ if (!master )
28102774 return - ENODEV ;
28112775
2812- if (arm_smmu_dev_feature_enabled (dev , feat ))
2813- return - EBUSY ;
2814-
28152776 switch (feat ) {
28162777 case IOMMU_DEV_FEAT_IOPF :
2778+ if (!arm_smmu_master_iopf_supported (master ))
2779+ return - EINVAL ;
2780+ if (master -> iopf_enabled )
2781+ return - EBUSY ;
28172782 master -> iopf_enabled = true;
28182783 return 0 ;
28192784 case IOMMU_DEV_FEAT_SVA :
2785+ if (!arm_smmu_master_sva_supported (master ))
2786+ return - EINVAL ;
2787+ if (arm_smmu_master_sva_enabled (master ))
2788+ return - EBUSY ;
28202789 return arm_smmu_master_enable_sva (master );
28212790 default :
28222791 return - EINVAL ;
@@ -2828,16 +2797,20 @@ static int arm_smmu_dev_disable_feature(struct device *dev,
28282797{
28292798 struct arm_smmu_master * master = dev_iommu_priv_get (dev );
28302799
2831- if (!arm_smmu_dev_feature_enabled ( dev , feat ) )
2800+ if (!master )
28322801 return - EINVAL ;
28332802
28342803 switch (feat ) {
28352804 case IOMMU_DEV_FEAT_IOPF :
2805+ if (!master -> iopf_enabled )
2806+ return - EINVAL ;
28362807 if (master -> sva_enabled )
28372808 return - EBUSY ;
28382809 master -> iopf_enabled = false;
28392810 return 0 ;
28402811 case IOMMU_DEV_FEAT_SVA :
2812+ if (!arm_smmu_master_sva_enabled (master ))
2813+ return - EINVAL ;
28412814 return arm_smmu_master_disable_sva (master );
28422815 default :
28432816 return - EINVAL ;
0 commit comments