Re: [PATCH v2 1/2] drm/amdgpu: Detect if amdgpu in IOMMU direct map mode

2021-12-09 Thread Alex Deucher
On Thu, Dec 9, 2021 at 12:02 PM Philip Yang  wrote:
>
> If host and amdgpu IOMMU is not enabled or IOMMU is pass through mode,
> set adev->ram_is_direct_mapped flag which will be used to optimize
> memory usage for multi GPU mappings.
>
> Signed-off-by: Philip Yang 

Reviewed-by: Alex Deucher 

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu.h|  2 ++
>  drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 19 +++
>  2 files changed, 21 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index 54c882a6b433..0ec19c83a203 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -1097,6 +1097,8 @@ struct amdgpu_device {
>
> struct amdgpu_reset_control *reset_cntl;
> uint32_t
> ip_versions[MAX_HWIP][HWIP_MAX_INSTANCE];
> +
> +   boolram_is_direct_mapped;
>  };
>
>  static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> index ce9bdef185c0..3318d92de8eb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
> @@ -30,6 +30,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>
>  #include 
>  #include 
> @@ -3381,6 +3382,22 @@ static int 
> amdgpu_device_get_job_timeout_settings(struct amdgpu_device *adev)
> return ret;
>  }
>
> +/**
> + * amdgpu_device_check_iommu_direct_map - check if RAM direct mapped to GPU
> + *
> + * @adev: amdgpu_device pointer
> + *
> + * RAM direct mapped to GPU if IOMMU is not enabled or is pass through mode
> + */
> +static void amdgpu_device_check_iommu_direct_map(struct amdgpu_device *adev)
> +{
> +   struct iommu_domain *domain;
> +
> +   domain = iommu_get_domain_for_dev(adev->dev);
> +   if (!domain || domain->type == IOMMU_DOMAIN_IDENTITY)
> +   adev->ram_is_direct_mapped = true;
> +}
> +
>  static const struct attribute *amdgpu_dev_attributes[] = {
> _attr_product_name.attr,
> _attr_product_number.attr,
> @@ -3784,6 +3801,8 @@ int amdgpu_device_init(struct amdgpu_device *adev,
> queue_delayed_work(system_wq, _info.delayed_reset_work,
>msecs_to_jiffies(AMDGPU_RESUME_MS));
>
> +   amdgpu_device_check_iommu_direct_map(adev);
> +
> return 0;
>
>  release_ras_con:
> --
> 2.17.1
>


[PATCH v2 1/2] drm/amdgpu: Detect if amdgpu in IOMMU direct map mode

2021-12-09 Thread Philip Yang
If host and amdgpu IOMMU is not enabled or IOMMU is pass through mode,
set adev->ram_is_direct_mapped flag which will be used to optimize
memory usage for multi GPU mappings.

Signed-off-by: Philip Yang 
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h|  2 ++
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 19 +++
 2 files changed, 21 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 54c882a6b433..0ec19c83a203 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -1097,6 +1097,8 @@ struct amdgpu_device {
 
struct amdgpu_reset_control *reset_cntl;
uint32_t
ip_versions[MAX_HWIP][HWIP_MAX_INSTANCE];
+
+   boolram_is_direct_mapped;
 };
 
 static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index ce9bdef185c0..3318d92de8eb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -30,6 +30,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -3381,6 +3382,22 @@ static int amdgpu_device_get_job_timeout_settings(struct 
amdgpu_device *adev)
return ret;
 }
 
+/**
+ * amdgpu_device_check_iommu_direct_map - check if RAM direct mapped to GPU
+ *
+ * @adev: amdgpu_device pointer
+ *
+ * RAM direct mapped to GPU if IOMMU is not enabled or is pass through mode
+ */
+static void amdgpu_device_check_iommu_direct_map(struct amdgpu_device *adev)
+{
+   struct iommu_domain *domain;
+
+   domain = iommu_get_domain_for_dev(adev->dev);
+   if (!domain || domain->type == IOMMU_DOMAIN_IDENTITY)
+   adev->ram_is_direct_mapped = true;
+}
+
 static const struct attribute *amdgpu_dev_attributes[] = {
_attr_product_name.attr,
_attr_product_number.attr,
@@ -3784,6 +3801,8 @@ int amdgpu_device_init(struct amdgpu_device *adev,
queue_delayed_work(system_wq, _info.delayed_reset_work,
   msecs_to_jiffies(AMDGPU_RESUME_MS));
 
+   amdgpu_device_check_iommu_direct_map(adev);
+
return 0;
 
 release_ras_con:
-- 
2.17.1