浏览代码

drm/radeon: add new INFO ioctl requests

Add requests to get the number of shader engines (SE) and
the number of SH per SE.  These are needed for geometry
and tesselation shaders in the 3D driver as well as setting
up PA_SC_RASTER_CONFIG on SI asics.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Alex Deucher 12 年之前
父节点
当前提交
2e1a7674f6
共有 2 个文件被更改,包括 20 次插入0 次删除
  1. 16 0
      drivers/gpu/drm/radeon/radeon_kms.c
  2. 4 0
      include/uapi/drm/radeon_drm.h

+ 16 - 0
drivers/gpu/drm/radeon/radeon_kms.c

@@ -361,6 +361,22 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
 			return -EINVAL;
 			return -EINVAL;
 		}
 		}
 		break;
 		break;
+	case RADEON_INFO_MAX_SE:
+		if (rdev->family >= CHIP_TAHITI)
+			value = rdev->config.si.max_shader_engines;
+		else if (rdev->family >= CHIP_CAYMAN)
+			value = rdev->config.cayman.max_shader_engines;
+		else if (rdev->family >= CHIP_CEDAR)
+			value = rdev->config.evergreen.num_ses;
+		else
+			value = 1;
+		break;
+	case RADEON_INFO_MAX_SH_PER_SE:
+		if (rdev->family >= CHIP_TAHITI)
+			value = rdev->config.si.max_sh_per_se;
+		else
+			return -EINVAL;
+		break;
 	default:
 	default:
 		DRM_DEBUG_KMS("Invalid request %d\n", info->request);
 		DRM_DEBUG_KMS("Invalid request %d\n", info->request);
 		return -EINVAL;
 		return -EINVAL;

+ 4 - 0
include/uapi/drm/radeon_drm.h

@@ -967,6 +967,10 @@ struct drm_radeon_cs {
 #define RADEON_INFO_MAX_PIPES		0x10
 #define RADEON_INFO_MAX_PIPES		0x10
 /* timestamp for GL_ARB_timer_query (OpenGL), returns the current GPU clock */
 /* timestamp for GL_ARB_timer_query (OpenGL), returns the current GPU clock */
 #define RADEON_INFO_TIMESTAMP		0x11
 #define RADEON_INFO_TIMESTAMP		0x11
+/* max shader engines (SE) - needed for geometry shaders, etc. */
+#define RADEON_INFO_MAX_SE		0x12
+/* max SH per SE */
+#define RADEON_INFO_MAX_SH_PER_SE	0x13
 
 
 struct drm_radeon_info {
 struct drm_radeon_info {
 	uint32_t		request;
 	uint32_t		request;