Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e29d0422 authored by Kyle Yan's avatar Kyle Yan Committed by Gerrit - the friendly Code Review server
Browse files

Merge changes I862ca3b8,Ifc6cad70 into msm-4.9

* changes:
  drm/msm: move debugfs registration to late_register callbacks
  drm/msm/sde: check for missed frame done after waiting
parents 75699f0d b020e0ff
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -505,8 +505,7 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
	dbg_power_ctrl.handle = &priv->phandle;
	dbg_power_ctrl.client = priv->pclient;
	dbg_power_ctrl.enable_fn = msm_power_enable_wrapper;
	ret = sde_dbg_init(ddev->primary->debugfs_root, &pdev->dev,
			&dbg_power_ctrl);
	ret = sde_dbg_init(&pdev->dev, &dbg_power_ctrl);
	if (ret) {
		dev_err(dev, "failed to init sde dbg: %d\n", ret);
		goto fail;
@@ -605,6 +604,12 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv)
	if (ret)
		goto fail;

	ret = sde_dbg_debugfs_register(ddev->primary->debugfs_root);
	if (ret) {
		dev_err(dev, "failed to reg sde dbg debugfs: %d\n", ret);
		goto fail;
	}

	/* perform subdriver post initialization */
	if (kms && kms->funcs && kms->funcs->postinit) {
		ret = kms->funcs->postinit(kms);
+6 −0
Original line number Diff line number Diff line
@@ -495,6 +495,11 @@ static int sde_connector_late_register(struct drm_connector *connector)
	return sde_connector_init_debugfs(connector);
}

static void sde_connector_early_unregister(struct drm_connector *connector)
{
	/* debugfs under connector->debugfs are deleted by drm_debugfs */
}

static const struct drm_connector_funcs sde_connector_ops = {
	.dpms =                   drm_atomic_helper_connector_dpms,
	.reset =                  sde_connector_atomic_reset,
@@ -507,6 +512,7 @@ static const struct drm_connector_funcs sde_connector_ops = {
	.atomic_get_property =    sde_connector_atomic_get_property,
	.set_property =           sde_connector_set_property,
	.late_register =          sde_connector_late_register,
	.early_unregister =       sde_connector_early_unregister,
};

static int sde_connector_get_modes(struct drm_connector *connector)
+1 −1
Original line number Diff line number Diff line
@@ -386,7 +386,7 @@ void sde_core_irq_preinstall(struct sde_kms *sde_kms)
		atomic_set(&sde_kms->irq_obj.irq_counts[i], 0);
	}

	sde_debugfs_core_irq_init(sde_kms, sde_kms->debugfs_root);
	sde_debugfs_core_irq_init(sde_kms, sde_debugfs_get_root(sde_kms));
}

int sde_core_irq_postinstall(struct sde_kms *sde_kms)
+7 −11
Original line number Diff line number Diff line
@@ -456,13 +456,13 @@ static const struct file_operations sde_core_perf_mode_fops = {
	.write = _sde_core_perf_mode_write,
};

static void sde_debugfs_core_perf_destroy(struct sde_core_perf *perf)
static void sde_core_perf_debugfs_destroy(struct sde_core_perf *perf)
{
	debugfs_remove_recursive(perf->debugfs_root);
	perf->debugfs_root = NULL;
}

static int sde_debugfs_core_perf_init(struct sde_core_perf *perf,
int sde_core_perf_debugfs_init(struct sde_core_perf *perf,
		struct dentry *parent)
{
	struct sde_mdss_cfg *catalog = perf->catalog;
@@ -499,11 +499,11 @@ static int sde_debugfs_core_perf_init(struct sde_core_perf *perf,
	return 0;
}
#else
static void sde_debugfs_core_perf_destroy(struct sde_core_perf *perf)
static void sde_core_perf_debugfs_destroy(struct sde_core_perf *perf)
{
}

static int sde_debugfs_core_perf_init(struct sde_core_perf *perf,
int sde_core_perf_debugfs_init(struct sde_core_perf *perf,
		struct dentry *parent)
{
	return 0;
@@ -517,7 +517,7 @@ void sde_core_perf_destroy(struct sde_core_perf *perf)
		return;
	}

	sde_debugfs_core_perf_destroy(perf);
	sde_core_perf_debugfs_destroy(perf);
	perf->max_core_clk_rate = 0;
	perf->core_clk = NULL;
	mutex_destroy(&perf->perf_lock);
@@ -532,11 +532,9 @@ int sde_core_perf_init(struct sde_core_perf *perf,
		struct sde_mdss_cfg *catalog,
		struct sde_power_handle *phandle,
		struct sde_power_client *pclient,
		char *clk_name,
		struct dentry *debugfs_parent)
		char *clk_name)
{
	if (!perf || !catalog || !phandle || !pclient ||
			!clk_name || !debugfs_parent) {
	if (!perf || !dev || !catalog || !phandle || !pclient || !clk_name) {
		SDE_ERROR("invalid parameters\n");
		return -EINVAL;
	}
@@ -560,8 +558,6 @@ int sde_core_perf_init(struct sde_core_perf *perf,
		goto err;
	}

	sde_debugfs_core_perf_init(perf, debugfs_parent);

	return 0;

err:
+13 −7
Original line number Diff line number Diff line
/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -10,8 +10,8 @@
 * GNU General Public License for more details.
 */

#ifndef __SDE_CORE_PERF_H__
#define __SDE_CORE_PERF_H__
#ifndef _SDE_CORE_PERF_H_
#define _SDE_CORE_PERF_H_

#include <linux/types.h>
#include <linux/dcache.h>
@@ -111,14 +111,20 @@ void sde_core_perf_destroy(struct sde_core_perf *perf);
 * @phandle: Pointer to power handle
 * @pclient: Pointer to power client
 * @clk_name: core clock name
 * @debugfs_parent: Pointer to parent debugfs
 */
int sde_core_perf_init(struct sde_core_perf *perf,
		struct drm_device *dev,
		struct sde_mdss_cfg *catalog,
		struct sde_power_handle *phandle,
		struct sde_power_client *pclient,
		char *clk_name,
		struct dentry *debugfs_parent);
		char *clk_name);

/**
 * sde_core_perf_debugfs_init - initialize debugfs for core performance context
 * @perf: Pointer to core performance context
 * @debugfs_parent: Pointer to parent debugfs
 */
int sde_core_perf_debugfs_init(struct sde_core_perf *perf,
		struct dentry *parent);

#endif /* __SDE_CORE_PERF_H__ */
#endif /* _SDE_CORE_PERF_H_ */
Loading