Thomas Zimmermann 76b1b6
From 815fb4c9d7da862a47c9d2a9765a4759826c5783 Mon Sep 17 00:00:00 2001
Thomas Zimmermann 76b1b6
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
Thomas Zimmermann 76b1b6
Date: Tue, 24 Sep 2019 17:53:25 -0400
Thomas Zimmermann 76b1b6
Subject: drm/amdgpu: return tcc_disabled_mask to userspace
Thomas Zimmermann 76b1b6
MIME-Version: 1.0
Thomas Zimmermann 76b1b6
Content-Type: text/plain; charset=UTF-8
Thomas Zimmermann 76b1b6
Content-Transfer-Encoding: 8bit
Thomas Zimmermann 76b1b6
Git-commit: 815fb4c9d7da862a47c9d2a9765a4759826c5783
Thomas Zimmermann 76b1b6
Patch-mainline: v5.4-rc2
Thomas Zimmermann 76b1b6
References: bsc#1152472
Thomas Zimmermann 76b1b6
Thomas Zimmermann 76b1b6
UMDs need this for correct programming of harvested chips.
Thomas Zimmermann 76b1b6
Thomas Zimmermann 76b1b6
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
Thomas Zimmermann 76b1b6
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Thomas Zimmermann 76b1b6
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Thomas Zimmermann 76b1b6
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Thomas Zimmermann 76b1b6
---
Thomas Zimmermann 76b1b6
 drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c |  3 ++-
Thomas Zimmermann 76b1b6
 drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h |  1 +
Thomas Zimmermann 76b1b6
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c |  2 ++
Thomas Zimmermann 76b1b6
 drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c  | 12 ++++++++++++
Thomas Zimmermann 76b1b6
 include/uapi/drm/amdgpu_drm.h           |  2 ++
Thomas Zimmermann 76b1b6
 5 files changed, 19 insertions(+), 1 deletion(-)
Thomas Zimmermann 76b1b6
Thomas Zimmermann 76b1b6
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
Thomas Zimmermann 76b1b6
index 264677ab248a..6f8aaf655a9f 100644
Thomas Zimmermann 76b1b6
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
Thomas Zimmermann 76b1b6
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
Thomas Zimmermann 76b1b6
@@ -81,9 +81,10 @@
Thomas Zimmermann 76b1b6
  * - 3.32.0 - Add syncobj timeline support to AMDGPU_CS.
Thomas Zimmermann 76b1b6
  * - 3.33.0 - Fixes for GDS ENOMEM failures in AMDGPU_CS.
Thomas Zimmermann 76b1b6
  * - 3.34.0 - Non-DC can flip correctly between buffers with different pitches
Thomas Zimmermann 76b1b6
+ * - 3.35.0 - Add drm_amdgpu_info_device::tcc_disabled_mask
Thomas Zimmermann 76b1b6
  */
Thomas Zimmermann 76b1b6
 #define KMS_DRIVER_MAJOR	3
Thomas Zimmermann 76b1b6
-#define KMS_DRIVER_MINOR	34
Thomas Zimmermann 76b1b6
+#define KMS_DRIVER_MINOR	35
Thomas Zimmermann 76b1b6
 #define KMS_DRIVER_PATCHLEVEL	0
Thomas Zimmermann 76b1b6
 
Thomas Zimmermann 76b1b6
 #define AMDGPU_MAX_TIMEOUT_PARAM_LENTH	256
Thomas Zimmermann 76b1b6
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
Thomas Zimmermann 76b1b6
index 554a59b3c4a6..6ee4021910e2 100644
Thomas Zimmermann 76b1b6
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
Thomas Zimmermann 76b1b6
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.h
Thomas Zimmermann 76b1b6
@@ -165,6 +165,7 @@ struct amdgpu_gfx_config {
Thomas Zimmermann 76b1b6
 	uint32_t num_sc_per_sh;
Thomas Zimmermann 76b1b6
 	uint32_t num_packer_per_sc;
Thomas Zimmermann 76b1b6
 	uint32_t pa_sc_tile_steering_override;
Thomas Zimmermann 76b1b6
+	uint64_t tcc_disabled_mask;
Thomas Zimmermann 76b1b6
 };
Thomas Zimmermann 76b1b6
 
