Merge e62a6512a1 on remote branch
Change-Id: Ifbebd47a93ef67fbf6c4cdceac38e3231c493185
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
|
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2015-2021, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -459,7 +459,7 @@ static void sde_hw_intf_setup_vsync_source(struct sde_hw_intf *intf,
|
|||||||
u32 frame_rate)
|
u32 frame_rate)
|
||||||
{
|
{
|
||||||
struct sde_hw_blk_reg_map *c;
|
struct sde_hw_blk_reg_map *c;
|
||||||
u32 reg;
|
u32 reg = 0;
|
||||||
|
|
||||||
if (!intf)
|
if (!intf)
|
||||||
return;
|
return;
|
||||||
@@ -469,9 +469,9 @@ static void sde_hw_intf_setup_vsync_source(struct sde_hw_intf *intf,
|
|||||||
SDE_REG_WRITE(c, INTF_WD_TIMER_0_LOAD_VALUE, CALCULATE_WD_LOAD_VALUE(frame_rate));
|
SDE_REG_WRITE(c, INTF_WD_TIMER_0_LOAD_VALUE, CALCULATE_WD_LOAD_VALUE(frame_rate));
|
||||||
|
|
||||||
SDE_REG_WRITE(c, INTF_WD_TIMER_0_CTL, BIT(0)); /* clear timer */
|
SDE_REG_WRITE(c, INTF_WD_TIMER_0_CTL, BIT(0)); /* clear timer */
|
||||||
reg = SDE_REG_READ(c, INTF_WD_TIMER_0_CTL2);
|
|
||||||
reg |= BIT(8); /* enable heartbeat timer */
|
reg |= BIT(8); /* enable heartbeat timer */
|
||||||
reg |= BIT(0); /* enable WD timer */
|
reg |= BIT(0); /* enable WD timer */
|
||||||
|
reg |= BIT(1); /* select default 16 clock ticks */
|
||||||
SDE_REG_WRITE(c, INTF_WD_TIMER_0_CTL2, reg);
|
SDE_REG_WRITE(c, INTF_WD_TIMER_0_CTL2, reg);
|
||||||
|
|
||||||
/* make sure that timers are enabled/disabled for vsync state */
|
/* make sure that timers are enabled/disabled for vsync state */
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -101,7 +102,7 @@ void sde_irq_preinstall(struct msm_kms *kms)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* disable irq until power event enables it */
|
/* disable irq until power event enables it */
|
||||||
if (!sde_kms->splash_data.num_splash_displays && !sde_kms->irq_enabled)
|
if (!sde_kms->irq_enabled)
|
||||||
irq_set_status_flags(sde_kms->irq_num, IRQ_NOAUTOEN);
|
irq_set_status_flags(sde_kms->irq_num, IRQ_NOAUTOEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,6 +118,8 @@ static int _sde_kms_mmu_destroy(struct sde_kms *sde_kms);
|
|||||||
static int _sde_kms_mmu_init(struct sde_kms *sde_kms);
|
static int _sde_kms_mmu_init(struct sde_kms *sde_kms);
|
||||||
static int _sde_kms_register_events(struct msm_kms *kms,
|
static int _sde_kms_register_events(struct msm_kms *kms,
|
||||||
struct drm_mode_object *obj, u32 event, bool en);
|
struct drm_mode_object *obj, u32 event, bool en);
|
||||||
|
static void sde_kms_handle_power_event(u32 event_type, void *usr);
|
||||||
|
|
||||||
bool sde_is_custom_client(void)
|
bool sde_is_custom_client(void)
|
||||||
{
|
{
|
||||||
return sdecustom;
|
return sdecustom;
|
||||||
@@ -2223,14 +2225,38 @@ static int sde_kms_postinit(struct msm_kms *kms)
|
|||||||
struct sde_kms *sde_kms = to_sde_kms(kms);
|
struct sde_kms *sde_kms = to_sde_kms(kms);
|
||||||
struct drm_device *dev;
|
struct drm_device *dev;
|
||||||
struct drm_crtc *crtc;
|
struct drm_crtc *crtc;
|
||||||
int rc;
|
struct msm_drm_private *priv;
|
||||||
|
int i, rc;
|
||||||
|
|
||||||
if (!sde_kms || !sde_kms->dev || !sde_kms->dev->dev) {
|
if (!sde_kms || !sde_kms->dev || !sde_kms->dev->dev ||
|
||||||
|
!sde_kms->dev->dev_private) {
|
||||||
SDE_ERROR("invalid sde_kms\n");
|
SDE_ERROR("invalid sde_kms\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = sde_kms->dev;
|
dev = sde_kms->dev;
|
||||||
|
priv = sde_kms->dev->dev_private;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle (re)initializations during power enable, the sde power
|
||||||
|
* event call has to be after drm_irq_install to handle irq update.
|
||||||
|
*/
|
||||||
|
sde_kms_handle_power_event(SDE_POWER_EVENT_POST_ENABLE, sde_kms);
|
||||||
|
sde_kms->power_event = sde_power_handle_register_event(&priv->phandle,
|
||||||
|
SDE_POWER_EVENT_POST_ENABLE |
|
||||||
|
SDE_POWER_EVENT_PRE_DISABLE,
|
||||||
|
sde_kms_handle_power_event, sde_kms, "kms");
|
||||||
|
|
||||||
|
if (sde_kms->splash_data.num_splash_displays) {
|
||||||
|
SDE_DEBUG("Skipping MDP Resources disable\n");
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < SDE_POWER_HANDLE_DBUS_ID_MAX; i++)
|
||||||
|
sde_power_data_bus_set_quota(&priv->phandle, i,
|
||||||
|
SDE_POWER_HANDLE_ENABLE_BUS_AB_QUOTA,
|
||||||
|
SDE_POWER_HANDLE_ENABLE_BUS_IB_QUOTA);
|
||||||
|
|
||||||
|
pm_runtime_put_sync(sde_kms->dev->dev);
|
||||||
|
}
|
||||||
|
|
||||||
rc = _sde_debugfs_init(sde_kms);
|
rc = _sde_debugfs_init(sde_kms);
|
||||||
if (rc)
|
if (rc)
|
||||||
@@ -4895,7 +4921,7 @@ static int sde_kms_hw_init(struct msm_kms *kms)
|
|||||||
struct drm_device *dev;
|
struct drm_device *dev;
|
||||||
struct msm_drm_private *priv;
|
struct msm_drm_private *priv;
|
||||||
struct platform_device *platformdev;
|
struct platform_device *platformdev;
|
||||||
int i, irq_num, rc = -EINVAL;
|
int irq_num, rc = -EINVAL;
|
||||||
|
|
||||||
if (!kms) {
|
if (!kms) {
|
||||||
SDE_ERROR("invalid kms\n");
|
SDE_ERROR("invalid kms\n");
|
||||||
@@ -4944,26 +4970,6 @@ static int sde_kms_hw_init(struct msm_kms *kms)
|
|||||||
*/
|
*/
|
||||||
dev->mode_config.allow_fb_modifiers = true;
|
dev->mode_config.allow_fb_modifiers = true;
|
||||||
|
|
||||||
/*
|
|
||||||
* Handle (re)initializations during power enable
|
|
||||||
*/
|
|
||||||
sde_kms_handle_power_event(SDE_POWER_EVENT_POST_ENABLE, sde_kms);
|
|
||||||
sde_kms->power_event = sde_power_handle_register_event(&priv->phandle,
|
|
||||||
SDE_POWER_EVENT_POST_ENABLE |
|
|
||||||
SDE_POWER_EVENT_PRE_DISABLE,
|
|
||||||
sde_kms_handle_power_event, sde_kms, "kms");
|
|
||||||
|
|
||||||
if (sde_kms->splash_data.num_splash_displays) {
|
|
||||||
SDE_DEBUG("Skipping MDP Resources disable\n");
|
|
||||||
} else {
|
|
||||||
for (i = 0; i < SDE_POWER_HANDLE_DBUS_ID_MAX; i++)
|
|
||||||
sde_power_data_bus_set_quota(&priv->phandle, i,
|
|
||||||
SDE_POWER_HANDLE_ENABLE_BUS_AB_QUOTA,
|
|
||||||
SDE_POWER_HANDLE_ENABLE_BUS_IB_QUOTA);
|
|
||||||
|
|
||||||
pm_runtime_put_sync(sde_kms->dev->dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
sde_kms->affinity_notify.notify = sde_kms_irq_affinity_notify;
|
sde_kms->affinity_notify.notify = sde_kms_irq_affinity_notify;
|
||||||
sde_kms->affinity_notify.release = sde_kms_irq_affinity_release;
|
sde_kms->affinity_notify.release = sde_kms_irq_affinity_release;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user