Browse Source

msm: eva: mmrm adding notifier callback

added call back function for notifier
when throttling case happen.

Change-Id: If8fc1c12ea087b7478e47f905184c0413764a0a7
Signed-off-by: Yu SI <[email protected]>
Yu SI 3 years ago
parent
commit
b632dc32be
1 changed files with 32 additions and 1 deletions
  1. 32 1
      msm/eva/msm_cvp_clocks.c

+ 32 - 1
msm/eva/msm_cvp_clocks.c

@@ -8,6 +8,34 @@
 #include "msm_cvp_debug.h"
 #include "msm_cvp_clocks.h"
 
+int msm_cvp_mmrm_notifier_cb(
+	struct mmrm_client_notifier_data *notifier_data)
+{
+	if (!notifier_data) {
+		dprintk(CVP_WARN, "%s Invalid notifier data: %pK\n",
+			__func__, notifier_data);
+		return -EINVAL;
+	}
+
+	if (notifier_data->cb_type == MMRM_CLIENT_RESOURCE_VALUE_CHANGE) {
+		struct iris_hfi_device *dev = notifier_data->pvt_data;
+
+		dprintk(CVP_PWR,
+			"%s: Clock %s throttled from %ld to %ld \n",
+			__func__, dev->mmrm_desc.client_info.desc.name,
+			notifier_data->cb_data.val_chng.old_val,
+			notifier_data->cb_data.val_chng.new_val);
+
+		/*TODO: if need further handling to notify eva client */
+	} else {
+		dprintk(CVP_WARN, "%s Invalid cb type: %d\n",
+			__func__, notifier_data->cb_type);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 int msm_cvp_set_clocks(struct msm_cvp_core *core)
 {
 	struct cvp_hfi_device *hdev;
@@ -28,16 +56,19 @@ int msm_cvp_mmrm_register(struct iris_hfi_device *device)
 {
 	int rc = 0;
 	struct clock_info *cl = NULL;
-	char *name = (char *)device->mmrm_desc.client_info.desc.name;
+	char *name;
 
 	if (!device) {
 		dprintk(CVP_ERR, "%s invalid device\n", __func__);
 		return -EINVAL;
 	}
 
+	name = (char *)device->mmrm_desc.client_info.desc.name;
 	device->mmrm_cvp=NULL;
 	device->mmrm_desc.client_type=MMRM_CLIENT_CLOCK;
 	device->mmrm_desc.priority=MMRM_CLIENT_PRIOR_LOW;
+	device->mmrm_desc.pvt_data = device;
+	device->mmrm_desc.notifier_callback_fn = msm_cvp_mmrm_notifier_cb;
 	device->mmrm_desc.client_info.desc.client_domain=MMRM_CLIENT_DOMAIN_CVP;
 
 	iris_hfi_for_each_clock(device, cl) {