diff options
| author | Lijo Lazar <lijo.lazar@amd.com> | 2023-01-25 20:04:52 +0530 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2023-06-09 09:56:48 -0400 | 
| commit | 4bdca2057933ef08a2ca7f44e30a8894ff78c472 (patch) | |
| tree | e912c75e92fcddf37de41396a41334262c06179a /drivers/gpu/drm/amd | |
| parent | db3b5cb64a9ca301d14ed027e470834316720e42 (diff) | |
drm/amdgpu: Add utility functions for xcp
Add utility functions to get details of xcp and iterate through
available xcps.
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>
Diffstat (limited to 'drivers/gpu/drm/amd')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h | 31 | 
2 files changed, 43 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c index e8aa4d6c6b62..337d558a3145 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.c @@ -256,3 +256,15 @@ int amdgpu_xcp_get_partition(struct amdgpu_xcp_mgr *xcp_mgr,  	return id_mask;  } + +int amdgpu_xcp_get_inst_details(struct amdgpu_xcp *xcp, +				enum AMDGPU_XCP_IP_BLOCK ip, +				uint32_t *inst_mask) +{ +	if (!xcp->valid || !inst_mask || !(xcp->ip[ip].valid)) +		return -EINVAL; + +	*inst_mask = xcp->ip[ip].inst_mask; + +	return 0; +} diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h index 1d3dc7d68f54..45d590d7fd95 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.h @@ -108,4 +108,35 @@ int amdgpu_xcp_switch_partition_mode(struct amdgpu_xcp_mgr *xcp_mgr, int mode);  int amdgpu_xcp_get_partition(struct amdgpu_xcp_mgr *xcp_mgr,  			     enum AMDGPU_XCP_IP_BLOCK ip, int instance); +int amdgpu_xcp_get_inst_details(struct amdgpu_xcp *xcp, +				enum AMDGPU_XCP_IP_BLOCK ip, +				uint32_t *inst_mask); + +static inline int amdgpu_xcp_get_num_xcp(struct amdgpu_xcp_mgr *xcp_mgr) +{ +	if (!xcp_mgr) +		return 1; +	else +		return xcp_mgr->num_xcps; +} + +static inline struct amdgpu_xcp * +amdgpu_get_next_xcp(struct amdgpu_xcp_mgr *xcp_mgr, int *from) +{ +	if (!xcp_mgr) +		return NULL; + +	while (*from < MAX_XCP) { +		if (xcp_mgr->xcp[*from].valid) +			return &xcp_mgr->xcp[*from]; +		++(*from); +	} + +	return NULL; +} + +#define for_each_xcp(xcp_mgr, xcp, i)                            \ +	for (i = 0, xcp = amdgpu_get_next_xcp(xcp_mgr, &i); xcp; \ +	     xcp = amdgpu_get_next_xcp(xcp_mgr, &i)) +  #endif | 
