diff options
Diffstat (limited to 'drivers/gpu/drm/r128/r128_cce.c')
-rw-r--r-- | drivers/gpu/drm/r128/r128_cce.c | 18 |
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 | ||