Re: [PATCH v9 20/23] drm/rockchip: Make VOP driver optional

Andy Yan
2022-03-30T12:50:14Z

Hi Sascha:

On 3/30/22 14:39, Sascha Hauer wrote:
> Hi Andy,
>
> On Tue, Mar 29, 2022 at 07:56:27PM +0800, Andy Yan wrote:
>> Hi Sascha:
>>
>> On 3/28/22 23:11, Sascha Hauer wrote:
>>> With upcoming VOP2 support VOP won't be the only choice anymore, so make
>>> the VOP driver optional.
>>>
>>> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
>>> ---
>>> drivers/gpu/drm/rockchip/Kconfig | 8 ++++++++
>>> drivers/gpu/drm/rockchip/Makefile | 3 ++-
>>> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 +-
>>> 3 files changed, 11 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig
>>> index fa5cfda4e90e3..7d22e2997a571 100644
>>> --- a/drivers/gpu/drm/rockchip/Kconfig
>>> +++ b/drivers/gpu/drm/rockchip/Kconfig
>>> @@ -23,8 +23,16 @@ config DRM_ROCKCHIP
>>> if DRM_ROCKCHIP
>>> +config ROCKCHIP_VOP
>>> + bool "Rockchip VOP driver"
>>> + default y
>>> + help
>>> + This selects support for the VOP driver. You should enable it
>>> + on all older SoCs up to RK3399.
> That reminds me that I wanted to rephrase this. Will change in next
> round.
>
>>> +
>>> config ROCKCHIP_ANALOGIX_DP
>>> bool "Rockchip specific extensions for Analogix DP driver"
>>> + depends on ROCKCHIP_VOP
>>
>> Aanlogix dp is also on vop2 base soc such as  rk356x and rk3588 .
> I added the dependency because analogix_dp-rockchip.c calls
> rockchip_drm_wait_vact_end() which is implemented in the VOP driver,
> so this driver currenty can't work with the VOP2 driver and can't
> be linked without the VOP driver being present.
> I'll add a few words to the commit message.

Maybe a better direction is move rockchip_drm_wait_vact_end from the VOP
driver to rockchip_drm_drv.c

int rockchip_drm_wait_vact_end(struct drm_crtc *crtc, unsigned int
mstimeout)
{
struct rockchip_drm_private *priv;
int pipe, ret = 0;

if (!crtc)
return -ENODEV;

if (mstimeout <= 0)
return -EINVAL;

priv = crtc->dev->dev_private;
pipe = drm_crtc_index(crtc);

if (priv->crtc_funcs[pipe] &&
priv->crtc_funcs[pipe]->wait_vact_end)
ret = priv->crtc_funcs[pipe]->wait_vact_end(crtc,
mstimeout);

return ret;
}
EXPORT_SYMBOL(rockchip_drm_wait_vact_end);

> Sascha
>
>