drm/radeon: add pci config hard reset
authorAlex Deucher <alexander.deucher@amd.com>
Wed, 2 Oct 2013 17:01:36 +0000 (13:01 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 8 Jan 2014 23:42:22 +0000 (18:42 -0500)
This is used to hard reset the asic.  If a soft
reset is not able to reset things, a hard reset
can be used.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/radeon/radeon.h
drivers/gpu/drm/radeon/radeon_device.c

index 9dd6cc49b877f59c6a7436ecdbf3c45cc82b70e4..746c0c6c269bc0cbc501e6b20f49d0f4edabf10c 100644 (file)
@@ -140,6 +140,9 @@ extern int radeon_hard_reset;
 #define RADEON_VA_RESERVED_SIZE                        (8 << 20)
 #define RADEON_IB_VM_MAX_SIZE                  (64 << 10)
 
+/* hard reset data */
+#define RADEON_ASIC_RESET_DATA                  0x39d5e86b
+
 /* reset flags */
 #define RADEON_RESET_GFX                       (1 << 0)
 #define RADEON_RESET_COMPUTE                   (1 << 1)
@@ -2675,6 +2678,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
 /* Common functions */
 /* AGP */
 extern int radeon_gpu_reset(struct radeon_device *rdev);
+extern void radeon_pci_config_reset(struct radeon_device *rdev);
 extern void r600_set_bios_scratch_engine_hung(struct radeon_device *rdev, bool hung);
 extern void radeon_agp_disable(struct radeon_device *rdev);
 extern int radeon_modeset_init(struct radeon_device *rdev);
index 4d20e78b9b70dcba9e601b79b6a4b1aae8e91c6c..b012cbbc3ed5a9b892b433eff0ee5f3134a130de 100644 (file)
@@ -144,6 +144,11 @@ void radeon_program_register_sequence(struct radeon_device *rdev,
        }
 }
 
+void radeon_pci_config_reset(struct radeon_device *rdev)
+{
+       pci_write_config_dword(rdev->pdev, 0x7c, RADEON_ASIC_RESET_DATA);
+}
+
 /**
  * radeon_surface_init - Clear GPU surface registers.
  *