drm/radeon/kms/evergreen: set accel_enabled
This is needed to enable accel in the ddx. However, due to a bug in older versions of the ddx, it relies on accel being disabled in order to load properly on evergreen chips. To maintain compatility, we add a new get accel param and call that from the ddx. The old one always returns false for evergreen cards. [this fixes a regression with older userspaces on newer kernels]. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
committed by
Dave Airlie
parent
9b8eb4d147
commit
148a03bc0b
@@ -2153,7 +2153,7 @@ int evergreen_init(struct radeon_device *rdev)
|
|||||||
if (r)
|
if (r)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
rdev->accel_working = false;
|
rdev->accel_working = true;
|
||||||
r = evergreen_startup(rdev);
|
r = evergreen_startup(rdev);
|
||||||
if (r) {
|
if (r) {
|
||||||
dev_err(rdev->dev, "disabling GPU acceleration\n");
|
dev_err(rdev->dev, "disabling GPU acceleration\n");
|
||||||
|
@@ -45,9 +45,10 @@
|
|||||||
* - 2.2.0 - add r6xx/r7xx const buffer support
|
* - 2.2.0 - add r6xx/r7xx const buffer support
|
||||||
* - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs
|
* - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs
|
||||||
* - 2.4.0 - add crtc id query
|
* - 2.4.0 - add crtc id query
|
||||||
|
* - 2.5.0 - add get accel 2 to work around ddx breakage for evergreen
|
||||||
*/
|
*/
|
||||||
#define KMS_DRIVER_MAJOR 2
|
#define KMS_DRIVER_MAJOR 2
|
||||||
#define KMS_DRIVER_MINOR 4
|
#define KMS_DRIVER_MINOR 5
|
||||||
#define KMS_DRIVER_PATCHLEVEL 0
|
#define KMS_DRIVER_PATCHLEVEL 0
|
||||||
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
|
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
|
||||||
int radeon_driver_unload_kms(struct drm_device *dev);
|
int radeon_driver_unload_kms(struct drm_device *dev);
|
||||||
|
@@ -118,7 +118,11 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
|
|||||||
value = rdev->num_z_pipes;
|
value = rdev->num_z_pipes;
|
||||||
break;
|
break;
|
||||||
case RADEON_INFO_ACCEL_WORKING:
|
case RADEON_INFO_ACCEL_WORKING:
|
||||||
value = rdev->accel_working;
|
/* xf86-video-ati 6.13.0 relies on this being false for evergreen */
|
||||||
|
if ((rdev->family >= CHIP_CEDAR) && (rdev->family <= CHIP_HEMLOCK))
|
||||||
|
value = false;
|
||||||
|
else
|
||||||
|
value = rdev->accel_working;
|
||||||
break;
|
break;
|
||||||
case RADEON_INFO_CRTC_FROM_ID:
|
case RADEON_INFO_CRTC_FROM_ID:
|
||||||
for (i = 0, found = 0; i < rdev->num_crtc; i++) {
|
for (i = 0, found = 0; i < rdev->num_crtc; i++) {
|
||||||
@@ -134,6 +138,9 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case RADEON_INFO_ACCEL_WORKING2:
|
||||||
|
value = rdev->accel_working;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
DRM_DEBUG("Invalid request %d\n", info->request);
|
DRM_DEBUG("Invalid request %d\n", info->request);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@@ -903,6 +903,7 @@ struct drm_radeon_cs {
|
|||||||
#define RADEON_INFO_NUM_Z_PIPES 0x02
|
#define RADEON_INFO_NUM_Z_PIPES 0x02
|
||||||
#define RADEON_INFO_ACCEL_WORKING 0x03
|
#define RADEON_INFO_ACCEL_WORKING 0x03
|
||||||
#define RADEON_INFO_CRTC_FROM_ID 0x04
|
#define RADEON_INFO_CRTC_FROM_ID 0x04
|
||||||
|
#define RADEON_INFO_ACCEL_WORKING2 0x05
|
||||||
|
|
||||||
struct drm_radeon_info {
|
struct drm_radeon_info {
|
||||||
uint32_t request;
|
uint32_t request;
|
||||||
|
Reference in New Issue
Block a user