On Thu, Dec 9, 2021 at 12:02 PM Philip Yang <Philip.Yang@xxxxxxx> 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 <Philip.Yang@xxxxxxx> Reviewed-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > 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]; > + > + bool ram_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 <linux/module.h> > #include <linux/console.h> > #include <linux/slab.h> > +#include <linux/iommu.h> > > #include <drm/drm_atomic_helper.h> > #include <drm/drm_probe_helper.h> > @@ -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[] = { > &dev_attr_product_name.attr, > &dev_attr_product_number.attr, > @@ -3784,6 +3801,8 @@ int amdgpu_device_init(struct amdgpu_device *adev, > queue_delayed_work(system_wq, &mgpu_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 >