Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1699867 > unrolled thread

[PATCH 0/6] drm/rockchip: Some fixes

Started byMark Yao <mark.yao@rock-chips.com>
First post2017-07-31 12:00 +0200
Last post2017-08-09 15:40 +0200
Articles 12 — 6 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/6] drm/rockchip: Some fixes Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
    [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
      Re: [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error Sandy Huang <sandy.huang@rock-chips.com> - 2017-08-04 03:00 +0200
    [PATCH 5/6] drm/rockchip: vop: report error when check resource error Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
      Re: [PATCH 5/6] drm/rockchip: vop: report error when check resource  error Sandy Huang <sandy.huang@rock-chips.com> - 2017-08-04 03:00 +0200
    [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Mark Yao <mark.yao@rock-chips.com> - 2017-07-31 12:00 +0200
      Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Emil Velikov <emil.l.velikov@gmail.com> - 2017-07-31 14:00 +0200
        Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Daniel Vetter <daniel@ffwll.ch> - 2017-07-31 14:30 +0200
          Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev Mark yao <mark.yao@rock-chips.com> - 2017-08-01 04:10 +0200
      [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev Mark Yao <mark.yao@rock-chips.com> - 2017-08-01 10:20 +0200
        Re: [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev Sandy Huang <sandy.huang@rock-chips.com> - 2017-08-04 05:30 +0200
    Re: [PATCH 0/6] drm/rockchip: Some fixes Sean Paul <seanpaul@chromium.org> - 2017-08-09 15:40 +0200

#1699867 — [PATCH 0/6] drm/rockchip: Some fixes

FromMark Yao <mark.yao@rock-chips.com>
Date2017-07-31 12:00 +0200
Subject[PATCH 0/6] drm/rockchip: Some fixes
Message-ID<u9fuO-4AR-15@gated-at.bofh.it>
Here are some fixes port from rockchip_linux project[0],

Tested on rk3399 and rk3288 board.

[0]: https://github.com/rockchip-linux/kernel

Mark Yao (6):
  drm/rockchip: vop: no need wait vblank on crtc enable
  drm/rockchip: vop: fix iommu page fault when resume
  drm/rockchip: vop: fix NV12 video display error
  drm/rockchip: vop: round_up pitches to word align
  drm/rockchip: vop: report error when check resource error
  drm/rockchip: fix race with kms hotplug and fbdev

 drivers/gpu/drm/rockchip/rockchip_drm_fb.c  |  2 +-
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 77 ++++++++---------------------
 drivers/gpu/drm/rockchip/rockchip_drm_vop.h |  3 ++
 3 files changed, 24 insertions(+), 58 deletions(-)

-- 
1.9.1

[toc] | [next] | [standalone]


#1699871 — [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error

FromMark Yao <mark.yao@rock-chips.com>
Date2017-07-31 12:00 +0200
Subject[PATCH 3/6] drm/rockchip: vop: fix NV12 video display error
Message-ID<u9fEu-4EG-15@gated-at.bofh.it>
In reply to#1699867
fixup the scale calculation formula on the case
src_height == (dst_height/2).

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
---
 drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
index af1091f..56bbd2e 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
@@ -299,6 +299,9 @@ static inline uint16_t scl_get_bili_dn_vskip(int src_h, int dst_h,
 
 	act_height = (src_h + vskiplines - 1) / vskiplines;
 
+	if (act_height == dst_h)
+		return GET_SCL_FT_BILI_DN(src_h, dst_h) / vskiplines;
+
 	return GET_SCL_FT_BILI_DN(act_height, dst_h);
 }
 
-- 
1.9.1

[toc] | [prev] | [next] | [standalone]


#1703570 — Re: [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error

FromSandy Huang <sandy.huang@rock-chips.com>
Date2017-08-04 03:00 +0200
SubjectRe: [PATCH 3/6] drm/rockchip: vop: fix NV12 video display error
Message-ID<uaz85-7YP-15@gated-at.bofh.it>
In reply to#1699871
Hi mark,

在 2017/7/31 17:49, Mark Yao 写道:
> fixup the scale calculation formula on the case
> src_height == (dst_height/2).
> 
> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
> index af1091f..56bbd2e 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.h
> @@ -299,6 +299,9 @@ static inline uint16_t scl_get_bili_dn_vskip(int src_h, int dst_h,
>   
>   	act_height = (src_h + vskiplines - 1) / vskiplines;
>   
> +	if (act_height == dst_h)
> +		return GET_SCL_FT_BILI_DN(src_h, dst_h) / vskiplines;
> +
>   	return GET_SCL_FT_BILI_DN(act_height, dst_h);
>   }
>   
> 

Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>

[toc] | [prev] | [next] | [standalone]


#1699872 — [PATCH 5/6] drm/rockchip: vop: report error when check resource error

FromMark Yao <mark.yao@rock-chips.com>
Date2017-07-31 12:00 +0200
Subject[PATCH 5/6] drm/rockchip: vop: report error when check resource error
Message-ID<u9fEu-4EG-19@gated-at.bofh.it>
In reply to#1699867
The user would be confused while facing a error commit without
any error report.

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
---
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index fa0d9f7..999c2e0 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -674,8 +674,10 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
 	 * Src.x1 can be odd when do clip, but yuv plane start point
 	 * need align with 2 pixel.
 	 */
-	if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2))
+	if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2)) {
+		DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n");
 		return -EINVAL;
+	}
 
 	return 0;
 }
