diff options
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/radeon/r420.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 33 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 44 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_kms.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 33 |
6 files changed, 60 insertions, 56 deletions
diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c index 33a25a4377b8..2142a4781970 100644 --- a/drivers/gpu/drm/radeon/r420.c +++ b/drivers/gpu/drm/radeon/r420.c | |||
@@ -329,6 +329,7 @@ int r420_init(struct radeon_device *rdev) | |||
329 | return r; | 329 | return r; |
330 | } | 330 | } |
331 | r300_set_reg_safe(rdev); | 331 | r300_set_reg_safe(rdev); |
332 | rdev->accel_working = true; | ||
332 | r = r420_resume(rdev); | 333 | r = r420_resume(rdev); |
333 | if (r) { | 334 | if (r) { |
334 | /* Somethings want wront with the accel init stop accel */ | 335 | /* Somethings want wront with the accel init stop accel */ |
@@ -343,6 +344,7 @@ int r420_init(struct radeon_device *rdev) | |||
343 | r100_pci_gart_fini(rdev); | 344 | r100_pci_gart_fini(rdev); |
344 | radeon_agp_fini(rdev); | 345 | radeon_agp_fini(rdev); |
345 | radeon_irq_kms_fini(rdev); | 346 | radeon_irq_kms_fini(rdev); |
347 | rdev->accel_working = false; | ||
346 | } | 348 | } |
347 | return 0; | 349 | return 0; |
348 | } | 350 | } |
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 65699e9f2025..af430d719e7f 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -1573,6 +1573,7 @@ int r600_init(struct radeon_device *rdev) | |||
1573 | if (r) | 1573 | if (r) |
1574 | return r; | 1574 | return r; |
1575 | 1575 | ||
1576 | rdev->accel_working = true; | ||
1576 | r = r600_resume(rdev); | 1577 | r = r600_resume(rdev); |
1577 | if (r) { | 1578 | if (r) { |
1578 | if (rdev->flags & RADEON_IS_AGP) { | 1579 | if (rdev->flags & RADEON_IS_AGP) { |
@@ -1581,22 +1582,24 @@ int r600_init(struct radeon_device *rdev) | |||
1581 | rdev->flags &= ~RADEON_IS_AGP; | 1582 | rdev->flags &= ~RADEON_IS_AGP; |
1582 | return r600_init(rdev); | 1583 | return r600_init(rdev); |
1583 | } | 1584 | } |
1584 | return r; | 1585 | rdev->accel_working = false; |
1585 | } | ||
1586 | r = radeon_ib_pool_init(rdev); | ||
1587 | if (r) { | ||
1588 | DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); | ||
1589 | return r; | ||
1590 | } | 1586 | } |
1591 | r = r600_blit_init(rdev); | 1587 | if (rdev->accel_working) { |
1592 | if (r) { | 1588 | r = radeon_ib_pool_init(rdev); |
1593 | DRM_ERROR("radeon: failled blitter (%d).\n", r); | 1589 | if (r) { |
1594 | return r; | 1590 | DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); |
1595 | } | 1591 | rdev->accel_working = false; |
1596 | r = radeon_ib_test(rdev); | 1592 | } |
1597 | if (r) { | 1593 | r = r600_blit_init(rdev); |
1598 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | 1594 | if (r) { |
1599 | return r; | 1595 | DRM_ERROR("radeon: failled blitter (%d).\n", r); |
1596 | rdev->accel_working = false; | ||
1597 | } | ||
1598 | r = radeon_ib_test(rdev); | ||
1599 | if (r) { | ||
1600 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | ||
1601 | rdev->accel_working = false; | ||
1602 | } | ||
1600 | } | 1603 | } |
1601 | return 0; | 1604 | return 0; |
1602 | } | 1605 | } |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 5bfc05612ac2..d7c4efd08928 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -793,6 +793,7 @@ struct radeon_device { | |||
793 | bool suspend; | 793 | bool suspend; |
794 | bool need_dma32; | 794 | bool need_dma32; |
795 | bool new_init_path; | 795 | bool new_init_path; |
796 | bool accel_working; | ||
796 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; | 797 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; |
797 | const struct firmware *me_fw; /* all family ME firmware */ | 798 | const struct firmware *me_fw; /* all family ME firmware */ |
798 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ | 799 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index db5ae73d6289..0b5014c2ae7f 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -504,6 +504,7 @@ int radeon_device_init(struct radeon_device *rdev, | |||
504 | rdev->usec_timeout = RADEON_MAX_USEC_TIMEOUT; | 504 | rdev->usec_timeout = RADEON_MAX_USEC_TIMEOUT; |
505 | rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; | 505 | rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; |
506 | rdev->gpu_lockup = false; | 506 | rdev->gpu_lockup = false; |
507 | rdev->accel_working = false; | ||
507 | /* mutex initialization are all done here so we | 508 | /* mutex initialization are all done here so we |
508 | * can recall function without having locking issues */ | 509 | * can recall function without having locking issues */ |
509 | mutex_init(&rdev->cs_mutex); | 510 | mutex_init(&rdev->cs_mutex); |
@@ -649,35 +650,26 @@ int radeon_device_init(struct radeon_device *rdev, | |||
649 | /* Initialize GART (initialize after TTM so we can allocate | 650 | /* Initialize GART (initialize after TTM so we can allocate |
650 | * memory through TTM but finalize after TTM) */ | 651 | * memory through TTM but finalize after TTM) */ |
651 | r = radeon_gart_enable(rdev); | 652 | r = radeon_gart_enable(rdev); |
652 | if (!r) { | 653 | if (r) |
654 | return 0; | ||
653 | r = radeon_gem_init(rdev); | 655 | r = radeon_gem_init(rdev); |
654 | } | 656 | if (r) |
657 | return 0; | ||
655 | 658 | ||
656 | /* 1M ring buffer */ | 659 | /* 1M ring buffer */ |
657 | if (!r) { | 660 | r = radeon_cp_init(rdev, 1024 * 1024); |
658 | r = radeon_cp_init(rdev, 1024 * 1024); | 661 | if (r) |
659 | } | 662 | return 0; |
660 | if (!r) { | 663 | r = radeon_wb_init(rdev); |
661 | r = radeon_wb_init(rdev); | 664 | if (r) |
662 | if (r) { | 665 | DRM_ERROR("radeon: failled initializing WB (%d).\n", r); |
663 | DRM_ERROR("radeon: failled initializing WB (%d).\n", r); | 666 | r = radeon_ib_pool_init(rdev); |
664 | return r; | 667 | if (r) |
665 | } | 668 | return 0; |
666 | } | 669 | r = radeon_ib_test(rdev); |
667 | if (!r) { | 670 | if (r) |
668 | r = radeon_ib_pool_init(rdev); | 671 | return 0; |
669 | if (r) { | 672 | rdev->accel_working = true; |
670 | DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); | ||
671 | return r; | ||
672 | } | ||
673 | } | ||
674 | if (!r) { | ||
675 | r = radeon_ib_test(rdev); | ||
676 | if (r) { | ||
677 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | ||
678 | return r; | ||
679 | } | ||
680 | } | ||
681 | } | 673 | } |
682 | DRM_INFO("radeon: kernel modesetting successfully initialized.\n"); | 674 | DRM_INFO("radeon: kernel modesetting successfully initialized.\n"); |
683 | if (radeon_testing) { | 675 | if (radeon_testing) { |
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index ac8505fe2ca7..709bd892b3a9 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
@@ -112,6 +112,9 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) | |||
112 | case RADEON_INFO_NUM_Z_PIPES: | 112 | case RADEON_INFO_NUM_Z_PIPES: |
113 | value = rdev->num_z_pipes; | 113 | value = rdev->num_z_pipes; |
114 | break; | 114 | break; |
115 | case RADEON_INFO_ACCEL_WORKING: | ||
116 | value = rdev->accel_working; | ||
117 | break; | ||
115 | default: | 118 | default: |
116 | DRM_DEBUG("Invalid request %d\n", info->request); | 119 | DRM_DEBUG("Invalid request %d\n", info->request); |
117 | return -EINVAL; | 120 | return -EINVAL; |
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c index 4f2098bc7974..be2f86539ebc 100644 --- a/drivers/gpu/drm/radeon/rv770.c +++ b/drivers/gpu/drm/radeon/rv770.c | |||
@@ -953,6 +953,7 @@ int rv770_init(struct radeon_device *rdev) | |||
953 | if (r) | 953 | if (r) |
954 | return r; | 954 | return r; |
955 | 955 | ||
956 | rdev->accel_working = true; | ||
956 | r = rv770_resume(rdev); | 957 | r = rv770_resume(rdev); |
957 | if (r) { | 958 | if (r) { |
958 | if (rdev->flags & RADEON_IS_AGP) { | 959 | if (rdev->flags & RADEON_IS_AGP) { |
@@ -961,22 +962,24 @@ int rv770_init(struct radeon_device *rdev) | |||
961 | rdev->flags &= ~RADEON_IS_AGP; | 962 | rdev->flags &= ~RADEON_IS_AGP; |
962 | return rv770_init(rdev); | 963 | return rv770_init(rdev); |
963 | } | 964 | } |
964 | return r; | 965 | rdev->accel_working = false; |
965 | } | ||
966 | r = r600_blit_init(rdev); | ||
967 | if (r) { | ||
968 | DRM_ERROR("radeon: failled blitter (%d).\n", r); | ||
969 | return r; | ||
970 | } | 966 | } |
971 | r = radeon_ib_pool_init(rdev); | 967 | if (rdev->accel_working) { |
972 | if (r) { | 968 | r = r600_blit_init(rdev); |
973 | DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); | 969 | if (r) { |
974 | return r; | 970 | DRM_ERROR("radeon: failled blitter (%d).\n", r); |
975 | } | 971 | rdev->accel_working = false; |
976 | r = radeon_ib_test(rdev); | 972 | } |
977 | if (r) { | 973 | r = radeon_ib_pool_init(rdev); |
978 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | 974 | if (r) { |
979 | return r; | 975 | DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r); |
976 | rdev->accel_working = false; | ||
977 | } | ||
978 | r = radeon_ib_test(rdev); | ||
979 | if (r) { | ||
980 | DRM_ERROR("radeon: failled testing IB (%d).\n", r); | ||
981 | rdev->accel_working = false; | ||
982 | } | ||
980 | } | 983 | } |
981 | return 0; | 984 | return 0; |
982 | } | 985 | } |