mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
Mediatek DRM Fixes - 20231211
1. mtk_disp_gamma: Fix breakage due to merge issue 2. fix kernel oops if no crtc is found 3. Add spinlock for setting vblank event in atomic_begin 4. Fix access violation in mtk_drm_crtc_dma_dev_get -----BEGIN PGP SIGNATURE----- iQJMBAABCgA2FiEEACwLKSDmq+9RDv5P4cpzo8lZTiQFAmV3JEYYHGNodW5rdWFu Zy5odUBrZXJuZWwub3JnAAoJEOHKc6PJWU4kJqEP/3YjP2OZqhNCXYsmYIq3GWPJ 2Mro/AmJRkc4Kkz5A/XPuokyKMuqwmWg+UrhELrmJyBzbQK5vN6CJMHQX3DKMRrB 376r3BqW57G7tvcHqJOyIOmkIjBgdzJuKLyGgYqmiCHTOVtc/ikqUvVU9DB5n1jw 5tKGx21rmq5hUW61Z3MxJALbX5KiHaw88DkzT3Ab3CD/ejmNj1or7UWFPta5U6jO NTBCRS5ewzGIzWSdIFfxqoA9zLPowSdjIwh0kZSMoZN6NDPWpwvRErV9ccyRiZQl wYEhsqU54T55Mc+8QfX7+jvHNwvMfyvqDp76rZpyWZ+oL8eTvZz4Oh6NjZ1nlTkT B7IyC9Nvot3Z+Rykj1nWkB/wSKD4NK/h2lv6nbVBzubRfJXEXoA/9LJHnfsT6rDU U/k/SZvSTeS9znjtALlOlLV7cM4scbzbkGn6szjLWyfEi8ypvfmflVkdJ17WNbiF a2ex6ovvU/WHmVp6wt5/2bEWeW9C+FKy87Stt+J0ziY/C8Ez9LPC3y3eQpsni6En WWP1THcNpgOEfMXDNfRz8kdOzqhj5dzSWqnbVgTbdYhgcQpBK8sPKk8Zxg/QWmYa rcSWbCvu34vXuX+AEbuhzDEMTuubHh15vr6MghjiYVFaUnPxdQpOErmfKOLKe4cK RWjzgm3ZGd4xGgEWJMZ2 =UVt2 -----END PGP SIGNATURE----- Merge tag 'mediatek-drm-fixes-20231211' of https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux into drm-fixes Mediatek DRM Fixes - 20231211 1. mtk_disp_gamma: Fix breakage due to merge issue 2. fix kernel oops if no crtc is found 3. Add spinlock for setting vblank event in atomic_begin 4. Fix access violation in mtk_drm_crtc_dma_dev_get Signed-off-by: Dave Airlie <airlied@redhat.com> From: Chun-Kuang Hu <chunkuang.hu@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20231211151510.6749-1-chunkuang.hu@kernel.org
This commit is contained in:
commit
2fda617482
|
|
@ -203,7 +203,7 @@ void mtk_gamma_set(struct device *dev, struct drm_crtc_state *state)
|
|||
/* Disable RELAY mode to pass the processed image */
|
||||
cfg_val &= ~GAMMA_RELAY_MODE;
|
||||
|
||||
cfg_val = readl(gamma->regs + DISP_GAMMA_CFG);
|
||||
writel(cfg_val, gamma->regs + DISP_GAMMA_CFG);
|
||||
}
|
||||
|
||||
void mtk_gamma_config(struct device *dev, unsigned int w,
|
||||
|
|
|
|||
|
|
@ -788,6 +788,7 @@ static void mtk_drm_crtc_atomic_begin(struct drm_crtc *crtc,
|
|||
crtc);
|
||||
struct mtk_crtc_state *mtk_crtc_state = to_mtk_crtc_state(crtc_state);
|
||||
struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
|
||||
unsigned long flags;
|
||||
|
||||
if (mtk_crtc->event && mtk_crtc_state->base.event)
|
||||
DRM_ERROR("new event while there is still a pending event\n");
|
||||
|
|
@ -795,7 +796,11 @@ static void mtk_drm_crtc_atomic_begin(struct drm_crtc *crtc,
|
|||
if (mtk_crtc_state->base.event) {
|
||||
mtk_crtc_state->base.event->pipe = drm_crtc_index(crtc);
|
||||
WARN_ON(drm_crtc_vblank_get(crtc) != 0);
|
||||
|
||||
spin_lock_irqsave(&crtc->dev->event_lock, flags);
|
||||
mtk_crtc->event = mtk_crtc_state->base.event;
|
||||
spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
|
||||
|
||||
mtk_crtc_state->base.event = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -921,7 +926,14 @@ static int mtk_drm_crtc_init_comp_planes(struct drm_device *drm_dev,
|
|||
|
||||
struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc)
|
||||
{
|
||||
struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
|
||||
struct mtk_drm_crtc *mtk_crtc = NULL;
|
||||
|
||||
if (!crtc)
|
||||
return NULL;
|
||||
|
||||
mtk_crtc = to_mtk_crtc(crtc);
|
||||
if (!mtk_crtc)
|
||||
return NULL;
|
||||
|
||||
return mtk_crtc->dma_dev;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -443,6 +443,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
|
|||
struct mtk_drm_private *private = drm->dev_private;
|
||||
struct mtk_drm_private *priv_n;
|
||||
struct device *dma_dev = NULL;
|
||||
struct drm_crtc *crtc;
|
||||
int ret, i, j;
|
||||
|
||||
if (drm_firmware_drivers_only())
|
||||
|
|
@ -519,7 +520,9 @@ static int mtk_drm_kms_init(struct drm_device *drm)
|
|||
}
|
||||
|
||||
/* Use OVL device for all DMA memory allocations */
|
||||
dma_dev = mtk_drm_crtc_dma_dev_get(drm_crtc_from_index(drm, 0));
|
||||
crtc = drm_crtc_from_index(drm, 0);
|
||||
if (crtc)
|
||||
dma_dev = mtk_drm_crtc_dma_dev_get(crtc);
|
||||
if (!dma_dev) {
|
||||
ret = -ENODEV;
|
||||
dev_err(drm->dev, "Need at least one OVL device\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user