mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	drm/amdgpu: Add API to get numa information of XCC
Add interface to get numa information of ACPI XCC object. The interface uses logical id to identify an XCC. Signed-off-by: Lijo Lazar <lijo.lazar@amd.com> Reviewed-by: Le Ma <le.ma@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
		
							parent
							
								
									1cc823011a
								
							
						
					
					
						commit
						fa0497c34e
					
				
					 2 changed files with 40 additions and 6 deletions
				
			
		| 
						 | 
					@ -1383,6 +1383,12 @@ struct amdgpu_afmt_acr amdgpu_afmt_acr(uint32_t clock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* amdgpu_acpi.c */
 | 
					/* amdgpu_acpi.c */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct amdgpu_numa_info {
 | 
				
			||||||
 | 
						uint64_t size;
 | 
				
			||||||
 | 
						int pxm;
 | 
				
			||||||
 | 
						int nid;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ATCS Device/Driver State */
 | 
					/* ATCS Device/Driver State */
 | 
				
			||||||
#define AMDGPU_ATCS_PSC_DEV_STATE_D0		0
 | 
					#define AMDGPU_ATCS_PSC_DEV_STATE_D0		0
 | 
				
			||||||
#define AMDGPU_ATCS_PSC_DEV_STATE_D3_HOT	3
 | 
					#define AMDGPU_ATCS_PSC_DEV_STATE_D3_HOT	3
 | 
				
			||||||
| 
						 | 
					@ -1402,6 +1408,8 @@ int amdgpu_acpi_smart_shift_update(struct drm_device *dev, enum amdgpu_ss ss_sta
 | 
				
			||||||
int amdgpu_acpi_pcie_notify_device_ready(struct amdgpu_device *adev);
 | 
					int amdgpu_acpi_pcie_notify_device_ready(struct amdgpu_device *adev);
 | 
				
			||||||
int amdgpu_acpi_get_tmr_info(struct amdgpu_device *adev, u64 *tmr_offset,
 | 
					int amdgpu_acpi_get_tmr_info(struct amdgpu_device *adev, u64 *tmr_offset,
 | 
				
			||||||
			     u64 *tmr_size);
 | 
								     u64 *tmr_size);
 | 
				
			||||||
 | 
					int amdgpu_acpi_get_mem_info(struct amdgpu_device *adev, int xcc_id,
 | 
				
			||||||
 | 
								     struct amdgpu_numa_info *numa_info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void amdgpu_acpi_get_backlight_caps(struct amdgpu_dm_backlight_caps *caps);
 | 
					void amdgpu_acpi_get_backlight_caps(struct amdgpu_dm_backlight_caps *caps);
 | 
				
			||||||
bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev);
 | 
					bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev);
 | 
				
			||||||
| 
						 | 
					@ -1414,6 +1422,12 @@ static inline int amdgpu_acpi_get_tmr_info(struct amdgpu_device *adev,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return -EINVAL;
 | 
						return -EINVAL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					static inline int amdgpu_acpi_get_mem_info(struct amdgpu_device *adev,
 | 
				
			||||||
 | 
										   int xcc_id,
 | 
				
			||||||
 | 
										   struct amdgpu_numa_info *numa_info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return -EINVAL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
static inline void amdgpu_acpi_fini(struct amdgpu_device *adev) { }
 | 
					static inline void amdgpu_acpi_fini(struct amdgpu_device *adev) { }
 | 
				
			||||||
static inline bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev) { return false; }
 | 
					static inline bool amdgpu_acpi_should_gpu_reset(struct amdgpu_device *adev) { return false; }
 | 
				
			||||||
static inline void amdgpu_acpi_detect(void) { }
 | 
					static inline void amdgpu_acpi_detect(void) { }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,12 +54,6 @@ static const guid_t amd_xcc_dsm_guid = GUID_INIT(0x8267f5d5, 0xa556, 0x44f2,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AMD_XCC_MAX_HID 24
 | 
					#define AMD_XCC_MAX_HID 24
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct amdgpu_numa_info {
 | 
					 | 
				
			||||||
	uint64_t size;
 | 
					 | 
				
			||||||
	int pxm;
 | 
					 | 
				
			||||||
	int nid;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct xarray numa_info_xa;
 | 
					struct xarray numa_info_xa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Encapsulates the XCD acpi object information */
 | 
					/* Encapsulates the XCD acpi object information */
 | 
				
			||||||
| 
						 | 
					@ -1156,6 +1150,32 @@ int amdgpu_acpi_get_tmr_info(struct amdgpu_device *adev, u64 *tmr_offset,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int amdgpu_acpi_get_mem_info(struct amdgpu_device *adev, int xcc_id,
 | 
				
			||||||
 | 
								     struct amdgpu_numa_info *numa_info)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct amdgpu_acpi_dev_info *dev_info;
 | 
				
			||||||
 | 
						struct amdgpu_acpi_xcc_info *xcc_info;
 | 
				
			||||||
 | 
						u16 bdf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!numa_info)
 | 
				
			||||||
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						bdf = (adev->pdev->bus->number << 8) | adev->pdev->devfn;
 | 
				
			||||||
 | 
						dev_info = amdgpu_acpi_get_dev(bdf);
 | 
				
			||||||
 | 
						if (!dev_info)
 | 
				
			||||||
 | 
							return -ENOENT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						list_for_each_entry(xcc_info, &dev_info->xcc_list, list) {
 | 
				
			||||||
 | 
							if (xcc_info->phy_id == xcc_id) {
 | 
				
			||||||
 | 
								memcpy(numa_info, xcc_info->numa_info,
 | 
				
			||||||
 | 
								       sizeof(*numa_info));
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return -ENOENT;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * amdgpu_acpi_event - handle notify events
 | 
					 * amdgpu_acpi_event - handle notify events
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue