This seems reasonable. Hope it works out for umr. Reviewed-by: Luben Tuikov <luben.tuikov@xxxxxxx> Regards, Luben On 2022-01-26 06:59, Christian König wrote: > umr needs that to correctly calculate the VRAM base address > inside the MC address space. > > Only compile tested! > > Signed-off-by: Christian König <christian.koenig@xxxxxxx> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 34 ++++++++++++++++++++++++ > 1 file changed, 34 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c > index 68509f619ba3..21a5d07a1abf 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c > @@ -252,6 +252,26 @@ static ssize_t amdgpu_xgmi_show_device_id(struct device *dev, > > } > > +static ssize_t amdgpu_xgmi_show_node_segment_size(struct device *dev, > + struct device_attribute *attr, > + char *buf) > +{ > + struct drm_device *ddev = dev_get_drvdata(dev); > + struct amdgpu_device *adev = drm_to_adev(ddev); > + > + return sysfs_emit(buf, "%llu\n", adev->gmc.xgmi.node_segment_size); > +} > + > +static ssize_t amdgpu_xgmi_show_physical_node_id(struct device *dev, > + struct device_attribute *attr, > + char *buf) > +{ > + struct drm_device *ddev = dev_get_drvdata(dev); > + struct amdgpu_device *adev = drm_to_adev(ddev); > + > + return sysfs_emit(buf, "%u\n", adev->gmc.xgmi.physical_node_id); > +} > + > #define AMDGPU_XGMI_SET_FICAA(o) ((o) | 0x456801) > static ssize_t amdgpu_xgmi_show_error(struct device *dev, > struct device_attribute *attr, > @@ -287,6 +307,10 @@ static ssize_t amdgpu_xgmi_show_error(struct device *dev, > > > static DEVICE_ATTR(xgmi_device_id, S_IRUGO, amdgpu_xgmi_show_device_id, NULL); > +static DEVICE_ATTR(xgmi_node_segment_size, S_IRUGO, > + amdgpu_xgmi_show_node_segment_size, NULL); > +static DEVICE_ATTR(xgmi_physical_node_id, S_IRUGO, > + amdgpu_xgmi_show_physical_node_id, NULL); > static DEVICE_ATTR(xgmi_error, S_IRUGO, amdgpu_xgmi_show_error, NULL); > > static void amdgpu_xgmi_sysfs_rem_dev_info(struct amdgpu_device *adev, > @@ -295,6 +319,8 @@ static void amdgpu_xgmi_sysfs_rem_dev_info(struct amdgpu_device *adev, > char node[10]; > > device_remove_file(adev->dev, &dev_attr_xgmi_device_id); > + device_remove_file(adev->dev, &dev_attr_xgmi_node_segment_size); > + device_remove_file(adev->dev, &dev_attr_xgmi_physical_node_id); > device_remove_file(adev->dev, &dev_attr_xgmi_error); > > if (hive->kobj.parent != (&adev->dev->kobj)) > @@ -318,6 +344,14 @@ static int amdgpu_xgmi_sysfs_add_dev_info(struct amdgpu_device *adev, > if (r) > goto error; > > + r = device_create_file(adev->dev, &dev_attr_xgmi_node_segment_size); > + if (r) > + goto error; > + > + r = device_create_file(adev->dev, &dev_attr_xgmi_physical_node_id); > + if (r) > + goto error; > + > /* Create sysfs link to hive info folder on the first device */ > if (hive->kobj.parent != (&adev->dev->kobj)) { > r = sysfs_create_link(&adev->dev->kobj, &hive->kobj, Regards, -- Luben