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

Commit d2381fbd authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: lmh_lite: Add ftraces for LMH Lite events"

parents aefdd038 b919b7ce
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -28,6 +28,10 @@
#include <soc/qcom/scm.h>
#include <linux/dma-mapping.h>

#define CREATE_TRACE_POINTS
#define TRACE_MSM_LMH
#include <trace/trace_thermal.h>

#define LMH_DRIVER_NAME			"lmh-lite-driver"
#define LMH_INTERRUPT			"lmh-interrupt"
#define LMH_DEVICE			"lmh-profile"
@@ -123,12 +127,14 @@ static int lmh_ctrl_qpmda(uint32_t enable)
	desc_arg.args[0] = cmd_buf.enable = enable;
	desc_arg.args[1] = cmd_buf.rate = lmh_data->log_delay;
	desc_arg.arginfo = SCM_ARGS(2, SCM_VAL, SCM_VAL);
	trace_lmh_event_call("CTRL_QPMDA enter");
	if (!is_scm_armv8())
		ret = scm_call(SCM_SVC_LMH, LMH_CTRL_QPMDA,
			(void *) &cmd_buf, SCM_BUFFER_SIZE(cmd_buf), NULL, 0);
	else
		ret = scm_call2(SCM_SIP_FNID(SCM_SVC_LMH,
			LMH_CTRL_QPMDA), &desc_arg);
	trace_lmh_event_call("CTRL_QPMDA exit");
	if (ret) {
		pr_err("Error in SCM v%d %s QPMDA call. err:%d\n",
			(is_scm_armv8()) ? 8 : 7, (enable) ? "enable" :
@@ -186,6 +192,8 @@ static int lmh_reset(struct lmh_sensor_ops *ops)
		lmh_sensor->state = LMH_ISR_MONITOR;
		pr_debug("Sensor:[%s] not throttling. Switch to monitor mode\n",
			       lmh_sensor->sensor_name);
		trace_lmh_sensor_interrupt(lmh_sensor->sensor_name,
			lmh_sensor->last_read_value);
	} else {
		goto reset_exit;
	}
@@ -200,6 +208,7 @@ reset_exit:
		** deadlock situation */
		pr_debug("Zero throttling. Re-enabling interrupt\n");
		cancel_delayed_work_sync(&lmh_data->poll_work);
		trace_lmh_event_call("Lmh Interrupt Clear");
		enable_irq(lmh_data->irq_num);
	}
	return ret;
@@ -224,6 +233,7 @@ static void lmh_read_and_update(struct lmh_driver_data *lmh_dat)
	desc_arg.args[1] = cmd_buf.size
			= SCM_BUFFER_SIZE(struct lmh_sensor_packet);
	desc_arg.arginfo = SCM_ARGS(2, SCM_RW, SCM_VAL);
	trace_lmh_event_call("GET_INTENSITY enter");
	dmac_flush_range(&payload, &payload + sizeof(struct lmh_sensor_packet));
	if (!is_scm_armv8())
		ret = scm_call(SCM_SVC_LMH, LMH_GET_INTENSITY,
@@ -233,6 +243,7 @@ static void lmh_read_and_update(struct lmh_driver_data *lmh_dat)
			LMH_GET_INTENSITY), &desc_arg);
	/* Have memory barrier before we access the TZ data */
	mb();
	trace_lmh_event_call("GET_INTENSITY exit");
	if (ret) {
		pr_err("Error in SCM v%d read call. err:%d\n",
				(is_scm_armv8()) ? 8 : 7, ret);
@@ -251,6 +262,9 @@ static void lmh_read_and_update(struct lmh_driver_data *lmh_dat)

				lmh_sensor->last_read_value =
					payload.sensor[idx].intensity;
				trace_lmh_sensor_reading(
					lmh_sensor->sensor_name,
					lmh_sensor->last_read_value);
				break;
			}
		}
