diff --git a/Makefile b/Makefile index d2c2148429..13f0321b25 100644 --- a/Makefile +++ b/Makefile @@ -10,8 +10,13 @@ LINUXINCLUDE += -include $(srctree)/techpack/display/config/konadispconf.h endif ifeq ($(CONFIG_ARCH_LAHAINA), y) -include $(srctree)/techpack/display/config/lahainadisp.conf + ifeq ($(CONFIG_QGKI), y) + include $(srctree)/techpack/display/config/lahainadisp.conf LINUXINCLUDE += -include $(srctree)/techpack/display/config/lahainadispconf.h + else + include $(srctree)/techpack/display/config/gki_lahainadisp.conf +LINUXINCLUDE += -include $(srctree)/techpack/display/config/gki_lahainadispconf.h + endif LINUXINCLUDE += \ -I$(srctree)/techpack/display/include/uapi/display \ -I$(srctree)/techpack/display/include @@ -36,4 +41,3 @@ endif obj-$(CONFIG_DRM_MSM) += msm/ obj-$(CONFIG_MSM_SDE_ROTATOR) += rotator/ -obj-$(CONFIG_HDCP_QSEECOM) += hdcp/ diff --git a/config/gki_lahainadisp.conf b/config/gki_lahainadisp.conf new file mode 100644 index 0000000000..55d89af4f6 --- /dev/null +++ b/config/gki_lahainadisp.conf @@ -0,0 +1,11 @@ +export CONFIG_DRM_MSM=y +export CONFIG_DRM_MSM_SDE=y +export CONFIG_SYNC_FILE=y +export CONFIG_DRM_MSM_DSI=y +export CONFIG_DRM_MSM_DP=y +export CONFIG_DSI_PARSER=y +export CONFIG_QCOM_MDSS_PLL=y +export CONFIG_DRM_SDE_WB=y +export CONFIG_DRM_MSM_REGISTER_LOGGING=y +export CONFIG_DRM_SDE_RSC=y +export CONFIG_DISPLAY_BUILD=m diff --git a/config/gki_lahainadispconf.h b/config/gki_lahainadispconf.h new file mode 100644 index 0000000000..50ddaab918 --- /dev/null +++ b/config/gki_lahainadispconf.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2020, The Linux Foundation. All rights reserved. + */ + +#define CONFIG_DRM_MSM 1 +#define CONFIG_DRM_MSM_SDE 1 +#define CONFIG_SYNC_FILE 1 +#define CONFIG_DRM_MSM_DSI 1 +#define CONFIG_DRM_MSM_DP 1 +#define CONFIG_DSI_PARSER 1 +#define CONFIG_DRM_SDE_WB 1 +#define CONFIG_DRM_MSM_REGISTER_LOGGING 1 +#define CONFIG_DRM_SDE_EVTLOG_DEBUG 1 +#define CONFIG_QCOM_MDSS_PLL 1 +#define CONFIG_GKI_DISPLAY 1 +#define CONFIG_DRM_SDE_RSC 1 + diff --git a/config/lahainadisp.conf b/config/lahainadisp.conf index 9579afad03..69feb2be18 100644 --- a/config/lahainadisp.conf +++ b/config/lahainadisp.conf @@ -1,4 +1,3 @@ -ifeq ($(CONFIG_QGKI),y) export CONFIG_DRM_MSM=y export CONFIG_DRM_MSM_SDE=y export CONFIG_DRM_MSM_DP=y @@ -9,4 +8,4 @@ export CONFIG_DRM_SDE_WB=y export CONFIG_DRM_MSM_REGISTER_LOGGING=y export CONFIG_QCOM_MDSS_PLL=y export CONFIG_DRM_SDE_RSC=y -endif +export CONFIG_DISPLAY_BUILD=y diff --git a/hdcp/Makefile b/hdcp/Makefile deleted file mode 100644 index a69c13e369..0000000000 --- a/hdcp/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-only - -obj-$(CONFIG_HDCP_QSEECOM) += msm_hdcp.o \ diff --git a/hdcp/msm_hdcp.c b/hdcp/msm_hdcp.c index c3e5c24473..039e8f26e3 100644 --- a/hdcp/msm_hdcp.c +++ b/hdcp/msm_hdcp.c @@ -328,18 +328,12 @@ static struct platform_driver msm_hdcp_driver = { } }; -static int __init msm_hdcp_init(void) +void __init msm_hdcp_register(void) { - return platform_driver_register(&msm_hdcp_driver); + platform_driver_register(&msm_hdcp_driver); } -static void __exit msm_hdcp_exit(void) +void __exit msm_hdcp_unregister(void) { - return platform_driver_unregister(&msm_hdcp_driver); + platform_driver_unregister(&msm_hdcp_driver); } - -module_init(msm_hdcp_init); -module_exit(msm_hdcp_exit); - -MODULE_DESCRIPTION("MSM HDCP driver"); -MODULE_LICENSE("GPL v2"); diff --git a/include/linux/sde_rsc.h b/include/linux/sde_rsc.h index bd5c9397cb..ecf2b4f510 100644 --- a/include/linux/sde_rsc.h +++ b/include/linux/sde_rsc.h @@ -141,7 +141,7 @@ struct sde_rsc_cmd_config { u32 prefill_lines; }; -#ifdef CONFIG_DRM_SDE_RSC +#if IS_ENABLED(CONFIG_DRM_SDE_RSC) /** * sde_rsc_client_create() - create the client for sde rsc. * Different displays like DSI, HDMI, DP, WB, etc should call this diff --git a/msm/Makefile b/msm/Makefile index 1e52c29881..56a2429341 100644 --- a/msm/Makefile +++ b/msm/Makefile @@ -2,6 +2,7 @@ ccflags-y := -I$(srctree)/include/drm -I$(srctree)/techpack/display/msm -I$(srctree)/techpack/display/msm/dsi -I$(srctree)/techpack/display/msm/dp ccflags-y += -I$(srctree)/techpack/display/msm/sde ccflags-y += -I$(srctree)/techpack/display/rotator +ccflags-y += -I$(srctree)/techpack/display/hdcp ccflags-y += -I$(srctree)/drivers/clk/qcom/ msm_drm-$(CONFIG_DRM_MSM_DP) += dp/dp_altmode.o \ @@ -127,4 +128,6 @@ msm_drm-$(CONFIG_DRM_MSM) += \ msm_smmu.o \ msm_prop.o \ -obj-$(CONFIG_DRM_MSM) += msm_drm.o +msm_drm-$(CONFIG_HDCP_QSEECOM) += ../hdcp/msm_hdcp.o \ + +obj-$(CONFIG_DISPLAY_BUILD) += msm_drm.o diff --git a/msm/dp/dp_display.c b/msm/dp/dp_display.c index 452c6c94b0..78686fd7d1 100644 --- a/msm/dp/dp_display.c +++ b/msm/dp/dp_display.c @@ -3347,22 +3347,13 @@ static struct platform_driver dp_display_driver = { }, }; -static int __init dp_display_init(void) +void __init dp_display_register(void) { - int ret; - ret = platform_driver_register(&dp_display_driver); - if (ret) { - DP_ERR("driver register failed\n"); - return ret; - } - - return ret; + platform_driver_register(&dp_display_driver); } -late_initcall(dp_display_init); -static void __exit dp_display_cleanup(void) +void __exit dp_display_unregister(void) { platform_driver_unregister(&dp_display_driver); } -module_exit(dp_display_cleanup); diff --git a/msm/dp/dp_display.h b/msm/dp/dp_display.h index d234d323ca..5c4f1bbd73 100644 --- a/msm/dp/dp_display.h +++ b/msm/dp/dp_display.h @@ -127,7 +127,7 @@ struct dp_display { bool wakeup); }; -#ifdef CONFIG_DRM_MSM_DP +#if IS_ENABLED(CONFIG_DRM_MSM_DP) int dp_display_get_num_of_displays(void); int dp_display_get_displays(void **displays, int count); int dp_display_get_num_of_streams(void); @@ -149,5 +149,5 @@ static inline int dp_connector_update_pps(struct drm_connector *connector, { return 0; } -#endif +#endif /* CONFIG_DRM_MSM_DP */ #endif /* _DP_DISPLAY_H_ */ diff --git a/msm/dp/dp_drm.h b/msm/dp/dp_drm.h index 086557fdd6..2f1f107d2d 100644 --- a/msm/dp/dp_drm.h +++ b/msm/dp/dp_drm.h @@ -24,7 +24,7 @@ struct dp_bridge { }; -#ifdef CONFIG_DRM_MSM_DP +#if IS_ENABLED(CONFIG_DRM_MSM_DP) /** * dp_connector_config_hdr - callback to configure HDR * @connector: Pointer to drm connector structure @@ -231,6 +231,6 @@ static inline void convert_to_drm_mode(const struct dp_display_mode *dp_mode, struct drm_display_mode *drm_mode) { } -#endif +#endif /* CONFIG_DRM_MSM_DP */ #endif /* _DP_DRM_H_ */ diff --git a/msm/dp/dp_mst_drm.h b/msm/dp/dp_mst_drm.h index 4be291b589..9d17bbf91c 100644 --- a/msm/dp/dp_mst_drm.h +++ b/msm/dp/dp_mst_drm.h @@ -12,7 +12,7 @@ #include "dp_display.h" -#ifdef CONFIG_DRM_MSM_DP_MST +#if IS_ENABLED(CONFIG_DRM_MSM_DP_MST) /** * dp_mst_drm_bridge_init - initialize mst bridge @@ -60,6 +60,6 @@ static inline int dp_mst_deinit(struct dp_display *dp_display) { return 0; } -#endif +#endif /* CONFIG_DRM_MSM_DP_MST */ #endif /* _DP_MST_DRM_H_ */ diff --git a/msm/dp/dp_usbpd.h b/msm/dp/dp_usbpd.h index bd7a639e11..8fcb855f49 100644 --- a/msm/dp/dp_usbpd.h +++ b/msm/dp/dp_usbpd.h @@ -46,7 +46,7 @@ struct dp_usbpd { bool debug_en; }; -#ifdef CONFIG_DRM_MSM_DP_USBPD_LEGACY +#if IS_ENABLED(CONFIG_DRM_MSM_DP_USBPD_LEGACY) /** * dp_usbpd_get() - setup usbpd module * diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index 0546d336f7..ba39abc53f 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -5059,6 +5059,17 @@ static int dsi_display_bind(struct device *dev, } } + /* Remove the panel vote that was added during dsi display probe */ + if (display->panel) { + rc = dsi_pwr_enable_regulator(&display->panel->power_info, + false); + if (rc) { + DSI_ERR("[%s] failed to disable vregs, rc=%d\n", + display->panel->name, rc); + goto error_host_deinit; + } + } + /* register te irq handler */ dsi_display_register_te_irq(display); @@ -5169,6 +5180,24 @@ static int dsi_display_init(struct dsi_display *display) goto end; } + /* + * Vote on panel regulator is added to make sure panel regulators + * are ON until dsi bind is completed for cont-splash enabled usecase. + * This panel regulator vote will be removed after bind is done. + * For GKI, adding this vote will make sure that sync_state + * kernel driver doesn't disable the panel regulators before + * splash_config() function adds vote for these regulators. + */ + if (display->panel) { + rc = dsi_pwr_enable_regulator(&display->panel->power_info, + true); + if (rc) { + DSI_ERR("[%s] failed to enable vregs, rc=%d\n", + display->panel->name, rc); + return rc; + } + } + rc = component_add(&pdev->dev, &dsi_display_comp_ops); if (rc) DSI_ERR("component add failed, rc=%d\n", rc); @@ -7765,17 +7794,17 @@ int dsi_display_unprepare(struct dsi_display *display) return rc; } -static int __init dsi_display_register(void) +void __init dsi_display_register(void) { dsi_phy_drv_register(); dsi_ctrl_drv_register(); dsi_display_parse_boot_display_selection(); - return platform_driver_register(&dsi_display_driver); + platform_driver_register(&dsi_display_driver); } -static void __exit dsi_display_unregister(void) +void __exit dsi_display_unregister(void) { platform_driver_unregister(&dsi_display_driver); dsi_ctrl_drv_unregister(); @@ -7789,5 +7818,3 @@ module_param_string(dsi_display1, dsi_display_secondary, MAX_CMDLINE_PARAM_LEN, 0600); MODULE_PARM_DESC(dsi_display1, "msm_drm.dsi_display1=: where is 'secondary dsi display node name' and where x represents index in the topology list"); -module_init(dsi_display_register); -module_exit(dsi_display_unregister); diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index 0311c6481c..1cdcc67088 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -3283,6 +3283,13 @@ struct dsi_panel *dsi_panel_get(struct device *parent, if (rc) DSI_DEBUG("failed to parse esd config, rc=%d\n", rc); + rc = dsi_panel_vreg_get(panel); + if (rc) { + DSI_ERR("[%s] failed to get panel regulators, rc=%d\n", + panel->name, rc); + goto error; + } + panel->power_mode = SDE_MODE_DPMS_OFF; drm_panel_init(&panel->drm_panel); panel->drm_panel.dev = &panel->mipi_device.dev; @@ -3290,11 +3297,13 @@ struct dsi_panel *dsi_panel_get(struct device *parent, rc = drm_panel_add(&panel->drm_panel); if (rc) - goto error; + goto error_vreg_put; mutex_init(&panel->panel_lock); return panel; +error_vreg_put: + (void)dsi_panel_vreg_put(panel); error: kfree(panel); return ERR_PTR(rc); @@ -3335,18 +3344,11 @@ int dsi_panel_drv_init(struct dsi_panel *panel, dev->lanes = 4; panel->host = host; - rc = dsi_panel_vreg_get(panel); - if (rc) { - DSI_ERR("[%s] failed to get panel regulators, rc=%d\n", - panel->name, rc); - goto exit; - } - rc = dsi_panel_pinctrl_init(panel); if (rc) { DSI_ERR("[%s] failed to init pinctrl, rc=%d\n", panel->name, rc); - goto error_vreg_put; + goto exit; } rc = dsi_panel_gpio_request(panel); @@ -3370,8 +3372,6 @@ error_gpio_release: (void)dsi_panel_gpio_release(panel); error_pinctrl_deinit: (void)dsi_panel_pinctrl_deinit(panel); -error_vreg_put: - (void)dsi_panel_vreg_put(panel); exit: mutex_unlock(&panel->panel_lock); return rc; diff --git a/msm/msm_drv.c b/msm/msm_drv.c index 765890d822..653a047738 100644 --- a/msm/msm_drv.c +++ b/msm/msm_drv.c @@ -704,7 +704,6 @@ static struct msm_kms *_msm_drm_component_init_helper( return kms; } priv->kms = kms; - pm_runtime_enable(dev); /** * Since kms->funcs->hw_init(kms) might call @@ -762,6 +761,14 @@ static int msm_drm_device_init(struct platform_device *pdev, goto dbg_init_fail; } + pm_runtime_enable(dev); + + ret = pm_runtime_get_sync(dev); + if (ret < 0) { + dev_err(dev, "resource enable failed: %d\n", ret); + goto pm_runtime_error; + } + for (i = 0; i < SDE_POWER_HANDLE_DBUS_ID_MAX; i++) sde_power_data_bus_set_quota(&priv->phandle, i, SDE_POWER_HANDLE_CONT_SPLASH_BUS_AB_QUOTA, @@ -769,6 +776,8 @@ static int msm_drm_device_init(struct platform_device *pdev, return ret; +pm_runtime_error: + sde_dbg_destroy(); dbg_init_fail: sde_power_resource_deinit(pdev, &priv->phandle); power_init_fail: @@ -1927,6 +1936,30 @@ static const struct component_master_ops msm_drm_ops = { .unbind = msm_drm_unbind, }; +static int msm_drm_component_dependency_check(struct device *dev) +{ + struct device_node *node; + struct device_node *np = dev->of_node; + unsigned int i; + + if (!of_device_is_compatible(dev->of_node, "qcom,sde-kms")) + return 0; + + for (i = 0; ; i++) { + node = of_parse_phandle(np, "connectors", i); + if (!node) + break; + + if (of_node_name_eq(node,"qcom,sde_rscc") && + of_device_is_available(node) && + !of_node_check_flag(node, OF_POPULATED)) { + dev_err(dev, "qcom,sde_rscc device not probed yet\n"); + return -EPROBE_DEFER; + } + } + + return 0; +} /* * Platform driver: */ @@ -1936,6 +1969,10 @@ static int msm_pdev_probe(struct platform_device *pdev) int ret; struct component_match *match = NULL; + ret = msm_drm_component_dependency_check(&pdev->dev); + if (ret) + return ret; + ret = msm_drm_device_init(pdev, &msm_driver); if (ret) return ret; @@ -2008,10 +2045,18 @@ static int __init msm_drm_register(void) return -EINVAL; DBG("init"); + sde_rsc_rpmh_register(); + sde_rsc_register(); + dsi_display_register(); + 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(); + sde_wb_register(); return platform_driver_register(&msm_platform_driver); } @@ -2019,10 +2064,17 @@ static void __exit msm_drm_unregister(void) { DBG("fini"); platform_driver_unregister(&msm_platform_driver); + sde_wb_unregister(); msm_hdmi_unregister(); msm_edp_unregister(); msm_dsi_unregister(); + sde_rotator_smmu_driver_unregister(); + sde_rotator_unregister(); msm_smmu_driver_cleanup(); + msm_hdcp_unregister(); + dp_display_unregister(); + dsi_display_unregister(); + sde_rsc_unregister(); } module_init(msm_drm_register); diff --git a/msm/msm_drv.h b/msm/msm_drv.h index c74468f896..1d76071372 100644 --- a/msm/msm_drv.h +++ b/msm/msm_drv.h @@ -1101,7 +1101,7 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev); void msm_fbdev_free(struct drm_device *dev); struct hdmi; -#ifdef CONFIG_DRM_MSM_HDMI +#if IS_ENABLED(CONFIG_DRM_MSM_HDMI) int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev, struct drm_encoder *encoder); void __init msm_hdmi_register(void); @@ -1113,10 +1113,10 @@ static inline void __init msm_hdmi_register(void) static inline void __exit msm_hdmi_unregister(void) { } -#endif +#endif /* CONFIG_DRM_MSM_HDMI */ struct msm_edp; -#ifdef CONFIG_DRM_MSM_EDP +#if IS_ENABLED(CONFIG_DRM_MSM_EDP) void __init msm_edp_register(void); void __exit msm_edp_unregister(void); int msm_edp_modeset_init(struct msm_edp *edp, struct drm_device *dev, @@ -1134,7 +1134,7 @@ static inline int msm_edp_modeset_init(struct msm_edp *edp, { return -EINVAL; } -#endif +#endif /* CONFIG_DRM_MSM_EDP */ struct msm_dsi; @@ -1147,12 +1147,7 @@ struct msm_dsi; */ void msm_mode_object_event_notify(struct drm_mode_object *obj, struct drm_device *dev, struct drm_event *event, u8 *payload); -#ifndef CONFIG_DRM_MSM_DSI -void __init msm_dsi_register(void); -void __exit msm_dsi_unregister(void); -int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev, - struct drm_encoder *encoder); -#else +#if IS_ENABLED(CONFIG_DRM_MSM_DSI) static inline void __init msm_dsi_register(void) { } @@ -1165,9 +1160,14 @@ static inline int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, { return -EINVAL; } -#endif +#else +void __init msm_dsi_register(void); +void __exit msm_dsi_unregister(void); +int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev, + struct drm_encoder *encoder); +#endif /* CONFIG_DRM_MSM_DSI */ -#ifdef CONFIG_DRM_MSM_MDP5 +#if IS_ENABLED(CONFIG_DRM_MSM_MDP5) void __init msm_mdp_register(void); void __exit msm_mdp_unregister(void); #else @@ -1177,7 +1177,7 @@ static inline void __init msm_mdp_register(void) static inline void __exit msm_mdp_unregister(void) { } -#endif +#endif /* CONFIG_DRM_MSM_MDP5 */ #ifdef CONFIG_DEBUG_FS void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m); @@ -1200,6 +1200,94 @@ static inline void msm_rd_debugfs_cleanup(struct msm_drm_private *priv) {} static inline void msm_perf_debugfs_cleanup(struct msm_drm_private *priv) {} #endif +#if IS_ENABLED(CONFIG_DRM_MSM_DSI) +void __init dsi_display_register(void); +void __exit dsi_display_unregister(void); +#else +static inline void __init dsi_display_register(void) +{ +} +static inline void __exit dsi_display_unregister(void) +{ +} +#endif /* CONFIG_DRM_MSM_DSI */ + +#if IS_ENABLED(CONFIG_HDCP_QSEECOM) +void __init msm_hdcp_register(void); +void __exit msm_hdcp_unregister(void); +#else +static inline void __init msm_hdcp_register(void) +{ +} +static inline void __exit msm_hdcp_unregister(void) +{ +} +#endif /* CONFIG_HDCP_QSEECOM */ + +#if IS_ENABLED(CONFIG_DRM_MSM_DP) +void __init dp_display_register(void); +void __exit dp_display_unregister(void); +#else +static inline void __init dp_display_register(void) +{ +} +static inline void __exit dp_display_unregister(void) +{ +} +#endif /* CONFIG_DRM_MSM_DP */ + +#if IS_ENABLED(CONFIG_DRM_SDE_RSC) +void __init sde_rsc_register(void); +void __exit sde_rsc_unregister(void); +void __init sde_rsc_rpmh_register(void); +#else +static inline void __init sde_rsc_register(void) +{ +} +static inline void __exit sde_rsc_unregister(void) +{ +} +static inline void __init sde_rsc_rpmh_register(void) +{ +} +#endif /* CONFIG_DRM_SDE_RSC */ + +#if IS_ENABLED(CONFIG_DRM_SDE_WB) +void __init sde_wb_register(void); +void __exit sde_wb_unregister(void); +#else +static inline void __init sde_wb_register(void) +{ +} +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); +#else +static inline void __init sde_rotator_register(void) +{ +} +static inline void __exit 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); +#else +static inline void __init sde_rotator_smmu_driver_register(void) +{ +} +static inline void __exit sde_rotator_smmu_driver_unregister(void) +{ +} +#endif /* CONFIG_MSM_SDE_ROTATOR */ + struct clk *msm_clk_get(struct platform_device *pdev, const char *name); int msm_clk_bulk_get(struct device *dev, struct clk_bulk_data **bulk); diff --git a/msm/msm_kms.h b/msm/msm_kms.h index 84e4da17a1..e05349dcb6 100644 --- a/msm/msm_kms.h +++ b/msm/msm_kms.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. * Copyright (C) 2013 Red Hat * Author: Rob Clark * @@ -163,7 +163,7 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev); static inline struct msm_kms *mdp4_kms_init(struct drm_device *dev) { return NULL; }; #endif -#ifdef CONFIG_DRM_MSM_MDP5 +#if IS_ENABLED(CONFIG_DRM_MSM_MDP5) struct msm_kms *mdp5_kms_init(struct drm_device *dev); int msm_mdss_init(struct drm_device *dev); void msm_mdss_destroy(struct drm_device *dev); @@ -190,7 +190,7 @@ static inline int msm_mdss_disable(struct msm_mdss *mdss) { return 0; } -#endif +#endif /* CONFIG_DRM_MSM_MDP5 */ struct msm_kms *sde_kms_init(struct drm_device *dev); diff --git a/msm/sde/sde_encoder_phys.h b/msm/sde/sde_encoder_phys.h index 34d98f4988..4960907949 100644 --- a/msm/sde/sde_encoder_phys.h +++ b/msm/sde/sde_encoder_phys.h @@ -511,7 +511,7 @@ struct sde_encoder_phys *sde_encoder_phys_cmd_init( * @p: Pointer to init params structure * Return: Error code or newly allocated encoder */ -#ifdef CONFIG_DRM_SDE_WB +#if IS_ENABLED(CONFIG_DRM_SDE_WB) struct sde_encoder_phys *sde_encoder_phys_wb_init( struct sde_enc_phys_init_params *p); #else @@ -521,7 +521,7 @@ struct sde_encoder_phys *sde_encoder_phys_wb_init( { return NULL; } -#endif +#endif /* CONFIG_DRM_SDE_WB */ void sde_encoder_phys_setup_cdm(struct sde_encoder_phys *phys_enc, struct drm_framebuffer *fb, const struct sde_format *format, diff --git a/msm/sde/sde_kms.c b/msm/sde/sde_kms.c index 106b0e67ea..3687a1a450 100644 --- a/msm/sde/sde_kms.c +++ b/msm/sde/sde_kms.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include @@ -61,6 +60,8 @@ #define MEM_PROTECT_SD_CTRL_SWITCH 0x18 #define MDP_DEVICE_ID 0x1A +EXPORT_TRACEPOINT_SYMBOL(sde_drm_tracing_mark_write); + static const char * const iommu_ports[] = { "mdp_0", }; @@ -727,7 +728,6 @@ static int _sde_kms_release_splash_buffer(unsigned int mem_addr, pfn_start = mem_addr >> PAGE_SHIFT; pfn_end = (mem_addr + splash_buffer_size) >> PAGE_SHIFT; - ret = memblock_free(mem_addr, splash_buffer_size); if (ret) { SDE_ERROR("continuous splash memory free failed:%d\n", ret); return ret; @@ -3491,15 +3491,9 @@ static int sde_kms_hw_init(struct msm_kms *kms) if (rc) SDE_DEBUG("sde splash data fetch failed: %d\n", rc); - rc = pm_runtime_get_sync(sde_kms->dev->dev); - if (rc < 0) { - SDE_ERROR("resource enable failed: %d\n", rc); - goto error; - } - rc = _sde_kms_hw_init_blocks(sde_kms, dev, priv); if (rc) - goto hw_init_err; + goto error; dev->mode_config.min_width = sde_kms->catalog->min_display_width; dev->mode_config.min_height = sde_kms->catalog->min_display_height; @@ -3546,8 +3540,6 @@ static int sde_kms_hw_init(struct msm_kms *kms) return 0; -hw_init_err: - pm_runtime_put_sync(sde_kms->dev->dev); error: _sde_kms_hw_destroy(sde_kms, platformdev); end: diff --git a/msm/sde/sde_trace.h b/msm/sde/sde_trace.h index 865b9293a2..82bdd715be 100644 --- a/msm/sde/sde_trace.h +++ b/msm/sde/sde_trace.h @@ -113,7 +113,7 @@ TRACE_EVENT(sde_encoder_underrun, __entry->underrun_cnt) ); -TRACE_EVENT(tracing_mark_write, +TRACE_EVENT(sde_drm_tracing_mark_write, TP_PROTO(char trace_type, const struct task_struct *task, const char *name, int value), TP_ARGS(trace_type, task, name, value), @@ -390,7 +390,7 @@ TRACE_EVENT(sde_perf_uidle_status, ) ); -#define sde_atrace trace_tracing_mark_write +#define sde_atrace trace_sde_drm_tracing_mark_write #define SDE_ATRACE_END(name) sde_atrace('E', current, name, 0) #define SDE_ATRACE_BEGIN(name) sde_atrace('B', current, name, 0) diff --git a/msm/sde/sde_wb.c b/msm/sde/sde_wb.c index aaf404d403..dd6d3fa912 100644 --- a/msm/sde/sde_wb.c +++ b/msm/sde/sde_wb.c @@ -824,15 +824,12 @@ static struct platform_driver sde_wb_driver = { }, }; -static int __init sde_wb_register(void) +void __init sde_wb_register(void) { - return platform_driver_register(&sde_wb_driver); + platform_driver_register(&sde_wb_driver); } -static void __exit sde_wb_unregister(void) +void __exit sde_wb_unregister(void) { platform_driver_unregister(&sde_wb_driver); } - -module_init(sde_wb_register); -module_exit(sde_wb_unregister); diff --git a/msm/sde/sde_wb.h b/msm/sde/sde_wb.h index 51f63d955c..6ee9e59ab4 100644 --- a/msm/sde/sde_wb.h +++ b/msm/sde/sde_wb.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_WB_H__ @@ -60,7 +60,7 @@ int sde_wb_get_index(struct sde_wb_device *wb_dev) return wb_dev ? wb_dev->index : -1; } -#ifdef CONFIG_DRM_SDE_WB +#if IS_ENABLED(CONFIG_DRM_SDE_WB) /** * sde_wb_get_output_fb - get framebuffer in current atomic state * @wb_dev: Pointer to writeback device @@ -357,6 +357,6 @@ int sde_wb_get_mode_info(struct drm_connector *connector, { return 0; } -#endif +#endif /* CONFIG_DRM_SDE_WB */ #endif /* __SDE_WB_H__ */ diff --git a/msm/sde_io_util.c b/msm/sde_io_util.c index a7a00b5201..32762311d2 100644 --- a/msm/sde_io_util.c +++ b/msm/sde_io_util.c @@ -82,7 +82,6 @@ static struct resource *msm_dss_get_res_byname(struct platform_device *pdev, return res; } /* msm_dss_get_res_byname */ -EXPORT_SYMBOL(msm_dss_get_res_byname); int msm_dss_ioremap_byname(struct platform_device *pdev, struct dss_io_data *io_data, const char *name) diff --git a/msm/sde_rsc.c b/msm/sde_rsc.c index 711b3ac84d..7dfef78c6c 100644 --- a/msm/sde_rsc.c +++ b/msm/sde_rsc.c @@ -928,11 +928,7 @@ int sde_rsc_client_state_update(struct sde_rsc_client *caller_client, caller_client->crtc_id = crtc_id; caller_client->current_state = state; - if (rsc->master_drm == NULL) { - pr_err("invalid master component binding\n"); - rc = -EINVAL; - goto end; - } else if ((rsc->current_state == state) && !config) { + if ((rsc->current_state == state) && !config) { pr_debug("no state change: %d\n", state); goto end; } @@ -1636,10 +1632,6 @@ static int sde_rsc_bind(struct device *dev, return -EINVAL; } - mutex_lock(&rsc->client_lock); - rsc->master_drm = drm; - mutex_unlock(&rsc->client_lock); - sde_dbg_reg_register_base(SDE_RSC_DRV_DBG_NAME, rsc->drv_io.base, rsc->drv_io.len); sde_dbg_reg_register_base(SDE_RSC_WRAPPER_DBG_NAME, @@ -1669,10 +1661,6 @@ static void sde_rsc_unbind(struct device *dev, pr_err("invalid display rsc\n"); return; } - - mutex_lock(&rsc->client_lock); - rsc->master_drm = NULL; - mutex_unlock(&rsc->client_lock); } static const struct component_ops sde_rsc_comp_ops = { @@ -1855,8 +1843,6 @@ static const struct of_device_id dt_match[] = { {}, }; -MODULE_DEVICE_TABLE(of, dt_match); - static struct platform_driver sde_rsc_platform_driver = { .probe = sde_rsc_probe, .remove = sde_rsc_remove, @@ -1881,21 +1867,17 @@ static struct platform_driver sde_rsc_rpmh_driver = { }, }; -static int __init sde_rsc_register(void) +void __init sde_rsc_register(void) { - return platform_driver_register(&sde_rsc_platform_driver); + platform_driver_register(&sde_rsc_platform_driver); } -static void __exit sde_rsc_unregister(void) +void __exit sde_rsc_unregister(void) { platform_driver_unregister(&sde_rsc_platform_driver); } -static int __init sde_rsc_rpmh_register(void) +void __init sde_rsc_rpmh_register(void) { - return platform_driver_register(&sde_rsc_rpmh_driver); + platform_driver_register(&sde_rsc_rpmh_driver); } - -subsys_initcall(sde_rsc_rpmh_register); -module_init(sde_rsc_register); -module_exit(sde_rsc_unregister); diff --git a/msm/sde_rsc_priv.h b/msm/sde_rsc_priv.h index 1981c8c24b..bca1ab9eaa 100644 --- a/msm/sde_rsc_priv.h +++ b/msm/sde_rsc_priv.h @@ -184,8 +184,6 @@ struct sde_rsc_bw_config { * mode_threshold_time_ns: time to wake TCS in mode-0, must be greater than * backoff time * time_slot_0_ns: time for sleep & wake TCS in mode-1 - * master_drm: Primary client waits for vsync on this drm object based - * on crtc id * rsc_vsync_wait: Refcount to indicate if we have to wait for the vsync. * rsc_vsync_waitq: Queue to wait for the vsync. * bw_config: check sde_rsc_bw_config structure description. @@ -228,7 +226,6 @@ struct sde_rsc_priv { u32 mode_threshold_time_ns; u32 time_slot_0_ns; - struct drm_device *master_drm; atomic_t rsc_vsync_wait; wait_queue_head_t rsc_vsync_waitq; diff --git a/rotator/sde_rotator_dev.c b/rotator/sde_rotator_dev.c index 727ea3bea8..53737580df 100644 --- a/rotator/sde_rotator_dev.c +++ b/rotator/sde_rotator_dev.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:%d: " fmt, __func__, __LINE__ @@ -3618,16 +3618,12 @@ static struct platform_driver rotator_driver = { }, }; -static int __init sde_rotator_init_module(void) +void __init sde_rotator_register(void) { - return platform_driver_register(&rotator_driver); + platform_driver_register(&rotator_driver); } -static void __exit sde_rotator_exit_module(void) +void __exit sde_rotator_unregister(void) { platform_driver_unregister(&rotator_driver); } - -late_initcall(sde_rotator_init_module); -module_exit(sde_rotator_exit_module); -MODULE_DESCRIPTION("MSM SDE ROTATOR driver"); diff --git a/rotator/sde_rotator_inline.h b/rotator/sde_rotator_inline.h index 809a7d0f9a..67963849a9 100644 --- a/rotator/sde_rotator_inline.h +++ b/rotator/sde_rotator_inline.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. */ #ifndef __SDE_ROTATOR_INLINE_H__ @@ -96,7 +96,7 @@ struct sde_rotator_inline_cmd { void *priv_handle; }; -#if defined(CONFIG_MSM_SDE_ROTATOR) +#if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR) void *sde_rotator_inline_open(struct platform_device *pdev); int sde_rotator_inline_get_dst_pixfmt(struct platform_device *pdev, diff --git a/rotator/sde_rotator_smmu.c b/rotator/sde_rotator_smmu.c index db45727057..24c193bb7b 100644 --- a/rotator/sde_rotator_smmu.c +++ b/rotator/sde_rotator_smmu.c @@ -494,7 +494,6 @@ static const struct of_device_id sde_smmu_dt_match[] = { { .compatible = SMMU_SDE_ROT_SEC, .data = &sde_rot_sec}, {} }; -MODULE_DEVICE_TABLE(of, sde_smmu_dt_match); /* * sde_smmu_probe() @@ -673,28 +672,12 @@ static struct platform_driver sde_smmu_driver = { }, }; -static int sde_smmu_register_driver(void) +void __init sde_rotator_smmu_driver_register(void) { - return platform_driver_register(&sde_smmu_driver); + platform_driver_register(&sde_smmu_driver); } -static int __init sde_smmu_driver_init(void) -{ - int ret; - - ret = sde_smmu_register_driver(); - if (ret) - SDEROT_ERR("sde_smmu_register_driver() failed!\n"); - - return ret; -} -module_init(sde_smmu_driver_init); - -static void __exit sde_smmu_driver_cleanup(void) +void __exit sde_rotator_smmu_driver_unregister(void) { platform_driver_unregister(&sde_smmu_driver); } -module_exit(sde_smmu_driver_cleanup); - -MODULE_LICENSE("GPL v2"); -MODULE_DESCRIPTION("SDE SMMU driver");