diff options
-rw-r--r-- | drivers/gpu/drm/arm/malidp_mw.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_writeback.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_txp.c | 2 | ||||
-rw-r--r-- | include/drm/drm_writeback.h | 2 |
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 | */ |
260 | void drm_writeback_queue_job(struct drm_writeback_connector *wb_connector, | 261 | void 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 | ||
333 | static const struct drm_connector_helper_funcs vc4_txp_connector_helper_funcs = { | 333 | static 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 | ||
125 | void drm_writeback_queue_job(struct drm_writeback_connector *wb_connector, | 125 | void 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 | ||
128 | void drm_writeback_cleanup_job(struct drm_writeback_job *job); | 128 | void drm_writeback_cleanup_job(struct drm_writeback_job *job); |
129 | 129 | ||