Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72b9076b authored by Marek Olšák's avatar Marek Olšák Committed by Alex Deucher
Browse files

drm/radeon: add a GPU reset counter queryable by userspace



Userspace will be able to tell whether a GPU reset occured by comparing
an old referece value of the counter with a new value.

Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarMarek Olšák <marek.olsak@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c6e7e4bb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2435,6 +2435,7 @@ struct radeon_device {
	atomic64_t			vram_usage;
	atomic64_t			gtt_usage;
	atomic64_t			num_bytes_moved;
	atomic_t			gpu_reset_counter;
	/* ACPI interface */
	struct radeon_atif		atif;
	struct radeon_atcs		atcs;
+2 −0
Original line number Diff line number Diff line
@@ -1725,6 +1725,8 @@ int radeon_gpu_reset(struct radeon_device *rdev)
		return 0;
	}

	atomic_inc(&rdev->gpu_reset_counter);

	radeon_save_bios_scratch_regs(rdev);
	/* block TTM */
	resched = ttm_bo_lock_delayed_workqueue(&rdev->mman.bdev);
+2 −1
Original line number Diff line number Diff line
@@ -90,9 +90,10 @@
 *            CS to GPU on >= r600
 *   2.41.0 - evergreen/cayman: Add SET_BASE/DRAW_INDIRECT command parsing support
 *   2.42.0 - Add VCE/VUI (Video Usability Information) support
 *   2.43.0 - RADEON_INFO_GPU_RESET_COUNTER
 */
#define KMS_DRIVER_MAJOR	2
#define KMS_DRIVER_MINOR	42
#define KMS_DRIVER_MINOR	43
#define KMS_DRIVER_PATCHLEVEL	0
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
int radeon_driver_unload_kms(struct drm_device *dev);
+3 −0
Original line number Diff line number Diff line
@@ -576,6 +576,9 @@ static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file
		if (radeon_get_allowed_info_register(rdev, *value, value))
			return -EINVAL;
		break;
	case RADEON_INFO_GPU_RESET_COUNTER:
		*value = atomic_read(&rdev->gpu_reset_counter);
		break;
	default:
		DRM_DEBUG_KMS("Invalid request %d\n", info->request);
		return -EINVAL;
+1 −0
Original line number Diff line number Diff line
@@ -1038,6 +1038,7 @@ struct drm_radeon_cs {
#define RADEON_INFO_CURRENT_GPU_SCLK	0x22
#define RADEON_INFO_CURRENT_GPU_MCLK	0x23
#define RADEON_INFO_READ_REG		0x24
#define RADEON_INFO_GPU_RESET_COUNTER	0x25

struct drm_radeon_info {
	uint32_t		request;