-- 
1.9.1

[toc] | [prev] | [next] | [standalone]


#1703569 — Re: [PATCH 5/6] drm/rockchip: vop: report error when check resource error

FromSandy Huang <sandy.huang@rock-chips.com>
Date2017-08-04 03:00 +0200
SubjectRe: [PATCH 5/6] drm/rockchip: vop: report error when check resource error
Message-ID<uaz85-7YP-5@gated-at.bofh.it>
In reply to#1699872
Hi mark,

在 2017/7/31 17:49, Mark Yao 写道:
> The user would be confused while facing a error commit without
> any error report.
> 
> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index fa0d9f7..999c2e0 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -674,8 +674,10 @@ static int vop_plane_atomic_check(struct drm_plane *plane,
>   	 * Src.x1 can be odd when do clip, but yuv plane start point
>   	 * need align with 2 pixel.
>   	 */
> -	if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2))
> +	if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2)) {
> +		DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n");
>   		return -EINVAL;
> +	}
>   
>   	return 0;
>   }
> 

Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>

[toc] | [prev] | [next] | [standalone]


#1699873 — [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev

FromMark Yao <mark.yao@rock-chips.com>
Date2017-07-31 12:00 +0200
Subject[PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev
Message-ID<u9fEu-4EG-25@gated-at.bofh.it>
In reply to#1699867
Since fb_helper is not a pointer on rockchip_drm_private, it's no
need to check pointer.

Kms hotplug event may race into fbdev helper initial, and fb_helper->dev
may be NULL pointer, that would cause the bug:

[    0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000
[    0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[    0.736648] Modules linked in:
[    0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20
[    0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT)
[    0.738020] Workqueue: events cdn_dp_pd_event_work
[    0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000
[    0.739109] PC is at mutex_lock+0x14/0x44
[    0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114
[    0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44
[    0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114
[    0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20
[    0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34
[    0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4
[    0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0
[    0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404
[    0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0
[    0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
---
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index 81f9548..e6bd0f4 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev)
 	struct rockchip_drm_private *private = dev->dev_private;
 	struct drm_fb_helper *fb_helper = &private->fbdev_helper;
 
-	if (fb_helper)
+	if (fb_helper->dev)
 		drm_fb_helper_hotplug_event(fb_helper);
 }
 
-- 
1.9.1

[toc] | [prev] | [next] | [standalone]


#1699969 — Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev

FromEmil Velikov <emil.l.velikov@gmail.com>
Date2017-07-31 14:00 +0200
SubjectRe: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev
Message-ID<u9hwC-5Pp-11@gated-at.bofh.it>
In reply to#1699873
On 31 July 2017 at 10:50, Mark Yao <mark.yao@rock-chips.com> wrote:
> Since fb_helper is not a pointer on rockchip_drm_private, it's no
> need to check pointer.
>
> Kms hotplug event may race into fbdev helper initial, and fb_helper->dev
> may be NULL pointer, that would cause the bug:
>
> [    0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000
> [    0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP
> [    0.736648] Modules linked in:
> [    0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20
> [    0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT)
> [    0.738020] Workqueue: events cdn_dp_pd_event_work
> [    0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000
> [    0.739109] PC is at mutex_lock+0x14/0x44
> [    0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114
> [    0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44
> [    0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114
> [    0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20
> [    0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34
> [    0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4
> [    0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0
> [    0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404
> [    0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0
> [    0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40
>
> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
> ---
>  drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index 81f9548..e6bd0f4 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev)
>         struct rockchip_drm_private *private = dev->dev_private;
>         struct drm_fb_helper *fb_helper = &private->fbdev_helper;
>
> -       if (fb_helper)
> +       if (fb_helper->dev)
>                 drm_fb_helper_hotplug_event(fb_helper);
Food for thought:

Quick grep shows that no other drivers have such a ->dev check. Does
this mean that either the issue is rockchip specific?
If not, one could look into resolving the problem directly in drm core.

Or at least update the other users, so they don't stumble upon the problem?

HTH
Emil

[toc] | [prev] | [next] | [standalone]


#1699998 — Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev

FromDaniel Vetter <daniel@ffwll.ch>
Date2017-07-31 14:30 +0200
SubjectRe: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev
Message-ID<u9hZF-6eS-33@gated-at.bofh.it>
In reply to#1699969
On Mon, Jul 31, 2017 at 1:57 PM, Emil Velikov <emil.l.velikov@gmail.com> wrote:
> On 31 July 2017 at 10:50, Mark Yao <mark.yao@rock-chips.com> wrote:
>> Since fb_helper is not a pointer on rockchip_drm_private, it's no
>> need to check pointer.
>>
>> Kms hotplug event may race into fbdev helper initial, and fb_helper->dev
>> may be NULL pointer, that would cause the bug:
>>
>> [    0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000
>> [    0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP
>> [    0.736648] Modules linked in:
>> [    0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20
>> [    0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT)
>> [    0.738020] Workqueue: events cdn_dp_pd_event_work
>> [    0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000
>> [    0.739109] PC is at mutex_lock+0x14/0x44
>> [    0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114
>> [    0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44
>> [    0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114
>> [    0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20
>> [    0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34
>> [    0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4
>> [    0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0
>> [    0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404
>> [    0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0
>> [    0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40
>>
>> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
>> ---
>>  drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>> index 81f9548..e6bd0f4 100644
>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>> @@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev)
>>         struct rockchip_drm_private *private = dev->dev_private;
>>         struct drm_fb_helper *fb_helper = &private->fbdev_helper;
>>
>> -       if (fb_helper)
>> +       if (fb_helper->dev)
>>                 drm_fb_helper_hotplug_event(fb_helper);
> Food for thought:
>
> Quick grep shows that no other drivers have such a ->dev check. Does
> this mean that either the issue is rockchip specific?
> If not, one could look into resolving the problem directly in drm core.
>
> Or at least update the other users, so they don't stumble upon the problem?

The fbdev helpers support already handling hotplug events before you
have finalized the fbdev setup. Please read the kerneldoc for the
various fbdev functions, they explain what you should be doing. This
hack here should indeed not be needed.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

[toc] | [prev] | [next] | [standalone]


#1700582 — Re: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev

FromMark yao <mark.yao@rock-chips.com>
Date2017-08-01 04:10 +0200
SubjectRe: [PATCH 6/6] drm/rockchip: fix race with kms hotplug and fbdev
Message-ID<u9uNb-5Fp-9@gated-at.bofh.it>
In reply to#1699998
On 2017年07月31日 20:28, Daniel Vetter wrote:
> On Mon, Jul 31, 2017 at 1:57 PM, Emil Velikov <emil.l.velikov@gmail.com> wrote:
>> On 31 July 2017 at 10:50, Mark Yao <mark.yao@rock-chips.com> wrote:
>>> Since fb_helper is not a pointer on rockchip_drm_private, it's no
>>> need to check pointer.
>>>
>>> Kms hotplug event may race into fbdev helper initial, and fb_helper->dev
>>> may be NULL pointer, that would cause the bug:
>>>
>>> [    0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000
>>> [    0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP
>>> [    0.736648] Modules linked in:
>>> [    0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20
>>> [    0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT)
>>> [    0.738020] Workqueue: events cdn_dp_pd_event_work
>>> [    0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000
>>> [    0.739109] PC is at mutex_lock+0x14/0x44
>>> [    0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114
>>> [    0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44
>>> [    0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114
>>> [    0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20
>>> [    0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34
>>> [    0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4
>>> [    0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0
>>> [    0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404
>>> [    0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0
>>> [    0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40
>>>
>>> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
>>> ---
>>>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>>> index 81f9548..e6bd0f4 100644
>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
>>> @@ -170,7 +170,7 @@ static void rockchip_drm_output_poll_changed(struct drm_device *dev)
>>>          struct rockchip_drm_private *private = dev->dev_private;
>>>          struct drm_fb_helper *fb_helper = &private->fbdev_helper;
>>>
>>> -       if (fb_helper)
>>> +       if (fb_helper->dev)
>>>                  drm_fb_helper_hotplug_event(fb_helper);
>> Food for thought:
>>
>> Quick grep shows that no other drivers have such a ->dev check. Does
>> this mean that either the issue is rockchip specific?
>> If not, one could look into resolving the problem directly in drm core.
>>
>> Or at least update the other users, so they don't stumble upon the problem?
> The fbdev helpers support already handling hotplug events before you
> have finalized the fbdev setup. Please read the kerneldoc for the
> various fbdev functions, they explain what you should be doing. This
> hack here should indeed not be needed.
> -Daniel

Hi Daniel

Right, the doc[0] already detail this:
     It is possible, though perhaps somewhat tricky, to implement race-free hotplug detection using
     the fbdev helpers. The drm_fb_helper_prepare() helper must be called first to initialize the
     minimum required to make hotplug detection work.Drivers also need to make sure to properly
     set up the drm_mode_config.funcs member. After calling drm_kms_helper_poll_init() it is safe to
     enable interrupts and start processing hotplug events.

The problem is drm/rockchip do the wrong initial, call drm_kms_helper_poll_init before fbdev setup.

will fix it at next version.

[0]: https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-kms-helpers.html#fbdev-helper-functions-reference

Best regards.

-- 
Mark Yao

[toc] | [prev] | [next] | [standalone]


#1700732 — [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev

FromMark Yao <mark.yao@rock-chips.com>
Date2017-08-01 10:20 +0200
Subject[PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev
Message-ID<u9Azf-Lh-7@gated-at.bofh.it>
In reply to#1699873
According to the kerneldoc[0], should do fbdev setup before calling
drm_kms_helper_poll_init(), otherwise, Kms hotplug event may race
into fbdev helper initial, and fb_helper->dev may be NULL pointer,
that would cause the bug:
[    0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000
[    0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[    0.736648] Modules linked in:
[    0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20
[    0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT)
[    0.738020] Workqueue: events cdn_dp_pd_event_work
[    0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000
[    0.739109] PC is at mutex_lock+0x14/0x44
[    0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114
[    0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44
[    0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114
[    0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20
[    0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34
[    0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4
[    0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0
[    0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404
[    0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0
[    0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40

[0]: https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-kms-helpers.html

Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
---
Changes in v1.1:
- According to the kerneldoc, fix the race bug in generic way.

 drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index 848edcf..c41f48a 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -161,22 +161,21 @@ static int rockchip_drm_bind(struct device *dev)
 	 */
 	drm_dev->irq_enabled = true;
 
-	/* init kms poll for handling hpd */
-	drm_kms_helper_poll_init(drm_dev);
-
 	ret = rockchip_drm_fbdev_init(drm_dev);
 	if (ret)
-		goto err_kms_helper_poll_fini;
+		goto err_unbind_all;
+
+	/* init kms poll for handling hpd */
+	drm_kms_helper_poll_init(drm_dev);
 
 	ret = drm_dev_register(drm_dev, 0);
 	if (ret)
-		goto err_fbdev_fini;
+		goto err_kms_helper_poll_fini;
 
 	return 0;
-err_fbdev_fini:
-	rockchip_drm_fbdev_fini(drm_dev);
 err_kms_helper_poll_fini:
 	drm_kms_helper_poll_fini(drm_dev);
+	rockchip_drm_fbdev_fini(drm_dev);
 err_unbind_all:
 	component_unbind_all(dev, drm_dev);
 err_mode_config_cleanup:
-- 
1.9.1

[toc] | [prev] | [next] | [standalone]


#1703623 — Re: [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev

FromSandy Huang <sandy.huang@rock-chips.com>
Date2017-08-04 05:30 +0200
SubjectRe: [PATCH v1.1] drm/rockchip: fix race with kms hotplug and fbdev
Message-ID<uaBtf-1rM-7@gated-at.bofh.it>
In reply to#1700732
Hi Mark,

在 2017/8/1 16:11, Mark Yao 写道:
> According to the kerneldoc[0], should do fbdev setup before calling
> drm_kms_helper_poll_init(), otherwise, Kms hotplug event may race
> into fbdev helper initial, and fb_helper->dev may be NULL pointer,
> that would cause the bug:
> [    0.735411] [00000200] *pgd=00000000f6ffe003, *pud=00000000f6ffe003, *pmd=0000000000000000
> [    0.736156] Internal error: Oops: 96000005 [#1] PREEMPT SMP
> [    0.736648] Modules linked in:
> [    0.736930] CPU: 2 PID: 20 Comm: kworker/2:0 Not tainted 4.4.41 #20
> [    0.737480] Hardware name: Rockchip RK3399 Board rev2 (BOX) (DT)
> [    0.738020] Workqueue: events cdn_dp_pd_event_work
> [    0.738447] task: ffffffc0f21f3100 ti: ffffffc0f2218000 task.ti: ffffffc0f2218000
> [    0.739109] PC is at mutex_lock+0x14/0x44
> [    0.739469] LR is at drm_fb_helper_hotplug_event+0x30/0x114
> [    0.756253] [<ffffff8008a344f4>] mutex_lock+0x14/0x44
> [    0.756260] [<ffffff8008445708>] drm_fb_helper_hotplug_event+0x30/0x114
> [    0.756271] [<ffffff8008473c84>] rockchip_drm_output_poll_changed+0x18/0x20
> [    0.756280] [<ffffff8008439fcc>] drm_kms_helper_hotplug_event+0x28/0x34
> [    0.756286] [<ffffff800846c444>] cdn_dp_pd_event_work+0x394/0x3c4
> [    0.756295] [<ffffff80080b2b38>] process_one_work+0x218/0x3e0
> [    0.756302] [<ffffff80080b3538>] worker_thread+0x2e8/0x404
> [    0.756308] [<ffffff80080b7e70>] kthread+0xe8/0xf0
> [    0.756316] [<ffffff8008082690>] ret_from_fork+0x10/0x40
> 
> [0]: https://01.org/linuxgraphics/gfx-docs/drm/gpu/drm-kms-helpers.html
> 
> Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
> ---
> Changes in v1.1:
> - According to the kerneldoc, fix the race bug in generic way.
> 
>   drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 13 ++++++-------
>   1 file changed, 6 insertions(+), 7 deletions(-)
> 
Reviewed-by: Sandy huang <sandy.huang@rock-chips.com>

[toc] | [prev] | [next] | [standalone]


#1707341

FromSean Paul <seanpaul@chromium.org>
Date2017-08-09 15:40 +0200
Message-ID<ucznj-7Gt-15@gated-at.bofh.it>
In reply to#1699867
On Mon, Jul 31, 2017 at 5:49 AM, Mark Yao <mark.yao@rock-chips.com> wrote:
> Here are some fixes port from rockchip_linux project[0],
>
> Tested on rk3399 and rk3288 board.
>
> [0]: https://github.com/rockchip-linux/kernel
>
> Mark Yao (6):
>   drm/rockchip: vop: no need wait vblank on crtc enable
>   drm/rockchip: vop: fix iommu page fault when resume
>   drm/rockchip: vop: fix NV12 video display error
>   drm/rockchip: vop: round_up pitches to word align
>   drm/rockchip: vop: report error when check resource error
>   drm/rockchip: fix race with kms hotplug and fbdev


Hi Mark,
I noticed you applied this set to both -misc-next and -misc-fixes. In
the future, please do not apply patches in both places.

Instead, consult the flowchart under "Where Do I Apply My Patch?" at
https://01.org/linuxgraphics/gfx-docs/maintainer-tools/drm-misc.html
and choose the most appropriate place. If you are unsure, please reach
out to a -misc maintainer.

Thank you,

Sean

>
>  drivers/gpu/drm/rockchip/rockchip_drm_fb.c  |  2 +-
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 77 ++++++++---------------------
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.h |  3 ++
>  3 files changed, 24 insertions(+), 58 deletions(-)
>
> --
> 1.9.1
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web