Thomas Zimmermann 76b1b6
 struct amdgpu_cu_info {
Thomas Zimmermann 76b1b6
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
Thomas Zimmermann 76b1b6
index f6147528be64..f2c097983f48 100644
Thomas Zimmermann 76b1b6
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
Thomas Zimmermann 76b1b6
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
Thomas Zimmermann 76b1b6
@@ -787,6 +787,8 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
Thomas Zimmermann 76b1b6
 			dev_info.pa_sc_tile_steering_override =
Thomas Zimmermann 76b1b6
 				adev->gfx.config.pa_sc_tile_steering_override;
Thomas Zimmermann 76b1b6
 
Thomas Zimmermann 76b1b6
+		dev_info.tcc_disabled_mask = adev->gfx.config.tcc_disabled_mask;
Thomas Zimmermann 76b1b6
+
Thomas Zimmermann 76b1b6
 		return copy_to_user(out, &dev_info,
Thomas Zimmermann 76b1b6
 				    min((size_t)size, sizeof(dev_info))) ? -EFAULT : 0;
Thomas Zimmermann 76b1b6
 	}
Thomas Zimmermann 76b1b6
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
Thomas Zimmermann 76b1b6
index 638c821611ab..957811b73672 100644
Thomas Zimmermann 76b1b6
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
Thomas Zimmermann 76b1b6
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c
Thomas Zimmermann 76b1b6
@@ -1691,6 +1691,17 @@ static void gfx_v10_0_tcp_harvest(struct amdgpu_device *adev)
Thomas Zimmermann 76b1b6
 	}
Thomas Zimmermann 76b1b6
 }
Thomas Zimmermann 76b1b6
 
Thomas Zimmermann 76b1b6
+static void gfx_v10_0_get_tcc_info(struct amdgpu_device *adev)
Thomas Zimmermann 76b1b6
+{
Thomas Zimmermann 76b1b6
+	/* TCCs are global (not instanced). */
Thomas Zimmermann 76b1b6
+	uint32_t tcc_disable = RREG32_SOC15(GC, 0, mmCGTS_TCC_DISABLE) |
Thomas Zimmermann 76b1b6
+			       RREG32_SOC15(GC, 0, mmCGTS_USER_TCC_DISABLE);
Thomas Zimmermann 76b1b6
+
Thomas Zimmermann 76b1b6
+	adev->gfx.config.tcc_disabled_mask =
Thomas Zimmermann 76b1b6
+		REG_GET_FIELD(tcc_disable, CGTS_TCC_DISABLE, TCC_DISABLE) |
Thomas Zimmermann 76b1b6
+		(REG_GET_FIELD(tcc_disable, CGTS_TCC_DISABLE, HI_TCC_DISABLE) << 16);
Thomas Zimmermann 76b1b6
+}
Thomas Zimmermann 76b1b6
+
Thomas Zimmermann 76b1b6
 static void gfx_v10_0_constants_init(struct amdgpu_device *adev)
Thomas Zimmermann 76b1b6
 {
Thomas Zimmermann 76b1b6
 	u32 tmp;
Thomas Zimmermann 76b1b6
@@ -1702,6 +1713,7 @@ static void gfx_v10_0_constants_init(struct amdgpu_device *adev)
Thomas Zimmermann 76b1b6
 
Thomas Zimmermann 76b1b6
 	gfx_v10_0_setup_rb(adev);
Thomas Zimmermann 76b1b6
 	gfx_v10_0_get_cu_info(adev, &adev->gfx.cu_info);
Thomas Zimmermann 76b1b6
+	gfx_v10_0_get_tcc_info(adev);
Thomas Zimmermann 76b1b6
 	adev->gfx.config.pa_sc_tile_steering_override =
Thomas Zimmermann 76b1b6
 		gfx_v10_0_init_pa_sc_tile_steering_override(adev);
Thomas Zimmermann 76b1b6
 
Thomas Zimmermann 76b1b6
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
Thomas Zimmermann 76b1b6
index c99b4f2482c6..4fe35d600ab8 100644
Thomas Zimmermann 76b1b6
--- a/include/uapi/drm/amdgpu_drm.h
Thomas Zimmermann 76b1b6
+++ b/include/uapi/drm/amdgpu_drm.h
Thomas Zimmermann 76b1b6
@@ -1003,6 +1003,8 @@ struct drm_amdgpu_info_device {
Thomas Zimmermann 76b1b6
 	__u64 high_va_max;
Thomas Zimmermann 76b1b6
 	/* gfx10 pa_sc_tile_steering_override */
Thomas Zimmermann 76b1b6
 	__u32 pa_sc_tile_steering_override;
Thomas Zimmermann 76b1b6
+	/* disabled TCCs */
Thomas Zimmermann 76b1b6
+	__u64 tcc_disabled_mask;
Thomas Zimmermann 76b1b6
 };
Thomas Zimmermann 76b1b6
 
Thomas Zimmermann 76b1b6
 struct drm_amdgpu_info_hw_ip {
Thomas Zimmermann 76b1b6
-- 
Thomas Zimmermann 76b1b6
2.28.0
Thomas Zimmermann 76b1b6