summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/arm/malidp_mw.c3
-rw-r--r--drivers/gpu/drm/drm_writeback.c15
-rw-r--r--drivers/gpu/drm/vc4/vc4_txp.c2
-rw-r--r--include/drm/drm_writeback.h2
4 files changed, 13 insertions, 9 deletions
diff --git a/drivers/gpu/drm/arm/malidp_mw.c b/drivers/gpu/drm/arm/malidp_mw.c
index 041a64dc7167..87627219ce3b 100644
--- a/drivers/gpu/drm/arm/malidp_mw.c
+++ b/drivers/gpu/drm/arm/malidp_mw.c
@@ -252,8 +252,7 @@ void malidp_mw_atomic_commit(struct drm_device *drm,
252 &mw_state->addrs[0], 252 &mw_state->addrs[0],
253 mw_state->format); 253 mw_state->format);
254 254
255 drm_writeback_queue_job(mw_conn, conn_state->writeback_job); 255 drm_writeback_queue_job(mw_conn, conn_state);
256 conn_state->writeback_job = NULL;
257 hwdev->hw->enable_memwrite(hwdev, mw_state->addrs, 256 hwdev->hw->enable_memwrite(hwdev, mw_state->addrs,
258 mw_state->pitches, mw_state->n_planes, 257 mw_state->pitches, mw_state->n_planes,
259 fb->width, fb->height, mw_state->format, 258 fb->width, fb->height, mw_state->format,
diff --git a/drivers/gpu/drm/drm_writeback.c b/drivers/gpu/drm/drm_writeback.c
index c20e6fe00cb3..338b993d7c9f 100644
--- a/drivers/gpu/drm/drm_writeback.c
+++ b/drivers/gpu/drm/drm_writeback.c
@@ -242,11 +242,12 @@ EXPORT_SYMBOL(drm_writeback_connector_init);
242/** 242/**
243 * drm_writeback_queue_job - Queue a writeback job for later signalling 243 * drm_writeback_queue_job - Queue a writeback job for later signalling
244 * @wb_connector: The writeback connector to queue a job on 244 * @wb_connector: The writeback connector to queue a job on
245 * @job: The job to queue 245 * @conn_state: The connector state containing the job to queue
246 * 246 *
247 * This function adds a job to the job_queue for a writeback connector. It 247 * This function adds the job contained in @conn_state to the job_queue for a
248 * should be considered to take ownership of the writeback job, and so any other 248 * writeback connector. It takes ownership of the writeback job and sets the
249 * references to the job must be cleared after calling this function. 249 * @conn_state->writeback_job to NULL, and so no access to the job may be
250 * performed by the caller after this function returns.
250 * 251 *
251 * Drivers must ensure that for a given writeback connector, jobs are queued in 252 * Drivers must ensure that for a given writeback connector, jobs are queued in
252 * exactly the same order as they will be completed by the hardware (and 253 * exactly the same order as they will be completed by the hardware (and
@@ -258,10 +259,14 @@ EXPORT_SYMBOL(drm_writeback_connector_init);
258 * See also: drm_writeback_signal_completion() 259 * See also: drm_writeback_signal_completion()
259 */ 260 */
260void drm_writeback_queue_job(struct drm_writeback_connector *wb_connector, 261void drm_writeback_queue_job(struct drm_writeback_connector *wb_connector,
261 struct drm_writeback_job *job) 262 struct drm_connector_state *conn_state)
262{ 263{
264 struct drm_writeback_job *job;
263 unsigned long flags; 265 unsigned long flags;
264 266
267 job = conn_state->writeback_job;
268 conn_state->writeback_job = NULL;
269
265 spin_lock_irqsave(&wb_connector->job_lock, flags); 270 spin_lock_irqsave(&wb_connector->job_lock, flags);
266 list_add_tail(&job->list_entry, &wb_connector->job_queue); 271 list_add_tail(&job->list_entry, &wb_connector->job_queue);
267 spin_unlock_irqrestore(&wb_connector->job_lock, flags); 272 spin_unlock_irqrestore(&wb_connector->job_lock, flags);
diff --git a/drivers/gpu/drm/vc4/vc4_txp.c b/drivers/gpu/drm/vc4/vc4_txp.c
index aa279b5b0de7..5dabd91f2d7e 100644
--- a/drivers/gpu/drm/vc4/vc4_txp.c
+++ b/drivers/gpu/drm/vc4/vc4_txp.c
@@ -327,7 +327,7 @@ static void vc4_txp_connector_atomic_commit(struct drm_connector *conn,
327 327
328 TXP_WRITE(TXP_DST_CTRL, ctrl); 328 TXP_WRITE(TXP_DST_CTRL, ctrl);
329 329
330 drm_writeback_queue_job(&txp->connector, conn_state->writeback_job); 330 drm_writeback_queue_job(&txp->connector, conn_state);
331} 331}
332 332
333static const struct drm_connector_helper_funcs vc4_txp_connector_helper_funcs = { 333static const struct drm_connector_helper_funcs vc4_txp_connector_helper_funcs = {
diff --git a/include/drm/drm_writeback.h b/include/drm/drm_writeback.h
index 23df9d463003..47662c362743 100644
--- a/include/drm/drm_writeback.h
+++ b/include/drm/drm_writeback.h
@@ -123,7 +123,7 @@ int drm_writeback_connector_init(struct drm_device *dev,
123 const u32 *formats, int n_formats); 123 const u32 *formats, int n_formats);
124 124
125void drm_writeback_queue_job(struct drm_writeback_connector *wb_connector, 125void drm_writeback_queue_job(struct drm_writeback_connector *wb_connector,
126 struct drm_writeback_job *job); 126 struct drm_connector_state *conn_state);
127 127
128void drm_writeback_cleanup_job(struct drm_writeback_job *job); 128void drm_writeback_cleanup_job(struct drm_writeback_job *job);
129 129