diff --git a/config/gki_holidisp.conf b/config/gki_holidisp.conf index 6df5fa7e71..ce2c475e51 100644 --- a/config/gki_holidisp.conf +++ b/config/gki_holidisp.conf @@ -13,3 +13,6 @@ export CONFIG_DRM_MSM_REGISTER_LOGGING=y export CONFIG_QCOM_MDSS_PLL=y export CONFIG_DRM_SDE_RSC=n export CONFIG_DISPLAY_BUILD=m +export CONFIG_MSM_SDE_ROTATOR=y +export CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG=y +export CONFIG_MSM_SDE_ROTATOR_INIT_ONLY=y diff --git a/config/gki_holidispconf.h b/config/gki_holidispconf.h index 378d3216bb..535c20d518 100644 --- a/config/gki_holidispconf.h +++ b/config/gki_holidispconf.h @@ -12,3 +12,6 @@ #define CONFIG_DRM_SDE_EVTLOG_DEBUG 1 #define CONFIG_QCOM_MDSS_PLL 1 #define CONFIG_GKI_DISPLAY 1 +#define CONFIG_MSM_SDE_ROTATOR 1 +#define CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG 1 +#define CONFIG_MSM_SDE_ROTATOR_INIT_ONLY 1 diff --git a/msm/msm_drv.c b/msm/msm_drv.c index d7bc641fed..65dd98fd5e 100644 --- a/msm/msm_drv.c +++ b/msm/msm_drv.c @@ -860,6 +860,10 @@ static int msm_drm_component_init(struct device *dev) goto fail; } + /* Register rotator platform driver only after genpd init */ + sde_rotator_register(); + sde_rotator_smmu_driver_register(); + ret = msm_drm_display_thread_create(param, priv, ddev, dev); if (ret) { dev_err(dev, "msm_drm_display_thread_create failed\n"); @@ -2198,8 +2202,6 @@ static int __init msm_drm_register(void) msm_hdcp_register(); dp_display_register(); msm_smmu_driver_init(); - sde_rotator_register(); - sde_rotator_smmu_driver_register(); msm_dsi_register(); msm_edp_register(); msm_hdmi_register(); diff --git a/msm/msm_drv.h b/msm/msm_drv.h index a16da105e7..abb02fcc6d 100644 --- a/msm/msm_drv.h +++ b/msm/msm_drv.h @@ -1294,25 +1294,25 @@ static inline void __exit sde_wb_unregister(void) #endif /* CONFIG_DRM_SDE_WB */ #if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR) -void __init sde_rotator_register(void); -void __exit sde_rotator_unregister(void); +void sde_rotator_register(void); +void sde_rotator_unregister(void); #else -static inline void __init sde_rotator_register(void) +static inline void sde_rotator_register(void) { } -static inline void __exit sde_rotator_unregister(void) +static inline void sde_rotator_unregister(void) { } #endif /* CONFIG_MSM_SDE_ROTATOR */ #if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR) -void __init sde_rotator_smmu_driver_register(void); -void __exit sde_rotator_smmu_driver_unregister(void); +void sde_rotator_smmu_driver_register(void); +void sde_rotator_smmu_driver_unregister(void); #else -static inline void __init sde_rotator_smmu_driver_register(void) +static inline void sde_rotator_smmu_driver_register(void) { } -static inline void __exit sde_rotator_smmu_driver_unregister(void) +static inline void sde_rotator_smmu_driver_unregister(void) { } #endif /* CONFIG_MSM_SDE_ROTATOR */ diff --git a/rotator/sde_rotator_debug.c b/rotator/sde_rotator_debug.c index 42a5272529..181620f8dc 100644 --- a/rotator/sde_rotator_debug.c +++ b/rotator/sde_rotator_debug.c @@ -50,6 +50,8 @@ #define SDE_ROT_TEST_MASK(id, tp) ((id << 4) | (tp << 1) | BIT(0)) +#if defined(CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG) && \ + defined(CONFIG_DEBUG_FS) static DEFINE_SPINLOCK(sde_rot_xlock); /* @@ -1358,3 +1360,4 @@ void sde_rotator_destroy_debugfs(struct dentry *debugfs) { debugfs_remove_recursive(debugfs); } +#endif diff --git a/rotator/sde_rotator_dev.c b/rotator/sde_rotator_dev.c index 1c9dbe2f9c..d54f47f2a4 100644 --- a/rotator/sde_rotator_dev.c +++ b/rotator/sde_rotator_dev.c @@ -52,7 +52,7 @@ #define SDE_ROTATOR_ADD_REQUEST 1 #define SDE_ROTATOR_REMOVE_REQUEST 0 - +#ifndef CONFIG_MSM_SDE_ROTATOR_INIT_ONLY static void sde_rotator_submit_handler(struct kthread_work *work); static void sde_rotator_retire_handler(struct kthread_work *work); #ifdef CONFIG_COMPAT @@ -2844,7 +2844,6 @@ static const struct v4l2_ioctl_ops sde_rotator_ioctl_ops = { .vidioc_g_parm = sde_rotator_g_parm, .vidioc_s_parm = sde_rotator_s_parm, .vidioc_default = sde_rotator_private_ioctl, - .vidioc_log_status = v4l2_ctrl_log_status, .vidioc_subscribe_event = sde_rotator_ctrl_subscribe_event, .vidioc_unsubscribe_event = sde_rotator_event_unsubscribe, }; @@ -3373,6 +3372,7 @@ static struct v4l2_m2m_ops sde_rotator_m2m_ops = { .job_abort = sde_rotator_job_abort, .job_ready = sde_rotator_job_ready, }; +#endif /* Device tree match struct */ static const struct of_device_id sde_rotator_dt_match[] = { @@ -3383,6 +3383,7 @@ static const struct of_device_id sde_rotator_dt_match[] = { {} }; +#ifndef CONFIG_MSM_SDE_ROTATOR_INIT_ONLY /* * sde_rotator_get_drv_data - rotator device driver data. * @dev: Pointer to device. @@ -3580,12 +3581,42 @@ static struct platform_driver rotator_driver = { }, }; -void __init sde_rotator_register(void) +#else +/* + * sde_rotator_probe - rotator device probe method. + * @pdev: Pointer to rotator platform device. + */ +static int sde_rotator_probe(struct platform_device *pdev) +{ + return 0; +} + +/* + * sde_rotator_remove - rotator device remove method. + * @pdev: Pointer rotator platform device. + */ +static int sde_rotator_remove(struct platform_device *pdev) +{ + return 0; +} + +/* SDE Rotator platform driver definition */ +static struct platform_driver rotator_driver = { + .probe = sde_rotator_probe, + .remove = sde_rotator_remove, + .driver = { + .name = SDE_ROTATOR_DRV_NAME, + .of_match_table = sde_rotator_dt_match, + }, +}; +#endif + +void sde_rotator_register(void) { platform_driver_register(&rotator_driver); } -void __exit sde_rotator_unregister(void) +void sde_rotator_unregister(void) { platform_driver_unregister(&rotator_driver); } diff --git a/rotator/sde_rotator_dev.h b/rotator/sde_rotator_dev.h index 8091ae02c5..d83e9d7f74 100644 --- a/rotator/sde_rotator_dev.h +++ b/rotator/sde_rotator_dev.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #ifndef __SDE_ROTATOR_DEV_H__ @@ -215,7 +215,9 @@ struct sde_rotator_device { struct device *dev; struct v4l2_device v4l2_dev; struct video_device *vdev; +#ifndef CONFIG_MSM_SDE_ROTATOR_INIT_ONLY struct v4l2_m2m_dev *m2m_dev; +#endif struct platform_device *pdev; const void *drvdata; u32 early_submit; diff --git a/rotator/sde_rotator_r1_debug.c b/rotator/sde_rotator_r1_debug.c index 06bc11c3cd..8dff33de99 100644 --- a/rotator/sde_rotator_r1_debug.c +++ b/rotator/sde_rotator_r1_debug.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "%s: " fmt, __func__ @@ -16,6 +16,8 @@ #include "sde_rotator_r1.h" #include "sde_rotator_r1_internal.h" +#if defined(CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG) && \ + defined(CONFIG_DEBUG_FS) /* * sde_rotator_r1_create_debugfs - Setup rotator r1 debugfs directory structure. * @rot_dev: Pointer to rotator device @@ -34,3 +36,4 @@ int sde_rotator_r1_create_debugfs(struct sde_rot_mgr *mgr, return 0; } +#endif diff --git a/rotator/sde_rotator_r3_debug.c b/rotator/sde_rotator_r3_debug.c index d2060afb0f..267eee54b6 100644 --- a/rotator/sde_rotator_r3_debug.c +++ b/rotator/sde_rotator_r3_debug.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "%s: " fmt, __func__ @@ -16,6 +16,8 @@ #include "sde_rotator_r3.h" #include "sde_rotator_r3_internal.h" +#if defined(CONFIG_MSM_SDE_ROTATOR_EVTLOG_DEBUG) && \ + defined(CONFIG_DEBUG_FS) /* * sde_rotator_r3_create_debugfs - Setup rotator r3 debugfs directory structure. * @rot_dev: Pointer to rotator device @@ -68,3 +70,4 @@ int sde_rotator_r3_create_debugfs(struct sde_rot_mgr *mgr, return 0; } +#endif diff --git a/rotator/sde_rotator_smmu.c b/rotator/sde_rotator_smmu.c index 6a623bb684..cf37bd92cc 100644 --- a/rotator/sde_rotator_smmu.c +++ b/rotator/sde_rotator_smmu.c @@ -671,12 +671,12 @@ static struct platform_driver sde_smmu_driver = { }, }; -void __init sde_rotator_smmu_driver_register(void) +void sde_rotator_smmu_driver_register(void) { platform_driver_register(&sde_smmu_driver); } -void __exit sde_rotator_smmu_driver_unregister(void) +void sde_rotator_smmu_driver_unregister(void) { platform_driver_unregister(&sde_smmu_driver); } diff --git a/rotator/sde_rotator_sync.c b/rotator/sde_rotator_sync.c index a4f28cfe05..4f7f54aa62 100644 --- a/rotator/sde_rotator_sync.c +++ b/rotator/sde_rotator_sync.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2020, The Linux Foundation. All rights reserved. */ #define pr_fmt(fmt) "%s: " fmt, __func__ @@ -148,7 +148,7 @@ static void sde_rot_fence_release(struct dma_fence *fence) list_del(&f->fence_list); spin_unlock_irqrestore(fence->lock, flags); sde_rotator_put_timeline(to_sde_rot_timeline(fence)); - kfree_rcu(f, base.rcu); + kfree(f); } static void sde_rot_fence_value_str(struct dma_fence *fence, char *str,