Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6bb37305 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "drm/msm/sde: move UBWC error logging to frame event callback" into dev/msm-4.14-display

parents 19f6ab69 f0fcbf8f
Loading
Loading
Loading
Loading
+20 −19
Original line number Diff line number Diff line
@@ -2210,6 +2210,8 @@ static void sde_crtc_frame_event_cb(void *data, u32 event)
	struct msm_drm_private *priv;
	struct sde_crtc_frame_event *fevent;
	struct sde_crtc_frame_event_cb_data *cb_data;
	struct drm_plane *plane;
	u32 ubwc_error;
	unsigned long flags;
	u32 crtc_id;

@@ -2245,6 +2247,24 @@ static void sde_crtc_frame_event_cb(void *data, u32 event)
		return;
	}

	/* log and clear plane ubwc errors if any */
	if (event & (SDE_ENCODER_FRAME_EVENT_ERROR
				| SDE_ENCODER_FRAME_EVENT_PANEL_DEAD
				| SDE_ENCODER_FRAME_EVENT_DONE)) {
		drm_for_each_plane_mask(plane, crtc->dev,
						sde_crtc->plane_mask_old) {
			ubwc_error = sde_plane_get_ubwc_error(plane);
			if (ubwc_error) {
				SDE_EVT32(DRMID(crtc), DRMID(plane),
						ubwc_error, SDE_EVTLOG_ERROR);
				SDE_DEBUG("crtc%d plane %d ubwc_error %d\n",
						DRMID(crtc), DRMID(plane),
						ubwc_error);
				sde_plane_clear_ubwc_error(plane);
			}
		}
	}

	fevent->event = event;
	fevent->crtc = crtc;
	fevent->connector = cb_data->connector;
@@ -2398,9 +2418,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work)
	struct drm_crtc *crtc;
	struct sde_crtc *sde_crtc;
	struct sde_kms *sde_kms;
	struct drm_plane *plane;
	u32 ubwc_error;
	bool frame_done_event = false;
	unsigned long flags;
	bool in_clone_mode = false;

@@ -2456,7 +2473,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work)
			SDE_EVT32_VERBOSE(DRMID(crtc), fevent->event,
							SDE_EVTLOG_FUNC_CASE3);
		}
		frame_done_event = true;
	}

	if (fevent->event & SDE_ENCODER_FRAME_EVENT_SIGNAL_RELEASE_FENCE) {
@@ -2477,21 +2493,6 @@ static void sde_crtc_frame_event_work(struct kthread_work *work)
		SDE_ERROR("crtc%d ts:%lld received panel dead event\n",
				crtc->base.id, ktime_to_ns(fevent->ts));

	if (frame_done_event) {
		drm_for_each_plane_mask(plane, crtc->dev,
						sde_crtc->plane_mask_old) {
			ubwc_error = sde_plane_get_ubwc_error(plane);
			if (ubwc_error) {
				SDE_EVT32(DRMID(crtc), DRMID(plane),
						ubwc_error, SDE_EVTLOG_ERROR);
				SDE_DEBUG("crtc%d plane %d ubwc_error %d\n",
						DRMID(crtc), DRMID(plane),
						ubwc_error);
				sde_plane_clear_ubwc_error(plane);
			}
		}
	}

	spin_lock_irqsave(&sde_crtc->spin_lock, flags);
	list_add_tail(&fevent->list, &sde_crtc->frame_event_list);
	spin_unlock_irqrestore(&sde_crtc->spin_lock, flags);