aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/r128/r128_cce.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/r128/r128_cce.c')
-rw-r--r--drivers/gpu/drm/r128/r128_cce.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/gpu/drm/r128/r128_cce.c b/drivers/gpu/drm/r128/r128_cce.c
index 15252f60bbd3..4c39a407aa4a 100644
--- a/drivers/gpu/drm/r128/r128_cce.c
+++ b/drivers/gpu/drm/r128/r128_cce.c
@@ -346,6 +346,11 @@ static int r128_do_init_cce(struct drm_device * dev, drm_r128_init_t * init)
346 346
347 DRM_DEBUG("\n"); 347 DRM_DEBUG("\n");
348 348
349 if (dev->dev_private) {
350 DRM_DEBUG("called when already initialized\n");
351 return -EINVAL;
352 }
353
349 dev_priv = kzalloc(sizeof(drm_r128_private_t), GFP_KERNEL); 354 dev_priv = kzalloc(sizeof(drm_r128_private_t), GFP_KERNEL);
350 if (dev_priv == NULL) 355 if (dev_priv == NULL)
351 return -ENOMEM; 356 return -ENOMEM;
@@ -647,6 +652,8 @@ int r128_cce_start(struct drm_device *dev, void *data, struct drm_file *file_pri
647 652
648 LOCK_TEST_WITH_RETURN(dev, file_priv); 653 LOCK_TEST_WITH_RETURN(dev, file_priv);
649 654
655 DEV_INIT_TEST_WITH_RETURN(dev_priv);
656
650 if (dev_priv->cce_running || dev_priv->cce_mode == R128_PM4_NONPM4) { 657 if (dev_priv->cce_running || dev_priv->cce_mode == R128_PM4_NONPM4) {
651 DRM_DEBUG("while CCE running\n"); 658 DRM_DEBUG("while CCE running\n");
652 return 0; 659 return 0;
@@ -669,6 +676,8 @@ int r128_cce_stop(struct drm_device *dev, void *data, struct drm_file *file_priv
669 676
670 LOCK_TEST_WITH_RETURN(dev, file_priv); 677 LOCK_TEST_WITH_RETURN(dev, file_priv);
671 678
679 DEV_INIT_TEST_WITH_RETURN(dev_priv);
680
672 /* Flush any pending CCE commands. This ensures any outstanding 681 /* Flush any pending CCE commands. This ensures any outstanding
673 * commands are exectuted by the engine before we turn it off. 682 * commands are exectuted by the engine before we turn it off.
674 */ 683 */
@@ -706,10 +715,7 @@ int r128_cce_reset(struct drm_device *dev, void *data, struct drm_file *file_pri
706 715
707 LOCK_TEST_WITH_RETURN(dev, file_priv); 716 LOCK_TEST_WITH_RETURN(dev, file_priv);
708 717
709 if (!dev_priv) { 718 DEV_INIT_TEST_WITH_RETURN(dev_priv);
710 DRM_DEBUG("called before init done\n");
711 return -EINVAL;
712 }
713 719
714 r128_do_cce_reset(dev_priv); 720 r128_do_cce_reset(dev_priv);
715 721
@@ -726,6 +732,8 @@ int r128_cce_idle(struct drm_device *dev, void *data, struct drm_file *file_priv
726 732
727 LOCK_TEST_WITH_RETURN(dev, file_priv); 733 LOCK_TEST_WITH_RETURN(dev, file_priv);
728 734
735 DEV_INIT_TEST_WITH_RETURN(dev_priv);
736
729 if (dev_priv->cce_running) { 737 if (dev_priv->cce_running) {
730 r128_do_cce_flush(dev_priv); 738 r128_do_cce_flush(dev_priv);
731 } 739 }
@@ -739,6 +747,8 @@ int r128_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_
739 747
740 LOCK_TEST_WITH_RETURN(dev, file_priv); 748 LOCK_TEST_WITH_RETURN(dev, file_priv);
741 749
750 DEV_INIT_TEST_WITH_RETURN(dev->dev_private);
751
742 return r128_do_engine_reset(dev); 752 return r128_do_engine_reset(dev);
743} 753}
744 754