Przeglądaj źródła

Merge "disp: msm: register rotator platform driver after genpd init"

qctecmdr 4 lat temu
rodzic
commit
2cff4ac8e7

+ 3 - 0
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

+ 3 - 0
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

+ 4 - 2
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();

+ 8 - 8
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 */

+ 3 - 0
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

+ 35 - 4
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);
 }

+ 3 - 1
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;

+ 4 - 1
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

+ 4 - 1
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

+ 2 - 2
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);
 }

+ 2 - 2
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,