Improve error handling during CRTC initialization. Especially avoid
memory leaks in the primary plane initialization error path.
Signed-off-by: Stefan Agner <stefan@agner.ch>
        int ret;
 
        primary = fsl_dcu_drm_primary_create_plane(fsl_dev->drm);
+       if (!primary)
+               return -ENOMEM;
+
        ret = drm_crtc_init_with_planes(fsl_dev->drm, crtc, primary, NULL,
                                        &fsl_dcu_drm_crtc_funcs, NULL);
-       if (ret < 0)
+       if (ret) {
+               primary->funcs->destroy(primary);
                return ret;
+       }
 
        drm_crtc_helper_add(crtc, &fsl_dcu_drm_crtc_helper_funcs);
 
 
 static void fsl_dcu_drm_plane_destroy(struct drm_plane *plane)
 {
        drm_plane_cleanup(plane);
+       kfree(plane);
 }
 
 static const struct drm_plane_funcs fsl_dcu_drm_plane_funcs = {