@@ -273,6 +287,8 @@ static void lmh_read_and_notify(struct lmh_driver_data *lmh_dat)
			& BIT(lmh_sensor->sensor_sw_id))) {
			pr_debug("Sensor:[%s] interrupt triggered\n",
				lmh_sensor->sensor_name);
			trace_lmh_sensor_interrupt(lmh_sensor->sensor_name,
							val);
			lmh_dat->intr_status_val
			       |= BIT(lmh_sensor->sensor_sw_id);
			lmh_sensor->state = LMH_ISR_POLLING;
@@ -307,11 +323,13 @@ static void lmh_trim_error(void)
	WARN_ON(1);
	pr_err("LMH hardware trim error\n");
	desc_arg.arginfo = SCM_ARGS(0);
	trace_lmh_event_call("TRIM_ERROR enter");
	if (!is_scm_armv8())
		ret = scm_call(SCM_SVC_LMH, LMH_TRIM_ERROR, NULL, 0, NULL, 0);
	else
		ret = scm_call2(SCM_SIP_FNID(SCM_SVC_LMH,
			LMH_TRIM_ERROR), &desc_arg);
	trace_lmh_event_call("TRIM_ERROR exit");
	if (ret)
		pr_err("Error in SCM v%d trim error call. err:%d\n",
					(is_scm_armv8()) ? 8 : 7, ret);
@@ -328,6 +346,7 @@ static void lmh_notify(struct work_struct *work)
	lmh_dat->intr_reg_val = readl_relaxed(lmh_dat->intr_addr);
	pr_debug("Lmh hw interrupt:%d\n", lmh_dat->intr_reg_val);
	if (lmh_dat->intr_reg_val & BIT(lmh_dat->trim_err_offset)) {
		trace_lmh_event_call("Lmh trim error");
		lmh_trim_error();
		lmh_dat->intr_state = LMH_ISR_MONITOR;
		goto notify_exit;
@@ -336,6 +355,7 @@ static void lmh_notify(struct work_struct *work)
	if (!lmh_dat->intr_status_val) {
		pr_debug("LMH not throttling. Enabling interrupt\n");
		lmh_dat->intr_state = LMH_ISR_MONITOR;
		trace_lmh_event_call("Lmh Zero throttle Interrupt Clear");
		goto notify_exit;
	}

@@ -354,6 +374,7 @@ static irqreturn_t lmh_handle_isr(int irq, void *data)
	struct lmh_driver_data *lmh_dat = (struct lmh_driver_data *)data;

	pr_debug("LMH Interrupt triggered\n");
	trace_lmh_event_call("Lmh Interrupt");
	if (lmh_dat->intr_state == LMH_ISR_MONITOR) {
		disable_irq_nosync(lmh_dat->irq_num);
		lmh_dat->intr_state = LMH_ISR_POLLING;
@@ -524,6 +545,7 @@ static int lmh_get_sensor_list(void)
		desc_arg.args[1] = cmd_buf.size = SCM_BUFFER_SIZE(struct
				lmh_sensor_packet);
		desc_arg.arginfo = SCM_ARGS(2, SCM_RW, SCM_VAL);
		trace_lmh_event_call("GET_SENSORS enter");
		if (!is_scm_armv8())
			ret = scm_call(SCM_SVC_LMH, LMH_GET_SENSORS,
				(void *) &cmd_buf,
@@ -534,6 +556,7 @@ static int lmh_get_sensor_list(void)
				LMH_GET_SENSORS), &desc_arg);
		/* Have memory barrier before we access the TZ data */
		mb();
		trace_lmh_event_call("GET_SENSORS exit");
		if (ret < 0) {
			pr_err("Error in SCM v%d call. err:%d\n",
					(is_scm_armv8()) ? 8 : 7, ret);
@@ -658,6 +681,7 @@ static int lmh_get_dev_info(void)
			SCM_BUFFER_SIZE(uint32_t) * LMH_GET_PROFILE_SIZE;
		desc_arg.args[2] = cmd_buf.list_start = next;
		desc_arg.arginfo = SCM_ARGS(3, SCM_RW, SCM_VAL, SCM_VAL);
		trace_lmh_event_call("GET_PROFILE enter");
		dmac_flush_range(payload, payload + sizeof(uint32_t) *
			LMH_GET_PROFILE_SIZE);
		if (!is_scm_armv8()) {
@@ -671,6 +695,7 @@ static int lmh_get_dev_info(void)
		}
		/* Have memory barrier before we access the TZ data */
		mb();
		trace_lmh_event_call("GET_PROFILE exit");
		if (ret) {
			pr_err("Error in SCM v%d get Profile call. err:%d\n",
					(is_scm_armv8()) ? 8 : 7, ret);
+70 −1
Original line number Diff line number Diff line
@@ -18,7 +18,76 @@
#define _TRACE_THERMAL_H

#include <linux/tracepoint.h>
#ifdef TRACE_MSM_THERMAL

#ifdef TRACE_MSM_LMH
DECLARE_EVENT_CLASS(msm_lmh_print_sensor_reading,

	TP_PROTO(const char *sensor_name, unsigned int intensity),

	TP_ARGS(
		sensor_name, intensity
	),

	TP_STRUCT__entry(
		__string(_name, sensor_name)
		__field(unsigned int, reading)
	),

	TP_fast_assign(
		__assign_str(_name, sensor_name);
		__entry->reading = intensity;
	),

	TP_printk(
		"Sensor:[%s] throttling intensity:%u", __get_str(_name),
		__entry->reading
	)
);

DECLARE_EVENT_CLASS(msm_lmh_print_event,

	TP_PROTO(const char *event_name),

	TP_ARGS(
		event_name
	),

	TP_STRUCT__entry(
		__string(_name,	event_name)
	),

	TP_fast_assign(
		__assign_str(_name, event_name);
	),

	TP_printk(
		"Event:[%s]", __get_str(_name)
	)
);

DEFINE_EVENT(msm_lmh_print_sensor_reading, lmh_sensor_interrupt,

	TP_PROTO(const char *sensor_name, unsigned int intensity),

	TP_ARGS(sensor_name, intensity)
);

DEFINE_EVENT(msm_lmh_print_sensor_reading, lmh_sensor_reading,

	TP_PROTO(const char *sensor_name, unsigned int intensity),

	TP_ARGS(sensor_name, intensity)
);

DEFINE_EVENT(msm_lmh_print_event, lmh_event_call,

	TP_PROTO(const char *event_name),

	TP_ARGS(event_name)
);

#elif defined(TRACE_MSM_THERMAL)

DECLARE_EVENT_CLASS(msm_thermal_post_core_ctl,

	TP_PROTO(unsigned int cpu, unsigned int online),