Ping On Wed, Apr 29, 2015 at 7:40 PM, Marek Olšák <maraeo@xxxxxxxxx> wrote: > From: Marek Olšák <marek.olsak@xxxxxxx> > > Userspace will be able to tell whether a GPU reset occured by comparing > an old referece value of the counter with a new value. > > Signed-off-by: Marek Olšák <marek.olsak@xxxxxxx> > --- > drivers/gpu/drm/radeon/radeon.h | 1 + > drivers/gpu/drm/radeon/radeon_device.c | 2 ++ > drivers/gpu/drm/radeon/radeon_drv.c | 3 ++- > drivers/gpu/drm/radeon/radeon_kms.c | 3 +++ > include/uapi/drm/radeon_drm.h | 1 + > 5 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index d2abe48..c2b345a 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -2436,6 +2436,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; > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c > index b7ca4c5..13e207e 100644 > --- a/drivers/gpu/drm/radeon/radeon_device.c > +++ b/drivers/gpu/drm/radeon/radeon_device.c > @@ -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); > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c > index 7d620d4..5751446 100644 > --- a/drivers/gpu/drm/radeon/radeon_drv.c > +++ b/drivers/gpu/drm/radeon/radeon_drv.c > @@ -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); > diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c > index 7b2a733..9632e88 100644 > --- a/drivers/gpu/drm/radeon/radeon_kms.c > +++ b/drivers/gpu/drm/radeon/radeon_kms.c > @@ -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; > diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h > index 871e73f..573cb86 100644 > --- a/include/uapi/drm/radeon_drm.h > +++ b/include/uapi/drm/radeon_drm.h > @@ -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; > -- > 2.1.0 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel