MLBEDSW-3269 Add pmu counters for inference_process

Change-Id: I6594acc228fe8048f56cb96ac7846a87491eed38
diff --git a/applications/message_process/src/message_process.cc b/applications/message_process/src/message_process.cc
index c890399..8a8eec7 100644
--- a/applications/message_process/src/message_process.cc
+++ b/applications/message_process/src/message_process.cc
@@ -240,13 +240,25 @@
 
         vector<DataPtr> expectedOutput;
 
-        InferenceJob job("job", networkModel, ifm, ofm, expectedOutput, -1);
+        vector<uint8_t> pmuEventConfig;
+        for (uint32_t i = 0; i < ETHOSU_CORE_PMU_MAX; i++) {
+            pmuEventConfig[i] = req.pmu_event_config[i];
+        }
+
+        InferenceJob job(
+            "job", networkModel, ifm, ofm, expectedOutput, -1, pmuEventConfig, req.pmu_cycle_counter_enable);
         job.invalidate();
 
         bool failed = inferenceProcess.runJob(job);
         job.clean();
 
-        sendInferenceRsp(req.user_arg, job.output, failed);
+        sendInferenceRsp(req.user_arg,
+                         job.output,
+                         failed,
+                         job.pmuEventConfig,
+                         job.pmuCycleCounterEnable,
+                         job.pmuEventCount,
+                         job.pmuCycleCounterCount);
         break;
     }
     default: {
@@ -266,8 +278,19 @@
     mailbox.sendMessage();
 }
 
-void MessageProcess::sendInferenceRsp(uint64_t userArg, vector<DataPtr> &ofm, bool failed) {
-    ethosu_core_inference_rsp rsp;
+void MessageProcess::sendInferenceRsp(uint64_t userArg,
+                                      vector<DataPtr> &ofm,
+                                      bool failed,
+                                      vector<uint8_t> &pmuEventConfig,
+                                      uint32_t pmuCycleCounterEnable,
+                                      vector<uint32_t> &pmuEventCount,
+                                      uint64_t pmuCycleCounterCount) {
+    ethosu_core_inference_rsp rsp = {
+        .pmu_event_count =
+            {
+                0,
+            },
+    };
 
     rsp.user_arg  = userArg;
     rsp.ofm_count = ofm.size();
@@ -277,6 +300,15 @@
         rsp.ofm_size[i] = ofm[i].size;
     }
 
+    for (size_t i = 0; i < pmuEventConfig.size(); i++) {
+        rsp.pmu_event_config[i] = pmuEventConfig[i];
+    }
+    rsp.pmu_cycle_counter_enable = pmuCycleCounterEnable;
+    for (size_t i = 0; i < pmuEventCount.size(); i++) {
+        rsp.pmu_event_count[i] = pmuEventCount[i];
+    }
+    rsp.pmu_cycle_counter_count = pmuCycleCounterCount;
+
     printf("Sending inference response. userArg=0x%" PRIx64 ", ofm_count=%" PRIu32 ", status=%" PRIu32 "\n",
            rsp.user_arg,
            rsp.ofm_count,