merged. Bruce
In message: [linux-yocto][v6.1/standard/nxp-sdk-6.1/nxp-soc & v6.1/standard/preempt-rt/nxp-sdk-6.1/nxp-soc][PATCH] gpu: imx: dpu: Use raw_spin_lock instead of mutex_lock on 23/10/2023 Xiaolei Wang wrote: > For Atomic Mode Setting, it is safer to use raw spin lock. > Mutex may cause scheduling, which avoids the following warning. > > BUG: sleeping function called from invalid context at > kernel/locking/mutex.c:283 > in_atomic(): 1, irqs_disabled(): 128, non_block: 0, pid: 191, name: > kworker/5:13 > preempt_count: 1, expected: 0 > RCU nest depth: 0, expected: 0 > Preemption disabled at: > <ffffffc0088b4d58>] dpu_crtc_atomic_flush+0x364/0x62c > CPU: 5 PID: 191 Comm: kworker/5:13 Tainted: G WC > 6.1.30-yocto-standard #1 > Hardware name: Freescale i.MX8QM MEK (DT) > Workqueue: events drm_mode_rmfb_work_fn > Call trace: > dump_backtrace.part.0+0xc8/0xd4 > show_stack+0x20/0x30 > dump_stack_lvl+0x6c/0x88 > dump_stack+0x18/0x34 > __might_resched+0x154/0x1c0 > __might_sleep+0x54/0xa4 > mutex_lock+0x2c/0x80 > fetchunit_is_enabled+0x28/0x70 > dpu_crtc_atomic_flush+0x198/0x62c > drm_atomic_helper_commit_planes+0x158/0x220 > drm_atomic_helper_commit_tail+0x5c/0xb0 > commit_tail+0x130/0x17c > drm_atomic_helper_commit+0x14c/0x180 > drm_atomic_commit+0xb0/0xf0 > drm_framebuffer_remove+0x468/0x4fc > drm_mode_rmfb_work_fn+0x84/0xb0 > process_one_work+0x1f8/0x480 > worker_thread+0x238/0x450 > kthread+0x108/0x114 > ret_from_fork+0x10/0x20 > > Signed-off-by: Xiaolei Wang <[email protected]> > --- > drivers/gpu/imx/dpu/dpu-fetchdecode.c | 94 +++++++++++++-------------- > drivers/gpu/imx/dpu/dpu-fetcheco.c | 56 ++++++++-------- > drivers/gpu/imx/dpu/dpu-fetchlayer.c | 48 +++++++------- > drivers/gpu/imx/dpu/dpu-fetchunit.c | 44 ++++++------- > drivers/gpu/imx/dpu/dpu-fetchwarp.c | 48 +++++++------- > include/video/dpu.h | 2 +- > 6 files changed, 146 insertions(+), 146 deletions(-) > > diff --git a/drivers/gpu/imx/dpu/dpu-fetchdecode.c > b/drivers/gpu/imx/dpu/dpu-fetchdecode.c > index 66d5862fbfa1..cacf3124c7fe 100644 > --- a/drivers/gpu/imx/dpu/dpu-fetchdecode.c > +++ b/drivers/gpu/imx/dpu/dpu-fetchdecode.c > @@ -79,15 +79,15 @@ int fetchdecode_pixengcfg_dynamic_src_sel(struct > dpu_fetchunit *fu, > { > int i; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > for (i = 0; i < 4; i++) { > if (fd_srcs[fu->id][i] == src) { > dpu_pec_fu_write(fu, PIXENGCFG_DYNAMIC, src); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return 0; > } > } > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > return -EINVAL; > } > @@ -116,21 +116,21 @@ fetchdecode_set_baseaddress(struct dpu_fetchunit *fu, > unsigned int width, > baddr += (dma_addr_t)(y_offset % mt_h) * stride; > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, BASEADDRESS0, baddr); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void fetchdecode_set_src_bpp(struct dpu_fetchunit *fu, int bpp) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, SOURCEBUFFERATTRIBUTES0); > val &= ~0x3f0000; > val |= BITSPERPIXEL(bpp); > dpu_fu_write(fu, SOURCEBUFFERATTRIBUTES0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void > @@ -155,12 +155,12 @@ fetchdecode_set_src_stride(struct dpu_fetchunit *fu, > baddr, nonzero_mod); > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, SOURCEBUFFERATTRIBUTES0); > val &= ~0xffff; > val |= STRIDE(stride); > dpu_fu_write(fu, SOURCEBUFFERATTRIBUTES0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void > @@ -175,9 +175,9 @@ fetchdecode_set_src_buf_dimensions(struct dpu_fetchunit > *fu, > > val = LINEWIDTH(w) | LINECOUNT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, SOURCEBUFFERDIMENSION0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void fetchdecode_set_fmt(struct dpu_fetchunit *fu, > @@ -224,7 +224,7 @@ static void fetchdecode_set_fmt(struct dpu_fetchunit *fu, > break; > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, CONTROL); > val &= ~YUV422UPSAMPLINGMODE_MASK; > val &= ~INPUTSELECT_MASK; > @@ -258,7 +258,7 @@ static void fetchdecode_set_fmt(struct dpu_fetchunit *fu, > val |= YUVCONVERSIONMODE(YUVCONVERSIONMODE__OFF); > } > dpu_fu_write(fu, LAYERPROPERTY0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > for (i = 0; i < ARRAY_SIZE(dpu_pixel_format_matrix); i++) { > if (dpu_pixel_format_matrix[i].pixel_format == fmt) { > @@ -270,10 +270,10 @@ static void fetchdecode_set_fmt(struct dpu_fetchunit > *fu, > shift &= ~(U_SHIFT_MASK | V_SHIFT_MASK); > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, COLORCOMPONENTBITS0, bits); > dpu_fu_write(fu, COLORCOMPONENTSHIFT0, shift); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return; > } > } > @@ -288,9 +288,9 @@ void fetchdecode_layeroffset(struct dpu_fetchunit *fu, > unsigned int x, > > val = LAYERXOFFSET(x) | LAYERYOFFSET(y); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, LAYEROFFSET0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchdecode_layeroffset); > > @@ -301,9 +301,9 @@ void fetchdecode_clipoffset(struct dpu_fetchunit *fu, > unsigned int x, > > val = CLIPWINDOWXOFFSET(x) | CLIPWINDOWYOFFSET(y); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CLIPWINDOWOFFSET0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchdecode_clipoffset); > > @@ -328,7 +328,7 @@ fetchdecode_set_pixel_blend_mode(struct dpu_fetchunit *fu, > } > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY0); > val &= ~(PREMULCONSTRGB | ALPHA_ENABLE_MASK | RGB_ENABLE_MASK); > val |= mode; > @@ -338,38 +338,38 @@ fetchdecode_set_pixel_blend_mode(struct dpu_fetchunit > *fu, > val &= ~CONSTANTALPHA_MASK; > val |= CONSTANTALPHA(alpha >> 8); > dpu_fu_write(fu, CONSTANTCOLOR0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void fetchdecode_enable_src_buf(struct dpu_fetchunit *fu) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY0); > val |= SOURCEBUFFERENABLE; > dpu_fu_write(fu, LAYERPROPERTY0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void fetchdecode_disable_src_buf(struct dpu_fetchunit *fu) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY0); > val &= ~SOURCEBUFFERENABLE; > dpu_fu_write(fu, LAYERPROPERTY0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static bool fetchdecode_is_enabled(struct dpu_fetchunit *fu) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY0); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > return !!(val & SOURCEBUFFERENABLE); > } > @@ -381,9 +381,9 @@ void fetchdecode_clipdimensions(struct dpu_fetchunit *fu, > unsigned int w, > > val = CLIPWINDOWWIDTH(w) | CLIPWINDOWHEIGHT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CLIPWINDOWDIMENSIONS0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchdecode_clipdimensions); > > @@ -399,9 +399,9 @@ fetchdecode_set_framedimensions(struct dpu_fetchunit *fu, > > val = FRAMEWIDTH(w) | FRAMEHEIGHT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, FRAMEDIMENSIONS, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > void fetchdecode_rgb_constantcolor(struct dpu_fetchunit *fu, > @@ -411,9 +411,9 @@ void fetchdecode_rgb_constantcolor(struct dpu_fetchunit > *fu, > > val = rgb_color(r, g, b, a); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONSTANTCOLOR0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchdecode_rgb_constantcolor); > > @@ -423,17 +423,17 @@ void fetchdecode_yuv_constantcolor(struct dpu_fetchunit > *fu, u8 y, u8 u, u8 v) > > val = yuv_color(y, u, v); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONSTANTCOLOR0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchdecode_yuv_constantcolor); > > static void fetchdecode_set_controltrigger(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONTROLTRIGGER, SHDTOKGEN); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int fetchdecode_fetchtype(struct dpu_fetchunit *fu, fetchtype_t *type) > @@ -441,10 +441,10 @@ int fetchdecode_fetchtype(struct dpu_fetchunit *fu, > fetchtype_t *type) > struct dpu_soc *dpu = fu->dpu; > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, FETCHTYPE); > val &= FETCHTYPE_MASK; > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > switch (val) { > case FETCHTYPE__DECODE: > @@ -563,16 +563,16 @@ struct dpu_fetchunit *dpu_fd_get(struct dpu_soc *dpu, > int id) > > fu = dpu->fd_priv[i]; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > if (fu->inuse) { > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return ERR_PTR(-EBUSY); > } > > fu->inuse = true; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > return fu; > } > @@ -580,11 +580,11 @@ EXPORT_SYMBOL_GPL(dpu_fd_get); > > void dpu_fd_put(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > fu->inuse = false; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(dpu_fd_put); > > @@ -623,10 +623,10 @@ void _dpu_fd_init(struct dpu_soc *dpu, unsigned int id) > fetchunit_baddr_autoupdate(fu, 0x0); > fetchunit_shden(fu, true); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, BURSTBUFFERMANAGEMENT, > SETNUMBUFFERS(16) | SETBURSTLENGTH(16)); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int dpu_fd_init(struct dpu_soc *dpu, unsigned int id, > @@ -657,7 +657,7 @@ int dpu_fd_init(struct dpu_soc *dpu, unsigned int id, > fu->ops = &fd_ops; > fu->name = "fetchdecode"; > > - mutex_init(&fu->mutex); > + raw_spin_lock_init(&fu->lock); > > ret = fetchdecode_pixengcfg_dynamic_src_sel(fu, FD_SRC_DISABLE); > if (ret < 0) > diff --git a/drivers/gpu/imx/dpu/dpu-fetcheco.c > b/drivers/gpu/imx/dpu/dpu-fetcheco.c > index d8bfb79e3ae9..f044f2b0566d 100644 > --- a/drivers/gpu/imx/dpu/dpu-fetcheco.c > +++ b/drivers/gpu/imx/dpu/dpu-fetcheco.c > @@ -74,9 +74,9 @@ fetcheco_set_src_buf_dimensions(struct dpu_fetchunit *fu, > > val = LINEWIDTH(width) | LINECOUNT(height); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, SOURCEBUFFERDIMENSION0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void fetcheco_set_fmt(struct dpu_fetchunit *fu, > @@ -128,7 +128,7 @@ static void fetcheco_set_fmt(struct dpu_fetchunit *fu, > return; > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, FRAMERESAMPLING); > val &= ~(DELTAX_MASK | DELTAY_MASK); > val |= DELTAX(x) | DELTAY(y); > @@ -138,7 +138,7 @@ static void fetcheco_set_fmt(struct dpu_fetchunit *fu, > val &= ~RASTERMODE_MASK; > val |= RASTERMODE(RASTERMODE__NORMAL); > dpu_fu_write(fu, CONTROL, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > for (i = 0; i < ARRAY_SIZE(dpu_pixel_format_matrix); i++) { > if (dpu_pixel_format_matrix[i].pixel_format == fmt) { > @@ -148,10 +148,10 @@ static void fetcheco_set_fmt(struct dpu_fetchunit *fu, > bits &= ~Y_BITS_MASK; > shift &= ~Y_SHIFT_MASK; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, COLORCOMPONENTBITS0, bits); > dpu_fu_write(fu, COLORCOMPONENTSHIFT0, shift); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return; > } > } > @@ -166,9 +166,9 @@ void fetcheco_layeroffset(struct dpu_fetchunit *fu, > unsigned int x, > > val = LAYERXOFFSET(x) | LAYERYOFFSET(y); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, LAYEROFFSET0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetcheco_layeroffset); > > @@ -179,9 +179,9 @@ void fetcheco_clipoffset(struct dpu_fetchunit *fu, > unsigned int x, > > val = CLIPWINDOWXOFFSET(x) | CLIPWINDOWYOFFSET(y); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CLIPWINDOWOFFSET0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetcheco_clipoffset); > > @@ -192,9 +192,9 @@ void fetcheco_clipdimensions(struct dpu_fetchunit *fu, > unsigned int w, > > val = CLIPWINDOWWIDTH(w) | CLIPWINDOWHEIGHT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CLIPWINDOWDIMENSIONS0, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetcheco_clipdimensions); > > @@ -210,9 +210,9 @@ fetcheco_set_framedimensions(struct dpu_fetchunit *fu, > > val = FRAMEWIDTH(w) | FRAMEHEIGHT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, FRAMEDIMENSIONS, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > void fetcheco_frameresampling(struct dpu_fetchunit *fu, unsigned int x, > @@ -220,20 +220,20 @@ void fetcheco_frameresampling(struct dpu_fetchunit *fu, > unsigned int x, > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, FRAMERESAMPLING); > val &= ~(DELTAX_MASK | DELTAY_MASK); > val |= DELTAX(x) | DELTAY(y); > dpu_fu_write(fu, FRAMERESAMPLING, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetcheco_frameresampling); > > static void fetcheco_set_controltrigger(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONTROLTRIGGER, SHDTOKGEN); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int fetcheco_fetchtype(struct dpu_fetchunit *fu, fetchtype_t *type) > @@ -241,10 +241,10 @@ int fetcheco_fetchtype(struct dpu_fetchunit *fu, > fetchtype_t *type) > struct dpu_soc *dpu = fu->dpu; > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, FETCHTYPE); > val &= FETCHTYPE_MASK; > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > switch (val) { > case FETCHTYPE__DECODE: > @@ -301,16 +301,16 @@ struct dpu_fetchunit *dpu_fe_get(struct dpu_soc *dpu, > int id) > > fu = dpu->fe_priv[i]; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > if (fu->inuse) { > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return ERR_PTR(-EBUSY); > } > > fu->inuse = true; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > return fu; > } > @@ -318,11 +318,11 @@ EXPORT_SYMBOL_GPL(dpu_fe_get); > > void dpu_fe_put(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > fu->inuse = false; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(dpu_fe_put); > > @@ -358,10 +358,10 @@ void _dpu_fe_init(struct dpu_soc *dpu, unsigned int id) > > fetchunit_shden(fu, true); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, BURSTBUFFERMANAGEMENT, > SETNUMBUFFERS(16) | SETBURSTLENGTH(16)); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int dpu_fe_init(struct dpu_soc *dpu, unsigned int id, > @@ -399,7 +399,7 @@ int dpu_fe_init(struct dpu_soc *dpu, unsigned int id, > fu->ops = &fe_ops; > fu->name = "fetcheco"; > > - mutex_init(&fu->mutex); > + raw_spin_lock_init(&fu->lock); > > _dpu_fe_init(dpu, id); > > diff --git a/drivers/gpu/imx/dpu/dpu-fetchlayer.c > b/drivers/gpu/imx/dpu/dpu-fetchlayer.c > index 3a72a8e65a17..527f864087af 100644 > --- a/drivers/gpu/imx/dpu/dpu-fetchlayer.c > +++ b/drivers/gpu/imx/dpu/dpu-fetchlayer.c > @@ -58,9 +58,9 @@ fetchlayer_set_src_buf_dimensions(struct dpu_fetchunit *fu, > > val = LINEWIDTH(w) | LINECOUNT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, SOURCEBUFFERDIMENSION(fu->sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void fetchlayer_set_fmt(struct dpu_fetchunit *fu, > @@ -72,22 +72,22 @@ static void fetchlayer_set_fmt(struct dpu_fetchunit *fu, > u32 val, bits, shift; > int i, sub_id = fu->sub_id; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY(sub_id)); > val &= ~YUVCONVERSIONMODE_MASK; > val |= YUVCONVERSIONMODE(YUVCONVERSIONMODE__OFF); > dpu_fu_write(fu, LAYERPROPERTY(sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > for (i = 0; i < ARRAY_SIZE(dpu_pixel_format_matrix); i++) { > if (dpu_pixel_format_matrix[i].pixel_format == fmt) { > bits = dpu_pixel_format_matrix[i].bits; > shift = dpu_pixel_format_matrix[i].shift; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, COLORCOMPONENTBITS(sub_id), bits); > dpu_fu_write(fu, COLORCOMPONENTSHIFT(sub_id), shift); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return; > } > } > @@ -103,9 +103,9 @@ fetchlayer_set_framedimensions(struct dpu_fetchunit *fu, > unsigned int w, > > val = FRAMEWIDTH(w) | FRAMEHEIGHT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, FRAMEDIMENSIONS, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > void fetchlayer_rgb_constantcolor(struct dpu_fetchunit *fu, > @@ -115,9 +115,9 @@ void fetchlayer_rgb_constantcolor(struct dpu_fetchunit > *fu, > > val = rgb_color(r, g, b, a); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONSTANTCOLOR(fu->id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchlayer_rgb_constantcolor); > > @@ -127,17 +127,17 @@ void fetchlayer_yuv_constantcolor(struct dpu_fetchunit > *fu, u8 y, u8 u, u8 v) > > val = yuv_color(y, u, v); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONSTANTCOLOR(fu->id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchlayer_yuv_constantcolor); > > static void fetchlayer_set_controltrigger(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONTROLTRIGGER, SHDTOKGEN); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int fetchlayer_fetchtype(struct dpu_fetchunit *fu, fetchtype_t *type) > @@ -145,10 +145,10 @@ int fetchlayer_fetchtype(struct dpu_fetchunit *fu, > fetchtype_t *type) > struct dpu_soc *dpu = fu->dpu; > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, FETCHTYPE); > val &= FETCHTYPE_MASK; > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > switch (val) { > case FETCHTYPE__DECODE: > @@ -186,16 +186,16 @@ struct dpu_fetchunit *dpu_fl_get(struct dpu_soc *dpu, > int id) > > fu = dpu->fl_priv[i]; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > if (fu->inuse) { > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return ERR_PTR(-EBUSY); > } > > fu->inuse = true; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > return fu; > } > @@ -203,11 +203,11 @@ EXPORT_SYMBOL_GPL(dpu_fl_get); > > void dpu_fl_put(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > fu->inuse = false; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(dpu_fl_put); > > @@ -247,10 +247,10 @@ void _dpu_fl_init(struct dpu_soc *dpu, unsigned int id) > fetchunit_shdldreq_sticky(fu, 0xFF); > fetchunit_disable_src_buf(fu); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, BURSTBUFFERMANAGEMENT, > SETNUMBUFFERS(16) | SETBURSTLENGTH(16)); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int dpu_fl_init(struct dpu_soc *dpu, unsigned int id, > @@ -282,7 +282,7 @@ int dpu_fl_init(struct dpu_soc *dpu, unsigned int id, > fu->ops = &fl_ops; > fu->name = "fetchlayer"; > > - mutex_init(&fu->mutex); > + raw_spin_lock_init(&fu->lock); > > ret = fetchlayer_fetchtype(fu, &fl->fetchtype); > if (ret < 0) > diff --git a/drivers/gpu/imx/dpu/dpu-fetchunit.c > b/drivers/gpu/imx/dpu/dpu-fetchunit.c > index e6a49874ac02..8fca4b2b470d 100644 > --- a/drivers/gpu/imx/dpu/dpu-fetchunit.c > +++ b/drivers/gpu/imx/dpu/dpu-fetchunit.c > @@ -67,14 +67,14 @@ void fetchunit_shden(struct dpu_fetchunit *fu, bool > enable) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, STATICCONTROL); > if (enable) > val |= SHDEN; > else > val &= ~SHDEN; > dpu_fu_write(fu, STATICCONTROL, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_shden); > > @@ -82,12 +82,12 @@ void fetchunit_baddr_autoupdate(struct dpu_fetchunit *fu, > u8 layer_mask) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, STATICCONTROL); > val &= ~BASEADDRESSAUTOUPDATE_MASK; > val |= BASEADDRESSAUTOUPDATE(layer_mask); > dpu_fu_write(fu, STATICCONTROL, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_baddr_autoupdate); > > @@ -95,12 +95,12 @@ void fetchunit_shdldreq_sticky(struct dpu_fetchunit *fu, > u8 layer_mask) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, STATICCONTROL); > val &= ~SHDLDREQSTICKY_MASK; > val |= SHDLDREQSTICKY(layer_mask); > dpu_fu_write(fu, STATICCONTROL, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_shdldreq_sticky); > > @@ -124,12 +124,12 @@ void fetchunit_set_burstlength(struct dpu_fetchunit *fu, > burst_length = 16; > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, BURSTBUFFERMANAGEMENT); > val &= ~SETBURSTLENGTH_MASK; > val |= SETBURSTLENGTH(burst_length); > dpu_fu_write(fu, BURSTBUFFERMANAGEMENT, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > dev_dbg(dpu->dev, "%s%d burst length is %u\n", > fu->name, fu->id, burst_length); > @@ -158,9 +158,9 @@ void fetchunit_set_baseaddress(struct dpu_fetchunit *fu, > unsigned int width, > baddr += (dma_addr_t)(y_offset % mt_h) * stride; > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, BASEADDRESS(fu->sub_id), baddr); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_set_baseaddress); > > @@ -168,12 +168,12 @@ void fetchunit_set_src_bpp(struct dpu_fetchunit *fu, > int bpp) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, SOURCEBUFFERATTRIBUTES(fu->sub_id)); > val &= ~0x3f0000; > val |= BITSPERPIXEL(bpp); > dpu_fu_write(fu, SOURCEBUFFERATTRIBUTES(fu->sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_set_src_bpp); > > @@ -204,12 +204,12 @@ void fetchunit_set_src_stride(struct dpu_fetchunit *fu, > baddr, nonzero_mod); > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, SOURCEBUFFERATTRIBUTES(fu->sub_id)); > val &= ~0xffff; > val |= STRIDE(stride); > dpu_fu_write(fu, SOURCEBUFFERATTRIBUTES(fu->sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_set_src_stride); > > @@ -233,7 +233,7 @@ void fetchunit_set_pixel_blend_mode(struct dpu_fetchunit > *fu, > } > } > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY(fu->sub_id)); > val &= ~(PREMULCONSTRGB | ALPHA_ENABLE_MASK | RGB_ENABLE_MASK); > val |= mode; > @@ -243,7 +243,7 @@ void fetchunit_set_pixel_blend_mode(struct dpu_fetchunit > *fu, > val &= ~CONSTANTALPHA_MASK; > val |= CONSTANTALPHA(alpha >> 8); > dpu_fu_write(fu, CONSTANTCOLOR(fu->sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_set_pixel_blend_mode); > > @@ -251,11 +251,11 @@ void fetchunit_enable_src_buf(struct dpu_fetchunit *fu) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY(fu->sub_id)); > val |= SOURCEBUFFERENABLE; > dpu_fu_write(fu, LAYERPROPERTY(fu->sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_enable_src_buf); > > @@ -263,11 +263,11 @@ void fetchunit_disable_src_buf(struct dpu_fetchunit *fu) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY(fu->sub_id)); > val &= ~SOURCEBUFFERENABLE; > dpu_fu_write(fu, LAYERPROPERTY(fu->sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchunit_disable_src_buf); > > @@ -275,9 +275,9 @@ bool fetchunit_is_enabled(struct dpu_fetchunit *fu) > { > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY(fu->sub_id)); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > return !!(val & SOURCEBUFFERENABLE); > } > diff --git a/drivers/gpu/imx/dpu/dpu-fetchwarp.c > b/drivers/gpu/imx/dpu/dpu-fetchwarp.c > index 953368e3fade..dfbcf8f9f65e 100644 > --- a/drivers/gpu/imx/dpu/dpu-fetchwarp.c > +++ b/drivers/gpu/imx/dpu/dpu-fetchwarp.c > @@ -63,9 +63,9 @@ fetchwarp_set_src_buf_dimensions(struct dpu_fetchunit *fu, > > val = LINEWIDTH(w) | LINECOUNT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, SOURCEBUFFERDIMENSION(fu->sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > static void fetchwarp_set_fmt(struct dpu_fetchunit *fu, > @@ -77,21 +77,21 @@ static void fetchwarp_set_fmt(struct dpu_fetchunit *fu, > u32 val, bits, shift; > int i, sub_id = fu->sub_id; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, LAYERPROPERTY(sub_id)); > val &= ~YUVCONVERSIONMODE_MASK; > dpu_fu_write(fu, LAYERPROPERTY(sub_id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > for (i = 0; i < ARRAY_SIZE(dpu_pixel_format_matrix); i++) { > if (dpu_pixel_format_matrix[i].pixel_format == fmt) { > bits = dpu_pixel_format_matrix[i].bits; > shift = dpu_pixel_format_matrix[i].shift; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, COLORCOMPONENTBITS(sub_id), bits); > dpu_fu_write(fu, COLORCOMPONENTSHIFT(sub_id), shift); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return; > } > } > @@ -107,9 +107,9 @@ fetchwarp_set_framedimensions(struct dpu_fetchunit *fu, > > val = FRAMEWIDTH(w) | FRAMEHEIGHT(h); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, FRAMEDIMENSIONS, val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > void fetchwarp_rgb_constantcolor(struct dpu_fetchunit *fu, > @@ -119,9 +119,9 @@ void fetchwarp_rgb_constantcolor(struct dpu_fetchunit *fu, > > val = rgb_color(r, g, b, a); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONSTANTCOLOR(fu->id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchwarp_rgb_constantcolor); > > @@ -131,17 +131,17 @@ void fetchwarp_yuv_constantcolor(struct dpu_fetchunit > *fu, u8 y, u8 u, u8 v) > > val = yuv_color(y, u, v); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONSTANTCOLOR(fu->id), val); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(fetchwarp_yuv_constantcolor); > > static void fetchwarp_set_controltrigger(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, CONTROLTRIGGER, SHDTOKGEN); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int fetchwarp_fetchtype(struct dpu_fetchunit *fu, fetchtype_t *type) > @@ -149,10 +149,10 @@ int fetchwarp_fetchtype(struct dpu_fetchunit *fu, > fetchtype_t *type) > struct dpu_soc *dpu = fu->dpu; > u32 val; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > val = dpu_fu_read(fu, FETCHTYPE); > val &= FETCHTYPE_MASK; > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > switch (val) { > case FETCHTYPE__DECODE: > @@ -190,16 +190,16 @@ struct dpu_fetchunit *dpu_fw_get(struct dpu_soc *dpu, > int id) > > fu = dpu->fw_priv[i]; > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > if (fu->inuse) { > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > return ERR_PTR(-EBUSY); > } > > fu->inuse = true; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > > return fu; > } > @@ -207,11 +207,11 @@ EXPORT_SYMBOL_GPL(dpu_fw_get); > > void dpu_fw_put(struct dpu_fetchunit *fu) > { > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > > fu->inuse = false; > > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > EXPORT_SYMBOL_GPL(dpu_fw_put); > > @@ -251,10 +251,10 @@ void _dpu_fw_init(struct dpu_soc *dpu, unsigned int id) > fetchunit_shdldreq_sticky(fu, 0xFF); > fetchunit_disable_src_buf(fu); > > - mutex_lock(&fu->mutex); > + raw_spin_lock(&fu->lock); > dpu_fu_write(fu, BURSTBUFFERMANAGEMENT, > SETNUMBUFFERS(16) | SETBURSTLENGTH(16)); > - mutex_unlock(&fu->mutex); > + raw_spin_unlock(&fu->lock); > } > > int dpu_fw_init(struct dpu_soc *dpu, unsigned int id, > @@ -293,7 +293,7 @@ int dpu_fw_init(struct dpu_soc *dpu, unsigned int id, > fu->ops = &fw_ops; > fu->name = "fetchwarp"; > > - mutex_init(&fu->mutex); > + raw_spin_lock_init(&fu->lock); > > ret = fetchwarp_fetchtype(fu, &fw->fetchtype); > if (ret < 0) > diff --git a/include/video/dpu.h b/include/video/dpu.h > index 4115da97aab8..b2fa3aa4bb89 100644 > --- a/include/video/dpu.h > +++ b/include/video/dpu.h > @@ -388,7 +388,7 @@ struct dpu_fetchunit { > void __iomem *pec_base; > void __iomem *base; > char *name; > - struct mutex mutex; > + raw_spinlock_t lock; > int id; > int sub_id; /* for fractional fetch units */ > int type; > -- > 2.25.1 >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#13223): https://lists.yoctoproject.org/g/linux-yocto/message/13223 Mute This Topic: https://lists.yoctoproject.org/mt/102131303/21656 Group Owner: [email protected] Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/leave/6687884/21656/624485779/xyzzy [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
